<?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>35195</bug_id>
          
          <creation_ts>2010-02-20 10:52:32 -0800</creation_ts>
          <short_desc>Move BeautifulSoup into webkitpy&apos;s thirdparty directory</short_desc>
          <delta_ts>2010-02-20 11:43:50 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Jerdonek">cjerdonek</reporter>
          <assigned_to name="Chris Jerdonek">cjerdonek</assigned_to>
          <cc>abarth</cc>
    
    <cc>cjerdonek</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric</cc>
    
    <cc>hamaji</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>192195</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-02-20 10:52:32 -0800</bug_when>
    <thetext>See summary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192196</commentid>
    <comment_count>1</comment_count>
      <attachid>49130</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-02-20 10:59:25 -0800</bug_when>
    <thetext>Created attachment 49130
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192198</commentid>
    <comment_count>2</comment_count>
      <attachid>49130</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-02-20 11:29:54 -0800</bug_when>
    <thetext>Comment on attachment 49130
Proposed patch

ok</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192202</commentid>
    <comment_count>3</comment_count>
      <attachid>49130</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-02-20 11:38:07 -0800</bug_when>
    <thetext>Comment on attachment 49130
Proposed patch

Committed via webkit-patch (errored out though):

http://trac.webkit.org/changeset/55055</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49130</attachid>
            <date>2010-02-20 10:59:25 -0800</date>
            <delta_ts>2010-02-20 11:38:07 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>_patch-35195-1.diff</filename>
            <type>text/plain</type>
            <size>166669</size>
            <attacher name="Chris Jerdonek">cjerdonek</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDU1MDU0KQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEgQEAKKzIwMTAtMDItMjAgIENocmlzIEplcmRvbmVrICA8
Y2plcmRvbmVrQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgTW92ZWQgQmVhdXRpZnVsU291cCB0byB3ZWJraXRweS90aGlyZHBhcnR5
IGRpcmVjdG9yeS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MzUxOTUKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvQmVhdXRpZnVsU291cC5w
eTogUmVtb3ZlZC4KKyAgICAgICAgICAtIE1vdmVkIHRvIHdlYmtpdHB5L3RoaXJkcGFydHkuCisK
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2J1Z3ppbGxhLnB5OgorICAgICAgICAgIC0gVXBk
YXRlZCBpbXBvcnQgc3RhdGVtZW50LgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9idWd6
aWxsYV91bml0dGVzdC5weToKKyAgICAgICAgICAtIFVwZGF0ZWQgaW1wb3J0IHN0YXRlbWVudC4K
KworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvYnVpbGRib3QucHk6CisgICAgICAgICAgLSBV
cGRhdGVkIGltcG9ydCBzdGF0ZW1lbnQuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2J1
aWxkYm90X3VuaXR0ZXN0LnB5OgorICAgICAgICAgIC0gVXBkYXRlZCBpbXBvcnQgc3RhdGVtZW50
LgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9zdGF0dXNzZXJ2ZXIucHk6CisgICAgICAg
ICAgLSBVcGRhdGVkIGltcG9ydCBzdGF0ZW1lbnQuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L3RoaXJkcGFydHkvQmVhdXRpZnVsU291cC5weTogQ29waWVkIGZyb20gV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9CZWF1dGlmdWxTb3VwLnB5LgorCiAyMDEwLTAyLTIwICBDaHJpcyBK
ZXJkb25layAgPGNqZXJkb25la0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFk
YW0gQmFydGguCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L0JlYXV0aWZ1bFNv
dXAucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9CZWF1dGlm
dWxTb3VwLnB5CShyZXZpc2lvbiA1NTA1MikKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvQmVhdXRpZnVsU291cC5weQkod29ya2luZyBjb3B5KQpAQCAtMSwyMDAwICswLDAgQEAKLSIi
IkJlYXV0aWZ1bCBTb3VwCi1FbGl4aXIgYW5kIFRvbmljCi0iVGhlIFNjcmVlbi1TY3JhcGVyJ3Mg
RnJpZW5kIgotaHR0cDovL3d3dy5jcnVtbXkuY29tL3NvZnR3YXJlL0JlYXV0aWZ1bFNvdXAvCi0K
LUJlYXV0aWZ1bCBTb3VwIHBhcnNlcyBhIChwb3NzaWJseSBpbnZhbGlkKSBYTUwgb3IgSFRNTCBk
b2N1bWVudCBpbnRvIGEKLXRyZWUgcmVwcmVzZW50YXRpb24uIEl0IHByb3ZpZGVzIG1ldGhvZHMg
YW5kIFB5dGhvbmljIGlkaW9tcyB0aGF0IG1ha2UKLWl0IGVhc3kgdG8gbmF2aWdhdGUsIHNlYXJj
aCwgYW5kIG1vZGlmeSB0aGUgdHJlZS4KLQotQSB3ZWxsLWZvcm1lZCBYTUwvSFRNTCBkb2N1bWVu
dCB5aWVsZHMgYSB3ZWxsLWZvcm1lZCBkYXRhCi1zdHJ1Y3R1cmUuIEFuIGlsbC1mb3JtZWQgWE1M
L0hUTUwgZG9jdW1lbnQgeWllbGRzIGEgY29ycmVzcG9uZGluZ2x5Ci1pbGwtZm9ybWVkIGRhdGEg
c3RydWN0dXJlLiBJZiB5b3VyIGRvY3VtZW50IGlzIG9ubHkgbG9jYWxseQotd2VsbC1mb3JtZWQs
IHlvdSBjYW4gdXNlIHRoaXMgbGlicmFyeSB0byBmaW5kIGFuZCBwcm9jZXNzIHRoZQotd2VsbC1m
b3JtZWQgcGFydCBvZiBpdC4KLQotQmVhdXRpZnVsIFNvdXAgd29ya3Mgd2l0aCBQeXRob24gMi4y
IGFuZCB1cC4gSXQgaGFzIG5vIGV4dGVybmFsCi1kZXBlbmRlbmNpZXMsIGJ1dCB5b3UnbGwgaGF2
ZSBtb3JlIHN1Y2Nlc3MgYXQgY29udmVydGluZyBkYXRhIHRvIFVURi04Ci1pZiB5b3UgYWxzbyBp
bnN0YWxsIHRoZXNlIHRocmVlIHBhY2thZ2VzOgotCi0qIGNoYXJkZXQsIGZvciBhdXRvLWRldGVj
dGluZyBjaGFyYWN0ZXIgZW5jb2RpbmdzCi0gIGh0dHA6Ly9jaGFyZGV0LmZlZWRwYXJzZXIub3Jn
LwotKiBjamtjb2RlY3MgYW5kIGljb252X2NvZGVjLCB3aGljaCBhZGQgbW9yZSBlbmNvZGluZ3Mg
dG8gdGhlIG9uZXMgc3VwcG9ydGVkCi0gIGJ5IHN0b2NrIFB5dGhvbi4KLSAgaHR0cDovL2Nqa3B5
dGhvbi5pMThuLm9yZy8KLQotQmVhdXRpZnVsIFNvdXAgZGVmaW5lcyBjbGFzc2VzIGZvciB0d28g
bWFpbiBwYXJzaW5nIHN0cmF0ZWdpZXM6Ci0KLSAqIEJlYXV0aWZ1bFN0b25lU291cCwgZm9yIHBh
cnNpbmcgWE1MLCBTR01MLCBvciB5b3VyIGRvbWFpbi1zcGVjaWZpYwotICAgbGFuZ3VhZ2UgdGhh
dCBraW5kIG9mIGxvb2tzIGxpa2UgWE1MLgotCi0gKiBCZWF1dGlmdWxTb3VwLCBmb3IgcGFyc2lu
ZyBydW4tb2YtdGhlLW1pbGwgSFRNTCBjb2RlLCBiZSBpdCB2YWxpZAotICAgb3IgaW52YWxpZC4g
VGhpcyBjbGFzcyBoYXMgd2ViIGJyb3dzZXItbGlrZSBoZXVyaXN0aWNzIGZvcgotICAgb2J0YWlu
aW5nIGEgc2Vuc2libGUgcGFyc2UgdHJlZSBpbiB0aGUgZmFjZSBvZiBjb21tb24gSFRNTCBlcnJv
cnMuCi0KLUJlYXV0aWZ1bCBTb3VwIGFsc28gZGVmaW5lcyBhIGNsYXNzIChVbmljb2RlRGFtbWl0
KSBmb3IgYXV0b2RldGVjdGluZwotdGhlIGVuY29kaW5nIG9mIGFuIEhUTUwgb3IgWE1MIGRvY3Vt
ZW50LCBhbmQgY29udmVydGluZyBpdCB0bwotVW5pY29kZS4gTXVjaCBvZiB0aGlzIGNvZGUgaXMg
dGFrZW4gZnJvbSBNYXJrIFBpbGdyaW0ncyBVbml2ZXJzYWwgRmVlZCBQYXJzZXIuCi0KLUZvciBt
b3JlIHRoYW4geW91IGV2ZXIgd2FudGVkIHRvIGtub3cgYWJvdXQgQmVhdXRpZnVsIFNvdXAsIHNl
ZSB0aGUKLWRvY3VtZW50YXRpb246Ci1odHRwOi8vd3d3LmNydW1teS5jb20vc29mdHdhcmUvQmVh
dXRpZnVsU291cC9kb2N1bWVudGF0aW9uLmh0bWwKLQotSGVyZSwgaGF2ZSBzb21lIGxlZ2FsZXNl
OgotCi1Db3B5cmlnaHQgKGMpIDIwMDQtMjAwOSwgTGVvbmFyZCBSaWNoYXJkc29uCi0KLUFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0KLVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotbWV0OgotCi0gICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0KLSAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKLSAgICB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0KLSAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSB0aGUgQmVhdXRpZnVs
IFNvdXAgQ29uc29ydGl1bSBhbmQgQWxsCi0gICAgTmlnaHQgS29zaGVyIEJha2VyeSBub3IgdGhl
IG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlCi0gICAgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAgICB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLQotVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLUxJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgotQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKLUNPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi1QUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCi1MSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORwotTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
Ci1TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRSwgREFNTUlULgotCi0iIiIKLWZyb20gX19mdXR1cmVfXyBpbXBvcnQgZ2VuZXJhdG9ycwot
Ci1fX2F1dGhvcl9fID0gIkxlb25hcmQgUmljaGFyZHNvbiAobGVvbmFyZHJAc2VnZmF1bHQub3Jn
KSIKLV9fdmVyc2lvbl9fID0gIjMuMS4wLjEiCi1fX2NvcHlyaWdodF9fID0gIkNvcHlyaWdodCAo
YykgMjAwNC0yMDA5IExlb25hcmQgUmljaGFyZHNvbiIKLV9fbGljZW5zZV9fID0gIk5ldy1zdHls
ZSBCU0QiCi0KLWltcG9ydCBjb2RlY3MKLWltcG9ydCBtYXJrdXBiYXNlCi1pbXBvcnQgdHlwZXMK
LWltcG9ydCByZQotZnJvbSBIVE1MUGFyc2VyIGltcG9ydCBIVE1MUGFyc2VyLCBIVE1MUGFyc2VF
cnJvcgotdHJ5OgotICAgIGZyb20gaHRtbGVudGl0eWRlZnMgaW1wb3J0IG5hbWUyY29kZXBvaW50
Ci1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgbmFtZTJjb2RlcG9pbnQgPSB7fQotdHJ5OgotICAg
IHNldAotZXhjZXB0IE5hbWVFcnJvcjoKLSAgICBmcm9tIHNldHMgaW1wb3J0IFNldCBhcyBzZXQK
LQotI1RoZXNlIGhhY2tzIG1ha2UgQmVhdXRpZnVsIFNvdXAgYWJsZSB0byBwYXJzZSBYTUwgd2l0
aCBuYW1lc3BhY2VzCi1tYXJrdXBiYXNlLl9kZWNsbmFtZV9tYXRjaCA9IHJlLmNvbXBpbGUocidb
YS16QS1aXVstXy46YS16QS1aMC05XSpccyonKS5tYXRjaAotCi1ERUZBVUxUX09VVFBVVF9FTkNP
RElORyA9ICJ1dGYtOCIKLQotIyBGaXJzdCwgdGhlIGNsYXNzZXMgdGhhdCByZXByZXNlbnQgbWFy
a3VwIGVsZW1lbnRzLgotCi1kZWYgc29iKHVuaWNvZGUsIGVuY29kaW5nKToKLSAgICAiIiJSZXR1
cm5zIGVpdGhlciB0aGUgZ2l2ZW4gVW5pY29kZSBzdHJpbmcgb3IgaXRzIGVuY29kaW5nLiIiIgot
ICAgIGlmIGVuY29kaW5nIGlzIE5vbmU6Ci0gICAgICAgIHJldHVybiB1bmljb2RlCi0gICAgZWxz
ZToKLSAgICAgICAgcmV0dXJuIHVuaWNvZGUuZW5jb2RlKGVuY29kaW5nKQotCi1jbGFzcyBQYWdl
RWxlbWVudDoKLSAgICAiIiJDb250YWlucyB0aGUgbmF2aWdhdGlvbmFsIGluZm9ybWF0aW9uIGZv
ciBzb21lIHBhcnQgb2YgdGhlIHBhZ2UKLSAgICAoZWl0aGVyIGEgdGFnIG9yIGEgcGllY2Ugb2Yg
dGV4dCkiIiIKLQotICAgIGRlZiBzZXR1cChzZWxmLCBwYXJlbnQ9Tm9uZSwgcHJldmlvdXM9Tm9u
ZSk6Ci0gICAgICAgICIiIlNldHMgdXAgdGhlIGluaXRpYWwgcmVsYXRpb25zIGJldHdlZW4gdGhp
cyBlbGVtZW50IGFuZAotICAgICAgICBvdGhlciBlbGVtZW50cy4iIiIKLSAgICAgICAgc2VsZi5w
YXJlbnQgPSBwYXJlbnQKLSAgICAgICAgc2VsZi5wcmV2aW91cyA9IHByZXZpb3VzCi0gICAgICAg
IHNlbGYubmV4dCA9IE5vbmUKLSAgICAgICAgc2VsZi5wcmV2aW91c1NpYmxpbmcgPSBOb25lCi0g
ICAgICAgIHNlbGYubmV4dFNpYmxpbmcgPSBOb25lCi0gICAgICAgIGlmIHNlbGYucGFyZW50IGFu
ZCBzZWxmLnBhcmVudC5jb250ZW50czoKLSAgICAgICAgICAgIHNlbGYucHJldmlvdXNTaWJsaW5n
ID0gc2VsZi5wYXJlbnQuY29udGVudHNbLTFdCi0gICAgICAgICAgICBzZWxmLnByZXZpb3VzU2li
bGluZy5uZXh0U2libGluZyA9IHNlbGYKLQotICAgIGRlZiByZXBsYWNlV2l0aChzZWxmLCByZXBs
YWNlV2l0aCk6Ci0gICAgICAgIG9sZFBhcmVudCA9IHNlbGYucGFyZW50Ci0gICAgICAgIG15SW5k
ZXggPSBzZWxmLnBhcmVudC5jb250ZW50cy5pbmRleChzZWxmKQotICAgICAgICBpZiBoYXNhdHRy
KHJlcGxhY2VXaXRoLCAncGFyZW50JykgYW5kIHJlcGxhY2VXaXRoLnBhcmVudCA9PSBzZWxmLnBh
cmVudDoKLSAgICAgICAgICAgICMgV2UncmUgcmVwbGFjaW5nIHRoaXMgZWxlbWVudCB3aXRoIG9u
ZSBvZiBpdHMgc2libGluZ3MuCi0gICAgICAgICAgICBpbmRleCA9IHNlbGYucGFyZW50LmNvbnRl
bnRzLmluZGV4KHJlcGxhY2VXaXRoKQotICAgICAgICAgICAgaWYgaW5kZXggYW5kIGluZGV4IDwg
bXlJbmRleDoKLSAgICAgICAgICAgICAgICAjIEZ1cnRoZXJtb3JlLCBpdCBjb21lcyBiZWZvcmUg
dGhpcyBlbGVtZW50LiBUaGF0Ci0gICAgICAgICAgICAgICAgIyBtZWFucyB0aGF0IHdoZW4gd2Ug
ZXh0cmFjdCBpdCwgdGhlIGluZGV4IG9mIHRoaXMKLSAgICAgICAgICAgICAgICAjIGVsZW1lbnQg
d2lsbCBjaGFuZ2UuCi0gICAgICAgICAgICAgICAgbXlJbmRleCA9IG15SW5kZXggLSAxCi0gICAg
ICAgIHNlbGYuZXh0cmFjdCgpCi0gICAgICAgIG9sZFBhcmVudC5pbnNlcnQobXlJbmRleCwgcmVw
bGFjZVdpdGgpCi0KLSAgICBkZWYgZXh0cmFjdChzZWxmKToKLSAgICAgICAgIiIiRGVzdHJ1Y3Rp
dmVseSByaXBzIHRoaXMgZWxlbWVudCBvdXQgb2YgdGhlIHRyZWUuIiIiCi0gICAgICAgIGlmIHNl
bGYucGFyZW50OgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlbGYucGFyZW50
LmNvbnRlbnRzLnJlbW92ZShzZWxmKQotICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0g
ICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgICNGaW5kIHRoZSB0d28gZWxlbWVudHMgdGhh
dCB3b3VsZCBiZSBuZXh0IHRvIGVhY2ggb3RoZXIgaWYKLSAgICAgICAgI3RoaXMgZWxlbWVudCAo
YW5kIGFueSBjaGlsZHJlbikgaGFkbid0IGJlZW4gcGFyc2VkLiBDb25uZWN0Ci0gICAgICAgICN0
aGUgdHdvLgotICAgICAgICBsYXN0Q2hpbGQgPSBzZWxmLl9sYXN0UmVjdXJzaXZlQ2hpbGQoKQot
ICAgICAgICBuZXh0RWxlbWVudCA9IGxhc3RDaGlsZC5uZXh0Ci0KLSAgICAgICAgaWYgc2VsZi5w
cmV2aW91czoKLSAgICAgICAgICAgIHNlbGYucHJldmlvdXMubmV4dCA9IG5leHRFbGVtZW50Ci0g
ICAgICAgIGlmIG5leHRFbGVtZW50OgotICAgICAgICAgICAgbmV4dEVsZW1lbnQucHJldmlvdXMg
PSBzZWxmLnByZXZpb3VzCi0gICAgICAgIHNlbGYucHJldmlvdXMgPSBOb25lCi0gICAgICAgIGxh
c3RDaGlsZC5uZXh0ID0gTm9uZQotCi0gICAgICAgIHNlbGYucGFyZW50ID0gTm9uZQotICAgICAg
ICBpZiBzZWxmLnByZXZpb3VzU2libGluZzoKLSAgICAgICAgICAgIHNlbGYucHJldmlvdXNTaWJs
aW5nLm5leHRTaWJsaW5nID0gc2VsZi5uZXh0U2libGluZwotICAgICAgICBpZiBzZWxmLm5leHRT
aWJsaW5nOgotICAgICAgICAgICAgc2VsZi5uZXh0U2libGluZy5wcmV2aW91c1NpYmxpbmcgPSBz
ZWxmLnByZXZpb3VzU2libGluZwotICAgICAgICBzZWxmLnByZXZpb3VzU2libGluZyA9IHNlbGYu
bmV4dFNpYmxpbmcgPSBOb25lCi0gICAgICAgIHJldHVybiBzZWxmCi0KLSAgICBkZWYgX2xhc3RS
ZWN1cnNpdmVDaGlsZChzZWxmKToKLSAgICAgICAgIkZpbmRzIHRoZSBsYXN0IGVsZW1lbnQgYmVu
ZWF0aCB0aGlzIG9iamVjdCB0byBiZSBwYXJzZWQuIgotICAgICAgICBsYXN0Q2hpbGQgPSBzZWxm
Ci0gICAgICAgIHdoaWxlIGhhc2F0dHIobGFzdENoaWxkLCAnY29udGVudHMnKSBhbmQgbGFzdENo
aWxkLmNvbnRlbnRzOgotICAgICAgICAgICAgbGFzdENoaWxkID0gbGFzdENoaWxkLmNvbnRlbnRz
Wy0xXQotICAgICAgICByZXR1cm4gbGFzdENoaWxkCi0KLSAgICBkZWYgaW5zZXJ0KHNlbGYsIHBv
c2l0aW9uLCBuZXdDaGlsZCk6Ci0gICAgICAgIGlmIChpc2luc3RhbmNlKG5ld0NoaWxkLCBiYXNl
c3RyaW5nKQotICAgICAgICAgICAgb3IgaXNpbnN0YW5jZShuZXdDaGlsZCwgdW5pY29kZSkpIFwK
LSAgICAgICAgICAgIGFuZCBub3QgaXNpbnN0YW5jZShuZXdDaGlsZCwgTmF2aWdhYmxlU3RyaW5n
KToKLSAgICAgICAgICAgIG5ld0NoaWxkID0gTmF2aWdhYmxlU3RyaW5nKG5ld0NoaWxkKQotCi0g
ICAgICAgIHBvc2l0aW9uID0gIG1pbihwb3NpdGlvbiwgbGVuKHNlbGYuY29udGVudHMpKQotICAg
ICAgICBpZiBoYXNhdHRyKG5ld0NoaWxkLCAncGFyZW50JykgYW5kIG5ld0NoaWxkLnBhcmVudCAh
PSBOb25lOgotICAgICAgICAgICAgIyBXZSdyZSAnaW5zZXJ0aW5nJyBhbiBlbGVtZW50IHRoYXQn
cyBhbHJlYWR5IG9uZQotICAgICAgICAgICAgIyBvZiB0aGlzIG9iamVjdCdzIGNoaWxkcmVuLgot
ICAgICAgICAgICAgaWYgbmV3Q2hpbGQucGFyZW50ID09IHNlbGY6Ci0gICAgICAgICAgICAgICAg
aW5kZXggPSBzZWxmLmZpbmQobmV3Q2hpbGQpCi0gICAgICAgICAgICAgICAgaWYgaW5kZXggYW5k
IGluZGV4IDwgcG9zaXRpb246Ci0gICAgICAgICAgICAgICAgICAgICMgRnVydGhlcm1vcmUgd2Un
cmUgbW92aW5nIGl0IGZ1cnRoZXIgZG93biB0aGUKLSAgICAgICAgICAgICAgICAgICAgIyBsaXN0
IG9mIHRoaXMgb2JqZWN0J3MgY2hpbGRyZW4uIFRoYXQgbWVhbnMgdGhhdAotICAgICAgICAgICAg
ICAgICAgICAjIHdoZW4gd2UgZXh0cmFjdCB0aGlzIGVsZW1lbnQsIG91ciB0YXJnZXQgaW5kZXgK
LSAgICAgICAgICAgICAgICAgICAgIyB3aWxsIGp1bXAgZG93biBvbmUuCi0gICAgICAgICAgICAg
ICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24gLSAxCi0gICAgICAgICAgICBuZXdDaGlsZC5leHRy
YWN0KCkKLQotICAgICAgICBuZXdDaGlsZC5wYXJlbnQgPSBzZWxmCi0gICAgICAgIHByZXZpb3Vz
Q2hpbGQgPSBOb25lCi0gICAgICAgIGlmIHBvc2l0aW9uID09IDA6Ci0gICAgICAgICAgICBuZXdD
aGlsZC5wcmV2aW91c1NpYmxpbmcgPSBOb25lCi0gICAgICAgICAgICBuZXdDaGlsZC5wcmV2aW91
cyA9IHNlbGYKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHByZXZpb3VzQ2hpbGQgPSBzZWxm
LmNvbnRlbnRzW3Bvc2l0aW9uLTFdCi0gICAgICAgICAgICBuZXdDaGlsZC5wcmV2aW91c1NpYmxp
bmcgPSBwcmV2aW91c0NoaWxkCi0gICAgICAgICAgICBuZXdDaGlsZC5wcmV2aW91c1NpYmxpbmcu
bmV4dFNpYmxpbmcgPSBuZXdDaGlsZAotICAgICAgICAgICAgbmV3Q2hpbGQucHJldmlvdXMgPSBw
cmV2aW91c0NoaWxkLl9sYXN0UmVjdXJzaXZlQ2hpbGQoKQotICAgICAgICBpZiBuZXdDaGlsZC5w
cmV2aW91czoKLSAgICAgICAgICAgIG5ld0NoaWxkLnByZXZpb3VzLm5leHQgPSBuZXdDaGlsZAot
Ci0gICAgICAgIG5ld0NoaWxkc0xhc3RFbGVtZW50ID0gbmV3Q2hpbGQuX2xhc3RSZWN1cnNpdmVD
aGlsZCgpCi0KLSAgICAgICAgaWYgcG9zaXRpb24gPj0gbGVuKHNlbGYuY29udGVudHMpOgotICAg
ICAgICAgICAgbmV3Q2hpbGQubmV4dFNpYmxpbmcgPSBOb25lCi0KLSAgICAgICAgICAgIHBhcmVu
dCA9IHNlbGYKLSAgICAgICAgICAgIHBhcmVudHNOZXh0U2libGluZyA9IE5vbmUKLSAgICAgICAg
ICAgIHdoaWxlIG5vdCBwYXJlbnRzTmV4dFNpYmxpbmc6Ci0gICAgICAgICAgICAgICAgcGFyZW50
c05leHRTaWJsaW5nID0gcGFyZW50Lm5leHRTaWJsaW5nCi0gICAgICAgICAgICAgICAgcGFyZW50
ID0gcGFyZW50LnBhcmVudAotICAgICAgICAgICAgICAgIGlmIG5vdCBwYXJlbnQ6ICMgVGhpcyBp
cyB0aGUgbGFzdCBlbGVtZW50IGluIHRoZSBkb2N1bWVudC4KLSAgICAgICAgICAgICAgICAgICAg
YnJlYWsKLSAgICAgICAgICAgIGlmIHBhcmVudHNOZXh0U2libGluZzoKLSAgICAgICAgICAgICAg
ICBuZXdDaGlsZHNMYXN0RWxlbWVudC5uZXh0ID0gcGFyZW50c05leHRTaWJsaW5nCi0gICAgICAg
ICAgICBlbHNlOgotICAgICAgICAgICAgICAgIG5ld0NoaWxkc0xhc3RFbGVtZW50Lm5leHQgPSBO
b25lCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBuZXh0Q2hpbGQgPSBzZWxmLmNvbnRlbnRz
W3Bvc2l0aW9uXQotICAgICAgICAgICAgbmV3Q2hpbGQubmV4dFNpYmxpbmcgPSBuZXh0Q2hpbGQK
LSAgICAgICAgICAgIGlmIG5ld0NoaWxkLm5leHRTaWJsaW5nOgotICAgICAgICAgICAgICAgIG5l
d0NoaWxkLm5leHRTaWJsaW5nLnByZXZpb3VzU2libGluZyA9IG5ld0NoaWxkCi0gICAgICAgICAg
ICBuZXdDaGlsZHNMYXN0RWxlbWVudC5uZXh0ID0gbmV4dENoaWxkCi0KLSAgICAgICAgaWYgbmV3
Q2hpbGRzTGFzdEVsZW1lbnQubmV4dDoKLSAgICAgICAgICAgIG5ld0NoaWxkc0xhc3RFbGVtZW50
Lm5leHQucHJldmlvdXMgPSBuZXdDaGlsZHNMYXN0RWxlbWVudAotICAgICAgICBzZWxmLmNvbnRl
bnRzLmluc2VydChwb3NpdGlvbiwgbmV3Q2hpbGQpCi0KLSAgICBkZWYgYXBwZW5kKHNlbGYsIHRh
Zyk6Ci0gICAgICAgICIiIkFwcGVuZHMgdGhlIGdpdmVuIHRhZyB0byB0aGUgY29udGVudHMgb2Yg
dGhpcyB0YWcuIiIiCi0gICAgICAgIHNlbGYuaW5zZXJ0KGxlbihzZWxmLmNvbnRlbnRzKSwgdGFn
KQotCi0gICAgZGVmIGZpbmROZXh0KHNlbGYsIG5hbWU9Tm9uZSwgYXR0cnM9e30sIHRleHQ9Tm9u
ZSwgKiprd2FyZ3MpOgotICAgICAgICAiIiJSZXR1cm5zIHRoZSBmaXJzdCBpdGVtIHRoYXQgbWF0
Y2hlcyB0aGUgZ2l2ZW4gY3JpdGVyaWEgYW5kCi0gICAgICAgIGFwcGVhcnMgYWZ0ZXIgdGhpcyBU
YWcgaW4gdGhlIGRvY3VtZW50LiIiIgotICAgICAgICByZXR1cm4gc2VsZi5fZmluZE9uZShzZWxm
LmZpbmRBbGxOZXh0LCBuYW1lLCBhdHRycywgdGV4dCwgKiprd2FyZ3MpCi0KLSAgICBkZWYgZmlu
ZEFsbE5leHQoc2VsZiwgbmFtZT1Ob25lLCBhdHRycz17fSwgdGV4dD1Ob25lLCBsaW1pdD1Ob25l
LAotICAgICAgICAgICAgICAgICAgICAqKmt3YXJncyk6Ci0gICAgICAgICIiIlJldHVybnMgYWxs
IGl0ZW1zIHRoYXQgbWF0Y2ggdGhlIGdpdmVuIGNyaXRlcmlhIGFuZCBhcHBlYXIKLSAgICAgICAg
YWZ0ZXIgdGhpcyBUYWcgaW4gdGhlIGRvY3VtZW50LiIiIgotICAgICAgICByZXR1cm4gc2VsZi5f
ZmluZEFsbChuYW1lLCBhdHRycywgdGV4dCwgbGltaXQsIHNlbGYubmV4dEdlbmVyYXRvciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpCi0KLSAgICBkZWYgZmluZE5leHRT
aWJsaW5nKHNlbGYsIG5hbWU9Tm9uZSwgYXR0cnM9e30sIHRleHQ9Tm9uZSwgKiprd2FyZ3MpOgot
ICAgICAgICAiIiJSZXR1cm5zIHRoZSBjbG9zZXN0IHNpYmxpbmcgdG8gdGhpcyBUYWcgdGhhdCBt
YXRjaGVzIHRoZQotICAgICAgICBnaXZlbiBjcml0ZXJpYSBhbmQgYXBwZWFycyBhZnRlciB0aGlz
IFRhZyBpbiB0aGUgZG9jdW1lbnQuIiIiCi0gICAgICAgIHJldHVybiBzZWxmLl9maW5kT25lKHNl
bGYuZmluZE5leHRTaWJsaW5ncywgbmFtZSwgYXR0cnMsIHRleHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICoqa3dhcmdzKQotCi0gICAgZGVmIGZpbmROZXh0U2libGluZ3Moc2VsZiwg
bmFtZT1Ob25lLCBhdHRycz17fSwgdGV4dD1Ob25lLCBsaW1pdD1Ob25lLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICoqa3dhcmdzKToKLSAgICAgICAgIiIiUmV0dXJucyB0aGUgc2libGluZ3Mg
b2YgdGhpcyBUYWcgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4KLSAgICAgICAgY3JpdGVyaWEgYW5kIGFw
cGVhciBhZnRlciB0aGlzIFRhZyBpbiB0aGUgZG9jdW1lbnQuIiIiCi0gICAgICAgIHJldHVybiBz
ZWxmLl9maW5kQWxsKG5hbWUsIGF0dHJzLCB0ZXh0LCBsaW1pdCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZi5uZXh0U2libGluZ0dlbmVyYXRvciwgKiprd2FyZ3MpCi0gICAgZmV0
Y2hOZXh0U2libGluZ3MgPSBmaW5kTmV4dFNpYmxpbmdzICMgQ29tcGF0aWJpbGl0eSB3aXRoIHBy
ZS0zLngKLQotICAgIGRlZiBmaW5kUHJldmlvdXMoc2VsZiwgbmFtZT1Ob25lLCBhdHRycz17fSwg
dGV4dD1Ob25lLCAqKmt3YXJncyk6Ci0gICAgICAgICIiIlJldHVybnMgdGhlIGZpcnN0IGl0ZW0g
dGhhdCBtYXRjaGVzIHRoZSBnaXZlbiBjcml0ZXJpYSBhbmQKLSAgICAgICAgYXBwZWFycyBiZWZv
cmUgdGhpcyBUYWcgaW4gdGhlIGRvY3VtZW50LiIiIgotICAgICAgICByZXR1cm4gc2VsZi5fZmlu
ZE9uZShzZWxmLmZpbmRBbGxQcmV2aW91cywgbmFtZSwgYXR0cnMsIHRleHQsICoqa3dhcmdzKQot
Ci0gICAgZGVmIGZpbmRBbGxQcmV2aW91cyhzZWxmLCBuYW1lPU5vbmUsIGF0dHJzPXt9LCB0ZXh0
PU5vbmUsIGxpbWl0PU5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAqKmt3YXJncyk6Ci0g
ICAgICAgICIiIlJldHVybnMgYWxsIGl0ZW1zIHRoYXQgbWF0Y2ggdGhlIGdpdmVuIGNyaXRlcmlh
IGFuZCBhcHBlYXIKLSAgICAgICAgYmVmb3JlIHRoaXMgVGFnIGluIHRoZSBkb2N1bWVudC4iIiIK
LSAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbmRBbGwobmFtZSwgYXR0cnMsIHRleHQsIGxpbWl0LCBz
ZWxmLnByZXZpb3VzR2VuZXJhdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKiprd2Fy
Z3MpCi0gICAgZmV0Y2hQcmV2aW91cyA9IGZpbmRBbGxQcmV2aW91cyAjIENvbXBhdGliaWxpdHkg
d2l0aCBwcmUtMy54Ci0KLSAgICBkZWYgZmluZFByZXZpb3VzU2libGluZyhzZWxmLCBuYW1lPU5v
bmUsIGF0dHJzPXt9LCB0ZXh0PU5vbmUsICoqa3dhcmdzKToKLSAgICAgICAgIiIiUmV0dXJucyB0
aGUgY2xvc2VzdCBzaWJsaW5nIHRvIHRoaXMgVGFnIHRoYXQgbWF0Y2hlcyB0aGUKLSAgICAgICAg
Z2l2ZW4gY3JpdGVyaWEgYW5kIGFwcGVhcnMgYmVmb3JlIHRoaXMgVGFnIGluIHRoZSBkb2N1bWVu
dC4iIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbmRPbmUoc2VsZi5maW5kUHJldmlvdXNTaWJs
aW5ncywgbmFtZSwgYXR0cnMsIHRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICoq
a3dhcmdzKQotCi0gICAgZGVmIGZpbmRQcmV2aW91c1NpYmxpbmdzKHNlbGYsIG5hbWU9Tm9uZSwg
YXR0cnM9e30sIHRleHQ9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGltaXQ9
Tm9uZSwgKiprd2FyZ3MpOgotICAgICAgICAiIiJSZXR1cm5zIHRoZSBzaWJsaW5ncyBvZiB0aGlz
IFRhZyB0aGF0IG1hdGNoIHRoZSBnaXZlbgotICAgICAgICBjcml0ZXJpYSBhbmQgYXBwZWFyIGJl
Zm9yZSB0aGlzIFRhZyBpbiB0aGUgZG9jdW1lbnQuIiIiCi0gICAgICAgIHJldHVybiBzZWxmLl9m
aW5kQWxsKG5hbWUsIGF0dHJzLCB0ZXh0LCBsaW1pdCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5wcmV2aW91c1NpYmxpbmdHZW5lcmF0b3IsICoqa3dhcmdzKQotICAgIGZldGNo
UHJldmlvdXNTaWJsaW5ncyA9IGZpbmRQcmV2aW91c1NpYmxpbmdzICMgQ29tcGF0aWJpbGl0eSB3
aXRoIHByZS0zLngKLQotICAgIGRlZiBmaW5kUGFyZW50KHNlbGYsIG5hbWU9Tm9uZSwgYXR0cnM9
e30sICoqa3dhcmdzKToKLSAgICAgICAgIiIiUmV0dXJucyB0aGUgY2xvc2VzdCBwYXJlbnQgb2Yg
dGhpcyBUYWcgdGhhdCBtYXRjaGVzIHRoZSBnaXZlbgotICAgICAgICBjcml0ZXJpYS4iIiIKLSAg
ICAgICAgIyBOT1RFOiBXZSBjYW4ndCB1c2UgX2ZpbmRPbmUgYmVjYXVzZSBmaW5kUGFyZW50cyB0
YWtlcyBhIGRpZmZlcmVudAotICAgICAgICAjIHNldCBvZiBhcmd1bWVudHMuCi0gICAgICAgIHIg
PSBOb25lCi0gICAgICAgIGwgPSBzZWxmLmZpbmRQYXJlbnRzKG5hbWUsIGF0dHJzLCAxKQotICAg
ICAgICBpZiBsOgotICAgICAgICAgICAgciA9IGxbMF0KLSAgICAgICAgcmV0dXJuIHIKLQotICAg
IGRlZiBmaW5kUGFyZW50cyhzZWxmLCBuYW1lPU5vbmUsIGF0dHJzPXt9LCBsaW1pdD1Ob25lLCAq
Kmt3YXJncyk6Ci0gICAgICAgICIiIlJldHVybnMgdGhlIHBhcmVudHMgb2YgdGhpcyBUYWcgdGhh
dCBtYXRjaCB0aGUgZ2l2ZW4KLSAgICAgICAgY3JpdGVyaWEuIiIiCi0KLSAgICAgICAgcmV0dXJu
IHNlbGYuX2ZpbmRBbGwobmFtZSwgYXR0cnMsIE5vbmUsIGxpbWl0LCBzZWxmLnBhcmVudEdlbmVy
YXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpCi0gICAgZmV0Y2hQ
YXJlbnRzID0gZmluZFBhcmVudHMgIyBDb21wYXRpYmlsaXR5IHdpdGggcHJlLTMueAotCi0gICAg
I1RoZXNlIG1ldGhvZHMgZG8gdGhlIHJlYWwgaGVhdnkgbGlmdGluZy4KLQotICAgIGRlZiBfZmlu
ZE9uZShzZWxmLCBtZXRob2QsIG5hbWUsIGF0dHJzLCB0ZXh0LCAqKmt3YXJncyk6Ci0gICAgICAg
IHIgPSBOb25lCi0gICAgICAgIGwgPSBtZXRob2QobmFtZSwgYXR0cnMsIHRleHQsIDEsICoqa3dh
cmdzKQotICAgICAgICBpZiBsOgotICAgICAgICAgICAgciA9IGxbMF0KLSAgICAgICAgcmV0dXJu
IHIKLQotICAgIGRlZiBfZmluZEFsbChzZWxmLCBuYW1lLCBhdHRycywgdGV4dCwgbGltaXQsIGdl
bmVyYXRvciwgKiprd2FyZ3MpOgotICAgICAgICAiSXRlcmF0ZXMgb3ZlciBhIGdlbmVyYXRvciBs
b29raW5nIGZvciB0aGluZ3MgdGhhdCBtYXRjaC4iCi0KLSAgICAgICAgaWYgaXNpbnN0YW5jZShu
YW1lLCBTb3VwU3RyYWluZXIpOgotICAgICAgICAgICAgc3RyYWluZXIgPSBuYW1lCi0gICAgICAg
IGVsc2U6Ci0gICAgICAgICAgICAjIEJ1aWxkIGEgU291cFN0cmFpbmVyCi0gICAgICAgICAgICBz
dHJhaW5lciA9IFNvdXBTdHJhaW5lcihuYW1lLCBhdHRycywgdGV4dCwgKiprd2FyZ3MpCi0gICAg
ICAgIHJlc3VsdHMgPSBSZXN1bHRTZXQoc3RyYWluZXIpCi0gICAgICAgIGcgPSBnZW5lcmF0b3Io
KQotICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAg
IGkgPSBnLm5leHQoKQotICAgICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246Ci0gICAgICAg
ICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGlmIGk6Ci0gICAgICAgICAgICAgICAgZm91bmQg
PSBzdHJhaW5lci5zZWFyY2goaSkKLSAgICAgICAgICAgICAgICBpZiBmb3VuZDoKLSAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoZm91bmQpCi0gICAgICAgICAgICAgICAgICAgIGlm
IGxpbWl0IGFuZCBsZW4ocmVzdWx0cykgPj0gbGltaXQ6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBicmVhawotICAgICAgICByZXR1cm4gcmVzdWx0cwotCi0gICAgI1RoZXNlIEdlbmVyYXRvcnMg
Y2FuIGJlIHVzZWQgdG8gbmF2aWdhdGUgc3RhcnRpbmcgZnJvbSBib3RoCi0gICAgI05hdmlnYWJs
ZVN0cmluZ3MgYW5kIFRhZ3MuCi0gICAgZGVmIG5leHRHZW5lcmF0b3Ioc2VsZik6Ci0gICAgICAg
IGkgPSBzZWxmCi0gICAgICAgIHdoaWxlIGk6Ci0gICAgICAgICAgICBpID0gaS5uZXh0Ci0gICAg
ICAgICAgICB5aWVsZCBpCi0KLSAgICBkZWYgbmV4dFNpYmxpbmdHZW5lcmF0b3Ioc2VsZik6Ci0g
ICAgICAgIGkgPSBzZWxmCi0gICAgICAgIHdoaWxlIGk6Ci0gICAgICAgICAgICBpID0gaS5uZXh0
U2libGluZwotICAgICAgICAgICAgeWllbGQgaQotCi0gICAgZGVmIHByZXZpb3VzR2VuZXJhdG9y
KHNlbGYpOgotICAgICAgICBpID0gc2VsZgotICAgICAgICB3aGlsZSBpOgotICAgICAgICAgICAg
aSA9IGkucHJldmlvdXMKLSAgICAgICAgICAgIHlpZWxkIGkKLQotICAgIGRlZiBwcmV2aW91c1Np
YmxpbmdHZW5lcmF0b3Ioc2VsZik6Ci0gICAgICAgIGkgPSBzZWxmCi0gICAgICAgIHdoaWxlIGk6
Ci0gICAgICAgICAgICBpID0gaS5wcmV2aW91c1NpYmxpbmcKLSAgICAgICAgICAgIHlpZWxkIGkK
LQotICAgIGRlZiBwYXJlbnRHZW5lcmF0b3Ioc2VsZik6Ci0gICAgICAgIGkgPSBzZWxmCi0gICAg
ICAgIHdoaWxlIGk6Ci0gICAgICAgICAgICBpID0gaS5wYXJlbnQKLSAgICAgICAgICAgIHlpZWxk
IGkKLQotICAgICMgVXRpbGl0eSBtZXRob2RzCi0gICAgZGVmIHN1YnN0aXR1dGVFbmNvZGluZyhz
ZWxmLCBzdHIsIGVuY29kaW5nPU5vbmUpOgotICAgICAgICBlbmNvZGluZyA9IGVuY29kaW5nIG9y
ICJ1dGYtOCIKLSAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKCIlU09VUC1FTkNPRElORyUiLCBl
bmNvZGluZykKLQotICAgIGRlZiB0b0VuY29kaW5nKHNlbGYsIHMsIGVuY29kaW5nPU5vbmUpOgot
ICAgICAgICAiIiJFbmNvZGVzIGFuIG9iamVjdCB0byBhIHN0cmluZyBpbiBzb21lIGVuY29kaW5n
LCBvciB0byBVbmljb2RlLgotICAgICAgICAuIiIiCi0gICAgICAgIGlmIGlzaW5zdGFuY2Uocywg
dW5pY29kZSk6Ci0gICAgICAgICAgICBpZiBlbmNvZGluZzoKLSAgICAgICAgICAgICAgICBzID0g
cy5lbmNvZGUoZW5jb2RpbmcpCi0gICAgICAgIGVsaWYgaXNpbnN0YW5jZShzLCBzdHIpOgotICAg
ICAgICAgICAgaWYgZW5jb2Rpbmc6Ci0gICAgICAgICAgICAgICAgcyA9IHMuZW5jb2RlKGVuY29k
aW5nKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzID0gdW5pY29kZShzKQot
ICAgICAgICBlbHNlOgotICAgICAgICAgICAgaWYgZW5jb2Rpbmc6Ci0gICAgICAgICAgICAgICAg
cyAgPSBzZWxmLnRvRW5jb2Rpbmcoc3RyKHMpLCBlbmNvZGluZykKLSAgICAgICAgICAgIGVsc2U6
Ci0gICAgICAgICAgICAgICAgcyA9IHVuaWNvZGUocykKLSAgICAgICAgcmV0dXJuIHMKLQotY2xh
c3MgTmF2aWdhYmxlU3RyaW5nKHVuaWNvZGUsIFBhZ2VFbGVtZW50KToKLQotICAgIGRlZiBfX25l
d19fKGNscywgdmFsdWUpOgotICAgICAgICAiIiJDcmVhdGUgYSBuZXcgTmF2aWdhYmxlU3RyaW5n
LgotCi0gICAgICAgIFdoZW4gdW5waWNrbGluZyBhIE5hdmlnYWJsZVN0cmluZywgdGhpcyBtZXRo
b2QgaXMgY2FsbGVkIHdpdGgKLSAgICAgICAgdGhlIHN0cmluZyBpbiBERUZBVUxUX09VVFBVVF9F
TkNPRElORy4gVGhhdCBlbmNvZGluZyBuZWVkcyB0byBiZQotICAgICAgICBwYXNzZWQgaW4gdG8g
dGhlIHN1cGVyY2xhc3MncyBfX25ld19fIG9yIHRoZSBzdXBlcmNsYXNzIHdvbid0IGtub3cKLSAg
ICAgICAgaG93IHRvIGhhbmRsZSBub24tQVNDSUkgY2hhcmFjdGVycy4KLSAgICAgICAgIiIiCi0g
ICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIHVuaWNvZGUpOgotICAgICAgICAgICAgcmV0dXJu
IHVuaWNvZGUuX19uZXdfXyhjbHMsIHZhbHVlKQotICAgICAgICByZXR1cm4gdW5pY29kZS5fX25l
d19fKGNscywgdmFsdWUsIERFRkFVTFRfT1VUUFVUX0VOQ09ESU5HKQotCi0gICAgZGVmIF9fZ2V0
bmV3YXJnc19fKHNlbGYpOgotICAgICAgICByZXR1cm4gKHVuaWNvZGUoc2VsZiksKQotCi0gICAg
ZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIGF0dHIpOgotICAgICAgICAiIiJ0ZXh0LnN0cmluZyBnaXZl
cyB5b3UgdGV4dC4gVGhpcyBpcyBmb3IgYmFja3dhcmRzCi0gICAgICAgIGNvbXBhdGliaWxpdHkg
Zm9yIE5hdmlnYWJsZSpTdHJpbmcsIGJ1dCBmb3IgQ0RhdGEqIGl0IGxldHMgeW91Ci0gICAgICAg
IGdldCB0aGUgc3RyaW5nIHdpdGhvdXQgdGhlIENEYXRhIHdyYXBwZXIuIiIiCi0gICAgICAgIGlm
IGF0dHIgPT0gJ3N0cmluZyc6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZgotICAgICAgICBlbHNl
OgotICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IsICInJXMnIG9iamVjdCBoYXMgbm8g
YXR0cmlidXRlICclcyciICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBhdHRyKQotCi0gICAg
ZGVmIGVuY29kZShzZWxmLCBlbmNvZGluZz1ERUZBVUxUX09VVFBVVF9FTkNPRElORyk6Ci0gICAg
ICAgIHJldHVybiBzZWxmLmRlY29kZSgpLmVuY29kZShlbmNvZGluZykKLQotICAgIGRlZiBkZWNv
ZGVHaXZlbkV2ZW50dWFsRW5jb2Rpbmcoc2VsZiwgZXZlbnR1YWxFbmNvZGluZyk6Ci0gICAgICAg
IHJldHVybiBzZWxmCi0KLWNsYXNzIENEYXRhKE5hdmlnYWJsZVN0cmluZyk6Ci0KLSAgICBkZWYg
ZGVjb2RlR2l2ZW5FdmVudHVhbEVuY29kaW5nKHNlbGYsIGV2ZW50dWFsRW5jb2RpbmcpOgotICAg
ICAgICByZXR1cm4gdSc8IVtDREFUQVsnICsgc2VsZiArIHUnXV0+JwotCi1jbGFzcyBQcm9jZXNz
aW5nSW5zdHJ1Y3Rpb24oTmF2aWdhYmxlU3RyaW5nKToKLQotICAgIGRlZiBkZWNvZGVHaXZlbkV2
ZW50dWFsRW5jb2Rpbmcoc2VsZiwgZXZlbnR1YWxFbmNvZGluZyk6Ci0gICAgICAgIG91dHB1dCA9
IHNlbGYKLSAgICAgICAgaWYgdSclU09VUC1FTkNPRElORyUnIGluIG91dHB1dDoKLSAgICAgICAg
ICAgIG91dHB1dCA9IHNlbGYuc3Vic3RpdHV0ZUVuY29kaW5nKG91dHB1dCwgZXZlbnR1YWxFbmNv
ZGluZykKLSAgICAgICAgcmV0dXJuIHUnPD8nICsgb3V0cHV0ICsgdSc/PicKLQotY2xhc3MgQ29t
bWVudChOYXZpZ2FibGVTdHJpbmcpOgotICAgIGRlZiBkZWNvZGVHaXZlbkV2ZW50dWFsRW5jb2Rp
bmcoc2VsZiwgZXZlbnR1YWxFbmNvZGluZyk6Ci0gICAgICAgIHJldHVybiB1JzwhLS0nICsgc2Vs
ZiArIHUnLS0+JwotCi1jbGFzcyBEZWNsYXJhdGlvbihOYXZpZ2FibGVTdHJpbmcpOgotICAgIGRl
ZiBkZWNvZGVHaXZlbkV2ZW50dWFsRW5jb2Rpbmcoc2VsZiwgZXZlbnR1YWxFbmNvZGluZyk6Ci0g
ICAgICAgIHJldHVybiB1JzwhJyArIHNlbGYgKyB1Jz4nCi0KLWNsYXNzIFRhZyhQYWdlRWxlbWVu
dCk6Ci0KLSAgICAiIiJSZXByZXNlbnRzIGEgZm91bmQgSFRNTCB0YWcgd2l0aCBpdHMgYXR0cmli
dXRlcyBhbmQgY29udGVudHMuIiIiCi0KLSAgICBkZWYgX2ludmVydChoKToKLSAgICAgICAgIkNo
ZWFwIGZ1bmN0aW9uIHRvIGludmVydCBhIGhhc2guIgotICAgICAgICBpID0ge30KLSAgICAgICAg
Zm9yIGssdiBpbiBoLml0ZW1zKCk6Ci0gICAgICAgICAgICBpW3ZdID0gawotICAgICAgICByZXR1
cm4gaQotCi0gICAgWE1MX0VOVElUSUVTX1RPX1NQRUNJQUxfQ0hBUlMgPSB7ICJhcG9zIiA6ICIn
IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInF1b3QiIDogJyInLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYW1wIiA6ICImIiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImx0IiA6ICI8IiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImd0IiA6ICI+IiB9Ci0KLSAgICBYTUxfU1BFQ0lB
TF9DSEFSU19UT19FTlRJVElFUyA9IF9pbnZlcnQoWE1MX0VOVElUSUVTX1RPX1NQRUNJQUxfQ0hB
UlMpCi0KLSAgICBkZWYgX2NvbnZlcnRFbnRpdGllcyhzZWxmLCBtYXRjaCk6Ci0gICAgICAgICIi
IlVzZWQgaW4gYSBjYWxsIHRvIHJlLnN1YiB0byByZXBsYWNlIEhUTUwsIFhNTCwgYW5kIG51bWVy
aWMKLSAgICAgICAgZW50aXRpZXMgd2l0aCB0aGUgYXBwcm9wcmlhdGUgVW5pY29kZSBjaGFyYWN0
ZXJzLiBJZiBIVE1MCi0gICAgICAgIGVudGl0aWVzIGFyZSBiZWluZyBjb252ZXJ0ZWQsIGFueSB1
bnJlY29nbml6ZWQgZW50aXRpZXMgYXJlCi0gICAgICAgIGVzY2FwZWQuIiIiCi0gICAgICAgIHgg
PSBtYXRjaC5ncm91cCgxKQotICAgICAgICBpZiBzZWxmLmNvbnZlcnRIVE1MRW50aXRpZXMgYW5k
IHggaW4gbmFtZTJjb2RlcG9pbnQ6Ci0gICAgICAgICAgICByZXR1cm4gdW5pY2hyKG5hbWUyY29k
ZXBvaW50W3hdKQotICAgICAgICBlbGlmIHggaW4gc2VsZi5YTUxfRU5USVRJRVNfVE9fU1BFQ0lB
TF9DSEFSUzoKLSAgICAgICAgICAgIGlmIHNlbGYuY29udmVydFhNTEVudGl0aWVzOgotICAgICAg
ICAgICAgICAgIHJldHVybiBzZWxmLlhNTF9FTlRJVElFU19UT19TUEVDSUFMX0NIQVJTW3hdCi0g
ICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiB1JyYlczsnICUgeAotICAg
ICAgICBlbGlmIGxlbih4KSA+IDAgYW5kIHhbMF0gPT0gJyMnOgotICAgICAgICAgICAgIyBIYW5k
bGUgbnVtZXJpYyBlbnRpdGllcwotICAgICAgICAgICAgaWYgbGVuKHgpID4gMSBhbmQgeFsxXSA9
PSAneCc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHVuaWNocihpbnQoeFsyOl0sIDE2KSkKLSAg
ICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHVuaWNocihpbnQoeFsxOl0p
KQotCi0gICAgICAgIGVsaWYgc2VsZi5lc2NhcGVVbnJlY29nbml6ZWRFbnRpdGllczoKLSAgICAg
ICAgICAgIHJldHVybiB1JyZhbXA7JXM7JyAlIHgKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAg
IHJldHVybiB1JyYlczsnICUgeAotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcnNlciwgbmFt
ZSwgYXR0cnM9Tm9uZSwgcGFyZW50PU5vbmUsCi0gICAgICAgICAgICAgICAgIHByZXZpb3VzPU5v
bmUpOgotICAgICAgICAiQmFzaWMgY29uc3RydWN0b3IuIgotCi0gICAgICAgICMgV2UgZG9uJ3Qg
YWN0dWFsbHkgc3RvcmUgdGhlIHBhcnNlciBvYmplY3Q6IHRoYXQgbGV0cyBleHRyYWN0ZWQKLSAg
ICAgICAgIyBjaHVua3MgYmUgZ2FyYmFnZS1jb2xsZWN0ZWQKLSAgICAgICAgc2VsZi5wYXJzZXJD
bGFzcyA9IHBhcnNlci5fX2NsYXNzX18KLSAgICAgICAgc2VsZi5pc1NlbGZDbG9zaW5nID0gcGFy
c2VyLmlzU2VsZkNsb3NpbmdUYWcobmFtZSkKLSAgICAgICAgc2VsZi5uYW1lID0gbmFtZQotICAg
ICAgICBpZiBhdHRycyA9PSBOb25lOgotICAgICAgICAgICAgYXR0cnMgPSBbXQotICAgICAgICBz
ZWxmLmF0dHJzID0gYXR0cnMKLSAgICAgICAgc2VsZi5jb250ZW50cyA9IFtdCi0gICAgICAgIHNl
bGYuc2V0dXAocGFyZW50LCBwcmV2aW91cykKLSAgICAgICAgc2VsZi5oaWRkZW4gPSBGYWxzZQot
ICAgICAgICBzZWxmLmNvbnRhaW5zU3Vic3RpdHV0aW9ucyA9IEZhbHNlCi0gICAgICAgIHNlbGYu
Y29udmVydEhUTUxFbnRpdGllcyA9IHBhcnNlci5jb252ZXJ0SFRNTEVudGl0aWVzCi0gICAgICAg
IHNlbGYuY29udmVydFhNTEVudGl0aWVzID0gcGFyc2VyLmNvbnZlcnRYTUxFbnRpdGllcwotICAg
ICAgICBzZWxmLmVzY2FwZVVucmVjb2duaXplZEVudGl0aWVzID0gcGFyc2VyLmVzY2FwZVVucmVj
b2duaXplZEVudGl0aWVzCi0KLSAgICAgICAgZGVmIGNvbnZlcnQoa3ZhbCk6Ci0gICAgICAgICAg
ICAiQ29udmVydHMgSFRNTCwgWE1MIGFuZCBudW1lcmljIGVudGl0aWVzIGluIHRoZSBhdHRyaWJ1
dGUgdmFsdWUuIgotICAgICAgICAgICAgaywgdmFsID0ga3ZhbAotICAgICAgICAgICAgaWYgdmFs
IGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGt2YWwKLSAgICAgICAgICAgIHJldHVy
biAoaywgcmUuc3ViKCImKCNcZCt8I3hbMC05YS1mQS1GXSt8XHcrKTsiLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2VsZi5fY29udmVydEVudGl0aWVzLCB2YWwpKQotICAgICAgICBz
ZWxmLmF0dHJzID0gbWFwKGNvbnZlcnQsIHNlbGYuYXR0cnMpCi0KLSAgICBkZWYgZ2V0KHNlbGYs
IGtleSwgZGVmYXVsdD1Ob25lKToKLSAgICAgICAgIiIiUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhl
ICdrZXknIGF0dHJpYnV0ZSBmb3IgdGhlIHRhZywgb3IKLSAgICAgICAgdGhlIHZhbHVlIGdpdmVu
IGZvciAnZGVmYXVsdCcgaWYgaXQgZG9lc24ndCBoYXZlIHRoYXQKLSAgICAgICAgYXR0cmlidXRl
LiIiIgotICAgICAgICByZXR1cm4gc2VsZi5fZ2V0QXR0ck1hcCgpLmdldChrZXksIGRlZmF1bHQp
Ci0KLSAgICBkZWYgaGFzX2tleShzZWxmLCBrZXkpOgotICAgICAgICByZXR1cm4gc2VsZi5fZ2V0
QXR0ck1hcCgpLmhhc19rZXkoa2V5KQotCi0gICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6
Ci0gICAgICAgICIiInRhZ1trZXldIHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAna2V5JyBhdHRy
aWJ1dGUgZm9yIHRoZSB0YWcsCi0gICAgICAgIGFuZCB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIGl0
J3Mgbm90IHRoZXJlLiIiIgotICAgICAgICByZXR1cm4gc2VsZi5fZ2V0QXR0ck1hcCgpW2tleV0K
LQotICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKLSAgICAgICAgIkl0ZXJhdGluZyBvdmVyIGEgdGFn
IGl0ZXJhdGVzIG92ZXIgaXRzIGNvbnRlbnRzLiIKLSAgICAgICAgcmV0dXJuIGl0ZXIoc2VsZi5j
b250ZW50cykKLQotICAgIGRlZiBfX2xlbl9fKHNlbGYpOgotICAgICAgICAiVGhlIGxlbmd0aCBv
ZiBhIHRhZyBpcyB0aGUgbGVuZ3RoIG9mIGl0cyBsaXN0IG9mIGNvbnRlbnRzLiIKLSAgICAgICAg
cmV0dXJuIGxlbihzZWxmLmNvbnRlbnRzKQotCi0gICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCB4
KToKLSAgICAgICAgcmV0dXJuIHggaW4gc2VsZi5jb250ZW50cwotCi0gICAgZGVmIF9fbm9uemVy
b19fKHNlbGYpOgotICAgICAgICAiQSB0YWcgaXMgbm9uLU5vbmUgZXZlbiBpZiBpdCBoYXMgbm8g
Y29udGVudHMuIgotICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgZGVmIF9fc2V0aXRlbV9fKHNl
bGYsIGtleSwgdmFsdWUpOgotICAgICAgICAiIiJTZXR0aW5nIHRhZ1trZXldIHNldHMgdGhlIHZh
bHVlIG9mIHRoZSAna2V5JyBhdHRyaWJ1dGUgZm9yIHRoZQotICAgICAgICB0YWcuIiIiCi0gICAg
ICAgIHNlbGYuX2dldEF0dHJNYXAoKQotICAgICAgICBzZWxmLmF0dHJNYXBba2V5XSA9IHZhbHVl
Ci0gICAgICAgIGZvdW5kID0gRmFsc2UKLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHNl
bGYuYXR0cnMpKToKLSAgICAgICAgICAgIGlmIHNlbGYuYXR0cnNbaV1bMF0gPT0ga2V5OgotICAg
ICAgICAgICAgICAgIHNlbGYuYXR0cnNbaV0gPSAoa2V5LCB2YWx1ZSkKLSAgICAgICAgICAgICAg
ICBmb3VuZCA9IFRydWUKLSAgICAgICAgaWYgbm90IGZvdW5kOgotICAgICAgICAgICAgc2VsZi5h
dHRycy5hcHBlbmQoKGtleSwgdmFsdWUpKQotICAgICAgICBzZWxmLl9nZXRBdHRyTWFwKClba2V5
XSA9IHZhbHVlCi0KLSAgICBkZWYgX19kZWxpdGVtX18oc2VsZiwga2V5KToKLSAgICAgICAgIkRl
bGV0aW5nIHRhZ1trZXldIGRlbGV0ZXMgYWxsICdrZXknIGF0dHJpYnV0ZXMgZm9yIHRoZSB0YWcu
IgotICAgICAgICBmb3IgaXRlbSBpbiBzZWxmLmF0dHJzOgotICAgICAgICAgICAgaWYgaXRlbVsw
XSA9PSBrZXk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hdHRycy5yZW1vdmUoaXRlbSkKLSAgICAg
ICAgICAgICAgICAjV2UgZG9uJ3QgYnJlYWsgYmVjYXVzZSBiYWQgSFRNTCBjYW4gZGVmaW5lIHRo
ZSBzYW1lCi0gICAgICAgICAgICAgICAgI2F0dHJpYnV0ZSBtdWx0aXBsZSB0aW1lcy4KLSAgICAg
ICAgICAgIHNlbGYuX2dldEF0dHJNYXAoKQotICAgICAgICAgICAgaWYgc2VsZi5hdHRyTWFwLmhh
c19rZXkoa2V5KToKLSAgICAgICAgICAgICAgICBkZWwgc2VsZi5hdHRyTWFwW2tleV0KLQotICAg
IGRlZiBfX2NhbGxfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgotICAgICAgICAiIiJDYWxsaW5n
IGEgdGFnIGxpa2UgYSBmdW5jdGlvbiBpcyB0aGUgc2FtZSBhcyBjYWxsaW5nIGl0cwotICAgICAg
ICBmaW5kQWxsKCkgbWV0aG9kLiBFZy4gdGFnKCdhJykgcmV0dXJucyBhIGxpc3Qgb2YgYWxsIHRo
ZSBBIHRhZ3MKLSAgICAgICAgZm91bmQgd2l0aGluIHRoaXMgdGFnLiIiIgotICAgICAgICByZXR1
cm4gYXBwbHkoc2VsZi5maW5kQWxsLCBhcmdzLCBrd2FyZ3MpCi0KLSAgICBkZWYgX19nZXRhdHRy
X18oc2VsZiwgdGFnKToKLSAgICAgICAgI3ByaW50ICJHZXRhdHRyICVzLiVzIiAlIChzZWxmLl9f
Y2xhc3NfXywgdGFnKQotICAgICAgICBpZiBsZW4odGFnKSA+IDMgYW5kIHRhZy5yZmluZCgnVGFn
JykgPT0gbGVuKHRhZyktMzoKLSAgICAgICAgICAgIHJldHVybiBzZWxmLmZpbmQodGFnWzotM10p
Ci0gICAgICAgIGVsaWYgdGFnLmZpbmQoJ19fJykgIT0gMDoKLSAgICAgICAgICAgIHJldHVybiBz
ZWxmLmZpbmQodGFnKQotICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvciwgIiclcycgb2JqZWN0
IGhhcyBubyBhdHRyaWJ1dGUgJyVzJyIgJSAoc2VsZi5fX2NsYXNzX18sIHRhZykKLQotICAgIGRl
ZiBfX2VxX18oc2VsZiwgb3RoZXIpOgotICAgICAgICAiIiJSZXR1cm5zIHRydWUgaWZmIHRoaXMg
dGFnIGhhcyB0aGUgc2FtZSBuYW1lLCB0aGUgc2FtZSBhdHRyaWJ1dGVzLAotICAgICAgICBhbmQg
dGhlIHNhbWUgY29udGVudHMgKHJlY3Vyc2l2ZWx5KSBhcyB0aGUgZ2l2ZW4gdGFnLgotCi0gICAg
ICAgIE5PVEU6IHJpZ2h0IG5vdyB0aGlzIHdpbGwgcmV0dXJuIGZhbHNlIGlmIHR3byB0YWdzIGhh
dmUgdGhlCi0gICAgICAgIHNhbWUgYXR0cmlidXRlcyBpbiBhIGRpZmZlcmVudCBvcmRlci4gU2hv
dWxkIHRoaXMgYmUgZml4ZWQ/IiIiCi0gICAgICAgIGlmIG5vdCBoYXNhdHRyKG90aGVyLCAnbmFt
ZScpIG9yIG5vdCBoYXNhdHRyKG90aGVyLCAnYXR0cnMnKSBvciBub3QgaGFzYXR0cihvdGhlciwg
J2NvbnRlbnRzJykgb3Igc2VsZi5uYW1lICE9IG90aGVyLm5hbWUgb3Igc2VsZi5hdHRycyAhPSBv
dGhlci5hdHRycyBvciBsZW4oc2VsZikgIT0gbGVuKG90aGVyKToKLSAgICAgICAgICAgIHJldHVy
biBGYWxzZQotICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4oc2VsZi5jb250ZW50cykpOgot
ICAgICAgICAgICAgaWYgc2VsZi5jb250ZW50c1tpXSAhPSBvdGhlci5jb250ZW50c1tpXToKLSAg
ICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgcmV0dXJuIFRydWUKLQotICAgIGRl
ZiBfX25lX18oc2VsZiwgb3RoZXIpOgotICAgICAgICAiIiJSZXR1cm5zIHRydWUgaWZmIHRoaXMg
dGFnIGlzIG5vdCBpZGVudGljYWwgdG8gdGhlIG90aGVyIHRhZywKLSAgICAgICAgYXMgZGVmaW5l
ZCBpbiBfX2VxX18uIiIiCi0gICAgICAgIHJldHVybiBub3Qgc2VsZiA9PSBvdGhlcgotCi0gICAg
ZGVmIF9fcmVwcl9fKHNlbGYsIGVuY29kaW5nPURFRkFVTFRfT1VUUFVUX0VOQ09ESU5HKToKLSAg
ICAgICAgIiIiUmVuZGVycyB0aGlzIHRhZyBhcyBhIHN0cmluZy4iIiIKLSAgICAgICAgcmV0dXJu
IHNlbGYuZGVjb2RlKGV2ZW50dWFsRW5jb2Rpbmc9ZW5jb2RpbmcpCi0KLSAgICBCQVJFX0FNUEVS
U0FORF9PUl9CUkFDS0VUID0gcmUuY29tcGlsZSgiKFs8Pl18IgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICsgIiYoPyEjXGQrO3wjeFswLTlhLWZBLUZdKzt8XHcr
OykiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiKSIpCi0K
LSAgICBkZWYgX3N1Yl9lbnRpdHkoc2VsZiwgeCk6Ci0gICAgICAgICIiIlVzZWQgd2l0aCBhIHJl
Z3VsYXIgZXhwcmVzc2lvbiB0byBzdWJzdGl0dXRlIHRoZQotICAgICAgICBhcHByb3ByaWF0ZSBY
TUwgZW50aXR5IGZvciBhbiBYTUwgc3BlY2lhbCBjaGFyYWN0ZXIuIiIiCi0gICAgICAgIHJldHVy
biAiJiIgKyBzZWxmLlhNTF9TUEVDSUFMX0NIQVJTX1RPX0VOVElUSUVTW3guZ3JvdXAoMClbMF1d
ICsgIjsiCi0KLSAgICBkZWYgX191bmljb2RlX18oc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxm
LmRlY29kZSgpCi0KLSAgICBkZWYgX19zdHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYu
ZW5jb2RlKCkKLQotICAgIGRlZiBlbmNvZGUoc2VsZiwgZW5jb2Rpbmc9REVGQVVMVF9PVVRQVVRf
RU5DT0RJTkcsCi0gICAgICAgICAgICAgICBwcmV0dHlQcmludD1GYWxzZSwgaW5kZW50TGV2ZWw9
MCk6Ci0gICAgICAgIHJldHVybiBzZWxmLmRlY29kZShwcmV0dHlQcmludCwgaW5kZW50TGV2ZWws
IGVuY29kaW5nKS5lbmNvZGUoZW5jb2RpbmcpCi0KLSAgICBkZWYgZGVjb2RlKHNlbGYsIHByZXR0
eVByaW50PUZhbHNlLCBpbmRlbnRMZXZlbD0wLAotICAgICAgICAgICAgICAgZXZlbnR1YWxFbmNv
ZGluZz1ERUZBVUxUX09VVFBVVF9FTkNPRElORyk6Ci0gICAgICAgICIiIlJldHVybnMgYSBzdHJp
bmcgb3IgVW5pY29kZSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHRhZyBhbmQKLSAgICAgICAgaXRz
IGNvbnRlbnRzLiBUbyBnZXQgVW5pY29kZSwgcGFzcyBOb25lIGZvciBlbmNvZGluZy4iIiIKLQot
ICAgICAgICBhdHRycyA9IFtdCi0gICAgICAgIGlmIHNlbGYuYXR0cnM6Ci0gICAgICAgICAgICBm
b3Iga2V5LCB2YWwgaW4gc2VsZi5hdHRyczoKLSAgICAgICAgICAgICAgICBmbXQgPSAnJXM9IiVz
IicKLSAgICAgICAgICAgICAgICBpZiBpc1N0cmluZyh2YWwpOgotICAgICAgICAgICAgICAgICAg
ICBpZiAoc2VsZi5jb250YWluc1N1YnN0aXR1dGlvbnMKLSAgICAgICAgICAgICAgICAgICAgICAg
IGFuZCBldmVudHVhbEVuY29kaW5nIGlzIG5vdCBOb25lCi0gICAgICAgICAgICAgICAgICAgICAg
ICBhbmQgJyVTT1VQLUVOQ09ESU5HJScgaW4gdmFsKToKLSAgICAgICAgICAgICAgICAgICAgICAg
IHZhbCA9IHNlbGYuc3Vic3RpdHV0ZUVuY29kaW5nKHZhbCwgZXZlbnR1YWxFbmNvZGluZykKLQot
ICAgICAgICAgICAgICAgICAgICAjIFRoZSBhdHRyaWJ1dGUgdmFsdWUgZWl0aGVyOgotICAgICAg
ICAgICAgICAgICAgICAjCi0gICAgICAgICAgICAgICAgICAgICMgKiBDb250YWlucyBubyBlbWJl
ZGRlZCBkb3VibGUgcXVvdGVzIG9yIHNpbmdsZSBxdW90ZXMuCi0gICAgICAgICAgICAgICAgICAg
ICMgICBObyBwcm9ibGVtOiB3ZSBlbmNsb3NlIGl0IGluIGRvdWJsZSBxdW90ZXMuCi0gICAgICAg
ICAgICAgICAgICAgICMgKiBDb250YWlucyBlbWJlZGRlZCBzaW5nbGUgcXVvdGVzLiBObyBwcm9i
bGVtOgotICAgICAgICAgICAgICAgICAgICAjICAgZG91YmxlIHF1b3RlcyB3b3JrIGhlcmUgdG9v
LgotICAgICAgICAgICAgICAgICAgICAjICogQ29udGFpbnMgZW1iZWRkZWQgZG91YmxlIHF1b3Rl
cy4gTm8gcHJvYmxlbToKLSAgICAgICAgICAgICAgICAgICAgIyAgIHdlIGVuY2xvc2UgaXQgaW4g
c2luZ2xlIHF1b3Rlcy4KLSAgICAgICAgICAgICAgICAgICAgIyAqIEVtYmVkcyBib3RoIHNpbmds
ZSBfYW5kXyBkb3VibGUgcXVvdGVzLiBUaGlzCi0gICAgICAgICAgICAgICAgICAgICMgICBjYW4n
dCBoYXBwZW4gbmF0dXJhbGx5LCBidXQgaXQgY2FuIGhhcHBlbiBpZgotICAgICAgICAgICAgICAg
ICAgICAjICAgeW91IG1vZGlmeSBhbiBhdHRyaWJ1dGUgdmFsdWUgYWZ0ZXIgcGFyc2luZwotICAg
ICAgICAgICAgICAgICAgICAjICAgdGhlIGRvY3VtZW50LiBOb3cgd2UgaGF2ZSBhIGJpdCBvZiBh
Ci0gICAgICAgICAgICAgICAgICAgICMgICBwcm9ibGVtLiBXZSBzb2x2ZSBpdCBieSBlbmNsb3Np
bmcgdGhlCi0gICAgICAgICAgICAgICAgICAgICMgICBhdHRyaWJ1dGUgaW4gc2luZ2xlIHF1b3Rl
cywgYW5kIGVzY2FwaW5nIGFueQotICAgICAgICAgICAgICAgICAgICAjICAgZW1iZWRkZWQgc2lu
Z2xlIHF1b3RlcyB0byBYTUwgZW50aXRpZXMuCi0gICAgICAgICAgICAgICAgICAgIGlmICciJyBp
biB2YWw6Ci0gICAgICAgICAgICAgICAgICAgICAgICBmbXQgPSAiJXM9JyVzJyIKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICInIiBpbiB2YWw6Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIyBUT0RPOiByZXBsYWNlIHdpdGggYXBvcyB3aGVuCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIyBhcHByb3ByaWF0ZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSB2
YWwucmVwbGFjZSgiJyIsICImc3F1b3Q7IikKLQotICAgICAgICAgICAgICAgICAgICAjIE5vdyB3
ZSdyZSBva2F5IHcvci90IHF1b3Rlcy4gQnV0IHRoZSBhdHRyaWJ1dGUKLSAgICAgICAgICAgICAg
ICAgICAgIyB2YWx1ZSBtaWdodCBhbHNvIGNvbnRhaW4gYW5nbGUgYnJhY2tldHMsIG9yCi0gICAg
ICAgICAgICAgICAgICAgICMgYW1wZXJzYW5kcyB0aGF0IGFyZW4ndCBwYXJ0IG9mIGVudGl0aWVz
LiBXZSBuZWVkCi0gICAgICAgICAgICAgICAgICAgICMgdG8gZXNjYXBlIHRob3NlIHRvIFhNTCBl
bnRpdGllcyB0b28uCi0gICAgICAgICAgICAgICAgICAgIHZhbCA9IHNlbGYuQkFSRV9BTVBFUlNB
TkRfT1JfQlJBQ0tFVC5zdWIoc2VsZi5fc3ViX2VudGl0eSwgdmFsKQotICAgICAgICAgICAgICAg
IGlmIHZhbCBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICAjIEhhbmRsZSBib29sZWFuIGF0
dHJpYnV0ZXMuCi0gICAgICAgICAgICAgICAgICAgIGRlY29kZWQgPSBrZXkKLSAgICAgICAgICAg
ICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBkZWNvZGVkID0gZm10ICUgKGtleSwgdmFs
KQotICAgICAgICAgICAgICAgIGF0dHJzLmFwcGVuZChkZWNvZGVkKQotICAgICAgICBjbG9zZSA9
ICcnCi0gICAgICAgIGNsb3NlVGFnID0gJycKLSAgICAgICAgaWYgc2VsZi5pc1NlbGZDbG9zaW5n
OgotICAgICAgICAgICAgY2xvc2UgPSAnIC8nCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBj
bG9zZVRhZyA9ICc8LyVzPicgJSBzZWxmLm5hbWUKLQotICAgICAgICBpbmRlbnRUYWcsIGluZGVu
dENvbnRlbnRzID0gMCwgMAotICAgICAgICBpZiBwcmV0dHlQcmludDoKLSAgICAgICAgICAgIGlu
ZGVudFRhZyA9IGluZGVudExldmVsCi0gICAgICAgICAgICBzcGFjZSA9ICgnICcgKiAoaW5kZW50
VGFnLTEpKQotICAgICAgICAgICAgaW5kZW50Q29udGVudHMgPSBpbmRlbnRUYWcgKyAxCi0gICAg
ICAgIGNvbnRlbnRzID0gc2VsZi5kZWNvZGVDb250ZW50cyhwcmV0dHlQcmludCwgaW5kZW50Q29u
dGVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudHVhbEVu
Y29kaW5nKQotICAgICAgICBpZiBzZWxmLmhpZGRlbjoKLSAgICAgICAgICAgIHMgPSBjb250ZW50
cwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcyA9IFtdCi0gICAgICAgICAgICBhdHRyaWJ1
dGVTdHJpbmcgPSAnJwotICAgICAgICAgICAgaWYgYXR0cnM6Ci0gICAgICAgICAgICAgICAgYXR0
cmlidXRlU3RyaW5nID0gJyAnICsgJyAnLmpvaW4oYXR0cnMpCi0gICAgICAgICAgICBpZiBwcmV0
dHlQcmludDoKLSAgICAgICAgICAgICAgICBzLmFwcGVuZChzcGFjZSkKLSAgICAgICAgICAgIHMu
YXBwZW5kKCc8JXMlcyVzPicgJSAoc2VsZi5uYW1lLCBhdHRyaWJ1dGVTdHJpbmcsIGNsb3NlKSkK
LSAgICAgICAgICAgIGlmIHByZXR0eVByaW50OgotICAgICAgICAgICAgICAgIHMuYXBwZW5kKCJc
biIpCi0gICAgICAgICAgICBzLmFwcGVuZChjb250ZW50cykKLSAgICAgICAgICAgIGlmIHByZXR0
eVByaW50IGFuZCBjb250ZW50cyBhbmQgY29udGVudHNbLTFdICE9ICJcbiI6Ci0gICAgICAgICAg
ICAgICAgcy5hcHBlbmQoIlxuIikKLSAgICAgICAgICAgIGlmIHByZXR0eVByaW50IGFuZCBjbG9z
ZVRhZzoKLSAgICAgICAgICAgICAgICBzLmFwcGVuZChzcGFjZSkKLSAgICAgICAgICAgIHMuYXBw
ZW5kKGNsb3NlVGFnKQotICAgICAgICAgICAgaWYgcHJldHR5UHJpbnQgYW5kIGNsb3NlVGFnIGFu
ZCBzZWxmLm5leHRTaWJsaW5nOgotICAgICAgICAgICAgICAgIHMuYXBwZW5kKCJcbiIpCi0gICAg
ICAgICAgICBzID0gJycuam9pbihzKQotICAgICAgICByZXR1cm4gcwotCi0gICAgZGVmIGRlY29t
cG9zZShzZWxmKToKLSAgICAgICAgIiIiUmVjdXJzaXZlbHkgZGVzdHJveXMgdGhlIGNvbnRlbnRz
IG9mIHRoaXMgdHJlZS4iIiIKLSAgICAgICAgY29udGVudHMgPSBbaSBmb3IgaSBpbiBzZWxmLmNv
bnRlbnRzXQotICAgICAgICBmb3IgaSBpbiBjb250ZW50czoKLSAgICAgICAgICAgIGlmIGlzaW5z
dGFuY2UoaSwgVGFnKToKLSAgICAgICAgICAgICAgICBpLmRlY29tcG9zZSgpCi0gICAgICAgICAg
ICBlbHNlOgotICAgICAgICAgICAgICAgIGkuZXh0cmFjdCgpCi0gICAgICAgIHNlbGYuZXh0cmFj
dCgpCi0KLSAgICBkZWYgcHJldHRpZnkoc2VsZiwgZW5jb2Rpbmc9REVGQVVMVF9PVVRQVVRfRU5D
T0RJTkcpOgotICAgICAgICByZXR1cm4gc2VsZi5lbmNvZGUoZW5jb2RpbmcsIFRydWUpCi0KLSAg
ICBkZWYgZW5jb2RlQ29udGVudHMoc2VsZiwgZW5jb2Rpbmc9REVGQVVMVF9PVVRQVVRfRU5DT0RJ
TkcsCi0gICAgICAgICAgICAgICAgICAgICAgIHByZXR0eVByaW50PUZhbHNlLCBpbmRlbnRMZXZl
bD0wKToKLSAgICAgICAgcmV0dXJuIHNlbGYuZGVjb2RlQ29udGVudHMocHJldHR5UHJpbnQsIGlu
ZGVudExldmVsKS5lbmNvZGUoZW5jb2RpbmcpCi0KLSAgICBkZWYgZGVjb2RlQ29udGVudHMoc2Vs
ZiwgcHJldHR5UHJpbnQ9RmFsc2UsIGluZGVudExldmVsPTAsCi0gICAgICAgICAgICAgICAgICAg
ICAgIGV2ZW50dWFsRW5jb2Rpbmc9REVGQVVMVF9PVVRQVVRfRU5DT0RJTkcpOgotICAgICAgICAi
IiJSZW5kZXJzIHRoZSBjb250ZW50cyBvZiB0aGlzIHRhZyBhcyBhIHN0cmluZyBpbiB0aGUgZ2l2
ZW4KLSAgICAgICAgZW5jb2RpbmcuIElmIGVuY29kaW5nIGlzIE5vbmUsIHJldHVybnMgYSBVbmlj
b2RlIHN0cmluZy4uIiIiCi0gICAgICAgIHM9W10KLSAgICAgICAgZm9yIGMgaW4gc2VsZjoKLSAg
ICAgICAgICAgIHRleHQgPSBOb25lCi0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKGMsIE5hdmln
YWJsZVN0cmluZyk6Ci0gICAgICAgICAgICAgICAgdGV4dCA9IGMuZGVjb2RlR2l2ZW5FdmVudHVh
bEVuY29kaW5nKGV2ZW50dWFsRW5jb2RpbmcpCi0gICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2Uo
YywgVGFnKToKLSAgICAgICAgICAgICAgICBzLmFwcGVuZChjLmRlY29kZShwcmV0dHlQcmludCwg
aW5kZW50TGV2ZWwsIGV2ZW50dWFsRW5jb2RpbmcpKQotICAgICAgICAgICAgaWYgdGV4dCBhbmQg
cHJldHR5UHJpbnQ6Ci0gICAgICAgICAgICAgICAgdGV4dCA9IHRleHQuc3RyaXAoKQotICAgICAg
ICAgICAgaWYgdGV4dDoKLSAgICAgICAgICAgICAgICBpZiBwcmV0dHlQcmludDoKLSAgICAgICAg
ICAgICAgICAgICAgcy5hcHBlbmQoIiAiICogKGluZGVudExldmVsLTEpKQotICAgICAgICAgICAg
ICAgIHMuYXBwZW5kKHRleHQpCi0gICAgICAgICAgICAgICAgaWYgcHJldHR5UHJpbnQ6Ci0gICAg
ICAgICAgICAgICAgICAgIHMuYXBwZW5kKCJcbiIpCi0gICAgICAgIHJldHVybiAnJy5qb2luKHMp
Ci0KLSAgICAjU291cCBtZXRob2RzCi0KLSAgICBkZWYgZmluZChzZWxmLCBuYW1lPU5vbmUsIGF0
dHJzPXt9LCByZWN1cnNpdmU9VHJ1ZSwgdGV4dD1Ob25lLAotICAgICAgICAgICAgICoqa3dhcmdz
KToKLSAgICAgICAgIiIiUmV0dXJuIG9ubHkgdGhlIGZpcnN0IGNoaWxkIG9mIHRoaXMgVGFnIG1h
dGNoaW5nIHRoZSBnaXZlbgotICAgICAgICBjcml0ZXJpYS4iIiIKLSAgICAgICAgciA9IE5vbmUK
LSAgICAgICAgbCA9IHNlbGYuZmluZEFsbChuYW1lLCBhdHRycywgcmVjdXJzaXZlLCB0ZXh0LCAx
LCAqKmt3YXJncykKLSAgICAgICAgaWYgbDoKLSAgICAgICAgICAgIHIgPSBsWzBdCi0gICAgICAg
IHJldHVybiByCi0gICAgZmluZENoaWxkID0gZmluZAotCi0gICAgZGVmIGZpbmRBbGwoc2VsZiwg
bmFtZT1Ob25lLCBhdHRycz17fSwgcmVjdXJzaXZlPVRydWUsIHRleHQ9Tm9uZSwKLSAgICAgICAg
ICAgICAgICBsaW1pdD1Ob25lLCAqKmt3YXJncyk6Ci0gICAgICAgICIiIkV4dHJhY3RzIGEgbGlz
dCBvZiBUYWcgb2JqZWN0cyB0aGF0IG1hdGNoIHRoZSBnaXZlbgotICAgICAgICBjcml0ZXJpYS4g
IFlvdSBjYW4gc3BlY2lmeSB0aGUgbmFtZSBvZiB0aGUgVGFnIGFuZCBhbnkKLSAgICAgICAgYXR0
cmlidXRlcyB5b3Ugd2FudCB0aGUgVGFnIHRvIGhhdmUuCi0KLSAgICAgICAgVGhlIHZhbHVlIG9m
IGEga2V5LXZhbHVlIHBhaXIgaW4gdGhlICdhdHRycycgbWFwIGNhbiBiZSBhCi0gICAgICAgIHN0
cmluZywgYSBsaXN0IG9mIHN0cmluZ3MsIGEgcmVndWxhciBleHByZXNzaW9uIG9iamVjdCwgb3Ig
YQotICAgICAgICBjYWxsYWJsZSB0aGF0IHRha2VzIGEgc3RyaW5nIGFuZCByZXR1cm5zIHdoZXRo
ZXIgb3Igbm90IHRoZQotICAgICAgICBzdHJpbmcgbWF0Y2hlcyBmb3Igc29tZSBjdXN0b20gZGVm
aW5pdGlvbiBvZiAnbWF0Y2hlcycuIFRoZQotICAgICAgICBzYW1lIGlzIHRydWUgb2YgdGhlIHRh
ZyBuYW1lLiIiIgotICAgICAgICBnZW5lcmF0b3IgPSBzZWxmLnJlY3Vyc2l2ZUNoaWxkR2VuZXJh
dG9yCi0gICAgICAgIGlmIG5vdCByZWN1cnNpdmU6Ci0gICAgICAgICAgICBnZW5lcmF0b3IgPSBz
ZWxmLmNoaWxkR2VuZXJhdG9yCi0gICAgICAgIHJldHVybiBzZWxmLl9maW5kQWxsKG5hbWUsIGF0
dHJzLCB0ZXh0LCBsaW1pdCwgZ2VuZXJhdG9yLCAqKmt3YXJncykKLSAgICBmaW5kQ2hpbGRyZW4g
PSBmaW5kQWxsCi0KLSAgICAjIFByZS0zLnggY29tcGF0aWJpbGl0eSBtZXRob2RzLiBXaWxsIGdv
IGF3YXkgaW4gNC4wLgotICAgIGZpcnN0ID0gZmluZAotICAgIGZldGNoID0gZmluZEFsbAotCi0g
ICAgZGVmIGZldGNoVGV4dChzZWxmLCB0ZXh0PU5vbmUsIHJlY3Vyc2l2ZT1UcnVlLCBsaW1pdD1O
b25lKToKLSAgICAgICAgcmV0dXJuIHNlbGYuZmluZEFsbCh0ZXh0PXRleHQsIHJlY3Vyc2l2ZT1y
ZWN1cnNpdmUsIGxpbWl0PWxpbWl0KQotCi0gICAgZGVmIGZpcnN0VGV4dChzZWxmLCB0ZXh0PU5v
bmUsIHJlY3Vyc2l2ZT1UcnVlKToKLSAgICAgICAgcmV0dXJuIHNlbGYuZmluZCh0ZXh0PXRleHQs
IHJlY3Vyc2l2ZT1yZWN1cnNpdmUpCi0KLSAgICAjIDMueCBjb21wYXRpYmlsaXR5IG1ldGhvZHMu
IFdpbGwgZ28gYXdheSBpbiA0LjAuCi0gICAgZGVmIHJlbmRlckNvbnRlbnRzKHNlbGYsIGVuY29k
aW5nPURFRkFVTFRfT1VUUFVUX0VOQ09ESU5HLAotICAgICAgICAgICAgICAgICAgICAgICBwcmV0
dHlQcmludD1GYWxzZSwgaW5kZW50TGV2ZWw9MCk6Ci0gICAgICAgIGlmIGVuY29kaW5nIGlzIE5v
bmU6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5kZWNvZGVDb250ZW50cyhwcmV0dHlQcmludCwg
aW5kZW50TGV2ZWwsIGVuY29kaW5nKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJu
IHNlbGYuZW5jb2RlQ29udGVudHMoZW5jb2RpbmcsIHByZXR0eVByaW50LCBpbmRlbnRMZXZlbCkK
LQotCi0gICAgI1ByaXZhdGUgbWV0aG9kcwotCi0gICAgZGVmIF9nZXRBdHRyTWFwKHNlbGYpOgot
ICAgICAgICAiIiJJbml0aWFsaXplcyBhIG1hcCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHRhZydz
IGF0dHJpYnV0ZXMsCi0gICAgICAgIGlmIG5vdCBhbHJlYWR5IGluaXRpYWxpemVkLiIiIgotICAg
ICAgICBpZiBub3QgZ2V0YXR0cihzZWxmLCAnYXR0ck1hcCcpOgotICAgICAgICAgICAgc2VsZi5h
dHRyTWFwID0ge30KLSAgICAgICAgICAgIGZvciAoa2V5LCB2YWx1ZSkgaW4gc2VsZi5hdHRyczoK
LSAgICAgICAgICAgICAgICBzZWxmLmF0dHJNYXBba2V5XSA9IHZhbHVlCi0gICAgICAgIHJldHVy
biBzZWxmLmF0dHJNYXAKLQotICAgICNHZW5lcmF0b3IgbWV0aG9kcwotICAgIGRlZiByZWN1cnNp
dmVDaGlsZEdlbmVyYXRvcihzZWxmKToKLSAgICAgICAgaWYgbm90IGxlbihzZWxmLmNvbnRlbnRz
KToKLSAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KLSAgICAgICAgc3RvcE5vZGUgPSBz
ZWxmLl9sYXN0UmVjdXJzaXZlQ2hpbGQoKS5uZXh0Ci0gICAgICAgIGN1cnJlbnQgPSBzZWxmLmNv
bnRlbnRzWzBdCi0gICAgICAgIHdoaWxlIGN1cnJlbnQgaXMgbm90IHN0b3BOb2RlOgotICAgICAg
ICAgICAgeWllbGQgY3VycmVudAotICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQubmV4dAot
Ci0gICAgZGVmIGNoaWxkR2VuZXJhdG9yKHNlbGYpOgotICAgICAgICBpZiBub3QgbGVuKHNlbGYu
Y29udGVudHMpOgotICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgotICAgICAgICBjdXJy
ZW50ID0gc2VsZi5jb250ZW50c1swXQotICAgICAgICB3aGlsZSBjdXJyZW50OgotICAgICAgICAg
ICAgeWllbGQgY3VycmVudAotICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQubmV4dFNpYmxp
bmcKLSAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgotCi0jIE5leHQsIGEgY291cGxlIGNsYXNz
ZXMgdG8gcmVwcmVzZW50IHF1ZXJpZXMgYW5kIHRoZWlyIHJlc3VsdHMuCi1jbGFzcyBTb3VwU3Ry
YWluZXI6Ci0gICAgIiIiRW5jYXBzdWxhdGVzIGEgbnVtYmVyIG9mIHdheXMgb2YgbWF0Y2hpbmcg
YSBtYXJrdXAgZWxlbWVudCAodGFnIG9yCi0gICAgdGV4dCkuIiIiCi0KLSAgICBkZWYgX19pbml0
X18oc2VsZiwgbmFtZT1Ob25lLCBhdHRycz17fSwgdGV4dD1Ob25lLCAqKmt3YXJncyk6Ci0gICAg
ICAgIHNlbGYubmFtZSA9IG5hbWUKLSAgICAgICAgaWYgaXNTdHJpbmcoYXR0cnMpOgotICAgICAg
ICAgICAga3dhcmdzWydjbGFzcyddID0gYXR0cnMKLSAgICAgICAgICAgIGF0dHJzID0gTm9uZQot
ICAgICAgICBpZiBrd2FyZ3M6Ci0gICAgICAgICAgICBpZiBhdHRyczoKLSAgICAgICAgICAgICAg
ICBhdHRycyA9IGF0dHJzLmNvcHkoKQotICAgICAgICAgICAgICAgIGF0dHJzLnVwZGF0ZShrd2Fy
Z3MpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGF0dHJzID0ga3dhcmdzCi0g
ICAgICAgIHNlbGYuYXR0cnMgPSBhdHRycwotICAgICAgICBzZWxmLnRleHQgPSB0ZXh0Ci0KLSAg
ICBkZWYgX19zdHJfXyhzZWxmKToKLSAgICAgICAgaWYgc2VsZi50ZXh0OgotICAgICAgICAgICAg
cmV0dXJuIHNlbGYudGV4dAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuICIlc3wl
cyIgJSAoc2VsZi5uYW1lLCBzZWxmLmF0dHJzKQotCi0gICAgZGVmIHNlYXJjaFRhZyhzZWxmLCBt
YXJrdXBOYW1lPU5vbmUsIG1hcmt1cEF0dHJzPXt9KToKLSAgICAgICAgZm91bmQgPSBOb25lCi0g
ICAgICAgIG1hcmt1cCA9IE5vbmUKLSAgICAgICAgaWYgaXNpbnN0YW5jZShtYXJrdXBOYW1lLCBU
YWcpOgotICAgICAgICAgICAgbWFya3VwID0gbWFya3VwTmFtZQotICAgICAgICAgICAgbWFya3Vw
QXR0cnMgPSBtYXJrdXAKLSAgICAgICAgY2FsbEZ1bmN0aW9uV2l0aFRhZ0RhdGEgPSBjYWxsYWJs
ZShzZWxmLm5hbWUpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG5vdCBp
c2luc3RhbmNlKG1hcmt1cE5hbWUsIFRhZykKLQotICAgICAgICBpZiAobm90IHNlbGYubmFtZSkg
XAotICAgICAgICAgICAgICAgb3IgY2FsbEZ1bmN0aW9uV2l0aFRhZ0RhdGEgXAotICAgICAgICAg
ICAgICAgb3IgKG1hcmt1cCBhbmQgc2VsZi5fbWF0Y2hlcyhtYXJrdXAsIHNlbGYubmFtZSkpIFwK
LSAgICAgICAgICAgICAgIG9yIChub3QgbWFya3VwIGFuZCBzZWxmLl9tYXRjaGVzKG1hcmt1cE5h
bWUsIHNlbGYubmFtZSkpOgotICAgICAgICAgICAgaWYgY2FsbEZ1bmN0aW9uV2l0aFRhZ0RhdGE6
Ci0gICAgICAgICAgICAgICAgbWF0Y2ggPSBzZWxmLm5hbWUobWFya3VwTmFtZSwgbWFya3VwQXR0
cnMpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIG1hdGNoID0gVHJ1ZQotICAg
ICAgICAgICAgICAgIG1hcmt1cEF0dHJNYXAgPSBOb25lCi0gICAgICAgICAgICAgICAgZm9yIGF0
dHIsIG1hdGNoQWdhaW5zdCBpbiBzZWxmLmF0dHJzLml0ZW1zKCk6Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIG5vdCBtYXJrdXBBdHRyTWFwOgotICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGhh
c2F0dHIobWFya3VwQXR0cnMsICdnZXQnKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
YXJrdXBBdHRyTWFwID0gbWFya3VwQXR0cnMKLSAgICAgICAgICAgICAgICAgICAgICAgICBlbHNl
OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmt1cEF0dHJNYXAgPSB7fQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciBrLHYgaW4gbWFya3VwQXR0cnM6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1hcmt1cEF0dHJNYXBba10gPSB2Ci0gICAgICAgICAgICAg
ICAgICAgIGF0dHJWYWx1ZSA9IG1hcmt1cEF0dHJNYXAuZ2V0KGF0dHIpCi0gICAgICAgICAgICAg
ICAgICAgIGlmIG5vdCBzZWxmLl9tYXRjaGVzKGF0dHJWYWx1ZSwgbWF0Y2hBZ2FpbnN0KToKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gRmFsc2UKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrCi0gICAgICAgICAgICBpZiBtYXRjaDoKLSAgICAgICAgICAgICAgICBpZiBtYXJr
dXA6Ci0gICAgICAgICAgICAgICAgICAgIGZvdW5kID0gbWFya3VwCi0gICAgICAgICAgICAgICAg
ZWxzZToKLSAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBtYXJrdXBOYW1lCi0gICAgICAgIHJl
dHVybiBmb3VuZAotCi0gICAgZGVmIHNlYXJjaChzZWxmLCBtYXJrdXApOgotICAgICAgICAjcHJp
bnQgJ2xvb2tpbmcgZm9yICVzIGluICVzJyAlIChzZWxmLCBtYXJrdXApCi0gICAgICAgIGZvdW5k
ID0gTm9uZQotICAgICAgICAjIElmIGdpdmVuIGEgbGlzdCBvZiBpdGVtcywgc2NhbiBpdCBmb3Ig
YSB0ZXh0IGVsZW1lbnQgdGhhdAotICAgICAgICAjIG1hdGNoZXMuCi0gICAgICAgIGlmIGlzTGlz
dChtYXJrdXApIGFuZCBub3QgaXNpbnN0YW5jZShtYXJrdXAsIFRhZyk6Ci0gICAgICAgICAgICBm
b3IgZWxlbWVudCBpbiBtYXJrdXA6Ci0gICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShlbGVt
ZW50LCBOYXZpZ2FibGVTdHJpbmcpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgYW5kIHNlbGYu
c2VhcmNoKGVsZW1lbnQpOgotICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IGVsZW1lbnQKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgIyBJZiBpdCdzIGEgVGFnLCBtYWtlIHN1
cmUgaXRzIG5hbWUgb3IgYXR0cmlidXRlcyBtYXRjaC4KLSAgICAgICAgIyBEb24ndCBib3RoZXIg
d2l0aCBUYWdzIGlmIHdlJ3JlIHNlYXJjaGluZyBmb3IgdGV4dC4KLSAgICAgICAgZWxpZiBpc2lu
c3RhbmNlKG1hcmt1cCwgVGFnKToKLSAgICAgICAgICAgIGlmIG5vdCBzZWxmLnRleHQ6Ci0gICAg
ICAgICAgICAgICAgZm91bmQgPSBzZWxmLnNlYXJjaFRhZyhtYXJrdXApCi0gICAgICAgICMgSWYg
aXQncyB0ZXh0LCBtYWtlIHN1cmUgdGhlIHRleHQgbWF0Y2hlcy4KLSAgICAgICAgZWxpZiBpc2lu
c3RhbmNlKG1hcmt1cCwgTmF2aWdhYmxlU3RyaW5nKSBvciBcCi0gICAgICAgICAgICAgICAgIGlz
U3RyaW5nKG1hcmt1cCk6Ci0gICAgICAgICAgICBpZiBzZWxmLl9tYXRjaGVzKG1hcmt1cCwgc2Vs
Zi50ZXh0KToKLSAgICAgICAgICAgICAgICBmb3VuZCA9IG1hcmt1cAotICAgICAgICBlbHNlOgot
ICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uLCAiSSBkb24ndCBrbm93IGhvdyB0byBtYXRjaCBh
Z2FpbnN0IGEgJXMiIFwKLSAgICAgICAgICAgICAgICAgICUgbWFya3VwLl9fY2xhc3NfXwotICAg
ICAgICByZXR1cm4gZm91bmQKLQotICAgIGRlZiBfbWF0Y2hlcyhzZWxmLCBtYXJrdXAsIG1hdGNo
QWdhaW5zdCk6Ci0gICAgICAgICNwcmludCAiTWF0Y2hpbmcgJXMgYWdhaW5zdCAlcyIgJSAobWFy
a3VwLCBtYXRjaEFnYWluc3QpCi0gICAgICAgIHJlc3VsdCA9IEZhbHNlCi0gICAgICAgIGlmIG1h
dGNoQWdhaW5zdCA9PSBUcnVlIGFuZCB0eXBlKG1hdGNoQWdhaW5zdCkgPT0gdHlwZXMuQm9vbGVh
blR5cGU6Ci0gICAgICAgICAgICByZXN1bHQgPSBtYXJrdXAgIT0gTm9uZQotICAgICAgICBlbGlm
IGNhbGxhYmxlKG1hdGNoQWdhaW5zdCk6Ci0gICAgICAgICAgICByZXN1bHQgPSBtYXRjaEFnYWlu
c3QobWFya3VwKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgI0N1c3RvbSBtYXRjaCBtZXRo
b2RzIHRha2UgdGhlIHRhZyBhcyBhbiBhcmd1bWVudCwgYnV0IGFsbAotICAgICAgICAgICAgI290
aGVyIHdheXMgb2YgbWF0Y2hpbmcgbWF0Y2ggdGhlIHRhZyBuYW1lIGFzIGEgc3RyaW5nLgotICAg
ICAgICAgICAgaWYgaXNpbnN0YW5jZShtYXJrdXAsIFRhZyk6Ci0gICAgICAgICAgICAgICAgbWFy
a3VwID0gbWFya3VwLm5hbWUKLSAgICAgICAgICAgIGlmIG1hcmt1cCBpcyBub3QgTm9uZSBhbmQg
bm90IGlzU3RyaW5nKG1hcmt1cCk6Ci0gICAgICAgICAgICAgICAgbWFya3VwID0gdW5pY29kZSht
YXJrdXApCi0gICAgICAgICAgICAjTm93IHdlIGtub3cgdGhhdCBjaHVuayBpcyBlaXRoZXIgYSBz
dHJpbmcsIG9yIE5vbmUuCi0gICAgICAgICAgICBpZiBoYXNhdHRyKG1hdGNoQWdhaW5zdCwgJ21h
dGNoJyk6Ci0gICAgICAgICAgICAgICAgIyBJdCdzIGEgcmVnZXhwIG9iamVjdC4KLSAgICAgICAg
ICAgICAgICByZXN1bHQgPSBtYXJrdXAgYW5kIG1hdGNoQWdhaW5zdC5zZWFyY2gobWFya3VwKQot
ICAgICAgICAgICAgZWxpZiAoaXNMaXN0KG1hdGNoQWdhaW5zdCkKLSAgICAgICAgICAgICAgICAg
IGFuZCAobWFya3VwIGlzIG5vdCBOb25lIG9yIG5vdCBpc1N0cmluZyhtYXRjaEFnYWluc3QpKSk6
Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gbWFya3VwIGluIG1hdGNoQWdhaW5zdAotICAgICAg
ICAgICAgZWxpZiBoYXNhdHRyKG1hdGNoQWdhaW5zdCwgJ2l0ZW1zJyk6Ci0gICAgICAgICAgICAg
ICAgcmVzdWx0ID0gbWFya3VwLmhhc19rZXkobWF0Y2hBZ2FpbnN0KQotICAgICAgICAgICAgZWxp
ZiBtYXRjaEFnYWluc3QgYW5kIGlzU3RyaW5nKG1hcmt1cCk6Ci0gICAgICAgICAgICAgICAgaWYg
aXNpbnN0YW5jZShtYXJrdXAsIHVuaWNvZGUpOgotICAgICAgICAgICAgICAgICAgICBtYXRjaEFn
YWluc3QgPSB1bmljb2RlKG1hdGNoQWdhaW5zdCkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAg
ICAgICAgICAgICAgICAgICBtYXRjaEFnYWluc3QgPSBzdHIobWF0Y2hBZ2FpbnN0KQotCi0gICAg
ICAgICAgICBpZiBub3QgcmVzdWx0OgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1hdGNoQWdh
aW5zdCA9PSBtYXJrdXAKLSAgICAgICAgcmV0dXJuIHJlc3VsdAotCi1jbGFzcyBSZXN1bHRTZXQo
bGlzdCk6Ci0gICAgIiIiQSBSZXN1bHRTZXQgaXMganVzdCBhIGxpc3QgdGhhdCBrZWVwcyB0cmFj
ayBvZiB0aGUgU291cFN0cmFpbmVyCi0gICAgdGhhdCBjcmVhdGVkIGl0LiIiIgotICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBzb3VyY2UpOgotICAgICAgICBsaXN0Ll9faW5pdF9fKFtdKQotICAgICAg
ICBzZWxmLnNvdXJjZSA9IHNvdXJjZQotCi0jIE5vdywgc29tZSBoZWxwZXIgZnVuY3Rpb25zLgot
Ci1kZWYgaXNMaXN0KGwpOgotICAgICIiIkNvbnZlbmllbmNlIG1ldGhvZCB0aGF0IHdvcmtzIHdp
dGggYWxsIDIueCB2ZXJzaW9ucyBvZiBQeXRob24KLSAgICB0byBkZXRlcm1pbmUgd2hldGhlciBv
ciBub3Qgc29tZXRoaW5nIGlzIGxpc3RsaWtlLiIiIgotICAgIHJldHVybiAoKGhhc2F0dHIobCwg
J19faXRlcl9fJykgYW5kIG5vdCBpc1N0cmluZyhsKSkKLSAgICAgICAgICAgIG9yICh0eXBlKGwp
IGluICh0eXBlcy5MaXN0VHlwZSwgdHlwZXMuVHVwbGVUeXBlKSkpCi0KLWRlZiBpc1N0cmluZyhz
KToKLSAgICAiIiJDb252ZW5pZW5jZSBtZXRob2QgdGhhdCB3b3JrcyB3aXRoIGFsbCAyLnggdmVy
c2lvbnMgb2YgUHl0aG9uCi0gICAgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHNvbWV0aGlu
ZyBpcyBzdHJpbmdsaWtlLiIiIgotICAgIHRyeToKLSAgICAgICAgcmV0dXJuIGlzaW5zdGFuY2Uo
cywgdW5pY29kZSkgb3IgaXNpbnN0YW5jZShzLCBiYXNlc3RyaW5nKQotICAgIGV4Y2VwdCBOYW1l
RXJyb3I6Ci0gICAgICAgIHJldHVybiBpc2luc3RhbmNlKHMsIHN0cikKLQotZGVmIGJ1aWxkVGFn
TWFwKGRlZmF1bHQsICphcmdzKToKLSAgICAiIiJUdXJucyBhIGxpc3Qgb2YgbWFwcywgbGlzdHMs
IG9yIHNjYWxhcnMgaW50byBhIHNpbmdsZSBtYXAuCi0gICAgVXNlZCB0byBidWlsZCB0aGUgU0VM
Rl9DTE9TSU5HX1RBR1MsIE5FU1RBQkxFX1RBR1MsIGFuZAotICAgIE5FU1RJTkdfUkVTRVRfVEFH
UyBtYXBzIG91dCBvZiBsaXN0cyBhbmQgcGFydGlhbCBtYXBzLiIiIgotICAgIGJ1aWx0ID0ge30K
LSAgICBmb3IgcG9ydGlvbiBpbiBhcmdzOgotICAgICAgICBpZiBoYXNhdHRyKHBvcnRpb24sICdp
dGVtcycpOgotICAgICAgICAgICAgI0l0J3MgYSBtYXAuIE1lcmdlIGl0LgotICAgICAgICAgICAg
Zm9yIGssdiBpbiBwb3J0aW9uLml0ZW1zKCk6Ci0gICAgICAgICAgICAgICAgYnVpbHRba10gPSB2
Ci0gICAgICAgIGVsaWYgaXNMaXN0KHBvcnRpb24pIGFuZCBub3QgaXNTdHJpbmcocG9ydGlvbik6
Ci0gICAgICAgICAgICAjSXQncyBhIGxpc3QuIE1hcCBlYWNoIGl0ZW0gdG8gdGhlIGRlZmF1bHQu
Ci0gICAgICAgICAgICBmb3IgayBpbiBwb3J0aW9uOgotICAgICAgICAgICAgICAgIGJ1aWx0W2td
ID0gZGVmYXVsdAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgI0l0J3MgYSBzY2FsYXIuIE1h
cCBpdCB0byB0aGUgZGVmYXVsdC4KLSAgICAgICAgICAgIGJ1aWx0W3BvcnRpb25dID0gZGVmYXVs
dAotICAgIHJldHVybiBidWlsdAotCi0jIE5vdywgdGhlIHBhcnNlciBjbGFzc2VzLgotCi1jbGFz
cyBIVE1MUGFyc2VyQnVpbGRlcihIVE1MUGFyc2VyKToKLQotICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBzb3VwKToKLSAgICAgICAgSFRNTFBhcnNlci5fX2luaXRfXyhzZWxmKQotICAgICAgICBzZWxm
LnNvdXAgPSBzb3VwCi0KLSAgICAjIFdlIGluaGVyaXQgZmVlZCgpIGFuZCByZXNldCgpLgotCi0g
ICAgZGVmIGhhbmRsZV9zdGFydHRhZyhzZWxmLCBuYW1lLCBhdHRycyk6Ci0gICAgICAgIGlmIG5h
bWUgPT0gJ21ldGEnOgotICAgICAgICAgICAgc2VsZi5zb3VwLmV4dHJhY3RDaGFyc2V0RnJvbU1l
dGEoYXR0cnMpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLnNvdXAudW5rbm93bl9z
dGFydHRhZyhuYW1lLCBhdHRycykKLQotICAgIGRlZiBoYW5kbGVfZW5kdGFnKHNlbGYsIG5hbWUp
OgotICAgICAgICBzZWxmLnNvdXAudW5rbm93bl9lbmR0YWcobmFtZSkKLQotICAgIGRlZiBoYW5k
bGVfZGF0YShzZWxmLCBjb250ZW50KToKLSAgICAgICAgc2VsZi5zb3VwLmhhbmRsZV9kYXRhKGNv
bnRlbnQpCi0KLSAgICBkZWYgX3RvU3RyaW5nU3ViY2xhc3Moc2VsZiwgdGV4dCwgc3ViY2xhc3Mp
OgotICAgICAgICAiIiJBZGRzIGEgY2VydGFpbiBwaWVjZSBvZiB0ZXh0IHRvIHRoZSB0cmVlIGFz
IGEgTmF2aWdhYmxlU3RyaW5nCi0gICAgICAgIHN1YmNsYXNzLiIiIgotICAgICAgICBzZWxmLnNv
dXAuZW5kRGF0YSgpCi0gICAgICAgIHNlbGYuaGFuZGxlX2RhdGEodGV4dCkKLSAgICAgICAgc2Vs
Zi5zb3VwLmVuZERhdGEoc3ViY2xhc3MpCi0KLSAgICBkZWYgaGFuZGxlX3BpKHNlbGYsIHRleHQp
OgotICAgICAgICAiIiJIYW5kbGUgYSBwcm9jZXNzaW5nIGluc3RydWN0aW9uIGFzIGEgUHJvY2Vz
c2luZ0luc3RydWN0aW9uCi0gICAgICAgIG9iamVjdCwgcG9zc2libHkgb25lIHdpdGggYSAlU09V
UC1FTkNPRElORyUgc2xvdCBpbnRvIHdoaWNoIGFuCi0gICAgICAgIGVuY29kaW5nIHdpbGwgYmUg
cGx1Z2dlZCBsYXRlci4iIiIKLSAgICAgICAgaWYgdGV4dFs6M10gPT0gInhtbCI6Ci0gICAgICAg
ICAgICB0ZXh0ID0gdSJ4bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nJVNPVVAtRU5DT0RJTkcl
JyIKLSAgICAgICAgc2VsZi5fdG9TdHJpbmdTdWJjbGFzcyh0ZXh0LCBQcm9jZXNzaW5nSW5zdHJ1
Y3Rpb24pCi0KLSAgICBkZWYgaGFuZGxlX2NvbW1lbnQoc2VsZiwgdGV4dCk6Ci0gICAgICAgICJI
YW5kbGUgY29tbWVudHMgYXMgQ29tbWVudCBvYmplY3RzLiIKLSAgICAgICAgc2VsZi5fdG9TdHJp
bmdTdWJjbGFzcyh0ZXh0LCBDb21tZW50KQotCi0gICAgZGVmIGhhbmRsZV9jaGFycmVmKHNlbGYs
IHJlZik6Ci0gICAgICAgICJIYW5kbGUgY2hhcmFjdGVyIHJlZmVyZW5jZXMgYXMgZGF0YS4iCi0g
ICAgICAgIGlmIHNlbGYuc291cC5jb252ZXJ0RW50aXRpZXM6Ci0gICAgICAgICAgICBkYXRhID0g
dW5pY2hyKGludChyZWYpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZGF0YSA9ICcmIyVz
OycgJSByZWYKLSAgICAgICAgc2VsZi5oYW5kbGVfZGF0YShkYXRhKQotCi0gICAgZGVmIGhhbmRs
ZV9lbnRpdHlyZWYoc2VsZiwgcmVmKToKLSAgICAgICAgIiIiSGFuZGxlIGVudGl0eSByZWZlcmVu
Y2VzIGFzIGRhdGEsIHBvc3NpYmx5IGNvbnZlcnRpbmcga25vd24KLSAgICAgICAgSFRNTCBhbmQv
b3IgWE1MIGVudGl0eSByZWZlcmVuY2VzIHRvIHRoZSBjb3JyZXNwb25kaW5nIFVuaWNvZGUKLSAg
ICAgICAgY2hhcmFjdGVycy4iIiIKLSAgICAgICAgZGF0YSA9IE5vbmUKLSAgICAgICAgaWYgc2Vs
Zi5zb3VwLmNvbnZlcnRIVE1MRW50aXRpZXM6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAg
ICAgICAgZGF0YSA9IHVuaWNocihuYW1lMmNvZGVwb2ludFtyZWZdKQotICAgICAgICAgICAgZXhj
ZXB0IEtleUVycm9yOgotICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICBpZiBub3QgZGF0
YSBhbmQgc2VsZi5zb3VwLmNvbnZlcnRYTUxFbnRpdGllczoKLSAgICAgICAgICAgICAgICBkYXRh
ID0gc2VsZi5zb3VwLlhNTF9FTlRJVElFU19UT19TUEVDSUFMX0NIQVJTLmdldChyZWYpCi0KLSAg
ICAgICAgaWYgbm90IGRhdGEgYW5kIHNlbGYuc291cC5jb252ZXJ0SFRNTEVudGl0aWVzIGFuZCBc
Ci0gICAgICAgICAgICBub3Qgc2VsZi5zb3VwLlhNTF9FTlRJVElFU19UT19TUEVDSUFMX0NIQVJT
LmdldChyZWYpOgotICAgICAgICAgICAgICAgICMgVE9ETzogV2UndmUgZ290IGEgcHJvYmxlbSBo
ZXJlLiBXZSdyZSB0b2xkIHRoaXMgaXMKLSAgICAgICAgICAgICAgICAjIGFuIGVudGl0eSByZWZl
cmVuY2UsIGJ1dCBpdCdzIG5vdCBhbiBYTUwgZW50aXR5Ci0gICAgICAgICAgICAgICAgIyByZWZl
cmVuY2Ugb3IgYW4gSFRNTCBlbnRpdHkgcmVmZXJlbmNlLiBOb25ldGhlbGVzcywKLSAgICAgICAg
ICAgICAgICAjIHRoZSBsb2dpY2FsIHRoaW5nIHRvIGRvIGlzIHRvIHBhc3MgaXQgdGhyb3VnaCBh
cyBhbgotICAgICAgICAgICAgICAgICMgdW5yZWNvZ25pemVkIGVudGl0eSByZWZlcmVuY2UuCi0g
ICAgICAgICAgICAgICAgIwotICAgICAgICAgICAgICAgICMgRXhjZXB0OiB3aGVuIHRoZSBpbnB1
dCBpcyAiJmNhcm9sOyIgdGhpcyBmdW5jdGlvbgotICAgICAgICAgICAgICAgICMgd2lsbCBiZSBj
YWxsZWQgd2l0aCBpbnB1dCAiY2Fyb2wiLiBXaGVuIHRoZSBpbnB1dCBpcwotICAgICAgICAgICAg
ICAgICMgIkFUJlQiLCB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdpdGggaW5wdXQKLSAg
ICAgICAgICAgICAgICAjICJUIi4gV2UgaGF2ZSBubyB3YXkgb2Yga25vd2luZyB3aGV0aGVyIGEg
c2VtaWNvbG9uCi0gICAgICAgICAgICAgICAgIyB3YXMgcHJlc2VudCBvcmlnaW5hbGx5LCBzbyB3
ZSBkb24ndCBrbm93IHdoZXRoZXIKLSAgICAgICAgICAgICAgICAjIHRoaXMgaXMgYW4gdW5rbm93
biBlbnRpdHkgb3IganVzdCBhIG1pc3BsYWNlZAotICAgICAgICAgICAgICAgICMgYW1wZXJzYW5k
LgotICAgICAgICAgICAgICAgICMKLSAgICAgICAgICAgICAgICAjIFRoZSBtb3JlIGNvbW1vbiBj
YXNlIGlzIGEgbWlzcGxhY2VkIGFtcGVyc2FuZCwgc28gSQotICAgICAgICAgICAgICAgICMgZXNj
YXBlIHRoZSBhbXBlcnNhbmQgYW5kIG9taXQgdGhlIHRyYWlsaW5nIHNlbWljb2xvbi4KLSAgICAg
ICAgICAgICAgICBkYXRhID0gIiZhbXA7JXMiICUgcmVmCi0gICAgICAgIGlmIG5vdCBkYXRhOgot
ICAgICAgICAgICAgIyBUaGlzIGNhc2UgaXMgZGlmZmVyZW50IGZyb20gdGhlIG9uZSBhYm92ZSwg
YmVjYXVzZSB3ZQotICAgICAgICAgICAgIyBoYXZlbid0IGFscmVhZHkgZ29uZSB0aHJvdWdoIGEg
c3VwcG9zZWRseSBjb21wcmVoZW5zaXZlCi0gICAgICAgICAgICAjIG1hcHBpbmcgb2YgZW50aXRp
ZXMgdG8gVW5pY29kZSBjaGFyYWN0ZXJzLiBXZSBtaWdodCBub3QKLSAgICAgICAgICAgICMgaGF2
ZSBnb25lIHRocm91Z2ggYW55IG1hcHBpbmcgYXQgYWxsLiBTbyB0aGUgY2hhbmNlcyBhcmUKLSAg
ICAgICAgICAgICMgdmVyeSBoaWdoIHRoYXQgdGhpcyBpcyBhIHJlYWwgZW50aXR5LCBhbmQgbm90
IGEKLSAgICAgICAgICAgICMgbWlzcGxhY2VkIGFtcGVyc2FuZC4KLSAgICAgICAgICAgIGRhdGEg
PSAiJiVzOyIgJSByZWYKLSAgICAgICAgc2VsZi5oYW5kbGVfZGF0YShkYXRhKQotCi0gICAgZGVm
IGhhbmRsZV9kZWNsKHNlbGYsIGRhdGEpOgotICAgICAgICAiSGFuZGxlIERPQ1RZUEVzIGFuZCB0
aGUgbGlrZSBhcyBEZWNsYXJhdGlvbiBvYmplY3RzLiIKLSAgICAgICAgc2VsZi5fdG9TdHJpbmdT
dWJjbGFzcyhkYXRhLCBEZWNsYXJhdGlvbikKLQotICAgIGRlZiBwYXJzZV9kZWNsYXJhdGlvbihz
ZWxmLCBpKToKLSAgICAgICAgIiIiVHJlYXQgYSBib2d1cyBTR01MIGRlY2xhcmF0aW9uIGFzIHJh
dyBkYXRhLiBUcmVhdCBhIENEQVRBCi0gICAgICAgIGRlY2xhcmF0aW9uIGFzIGEgQ0RhdGEgb2Jq
ZWN0LiIiIgotICAgICAgICBqID0gTm9uZQotICAgICAgICBpZiBzZWxmLnJhd2RhdGFbaTppKzld
ID09ICc8IVtDREFUQVsnOgotICAgICAgICAgICAgIGsgPSBzZWxmLnJhd2RhdGEuZmluZCgnXV0+
JywgaSkKLSAgICAgICAgICAgICBpZiBrID09IC0xOgotICAgICAgICAgICAgICAgICBrID0gbGVu
KHNlbGYucmF3ZGF0YSkKLSAgICAgICAgICAgICBkYXRhID0gc2VsZi5yYXdkYXRhW2krOTprXQot
ICAgICAgICAgICAgIGogPSBrKzMKLSAgICAgICAgICAgICBzZWxmLl90b1N0cmluZ1N1YmNsYXNz
KGRhdGEsIENEYXRhKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAg
ICAgICAgIGogPSBIVE1MUGFyc2VyLnBhcnNlX2RlY2xhcmF0aW9uKHNlbGYsIGkpCi0gICAgICAg
ICAgICBleGNlcHQgSFRNTFBhcnNlRXJyb3I6Ci0gICAgICAgICAgICAgICAgdG9IYW5kbGUgPSBz
ZWxmLnJhd2RhdGFbaTpdCi0gICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfZGF0YSh0b0hhbmRs
ZSkKLSAgICAgICAgICAgICAgICBqID0gaSArIGxlbih0b0hhbmRsZSkKLSAgICAgICAgcmV0dXJu
IGoKLQotCi1jbGFzcyBCZWF1dGlmdWxTdG9uZVNvdXAoVGFnKToKLQotICAgICIiIlRoaXMgY2xh
c3MgY29udGFpbnMgdGhlIGJhc2ljIHBhcnNlciBhbmQgc2VhcmNoIGNvZGUuIEl0IGRlZmluZXMK
LSAgICBhIHBhcnNlciB0aGF0IGtub3dzIG5vdGhpbmcgYWJvdXQgdGFnIGJlaGF2aW9yIGV4Y2Vw
dCBmb3IgdGhlCi0gICAgZm9sbG93aW5nOgotCi0gICAgICBZb3UgY2FuJ3QgY2xvc2UgYSB0YWcg
d2l0aG91dCBjbG9zaW5nIGFsbCB0aGUgdGFncyBpdCBlbmNsb3Nlcy4KLSAgICAgIFRoYXQgaXMs
ICI8Zm9vPjxiYXI+PC9mb28+IiBhY3R1YWxseSBtZWFucwotICAgICAgIjxmb28+PGJhcj48L2Jh
cj48L2Zvbz4iLgotCi0gICAgW0Fub3RoZXIgcG9zc2libGUgZXhwbGFuYXRpb24gaXMgIjxmb28+
PGJhciAvPjwvZm9vPiIsIGJ1dCBzaW5jZQotICAgIHRoaXMgY2xhc3MgZGVmaW5lcyBubyBTRUxG
X0NMT1NJTkdfVEFHUywgaXQgd2lsbCBuZXZlciB1c2UgdGhhdAotICAgIGV4cGxhbmF0aW9uLl0K
LQotICAgIFRoaXMgY2xhc3MgaXMgdXNlZnVsIGZvciBwYXJzaW5nIFhNTCBvciBtYWRlLXVwIG1h
cmt1cCBsYW5ndWFnZXMsCi0gICAgb3Igd2hlbiBCZWF1dGlmdWxTb3VwIG1ha2VzIGFuIGFzc3Vt
cHRpb24gY291bnRlciB0byB3aGF0IHlvdSB3ZXJlCi0gICAgZXhwZWN0aW5nLiIiIgotCi0gICAg
U0VMRl9DTE9TSU5HX1RBR1MgPSB7fQotICAgIE5FU1RBQkxFX1RBR1MgPSB7fQotICAgIFJFU0VU
X05FU1RJTkdfVEFHUyA9IHt9Ci0gICAgUVVPVEVfVEFHUyA9IHt9Ci0gICAgUFJFU0VSVkVfV0hJ
VEVTUEFDRV9UQUdTID0gW10KLQotICAgIE1BUktVUF9NQVNTQUdFID0gWyhyZS5jb21waWxlKCco
PFtePD5dKikvPicpLAotICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGEgeDogeC5ncm91cCgx
KSArICcgLz4nKSwKLSAgICAgICAgICAgICAgICAgICAgICAocmUuY29tcGlsZSgnPCFccysoW148
Pl0qKT4nKSwKLSAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhIHg6ICc8IScgKyB4Lmdyb3Vw
KDEpICsgJz4nKQotICAgICAgICAgICAgICAgICAgICAgIF0KLQotICAgIFJPT1RfVEFHX05BTUUg
PSB1J1tkb2N1bWVudF0nCi0KLSAgICBIVE1MX0VOVElUSUVTID0gImh0bWwiCi0gICAgWE1MX0VO
VElUSUVTID0gInhtbCIKLSAgICBYSFRNTF9FTlRJVElFUyA9ICJ4aHRtbCIKLSAgICAjIFRPRE86
IFRoaXMgb25seSBleGlzdHMgZm9yIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5Ci0gICAgQUxMX0VO
VElUSUVTID0gWEhUTUxfRU5USVRJRVMKLQotICAgICMgVXNlZCB3aGVuIGRldGVybWluaW5nIHdo
ZXRoZXIgYSB0ZXh0IG5vZGUgaXMgYWxsIHdoaXRlc3BhY2UgYW5kCi0gICAgIyBjYW4gYmUgcmVw
bGFjZWQgd2l0aCBhIHNpbmdsZSBzcGFjZS4gQSB0ZXh0IG5vZGUgdGhhdCBjb250YWlucwotICAg
ICMgZmFuY3kgVW5pY29kZSBzcGFjZXMgKHVzdWFsbHkgbm9uLWJyZWFraW5nKSBzaG91bGQgYmUg
bGVmdAotICAgICMgYWxvbmUuCi0gICAgU1RSSVBfQVNDSUlfU1BBQ0VTID0geyA5OiBOb25lLCAx
MDogTm9uZSwgMTI6IE5vbmUsIDEzOiBOb25lLCAzMjogTm9uZSwgfQotCi0gICAgZGVmIF9faW5p
dF9fKHNlbGYsIG1hcmt1cD0iIiwgcGFyc2VPbmx5VGhlc2U9Tm9uZSwgZnJvbUVuY29kaW5nPU5v
bmUsCi0gICAgICAgICAgICAgICAgIG1hcmt1cE1hc3NhZ2U9VHJ1ZSwgc21hcnRRdW90ZXNUbz1Y
TUxfRU5USVRJRVMsCi0gICAgICAgICAgICAgICAgIGNvbnZlcnRFbnRpdGllcz1Ob25lLCBzZWxm
Q2xvc2luZ1RhZ3M9Tm9uZSwgaXNIVE1MPUZhbHNlLAotICAgICAgICAgICAgICAgICBidWlsZGVy
PUhUTUxQYXJzZXJCdWlsZGVyKToKLSAgICAgICAgIiIiVGhlIFNvdXAgb2JqZWN0IGlzIGluaXRp
YWxpemVkIGFzIHRoZSAncm9vdCB0YWcnLCBhbmQgdGhlCi0gICAgICAgIHByb3ZpZGVkIG1hcmt1
cCAod2hpY2ggY2FuIGJlIGEgc3RyaW5nIG9yIGEgZmlsZS1saWtlIG9iamVjdCkKLSAgICAgICAg
aXMgZmVkIGludG8gdGhlIHVuZGVybHlpbmcgcGFyc2VyLgotCi0gICAgICAgIEhUTUxQYXJzZXIg
d2lsbCBwcm9jZXNzIG1vc3QgYmFkIEhUTUwsIGFuZCB0aGUgQmVhdXRpZnVsU291cAotICAgICAg
ICBjbGFzcyBoYXMgc29tZSB0cmlja3MgZm9yIGRlYWxpbmcgd2l0aCBzb21lIEhUTUwgdGhhdCBr
aWxscwotICAgICAgICBIVE1MUGFyc2VyLCBidXQgQmVhdXRpZnVsIFNvdXAgY2FuIG5vbmV0aGVs
ZXNzIGNob2tlIG9yIGxvc2UgZGF0YQotICAgICAgICBpZiB5b3VyIGRhdGEgdXNlcyBzZWxmLWNs
b3NpbmcgdGFncyBvciBkZWNsYXJhdGlvbnMKLSAgICAgICAgaW5jb3JyZWN0bHkuCi0KLSAgICAg
ICAgQnkgZGVmYXVsdCwgQmVhdXRpZnVsIFNvdXAgdXNlcyByZWdleGVzIHRvIHNhbml0aXplIGlu
cHV0LAotICAgICAgICBhdm9pZGluZyB0aGUgdmFzdCBtYWpvcml0eSBvZiB0aGVzZSBwcm9ibGVt
cy4gSWYgdGhlIHByb2JsZW1zCi0gICAgICAgIGRvbid0IGFwcGx5IHRvIHlvdSwgcGFzcyBpbiBG
YWxzZSBmb3IgbWFya3VwTWFzc2FnZSwgYW5kCi0gICAgICAgIHlvdSdsbCBnZXQgYmV0dGVyIHBl
cmZvcm1hbmNlLgotCi0gICAgICAgIFRoZSBkZWZhdWx0IHBhcnNlciBtYXNzYWdlIHRlY2huaXF1
ZXMgZml4IHRoZSB0d28gbW9zdCBjb21tb24KLSAgICAgICAgaW5zdGFuY2VzIG9mIGludmFsaWQg
SFRNTCB0aGF0IGNob2tlIEhUTUxQYXJzZXI6Ci0KLSAgICAgICAgIDxici8+IChObyBzcGFjZSBi
ZXR3ZWVuIG5hbWUgb2YgY2xvc2luZyB0YWcgYW5kIHRhZyBjbG9zZSkKLSAgICAgICAgIDwhIC0t
Q29tbWVudC0tPiAoRXh0cmFuZW91cyB3aGl0ZXNwYWNlIGluIGRlY2xhcmF0aW9uKQotCi0gICAg
ICAgIFlvdSBjYW4gcGFzcyBpbiBhIGN1c3RvbSBsaXN0IG9mIChSRSBvYmplY3QsIHJlcGxhY2Ug
bWV0aG9kKQotICAgICAgICB0dXBsZXMgdG8gZ2V0IEJlYXV0aWZ1bCBTb3VwIHRvIHNjcnViIHlv
dXIgaW5wdXQgdGhlIHdheSB5b3UKLSAgICAgICAgd2FudC4iIiIKLQotICAgICAgICBzZWxmLnBh
cnNlT25seVRoZXNlID0gcGFyc2VPbmx5VGhlc2UKLSAgICAgICAgc2VsZi5mcm9tRW5jb2Rpbmcg
PSBmcm9tRW5jb2RpbmcKLSAgICAgICAgc2VsZi5zbWFydFF1b3Rlc1RvID0gc21hcnRRdW90ZXNU
bwotICAgICAgICBzZWxmLmNvbnZlcnRFbnRpdGllcyA9IGNvbnZlcnRFbnRpdGllcwotICAgICAg
ICAjIFNldCB0aGUgcnVsZXMgZm9yIGhvdyB3ZSdsbCBkZWFsIHdpdGggdGhlIGVudGl0aWVzIHdl
Ci0gICAgICAgICMgZW5jb3VudGVyCi0gICAgICAgIGlmIHNlbGYuY29udmVydEVudGl0aWVzOgot
ICAgICAgICAgICAgIyBJdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8gY29udmVydCBlbmNvZGVkIGNo
YXJhY3RlcnMgdG8KLSAgICAgICAgICAgICMgZW50aXRpZXMgZXZlbiB3aGlsZSB5b3UncmUgY29u
dmVydGluZyBlbnRpdGllcyB0byBVbmljb2RlLgotICAgICAgICAgICAgIyBKdXN0IGNvbnZlcnQg
aXQgYWxsIHRvIFVuaWNvZGUuCi0gICAgICAgICAgICBzZWxmLnNtYXJ0UXVvdGVzVG8gPSBOb25l
Ci0gICAgICAgICAgICBpZiBjb252ZXJ0RW50aXRpZXMgPT0gc2VsZi5IVE1MX0VOVElUSUVTOgot
ICAgICAgICAgICAgICAgIHNlbGYuY29udmVydFhNTEVudGl0aWVzID0gRmFsc2UKLSAgICAgICAg
ICAgICAgICBzZWxmLmNvbnZlcnRIVE1MRW50aXRpZXMgPSBUcnVlCi0gICAgICAgICAgICAgICAg
c2VsZi5lc2NhcGVVbnJlY29nbml6ZWRFbnRpdGllcyA9IFRydWUKLSAgICAgICAgICAgIGVsaWYg
Y29udmVydEVudGl0aWVzID09IHNlbGYuWEhUTUxfRU5USVRJRVM6Ci0gICAgICAgICAgICAgICAg
c2VsZi5jb252ZXJ0WE1MRW50aXRpZXMgPSBUcnVlCi0gICAgICAgICAgICAgICAgc2VsZi5jb252
ZXJ0SFRNTEVudGl0aWVzID0gVHJ1ZQotICAgICAgICAgICAgICAgIHNlbGYuZXNjYXBlVW5yZWNv
Z25pemVkRW50aXRpZXMgPSBGYWxzZQotICAgICAgICAgICAgZWxpZiBjb252ZXJ0RW50aXRpZXMg
PT0gc2VsZi5YTUxfRU5USVRJRVM6Ci0gICAgICAgICAgICAgICAgc2VsZi5jb252ZXJ0WE1MRW50
aXRpZXMgPSBUcnVlCi0gICAgICAgICAgICAgICAgc2VsZi5jb252ZXJ0SFRNTEVudGl0aWVzID0g
RmFsc2UKLSAgICAgICAgICAgICAgICBzZWxmLmVzY2FwZVVucmVjb2duaXplZEVudGl0aWVzID0g
RmFsc2UKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuY29udmVydFhNTEVudGl0aWVz
ID0gRmFsc2UKLSAgICAgICAgICAgIHNlbGYuY29udmVydEhUTUxFbnRpdGllcyA9IEZhbHNlCi0g
ICAgICAgICAgICBzZWxmLmVzY2FwZVVucmVjb2duaXplZEVudGl0aWVzID0gRmFsc2UKLQotICAg
ICAgICBzZWxmLmluc3RhbmNlU2VsZkNsb3NpbmdUYWdzID0gYnVpbGRUYWdNYXAoTm9uZSwgc2Vs
ZkNsb3NpbmdUYWdzKQotICAgICAgICBzZWxmLmJ1aWxkZXIgPSBidWlsZGVyKHNlbGYpCi0gICAg
ICAgIHNlbGYucmVzZXQoKQotCi0gICAgICAgIGlmIGhhc2F0dHIobWFya3VwLCAncmVhZCcpOiAg
ICAgICAgIyBJdCdzIGEgZmlsZS10eXBlIG9iamVjdC4KLSAgICAgICAgICAgIG1hcmt1cCA9IG1h
cmt1cC5yZWFkKCkKLSAgICAgICAgc2VsZi5tYXJrdXAgPSBtYXJrdXAKLSAgICAgICAgc2VsZi5t
YXJrdXBNYXNzYWdlID0gbWFya3VwTWFzc2FnZQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBz
ZWxmLl9mZWVkKGlzSFRNTD1pc0hUTUwpCi0gICAgICAgIGV4Y2VwdCBTdG9wUGFyc2luZzoKLSAg
ICAgICAgICAgIHBhc3MKLSAgICAgICAgc2VsZi5tYXJrdXAgPSBOb25lICAgICAgICAgICAgICAg
ICAjIFRoZSBtYXJrdXAgY2FuIG5vdyBiZSBHQ2VkLgotICAgICAgICBzZWxmLmJ1aWxkZXIgPSBO
b25lICAgICAgICAgICAgICAgICMgU28gY2FuIHRoZSBidWlsZGVyLgotCi0gICAgZGVmIF9mZWVk
KHNlbGYsIGluRG9jdW1lbnRFbmNvZGluZz1Ob25lLCBpc0hUTUw9RmFsc2UpOgotICAgICAgICAj
IENvbnZlcnQgdGhlIGRvY3VtZW50IHRvIFVuaWNvZGUuCi0gICAgICAgIG1hcmt1cCA9IHNlbGYu
bWFya3VwCi0gICAgICAgIGlmIGlzaW5zdGFuY2UobWFya3VwLCB1bmljb2RlKToKLSAgICAgICAg
ICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYsICdvcmlnaW5hbEVuY29kaW5nJyk6Ci0gICAgICAgICAg
ICAgICAgc2VsZi5vcmlnaW5hbEVuY29kaW5nID0gTm9uZQotICAgICAgICBlbHNlOgotICAgICAg
ICAgICAgZGFtbWl0ID0gVW5pY29kZURhbW1pdFwKLSAgICAgICAgICAgICAgICAgICAgIChtYXJr
dXAsIFtzZWxmLmZyb21FbmNvZGluZywgaW5Eb2N1bWVudEVuY29kaW5nXSwKLSAgICAgICAgICAg
ICAgICAgICAgICBzbWFydFF1b3Rlc1RvPXNlbGYuc21hcnRRdW90ZXNUbywgaXNIVE1MPWlzSFRN
TCkKLSAgICAgICAgICAgIG1hcmt1cCA9IGRhbW1pdC51bmljb2RlCi0gICAgICAgICAgICBzZWxm
Lm9yaWdpbmFsRW5jb2RpbmcgPSBkYW1taXQub3JpZ2luYWxFbmNvZGluZwotICAgICAgICAgICAg
c2VsZi5kZWNsYXJlZEhUTUxFbmNvZGluZyA9IGRhbW1pdC5kZWNsYXJlZEhUTUxFbmNvZGluZwot
ICAgICAgICBpZiBtYXJrdXA6Ci0gICAgICAgICAgICBpZiBzZWxmLm1hcmt1cE1hc3NhZ2U6Ci0g
ICAgICAgICAgICAgICAgaWYgbm90IGlzTGlzdChzZWxmLm1hcmt1cE1hc3NhZ2UpOgotICAgICAg
ICAgICAgICAgICAgICBzZWxmLm1hcmt1cE1hc3NhZ2UgPSBzZWxmLk1BUktVUF9NQVNTQUdFCi0g
ICAgICAgICAgICAgICAgZm9yIGZpeCwgbSBpbiBzZWxmLm1hcmt1cE1hc3NhZ2U6Ci0gICAgICAg
ICAgICAgICAgICAgIG1hcmt1cCA9IGZpeC5zdWIobSwgbWFya3VwKQotICAgICAgICAgICAgICAg
ICMgVE9ETzogV2UgZ2V0IHJpZCBvZiBtYXJrdXBNYXNzYWdlIHNvIHRoYXQgdGhlCi0gICAgICAg
ICAgICAgICAgIyBzb3VwIG9iamVjdCBjYW4gYmUgZGVlcGNvcGllZCBsYXRlciBvbi4gU29tZQot
ICAgICAgICAgICAgICAgICMgUHl0aG9uIGluc3RhbGxhdGlvbnMgY2FuJ3QgY29weSByZWdleGVz
LiBJZiBhbnlvbmUKLSAgICAgICAgICAgICAgICAjIHdhcyByZWx5aW5nIG9uIHRoZSBleGlzdGVu
Y2Ugb2YgbWFya3VwTWFzc2FnZSwgdGhpcwotICAgICAgICAgICAgICAgICMgbWlnaHQgY2F1c2Ug
cHJvYmxlbXMuCi0gICAgICAgICAgICAgICAgZGVsKHNlbGYubWFya3VwTWFzc2FnZSkKLSAgICAg
ICAgc2VsZi5idWlsZGVyLnJlc2V0KCkKLQotICAgICAgICBzZWxmLmJ1aWxkZXIuZmVlZChtYXJr
dXApCi0gICAgICAgICMgQ2xvc2Ugb3V0IGFueSB1bmZpbmlzaGVkIHN0cmluZ3MgYW5kIGNsb3Nl
IGFsbCB0aGUgb3BlbiB0YWdzLgotICAgICAgICBzZWxmLmVuZERhdGEoKQotICAgICAgICB3aGls
ZSBzZWxmLmN1cnJlbnRUYWcubmFtZSAhPSBzZWxmLlJPT1RfVEFHX05BTUU6Ci0gICAgICAgICAg
ICBzZWxmLnBvcFRhZygpCi0KLSAgICBkZWYgaXNTZWxmQ2xvc2luZ1RhZyhzZWxmLCBuYW1lKToK
LSAgICAgICAgIiIiUmV0dXJucyB0cnVlIGlmZiB0aGUgZ2l2ZW4gc3RyaW5nIGlzIHRoZSBuYW1l
IG9mIGEKLSAgICAgICAgc2VsZi1jbG9zaW5nIHRhZyBhY2NvcmRpbmcgdG8gdGhpcyBwYXJzZXIu
IiIiCi0gICAgICAgIHJldHVybiBzZWxmLlNFTEZfQ0xPU0lOR19UQUdTLmhhc19rZXkobmFtZSkg
XAotICAgICAgICAgICAgICAgb3Igc2VsZi5pbnN0YW5jZVNlbGZDbG9zaW5nVGFncy5oYXNfa2V5
KG5hbWUpCi0KLSAgICBkZWYgcmVzZXQoc2VsZik6Ci0gICAgICAgIFRhZy5fX2luaXRfXyhzZWxm
LCBzZWxmLCBzZWxmLlJPT1RfVEFHX05BTUUpCi0gICAgICAgIHNlbGYuaGlkZGVuID0gMQotICAg
ICAgICBzZWxmLmJ1aWxkZXIucmVzZXQoKQotICAgICAgICBzZWxmLmN1cnJlbnREYXRhID0gW10K
LSAgICAgICAgc2VsZi5jdXJyZW50VGFnID0gTm9uZQotICAgICAgICBzZWxmLnRhZ1N0YWNrID0g
W10KLSAgICAgICAgc2VsZi5xdW90ZVN0YWNrID0gW10KLSAgICAgICAgc2VsZi5wdXNoVGFnKHNl
bGYpCi0KLSAgICBkZWYgcG9wVGFnKHNlbGYpOgotICAgICAgICB0YWcgPSBzZWxmLnRhZ1N0YWNr
LnBvcCgpCi0gICAgICAgICMgVGFncyB3aXRoIGp1c3Qgb25lIHN0cmluZy1vd25pbmcgY2hpbGQg
Z2V0IHRoZSBjaGlsZCBhcyBhCi0gICAgICAgICMgJ3N0cmluZycgcHJvcGVydHksIHNvIHRoYXQg
c291cC50YWcuc3RyaW5nIGlzIHNob3J0aGFuZCBmb3IKLSAgICAgICAgIyBzb3VwLnRhZy5jb250
ZW50c1swXQotICAgICAgICBpZiBsZW4oc2VsZi5jdXJyZW50VGFnLmNvbnRlbnRzKSA9PSAxIGFu
ZCBcCi0gICAgICAgICAgIGlzaW5zdGFuY2Uoc2VsZi5jdXJyZW50VGFnLmNvbnRlbnRzWzBdLCBO
YXZpZ2FibGVTdHJpbmcpOgotICAgICAgICAgICAgc2VsZi5jdXJyZW50VGFnLnN0cmluZyA9IHNl
bGYuY3VycmVudFRhZy5jb250ZW50c1swXQotCi0gICAgICAgICNwcmludCAiUG9wIiwgdGFnLm5h
bWUKLSAgICAgICAgaWYgc2VsZi50YWdTdGFjazoKLSAgICAgICAgICAgIHNlbGYuY3VycmVudFRh
ZyA9IHNlbGYudGFnU3RhY2tbLTFdCi0gICAgICAgIHJldHVybiBzZWxmLmN1cnJlbnRUYWcKLQot
ICAgIGRlZiBwdXNoVGFnKHNlbGYsIHRhZyk6Ci0gICAgICAgICNwcmludCAiUHVzaCIsIHRhZy5u
YW1lCi0gICAgICAgIGlmIHNlbGYuY3VycmVudFRhZzoKLSAgICAgICAgICAgIHNlbGYuY3VycmVu
dFRhZy5jb250ZW50cy5hcHBlbmQodGFnKQotICAgICAgICBzZWxmLnRhZ1N0YWNrLmFwcGVuZCh0
YWcpCi0gICAgICAgIHNlbGYuY3VycmVudFRhZyA9IHNlbGYudGFnU3RhY2tbLTFdCi0KLSAgICBk
ZWYgZW5kRGF0YShzZWxmLCBjb250YWluZXJDbGFzcz1OYXZpZ2FibGVTdHJpbmcpOgotICAgICAg
ICBpZiBzZWxmLmN1cnJlbnREYXRhOgotICAgICAgICAgICAgY3VycmVudERhdGEgPSB1Jycuam9p
bihzZWxmLmN1cnJlbnREYXRhKQotICAgICAgICAgICAgaWYgKGN1cnJlbnREYXRhLnRyYW5zbGF0
ZShzZWxmLlNUUklQX0FTQ0lJX1NQQUNFUykgPT0gJycgYW5kCi0gICAgICAgICAgICAgICAgbm90
IHNldChbdGFnLm5hbWUgZm9yIHRhZyBpbiBzZWxmLnRhZ1N0YWNrXSkuaW50ZXJzZWN0aW9uKAot
ICAgICAgICAgICAgICAgICAgICBzZWxmLlBSRVNFUlZFX1dISVRFU1BBQ0VfVEFHUykpOgotICAg
ICAgICAgICAgICAgIGlmICdcbicgaW4gY3VycmVudERhdGE6Ci0gICAgICAgICAgICAgICAgICAg
IGN1cnJlbnREYXRhID0gJ1xuJwotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAg
ICAgICAgIGN1cnJlbnREYXRhID0gJyAnCi0gICAgICAgICAgICBzZWxmLmN1cnJlbnREYXRhID0g
W10KLSAgICAgICAgICAgIGlmIHNlbGYucGFyc2VPbmx5VGhlc2UgYW5kIGxlbihzZWxmLnRhZ1N0
YWNrKSA8PSAxIGFuZCBcCi0gICAgICAgICAgICAgICAgICAgKG5vdCBzZWxmLnBhcnNlT25seVRo
ZXNlLnRleHQgb3IgXAotICAgICAgICAgICAgICAgICAgICBub3Qgc2VsZi5wYXJzZU9ubHlUaGVz
ZS5zZWFyY2goY3VycmVudERhdGEpKToKLSAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAg
ICAgIG8gPSBjb250YWluZXJDbGFzcyhjdXJyZW50RGF0YSkKLSAgICAgICAgICAgIG8uc2V0dXAo
c2VsZi5jdXJyZW50VGFnLCBzZWxmLnByZXZpb3VzKQotICAgICAgICAgICAgaWYgc2VsZi5wcmV2
aW91czoKLSAgICAgICAgICAgICAgICBzZWxmLnByZXZpb3VzLm5leHQgPSBvCi0gICAgICAgICAg
ICBzZWxmLnByZXZpb3VzID0gbwotICAgICAgICAgICAgc2VsZi5jdXJyZW50VGFnLmNvbnRlbnRz
LmFwcGVuZChvKQotCi0KLSAgICBkZWYgX3BvcFRvVGFnKHNlbGYsIG5hbWUsIGluY2x1c2l2ZVBv
cD1UcnVlKToKLSAgICAgICAgIiIiUG9wcyB0aGUgdGFnIHN0YWNrIHVwIHRvIGFuZCBpbmNsdWRp
bmcgdGhlIG1vc3QgcmVjZW50Ci0gICAgICAgIGluc3RhbmNlIG9mIHRoZSBnaXZlbiB0YWcuIElm
IGluY2x1c2l2ZVBvcCBpcyBmYWxzZSwgcG9wcyB0aGUgdGFnCi0gICAgICAgIHN0YWNrIHVwIHRv
IGJ1dCAqbm90KiBpbmNsdWRpbmcgdGhlIG1vc3QgcmVjZW50IGluc3RxYW5jZSBvZgotICAgICAg
ICB0aGUgZ2l2ZW4gdGFnLiIiIgotICAgICAgICAjcHJpbnQgIlBvcHBpbmcgdG8gJXMiICUgbmFt
ZQotICAgICAgICBpZiBuYW1lID09IHNlbGYuUk9PVF9UQUdfTkFNRToKLSAgICAgICAgICAgIHJl
dHVybgotCi0gICAgICAgIG51bVBvcHMgPSAwCi0gICAgICAgIG1vc3RSZWNlbnRUYWcgPSBOb25l
Ci0gICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihzZWxmLnRhZ1N0YWNrKS0xLCAwLCAtMSk6Ci0g
ICAgICAgICAgICBpZiBuYW1lID09IHNlbGYudGFnU3RhY2tbaV0ubmFtZToKLSAgICAgICAgICAg
ICAgICBudW1Qb3BzID0gbGVuKHNlbGYudGFnU3RhY2spLWkKLSAgICAgICAgICAgICAgICBicmVh
awotICAgICAgICBpZiBub3QgaW5jbHVzaXZlUG9wOgotICAgICAgICAgICAgbnVtUG9wcyA9IG51
bVBvcHMgLSAxCi0KLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbnVtUG9wcyk6Ci0gICAgICAg
ICAgICBtb3N0UmVjZW50VGFnID0gc2VsZi5wb3BUYWcoKQotICAgICAgICByZXR1cm4gbW9zdFJl
Y2VudFRhZwotCi0gICAgZGVmIF9zbWFydFBvcChzZWxmLCBuYW1lKToKLQotICAgICAgICAiIiJX
ZSBuZWVkIHRvIHBvcCB1cCB0byB0aGUgcHJldmlvdXMgdGFnIG9mIHRoaXMgdHlwZSwgdW5sZXNz
Ci0gICAgICAgIG9uZSBvZiB0aGlzIHRhZydzIG5lc3RpbmcgcmVzZXQgdHJpZ2dlcnMgY29tZXMg
YmV0d2VlbiB0aGlzCi0gICAgICAgIHRhZyBhbmQgdGhlIHByZXZpb3VzIHRhZyBvZiB0aGlzIHR5
cGUsIE9SIHVubGVzcyB0aGlzIHRhZyBpcyBhCi0gICAgICAgIGdlbmVyaWMgbmVzdGluZyB0cmln
Z2VyIGFuZCBhbm90aGVyIGdlbmVyaWMgbmVzdGluZyB0cmlnZ2VyCi0gICAgICAgIGNvbWVzIGJl
dHdlZW4gdGhpcyB0YWcgYW5kIHRoZSBwcmV2aW91cyB0YWcgb2YgdGhpcyB0eXBlLgotCi0gICAg
ICAgIEV4YW1wbGVzOgotICAgICAgICAgPHA+Rm9vPGI+QmFyICo8cD4qIHNob3VsZCBwb3AgdG8g
J3AnLCBub3QgJ2InLgotICAgICAgICAgPHA+Rm9vPHRhYmxlPkJhciAqPHA+KiBzaG91bGQgcG9w
IHRvICd0YWJsZScsIG5vdCAncCcuCi0gICAgICAgICA8cD5Gb288dGFibGU+PHRyPkJhciAqPHA+
KiBzaG91bGQgcG9wIHRvICd0cicsIG5vdCAncCcuCi0KLSAgICAgICAgIDxsaT48dWw+PGxpPiAq
PGxpPiogc2hvdWxkIHBvcCB0byAndWwnLCBub3QgdGhlIGZpcnN0ICdsaScuCi0gICAgICAgICA8
dHI+PHRhYmxlPjx0cj4gKjx0cj4qIHNob3VsZCBwb3AgdG8gJ3RhYmxlJywgbm90IHRoZSBmaXJz
dCAndHInCi0gICAgICAgICA8dGQ+PHRyPjx0ZD4gKjx0ZD4qIHNob3VsZCBwb3AgdG8gJ3RyJywg
bm90IHRoZSBmaXJzdCAndGQnCi0gICAgICAgICIiIgotCi0gICAgICAgIG5lc3RpbmdSZXNldFRy
aWdnZXJzID0gc2VsZi5ORVNUQUJMRV9UQUdTLmdldChuYW1lKQotICAgICAgICBpc05lc3RhYmxl
ID0gbmVzdGluZ1Jlc2V0VHJpZ2dlcnMgIT0gTm9uZQotICAgICAgICBpc1Jlc2V0TmVzdGluZyA9
IHNlbGYuUkVTRVRfTkVTVElOR19UQUdTLmhhc19rZXkobmFtZSkKLSAgICAgICAgcG9wVG8gPSBO
b25lCi0gICAgICAgIGluY2x1c2l2ZSA9IFRydWUKLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVu
KHNlbGYudGFnU3RhY2spLTEsIDAsIC0xKToKLSAgICAgICAgICAgIHAgPSBzZWxmLnRhZ1N0YWNr
W2ldCi0gICAgICAgICAgICBpZiAobm90IHAgb3IgcC5uYW1lID09IG5hbWUpIGFuZCBub3QgaXNO
ZXN0YWJsZToKLSAgICAgICAgICAgICAgICAjTm9uLW5lc3RhYmxlIHRhZ3MgZ2V0IHBvcHBlZCB0
byB0aGUgdG9wIG9yIHRvIHRoZWlyCi0gICAgICAgICAgICAgICAgI2xhc3Qgb2NjdXJhbmNlLgot
ICAgICAgICAgICAgICAgIHBvcFRvID0gbmFtZQotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAg
ICAgICAgICBpZiAobmVzdGluZ1Jlc2V0VHJpZ2dlcnMgIT0gTm9uZQotICAgICAgICAgICAgICAg
IGFuZCBwLm5hbWUgaW4gbmVzdGluZ1Jlc2V0VHJpZ2dlcnMpIFwKLSAgICAgICAgICAgICAgICBv
ciAobmVzdGluZ1Jlc2V0VHJpZ2dlcnMgPT0gTm9uZSBhbmQgaXNSZXNldE5lc3RpbmcKLSAgICAg
ICAgICAgICAgICAgICAgYW5kIHNlbGYuUkVTRVRfTkVTVElOR19UQUdTLmhhc19rZXkocC5uYW1l
KSk6Ci0KLSAgICAgICAgICAgICAgICAjSWYgd2UgZW5jb3VudGVyIG9uZSBvZiB0aGUgbmVzdGlu
ZyByZXNldCB0cmlnZ2VycwotICAgICAgICAgICAgICAgICNwZWN1bGlhciB0byB0aGlzIHRhZywg
b3Igd2UgZW5jb3VudGVyIGFub3RoZXIgdGFnCi0gICAgICAgICAgICAgICAgI3RoYXQgY2F1c2Vz
IG5lc3RpbmcgdG8gcmVzZXQsIHBvcCB1cCB0byBidXQgbm90Ci0gICAgICAgICAgICAgICAgI2lu
Y2x1ZGluZyB0aGF0IHRhZy4KLSAgICAgICAgICAgICAgICBwb3BUbyA9IHAubmFtZQotICAgICAg
ICAgICAgICAgIGluY2x1c2l2ZSA9IEZhbHNlCi0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAg
ICAgICAgIHAgPSBwLnBhcmVudAotICAgICAgICBpZiBwb3BUbzoKLSAgICAgICAgICAgIHNlbGYu
X3BvcFRvVGFnKHBvcFRvLCBpbmNsdXNpdmUpCi0KLSAgICBkZWYgdW5rbm93bl9zdGFydHRhZyhz
ZWxmLCBuYW1lLCBhdHRycywgc2VsZkNsb3Npbmc9MCk6Ci0gICAgICAgICNwcmludCAiU3RhcnQg
dGFnICVzOiAlcyIgJSAobmFtZSwgYXR0cnMpCi0gICAgICAgIGlmIHNlbGYucXVvdGVTdGFjazoK
LSAgICAgICAgICAgICNUaGlzIGlzIG5vdCBhIHJlYWwgdGFnLgotICAgICAgICAgICAgI3ByaW50
ICI8JXM+IGlzIG5vdCByZWFsISIgJSBuYW1lCi0gICAgICAgICAgICBhdHRycyA9ICcnLmpvaW4o
bWFwKGxhbWJkYSh4LCB5KTogJyAlcz0iJXMiJyAlICh4LCB5KSwgYXR0cnMpKQotICAgICAgICAg
ICAgc2VsZi5oYW5kbGVfZGF0YSgnPCVzJXM+JyAlIChuYW1lLCBhdHRycykpCi0gICAgICAgICAg
ICByZXR1cm4KLSAgICAgICAgc2VsZi5lbmREYXRhKCkKLQotICAgICAgICBpZiBub3Qgc2VsZi5p
c1NlbGZDbG9zaW5nVGFnKG5hbWUpIGFuZCBub3Qgc2VsZkNsb3Npbmc6Ci0gICAgICAgICAgICBz
ZWxmLl9zbWFydFBvcChuYW1lKQotCi0gICAgICAgIGlmIHNlbGYucGFyc2VPbmx5VGhlc2UgYW5k
IGxlbihzZWxmLnRhZ1N0YWNrKSA8PSAxIFwKLSAgICAgICAgICAgICAgIGFuZCAoc2VsZi5wYXJz
ZU9ubHlUaGVzZS50ZXh0IG9yIG5vdCBzZWxmLnBhcnNlT25seVRoZXNlLnNlYXJjaFRhZyhuYW1l
LCBhdHRycykpOgotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgdGFnID0gVGFnKHNlbGYs
IG5hbWUsIGF0dHJzLCBzZWxmLmN1cnJlbnRUYWcsIHNlbGYucHJldmlvdXMpCi0gICAgICAgIGlm
IHNlbGYucHJldmlvdXM6Ci0gICAgICAgICAgICBzZWxmLnByZXZpb3VzLm5leHQgPSB0YWcKLSAg
ICAgICAgc2VsZi5wcmV2aW91cyA9IHRhZwotICAgICAgICBzZWxmLnB1c2hUYWcodGFnKQotICAg
ICAgICBpZiBzZWxmQ2xvc2luZyBvciBzZWxmLmlzU2VsZkNsb3NpbmdUYWcobmFtZSk6Ci0gICAg
ICAgICAgICBzZWxmLnBvcFRhZygpCi0gICAgICAgIGlmIG5hbWUgaW4gc2VsZi5RVU9URV9UQUdT
OgotICAgICAgICAgICAgI3ByaW50ICJCZWdpbm5pbmcgcXVvdGUgKCVzKSIgJSBuYW1lCi0gICAg
ICAgICAgICBzZWxmLnF1b3RlU3RhY2suYXBwZW5kKG5hbWUpCi0gICAgICAgICAgICBzZWxmLmxp
dGVyYWwgPSAxCi0gICAgICAgIHJldHVybiB0YWcKLQotICAgIGRlZiB1bmtub3duX2VuZHRhZyhz
ZWxmLCBuYW1lKToKLSAgICAgICAgI3ByaW50ICJFbmQgdGFnICVzIiAlIG5hbWUKLSAgICAgICAg
aWYgc2VsZi5xdW90ZVN0YWNrIGFuZCBzZWxmLnF1b3RlU3RhY2tbLTFdICE9IG5hbWU6Ci0gICAg
ICAgICAgICAjVGhpcyBpcyBub3QgYSByZWFsIGVuZCB0YWcuCi0gICAgICAgICAgICAjcHJpbnQg
IjwvJXM+IGlzIG5vdCByZWFsISIgJSBuYW1lCi0gICAgICAgICAgICBzZWxmLmhhbmRsZV9kYXRh
KCc8LyVzPicgJSBuYW1lKQotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHNlbGYuZW5kRGF0
YSgpCi0gICAgICAgIHNlbGYuX3BvcFRvVGFnKG5hbWUpCi0gICAgICAgIGlmIHNlbGYucXVvdGVT
dGFjayBhbmQgc2VsZi5xdW90ZVN0YWNrWy0xXSA9PSBuYW1lOgotICAgICAgICAgICAgc2VsZi5x
dW90ZVN0YWNrLnBvcCgpCi0gICAgICAgICAgICBzZWxmLmxpdGVyYWwgPSAobGVuKHNlbGYucXVv
dGVTdGFjaykgPiAwKQotCi0gICAgZGVmIGhhbmRsZV9kYXRhKHNlbGYsIGRhdGEpOgotICAgICAg
ICBzZWxmLmN1cnJlbnREYXRhLmFwcGVuZChkYXRhKQotCi0gICAgZGVmIGV4dHJhY3RDaGFyc2V0
RnJvbU1ldGEoc2VsZiwgYXR0cnMpOgotICAgICAgICBzZWxmLnVua25vd25fc3RhcnR0YWcoJ21l
dGEnLCBhdHRycykKLQotCi1jbGFzcyBCZWF1dGlmdWxTb3VwKEJlYXV0aWZ1bFN0b25lU291cCk6
Ci0KLSAgICAiIiJUaGlzIHBhcnNlciBrbm93cyB0aGUgZm9sbG93aW5nIGZhY3RzIGFib3V0IEhU
TUw6Ci0KLSAgICAqIFNvbWUgdGFncyBoYXZlIG5vIGNsb3NpbmcgdGFnIGFuZCBzaG91bGQgYmUg
aW50ZXJwcmV0ZWQgYXMgYmVpbmcKLSAgICAgIGNsb3NlZCBhcyBzb29uIGFzIHRoZXkgYXJlIGVu
Y291bnRlcmVkLgotCi0gICAgKiBUaGUgdGV4dCBpbnNpZGUgc29tZSB0YWdzIChpZS4gJ3Njcmlw
dCcpIG1heSBjb250YWluIHRhZ3Mgd2hpY2gKLSAgICAgIGFyZSBub3QgcmVhbGx5IHBhcnQgb2Yg
dGhlIGRvY3VtZW50IGFuZCB3aGljaCBzaG91bGQgYmUgcGFyc2VkCi0gICAgICBhcyB0ZXh0LCBu
b3QgdGFncy4gSWYgeW91IHdhbnQgdG8gcGFyc2UgdGhlIHRleHQgYXMgdGFncywgeW91IGNhbgot
ICAgICAgYWx3YXlzIGZldGNoIGl0IGFuZCBwYXJzZSBpdCBleHBsaWNpdGx5LgotCi0gICAgKiBU
YWcgbmVzdGluZyBydWxlczoKLQotICAgICAgTW9zdCB0YWdzIGNhbid0IGJlIG5lc3RlZCBhdCBh
bGwuIEZvciBpbnN0YW5jZSwgdGhlIG9jY3VyYW5jZSBvZgotICAgICAgYSA8cD4gdGFnIHNob3Vs
ZCBpbXBsaWNpdGx5IGNsb3NlIHRoZSBwcmV2aW91cyA8cD4gdGFnLgotCi0gICAgICAgPHA+UGFy
YTE8cD5QYXJhMgotICAgICAgICBzaG91bGQgYmUgdHJhbnNmb3JtZWQgaW50bzoKLSAgICAgICA8
cD5QYXJhMTwvcD48cD5QYXJhMgotCi0gICAgICBTb21lIHRhZ3MgY2FuIGJlIG5lc3RlZCBhcmJp
dHJhcmlseS4gRm9yIGluc3RhbmNlLCB0aGUgb2NjdXJhbmNlCi0gICAgICBvZiBhIDxibG9ja3F1
b3RlPiB0YWcgc2hvdWxkIF9ub3RfIGltcGxpY2l0bHkgY2xvc2UgdGhlIHByZXZpb3VzCi0gICAg
ICA8YmxvY2txdW90ZT4gdGFnLgotCi0gICAgICAgQWxpY2Ugc2FpZDogPGJsb2NrcXVvdGU+Qm9i
IHNhaWQ6IDxibG9ja3F1b3RlPkJsYWgKLSAgICAgICAgc2hvdWxkIE5PVCBiZSB0cmFuc2Zvcm1l
ZCBpbnRvOgotICAgICAgIEFsaWNlIHNhaWQ6IDxibG9ja3F1b3RlPkJvYiBzYWlkOiA8L2Jsb2Nr
cXVvdGU+PGJsb2NrcXVvdGU+QmxhaAotCi0gICAgICBTb21lIHRhZ3MgY2FuIGJlIG5lc3RlZCwg
YnV0IHRoZSBuZXN0aW5nIGlzIHJlc2V0IGJ5IHRoZQotICAgICAgaW50ZXJwb3NpdGlvbiBvZiBv
dGhlciB0YWdzLiBGb3IgaW5zdGFuY2UsIGEgPHRyPiB0YWcgc2hvdWxkCi0gICAgICBpbXBsaWNp
dGx5IGNsb3NlIHRoZSBwcmV2aW91cyA8dHI+IHRhZyB3aXRoaW4gdGhlIHNhbWUgPHRhYmxlPiwK
LSAgICAgIGJ1dCBub3QgY2xvc2UgYSA8dHI+IHRhZyBpbiBhbm90aGVyIHRhYmxlLgotCi0gICAg
ICAgPHRhYmxlPjx0cj5CbGFoPHRyPkJsYWgKLSAgICAgICAgc2hvdWxkIGJlIHRyYW5zZm9ybWVk
IGludG86Ci0gICAgICAgPHRhYmxlPjx0cj5CbGFoPC90cj48dHI+QmxhaAotICAgICAgICBidXQs
Ci0gICAgICAgPHRyPkJsYWg8dGFibGU+PHRyPkJsYWgKLSAgICAgICAgc2hvdWxkIE5PVCBiZSB0
cmFuc2Zvcm1lZCBpbnRvCi0gICAgICAgPHRyPkJsYWg8dGFibGU+PC90cj48dHI+QmxhaAotCi0g
ICAgRGlmZmVyaW5nIGFzc3VtcHRpb25zIGFib3V0IHRhZyBuZXN0aW5nIHJ1bGVzIGFyZSBhIG1h
am9yIHNvdXJjZQotICAgIG9mIHByb2JsZW1zIHdpdGggdGhlIEJlYXV0aWZ1bFNvdXAgY2xhc3Mu
IElmIEJlYXV0aWZ1bFNvdXAgaXMgbm90Ci0gICAgdHJlYXRpbmcgYXMgbmVzdGFibGUgYSB0YWcg
eW91ciBwYWdlIGF1dGhvciB0cmVhdHMgYXMgbmVzdGFibGUsCi0gICAgdHJ5IElDYW50QmVsaWV2
ZUl0c0JlYXV0aWZ1bFNvdXAsIE1pbmltYWxTb3VwLCBvcgotICAgIEJlYXV0aWZ1bFN0b25lU291
cCBiZWZvcmUgd3JpdGluZyB5b3VyIG93biBzdWJjbGFzcy4iIiIKLQotICAgIGRlZiBfX2luaXRf
XyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgotICAgICAgICBpZiBub3Qga3dhcmdzLmhhc19rZXko
J3NtYXJ0UXVvdGVzVG8nKToKLSAgICAgICAgICAgIGt3YXJnc1snc21hcnRRdW90ZXNUbyddID0g
c2VsZi5IVE1MX0VOVElUSUVTCi0gICAgICAgIGt3YXJnc1snaXNIVE1MJ10gPSBUcnVlCi0gICAg
ICAgIEJlYXV0aWZ1bFN0b25lU291cC5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCi0K
LSAgICBTRUxGX0NMT1NJTkdfVEFHUyA9IGJ1aWxkVGFnTWFwKE5vbmUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBbJ2JyJyAsICdocicsICdpbnB1dCcsICdpbWcnLCAnbWV0
YScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3BhY2VyJywgJ2xpbmsn
LCAnZnJhbWUnLCAnYmFzZSddKQotCi0gICAgUFJFU0VSVkVfV0hJVEVTUEFDRV9UQUdTID0gc2V0
KFsncHJlJywgJ3RleHRhcmVhJ10pCi0KLSAgICBRVU9URV9UQUdTID0geydzY3JpcHQnIDogTm9u
ZSwgJ3RleHRhcmVhJyA6IE5vbmV9Ci0KLSAgICAjQWNjb3JkaW5nIHRvIHRoZSBIVE1MIHN0YW5k
YXJkLCBlYWNoIG9mIHRoZXNlIGlubGluZSB0YWdzIGNhbgotICAgICNjb250YWluIGFub3RoZXIg
dGFnIG9mIHRoZSBzYW1lIHR5cGUuIEZ1cnRoZXJtb3JlLCBpdCdzIGNvbW1vbgotICAgICN0byBh
Y3R1YWxseSB1c2UgdGhlc2UgdGFncyB0aGlzIHdheS4KLSAgICBORVNUQUJMRV9JTkxJTkVfVEFH
UyA9IFsnc3BhbicsICdmb250JywgJ3EnLCAnb2JqZWN0JywgJ2JkbycsICdzdWInLCAnc3VwJywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyJ10KLQotICAgICNBY2NvcmRpbmcg
dG8gdGhlIEhUTUwgc3RhbmRhcmQsIHRoZXNlIGJsb2NrIHRhZ3MgY2FuIGNvbnRhaW4KLSAgICAj
YW5vdGhlciB0YWcgb2YgdGhlIHNhbWUgdHlwZS4gRnVydGhlcm1vcmUsIGl0J3MgY29tbW9uCi0g
ICAgI3RvIGFjdHVhbGx5IHVzZSB0aGVzZSB0YWdzIHRoaXMgd2F5LgotICAgIE5FU1RBQkxFX0JM
T0NLX1RBR1MgPSBbJ2Jsb2NrcXVvdGUnLCAnZGl2JywgJ2ZpZWxkc2V0JywgJ2lucycsICdkZWwn
XQotCi0gICAgI0xpc3RzIGNhbiBjb250YWluIG90aGVyIGxpc3RzLCBidXQgdGhlcmUgYXJlIHJl
c3RyaWN0aW9ucy4KLSAgICBORVNUQUJMRV9MSVNUX1RBR1MgPSB7ICdvbCcgOiBbXSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICd1bCcgOiBbXSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICdsaScgOiBbJ3VsJywgJ29sJ10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAnZGwn
IDogW10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAnZGQnIDogWydkbCddLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJ2R0JyA6IFsnZGwnXSB9Ci0KLSAgICAjVGFibGVzIGNhbiBj
b250YWluIG90aGVyIHRhYmxlcywgYnV0IHRoZXJlIGFyZSByZXN0cmljdGlvbnMuCi0gICAgTkVT
VEFCTEVfVEFCTEVfVEFHUyA9IHsndGFibGUnIDogW10sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAndHInIDogWyd0YWJsZScsICd0Ym9keScsICd0Zm9vdCcsICd0aGVhZCddLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJ3RkJyA6IFsndHInXSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICd0aCcgOiBbJ3RyJ10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAndGhlYWQn
IDogWyd0YWJsZSddLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rib2R5JyA6IFsndGFi
bGUnXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICd0Zm9vdCcgOiBbJ3RhYmxlJ10sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICBOT05fTkVTVEFCTEVfQkxPQ0tfVEFH
UyA9IFsnYWRkcmVzcycsICdmb3JtJywgJ3AnLCAncHJlJ10KLQotICAgICNJZiBvbmUgb2YgdGhl
c2UgdGFncyBpcyBlbmNvdW50ZXJlZCwgYWxsIHRhZ3MgdXAgdG8gdGhlIG5leHQgdGFnIG9mCi0g
ICAgI3RoaXMgdHlwZSBhcmUgcG9wcGVkLgotICAgIFJFU0VUX05FU1RJTkdfVEFHUyA9IGJ1aWxk
VGFnTWFwKE5vbmUsIE5FU1RBQkxFX0JMT0NLX1RBR1MsICdub3NjcmlwdCcsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTk9OX05FU1RBQkxFX0JMT0NLX1RBR1MsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVTVEFCTEVfTElTVF9UQUdTLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FU1RBQkxFX1RBQkxFX1RBR1MpCi0K
LSAgICBORVNUQUJMRV9UQUdTID0gYnVpbGRUYWdNYXAoW10sIE5FU1RBQkxFX0lOTElORV9UQUdT
LCBORVNUQUJMRV9CTE9DS19UQUdTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBO
RVNUQUJMRV9MSVNUX1RBR1MsIE5FU1RBQkxFX1RBQkxFX1RBR1MpCi0KLSAgICAjIFVzZWQgdG8g
ZGV0ZWN0IHRoZSBjaGFyc2V0IGluIGEgTUVUQSB0YWc7IHNlZSBzdGFydF9tZXRhCi0gICAgQ0hB
UlNFVF9SRSA9IHJlLmNvbXBpbGUoIigoXnw7KVxzKmNoYXJzZXQ9KShbXjtdKikiLCByZS5NKQot
Ci0gICAgZGVmIGV4dHJhY3RDaGFyc2V0RnJvbU1ldGEoc2VsZiwgYXR0cnMpOgotICAgICAgICAi
IiJCZWF1dGlmdWwgU291cCBjYW4gZGV0ZWN0IGEgY2hhcnNldCBpbmNsdWRlZCBpbiBhIE1FVEEg
dGFnLAotICAgICAgICB0cnkgdG8gY29udmVydCB0aGUgZG9jdW1lbnQgdG8gdGhhdCBjaGFyc2V0
LCBhbmQgcmUtcGFyc2UgdGhlCi0gICAgICAgIGRvY3VtZW50IGZyb20gdGhlIGJlZ2lubmluZy4i
IiIKLSAgICAgICAgaHR0cEVxdWl2ID0gTm9uZQotICAgICAgICBjb250ZW50VHlwZSA9IE5vbmUK
LSAgICAgICAgY29udGVudFR5cGVJbmRleCA9IE5vbmUKLSAgICAgICAgdGFnTmVlZHNFbmNvZGlu
Z1N1YnN0aXR1dGlvbiA9IEZhbHNlCi0KLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGF0
dHJzKSk6Ci0gICAgICAgICAgICBrZXksIHZhbHVlID0gYXR0cnNbaV0KLSAgICAgICAgICAgIGtl
eSA9IGtleS5sb3dlcigpCi0gICAgICAgICAgICBpZiBrZXkgPT0gJ2h0dHAtZXF1aXYnOgotICAg
ICAgICAgICAgICAgIGh0dHBFcXVpdiA9IHZhbHVlCi0gICAgICAgICAgICBlbGlmIGtleSA9PSAn
Y29udGVudCc6Ci0gICAgICAgICAgICAgICAgY29udGVudFR5cGUgPSB2YWx1ZQotICAgICAgICAg
ICAgICAgIGNvbnRlbnRUeXBlSW5kZXggPSBpCi0KLSAgICAgICAgaWYgaHR0cEVxdWl2IGFuZCBj
b250ZW50VHlwZTogIyBJdCdzIGFuIGludGVyZXN0aW5nIG1ldGEgdGFnLgotICAgICAgICAgICAg
bWF0Y2ggPSBzZWxmLkNIQVJTRVRfUkUuc2VhcmNoKGNvbnRlbnRUeXBlKQotICAgICAgICAgICAg
aWYgbWF0Y2g6Ci0gICAgICAgICAgICAgICAgaWYgKHNlbGYuZGVjbGFyZWRIVE1MRW5jb2Rpbmcg
aXMgbm90IE5vbmUgb3IKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5vcmlnaW5hbEVuY29kaW5n
ID09IHNlbGYuZnJvbUVuY29kaW5nKToKLSAgICAgICAgICAgICAgICAgICAgIyBBbiBIVE1MIGVu
Y29kaW5nIHdhcyBzbmlmZmVkIHdoaWxlIGNvbnZlcnRpbmcKLSAgICAgICAgICAgICAgICAgICAg
IyB0aGUgZG9jdW1lbnQgdG8gVW5pY29kZSwgb3IgYW4gSFRNTCBlbmNvZGluZyB3YXMKLSAgICAg
ICAgICAgICAgICAgICAgIyBzbmlmZmVkIGR1cmluZyBhIHByZXZpb3VzIHBhc3MgdGhyb3VnaCB0
aGUKLSAgICAgICAgICAgICAgICAgICAgIyBkb2N1bWVudCwgb3IgYW4gZW5jb2Rpbmcgd2FzIHNw
ZWNpZmllZAotICAgICAgICAgICAgICAgICAgICAjIGV4cGxpY2l0bHkgYW5kIGl0IHdvcmtlZC4g
UmV3cml0ZSB0aGUgbWV0YSB0YWcuCi0gICAgICAgICAgICAgICAgICAgIGRlZiByZXdyaXRlKG1h
dGNoKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaC5ncm91cCgxKSArICIl
U09VUC1FTkNPRElORyUiCi0gICAgICAgICAgICAgICAgICAgIG5ld0F0dHIgPSBzZWxmLkNIQVJT
RVRfUkUuc3ViKHJld3JpdGUsIGNvbnRlbnRUeXBlKQotICAgICAgICAgICAgICAgICAgICBhdHRy
c1tjb250ZW50VHlwZUluZGV4XSA9IChhdHRyc1tjb250ZW50VHlwZUluZGV4XVswXSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3QXR0cikKLSAgICAg
ICAgICAgICAgICAgICAgdGFnTmVlZHNFbmNvZGluZ1N1YnN0aXR1dGlvbiA9IFRydWUKLSAgICAg
ICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAjIFRoaXMgaXMgb3VyIGZpcnN0
IHBhc3MgdGhyb3VnaCB0aGUgZG9jdW1lbnQuCi0gICAgICAgICAgICAgICAgICAgICMgR28gdGhy
b3VnaCBpdCBhZ2FpbiB3aXRoIHRoZSBlbmNvZGluZyBpbmZvcm1hdGlvbi4KLSAgICAgICAgICAg
ICAgICAgICAgbmV3Q2hhcnNldCA9IG1hdGNoLmdyb3VwKDMpCi0gICAgICAgICAgICAgICAgICAg
IGlmIG5ld0NoYXJzZXQgYW5kIG5ld0NoYXJzZXQgIT0gc2VsZi5vcmlnaW5hbEVuY29kaW5nOgot
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kZWNsYXJlZEhUTUxFbmNvZGluZyA9IG5ld0No
YXJzZXQKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZlZWQoc2VsZi5kZWNsYXJlZEhU
TUxFbmNvZGluZykKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFN0b3BQYXJzaW5nCi0g
ICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgdGFnID0gc2VsZi51bmtub3duX3N0YXJ0
dGFnKCJtZXRhIiwgYXR0cnMpCi0gICAgICAgIGlmIHRhZyBhbmQgdGFnTmVlZHNFbmNvZGluZ1N1
YnN0aXR1dGlvbjoKLSAgICAgICAgICAgIHRhZy5jb250YWluc1N1YnN0aXR1dGlvbnMgPSBUcnVl
Ci0KLQotY2xhc3MgU3RvcFBhcnNpbmcoRXhjZXB0aW9uKToKLSAgICBwYXNzCi0KLWNsYXNzIElD
YW50QmVsaWV2ZUl0c0JlYXV0aWZ1bFNvdXAoQmVhdXRpZnVsU291cCk6Ci0KLSAgICAiIiJUaGUg
QmVhdXRpZnVsU291cCBjbGFzcyBpcyBvcmllbnRlZCB0b3dhcmRzIHNraXBwaW5nIG92ZXIKLSAg
ICBjb21tb24gSFRNTCBlcnJvcnMgbGlrZSB1bmNsb3NlZCB0YWdzLiBIb3dldmVyLCBzb21ldGlt
ZXMgaXQgbWFrZXMKLSAgICBlcnJvcnMgb2YgaXRzIG93bi4gRm9yIGluc3RhbmNlLCBjb25zaWRl
ciB0aGlzIGZyYWdtZW50OgotCi0gICAgIDxiPkZvbzxiPkJhcjwvYj48L2I+Ci0KLSAgICBUaGlz
IGlzIHBlcmZlY3RseSB2YWxpZCAoaWYgYml6YXJyZSkgSFRNTC4gSG93ZXZlciwgdGhlCi0gICAg
QmVhdXRpZnVsU291cCBjbGFzcyB3aWxsIGltcGxpY2l0bHkgY2xvc2UgdGhlIGZpcnN0IGIgdGFn
IHdoZW4gaXQKLSAgICBlbmNvdW50ZXJzIHRoZSBzZWNvbmQgJ2InLiBJdCB3aWxsIHRoaW5rIHRo
ZSBhdXRob3Igd3JvdGUKLSAgICAiPGI+Rm9vPGI+QmFyIiwgYW5kIGRpZG4ndCBjbG9zZSB0aGUg
Zmlyc3QgJ2InIHRhZywgYmVjYXVzZQotICAgIHRoZXJlJ3Mgbm8gcmVhbC13b3JsZCByZWFzb24g
dG8gYm9sZCBzb21ldGhpbmcgdGhhdCdzIGFscmVhZHkKLSAgICBib2xkLiBXaGVuIGl0IGVuY291
bnRlcnMgJzwvYj48L2I+JyBpdCB3aWxsIGNsb3NlIHR3byBtb3JlICdiJwotICAgIHRhZ3MsIGZv
ciBhIGdyYW5kIHRvdGFsIG9mIHRocmVlIHRhZ3MgY2xvc2VkIGluc3RlYWQgb2YgdHdvLiBUaGlz
Ci0gICAgY2FuIHRocm93IG9mZiB0aGUgcmVzdCBvZiB5b3VyIGRvY3VtZW50IHN0cnVjdHVyZS4g
VGhlIHNhbWUgaXMKLSAgICB0cnVlIG9mIGEgbnVtYmVyIG9mIG90aGVyIHRhZ3MsIGxpc3RlZCBi
ZWxvdy4KLQotICAgIEl0J3MgbXVjaCBtb3JlIGNvbW1vbiBmb3Igc29tZW9uZSB0byBmb3JnZXQg
dG8gY2xvc2UgYSAnYicgdGFnCi0gICAgdGhhbiB0byBhY3R1YWxseSB1c2UgbmVzdGVkICdiJyB0
YWdzLCBhbmQgdGhlIEJlYXV0aWZ1bFNvdXAgY2xhc3MKLSAgICBoYW5kbGVzIHRoZSBjb21tb24g
Y2FzZS4gVGhpcyBjbGFzcyBoYW5kbGVzIHRoZSBub3QtY28tY29tbW9uCi0gICAgY2FzZTogd2hl
cmUgeW91IGNhbid0IGJlbGlldmUgc29tZW9uZSB3cm90ZSB3aGF0IHRoZXkgZGlkLCBidXQKLSAg
ICBpdCdzIHZhbGlkIEhUTUwgYW5kIEJlYXV0aWZ1bFNvdXAgc2NyZXdlZCB1cCBieSBhc3N1bWlu
ZyBpdAotICAgIHdvdWxkbid0IGJlLiIiIgotCi0gICAgSV9DQU5UX0JFTElFVkVfVEhFWVJFX05F
U1RBQkxFX0lOTElORV9UQUdTID0gXAotICAgICBbJ2VtJywgJ2JpZycsICdpJywgJ3NtYWxsJywg
J3R0JywgJ2FiYnInLCAnYWNyb255bScsICdzdHJvbmcnLAotICAgICAgJ2NpdGUnLCAnY29kZScs
ICdkZm4nLCAna2JkJywgJ3NhbXAnLCAnc3Ryb25nJywgJ3ZhcicsICdiJywKLSAgICAgICdiaWcn
XQotCi0gICAgSV9DQU5UX0JFTElFVkVfVEhFWVJFX05FU1RBQkxFX0JMT0NLX1RBR1MgPSBbJ25v
c2NyaXB0J10KLQotICAgIE5FU1RBQkxFX1RBR1MgPSBidWlsZFRhZ01hcChbXSwgQmVhdXRpZnVs
U291cC5ORVNUQUJMRV9UQUdTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJX0NB
TlRfQkVMSUVWRV9USEVZUkVfTkVTVEFCTEVfQkxPQ0tfVEFHUywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgSV9DQU5UX0JFTElFVkVfVEhFWVJFX05FU1RBQkxFX0lOTElORV9UQUdT
KQotCi1jbGFzcyBNaW5pbWFsU291cChCZWF1dGlmdWxTb3VwKToKLSAgICAiIiJUaGUgTWluaW1h
bFNvdXAgY2xhc3MgaXMgZm9yIHBhcnNpbmcgSFRNTCB0aGF0IGNvbnRhaW5zCi0gICAgcGF0aG9s
b2dpY2FsbHkgYmFkIG1hcmt1cC4gSXQgbWFrZXMgbm8gYXNzdW1wdGlvbnMgYWJvdXQgdGFnCi0g
ICAgbmVzdGluZywgYnV0IGl0IGRvZXMga25vdyB3aGljaCB0YWdzIGFyZSBzZWxmLWNsb3Npbmcs
IHRoYXQKLSAgICA8c2NyaXB0PiB0YWdzIGNvbnRhaW4gSmF2YXNjcmlwdCBhbmQgc2hvdWxkIG5v
dCBiZSBwYXJzZWQsIHRoYXQKLSAgICBNRVRBIHRhZ3MgbWF5IGNvbnRhaW4gZW5jb2RpbmcgaW5m
b3JtYXRpb24sIGFuZCBzbyBvbi4KLQotICAgIFRoaXMgYWxzbyBtYWtlcyBpdCBiZXR0ZXIgZm9y
IHN1YmNsYXNzaW5nIHRoYW4gQmVhdXRpZnVsU3RvbmVTb3VwCi0gICAgb3IgQmVhdXRpZnVsU291
cC4iIiIKLQotICAgIFJFU0VUX05FU1RJTkdfVEFHUyA9IGJ1aWxkVGFnTWFwKCdub3NjcmlwdCcp
Ci0gICAgTkVTVEFCTEVfVEFHUyA9IHt9Ci0KLWNsYXNzIEJlYXV0aWZ1bFNPQVAoQmVhdXRpZnVs
U3RvbmVTb3VwKToKLSAgICAiIiJUaGlzIGNsYXNzIHdpbGwgcHVzaCBhIHRhZyB3aXRoIG9ubHkg
YSBzaW5nbGUgc3RyaW5nIGNoaWxkIGludG8KLSAgICB0aGUgdGFnJ3MgcGFyZW50IGFzIGFuIGF0
dHJpYnV0ZS4gVGhlIGF0dHJpYnV0ZSdzIG5hbWUgaXMgdGhlIHRhZwotICAgIG5hbWUsIGFuZCB0
aGUgdmFsdWUgaXMgdGhlIHN0cmluZyBjaGlsZC4gQW4gZXhhbXBsZSBzaG91bGQgZ2l2ZQotICAg
IHRoZSBmbGF2b3Igb2YgdGhlIGNoYW5nZToKLQotICAgIDxmb28+PGJhcj5iYXo8L2Jhcj48L2Zv
bz4KLSAgICAgPT4KLSAgICA8Zm9vIGJhcj0iYmF6Ij48YmFyPmJhejwvYmFyPjwvZm9vPgotCi0g
ICAgWW91IGNhbiB0aGVuIGFjY2VzcyBmb29UYWdbJ2JhciddIGluc3RlYWQgb2YgZm9vVGFnLmJh
clRhZy5zdHJpbmcuCi0KLSAgICBUaGlzIGlzLCBvZiBjb3Vyc2UsIHVzZWZ1bCBmb3Igc2NyYXBp
bmcgc3RydWN0dXJlcyB0aGF0IHRlbmQgdG8KLSAgICB1c2Ugc3ViZWxlbWVudHMgaW5zdGVhZCBv
ZiBhdHRyaWJ1dGVzLCBzdWNoIGFzIFNPQVAgbWVzc2FnZXMuIE5vdGUKLSAgICB0aGF0IGl0IG1v
ZGlmaWVzIGl0cyBpbnB1dCwgc28gZG9uJ3QgcHJpbnQgdGhlIG1vZGlmaWVkIHZlcnNpb24KLSAg
ICBvdXQuCi0KLSAgICBJJ20gbm90IHN1cmUgaG93IG1hbnkgcGVvcGxlIHJlYWxseSB3YW50IHRv
IHVzZSB0aGlzIGNsYXNzOyBsZXQgbWUKLSAgICBrbm93IGlmIHlvdSBkby4gTWFpbmx5IEkgbGlr
ZSB0aGUgbmFtZS4iIiIKLQotICAgIGRlZiBwb3BUYWcoc2VsZik6Ci0gICAgICAgIGlmIGxlbihz
ZWxmLnRhZ1N0YWNrKSA+IDE6Ci0gICAgICAgICAgICB0YWcgPSBzZWxmLnRhZ1N0YWNrWy0xXQot
ICAgICAgICAgICAgcGFyZW50ID0gc2VsZi50YWdTdGFja1stMl0KLSAgICAgICAgICAgIHBhcmVu
dC5fZ2V0QXR0ck1hcCgpCi0gICAgICAgICAgICBpZiAoaXNpbnN0YW5jZSh0YWcsIFRhZykgYW5k
IGxlbih0YWcuY29udGVudHMpID09IDEgYW5kCi0gICAgICAgICAgICAgICAgaXNpbnN0YW5jZSh0
YWcuY29udGVudHNbMF0sIE5hdmlnYWJsZVN0cmluZykgYW5kCi0gICAgICAgICAgICAgICAgbm90
IHBhcmVudC5hdHRyTWFwLmhhc19rZXkodGFnLm5hbWUpKToKLSAgICAgICAgICAgICAgICBwYXJl
bnRbdGFnLm5hbWVdID0gdGFnLmNvbnRlbnRzWzBdCi0gICAgICAgIEJlYXV0aWZ1bFN0b25lU291
cC5wb3BUYWcoc2VsZikKLQotI0VudGVycHJpc2UgY2xhc3MgbmFtZXMhIEl0IGhhcyBjb21lIHRv
IG91ciBhdHRlbnRpb24gdGhhdCBzb21lIHBlb3BsZQotI3RoaW5rIHRoZSBuYW1lcyBvZiB0aGUg
QmVhdXRpZnVsIFNvdXAgcGFyc2VyIGNsYXNzZXMgYXJlIHRvbyBzaWxseQotI2FuZCAidW5wcm9m
ZXNzaW9uYWwiIGZvciB1c2UgaW4gZW50ZXJwcmlzZSBzY3JlZW4tc2NyYXBpbmcuIFdlIGZlZWwK
LSN5b3VyIHBhaW4hIEZvciBzdWNoLW1pbmRlZCBmb2xrLCB0aGUgQmVhdXRpZnVsIFNvdXAgQ29u
c29ydGl1bSBBbmQKLSNBbGwtTmlnaHQgS29zaGVyIEJha2VyeSByZWNvbW1lbmRzIHJlbmFtaW5n
IHRoaXMgZmlsZSB0bwotIyJSb2J1c3RQYXJzZXIucHkiIChvciwgaW4gY2FzZXMgb2YgZXh0cmVt
ZSBlbnRlcnByaXNpbmVzcywKLSMiUm9idXN0UGFyc2VyQmVhbkludGVyZmFjZS5jbGFzcyIpIGFu
ZCB1c2luZyB0aGUgZm9sbG93aW5nCi0jZW50ZXJwcmlzZS1mcmllbmRseSBjbGFzcyBhbGlhc2Vz
OgotY2xhc3MgUm9idXN0WE1MUGFyc2VyKEJlYXV0aWZ1bFN0b25lU291cCk6Ci0gICAgcGFzcwot
Y2xhc3MgUm9idXN0SFRNTFBhcnNlcihCZWF1dGlmdWxTb3VwKToKLSAgICBwYXNzCi1jbGFzcyBS
b2J1c3RXYWNrQXNzSFRNTFBhcnNlcihJQ2FudEJlbGlldmVJdHNCZWF1dGlmdWxTb3VwKToKLSAg
ICBwYXNzCi1jbGFzcyBSb2J1c3RJbnNhbmVseVdhY2tBc3NIVE1MUGFyc2VyKE1pbmltYWxTb3Vw
KToKLSAgICBwYXNzCi1jbGFzcyBTaW1wbGlmeWluZ1NPQVBQYXJzZXIoQmVhdXRpZnVsU09BUCk6
Ci0gICAgcGFzcwotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMKLSMKLSMgQm9udXMgbGlicmFyeTogVW5pY29kZSwgRGFtbWl0Ci0jCi0jIFRo
aXMgY2xhc3MgZm9yY2VzIFhNTCBkYXRhIGludG8gYSBzdGFuZGFyZCBmb3JtYXQgKHVzdWFsbHkg
dG8gVVRGLTgKLSMgb3IgVW5pY29kZSkuICBJdCBpcyBoZWF2aWx5IGJhc2VkIG9uIGNvZGUgZnJv
bSBNYXJrIFBpbGdyaW0ncwotIyBVbml2ZXJzYWwgRmVlZCBQYXJzZXIuIEl0IGRvZXMgbm90IHJl
d3JpdGUgdGhlIFhNTCBvciBIVE1MIHRvCi0jIHJlZmxlY3QgYSBuZXcgZW5jb2Rpbmc6IHRoYXQg
aGFwcGVucyBpbiBCZWF1dGlmdWxTdG9uZVNvdXAuaGFuZGxlX3BpCi0jIChYTUwpIGFuZCBCZWF1
dGlmdWxTb3VwLnN0YXJ0X21ldGEgKEhUTUwpLgotCi0jIEF1dG9kZXRlY3RzIGNoYXJhY3RlciBl
bmNvZGluZ3MuCi0jIERvd25sb2FkIGZyb20gaHR0cDovL2NoYXJkZXQuZmVlZHBhcnNlci5vcmcv
Ci10cnk6Ci0gICAgaW1wb3J0IGNoYXJkZXQKLSMgICAgaW1wb3J0IGNoYXJkZXQuY29uc3RhbnRz
Ci0jICAgIGNoYXJkZXQuY29uc3RhbnRzLl9kZWJ1ZyA9IDEKLWV4Y2VwdCBJbXBvcnRFcnJvcjoK
LSAgICBjaGFyZGV0ID0gTm9uZQotCi0jIGNqa2NvZGVjcyBhbmQgaWNvbnZfY29kZWMgbWFrZSBQ
eXRob24ga25vdyBhYm91dCBtb3JlIGNoYXJhY3RlciBlbmNvZGluZ3MuCi0jIEJvdGggYXJlIGF2
YWlsYWJsZSBmcm9tIGh0dHA6Ly9jamtweXRob24uaTE4bi5vcmcvCi0jIFRoZXkncmUgYnVpbHQg
aW4gaWYgeW91IHVzZSBQeXRob24gMi40LgotdHJ5OgotICAgIGltcG9ydCBjamtjb2RlY3MuYWxp
YXNlcwotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIHBhc3MKLXRyeToKLSAgICBpbXBvcnQgaWNv
bnZfY29kZWMKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBwYXNzCi0KLWNsYXNzIFVuaWNvZGVE
YW1taXQ6Ci0gICAgIiIiQSBjbGFzcyBmb3IgZGV0ZWN0aW5nIHRoZSBlbmNvZGluZyBvZiBhICpN
TCBkb2N1bWVudCBhbmQKLSAgICBjb252ZXJ0aW5nIGl0IHRvIGEgVW5pY29kZSBzdHJpbmcuIElm
IHRoZSBzb3VyY2UgZW5jb2RpbmcgaXMKLSAgICB3aW5kb3dzLTEyNTIsIGNhbiByZXBsYWNlIE1T
IHNtYXJ0IHF1b3RlcyB3aXRoIHRoZWlyIEhUTUwgb3IgWE1MCi0gICAgZXF1aXZhbGVudHMuIiIi
Ci0KLSAgICAjIFRoaXMgZGljdGlvbmFyeSBtYXBzIGNvbW1vbmx5IHNlZW4gdmFsdWVzIGZvciAi
Y2hhcnNldCIgaW4gSFRNTAotICAgICMgbWV0YSB0YWdzIHRvIHRoZSBjb3JyZXNwb25kaW5nIFB5
dGhvbiBjb2RlYyBuYW1lcy4gSXQgb25seSBjb3ZlcnMKLSAgICAjIHZhbHVlcyB0aGF0IGFyZW4n
dCBpbiBQeXRob24ncyBhbGlhc2VzIGFuZCBjYW4ndCBiZSBkZXRlcm1pbmVkCi0gICAgIyBieSB0
aGUgaGV1cmlzdGljcyBpbiBmaW5kX2NvZGVjLgotICAgIENIQVJTRVRfQUxJQVNFUyA9IHsgIm1h
Y2ludG9zaCIgOiAibWFjLXJvbWFuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJ4LXNqaXMi
IDogInNoaWZ0LWppcyIgfQotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hcmt1cCwgb3ZlcnJp
ZGVFbmNvZGluZ3M9W10sCi0gICAgICAgICAgICAgICAgIHNtYXJ0UXVvdGVzVG89J3htbCcsIGlz
SFRNTD1GYWxzZSk6Ci0gICAgICAgIHNlbGYuZGVjbGFyZWRIVE1MRW5jb2RpbmcgPSBOb25lCi0g
ICAgICAgIHNlbGYubWFya3VwLCBkb2N1bWVudEVuY29kaW5nLCBzbmlmZmVkRW5jb2RpbmcgPSBc
Ci0gICAgICAgICAgICAgICAgICAgICBzZWxmLl9kZXRlY3RFbmNvZGluZyhtYXJrdXAsIGlzSFRN
TCkKLSAgICAgICAgc2VsZi5zbWFydFF1b3Rlc1RvID0gc21hcnRRdW90ZXNUbwotICAgICAgICBz
ZWxmLnRyaWVkRW5jb2RpbmdzID0gW10KLSAgICAgICAgaWYgbWFya3VwID09ICcnIG9yIGlzaW5z
dGFuY2UobWFya3VwLCB1bmljb2RlKToKLSAgICAgICAgICAgIHNlbGYub3JpZ2luYWxFbmNvZGlu
ZyA9IE5vbmUKLSAgICAgICAgICAgIHNlbGYudW5pY29kZSA9IHVuaWNvZGUobWFya3VwKQotICAg
ICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgdSA9IE5vbmUKLSAgICAgICAgZm9yIHByb3Bvc2Vk
RW5jb2RpbmcgaW4gb3ZlcnJpZGVFbmNvZGluZ3M6Ci0gICAgICAgICAgICB1ID0gc2VsZi5fY29u
dmVydEZyb20ocHJvcG9zZWRFbmNvZGluZykKLSAgICAgICAgICAgIGlmIHU6IGJyZWFrCi0gICAg
ICAgIGlmIG5vdCB1OgotICAgICAgICAgICAgZm9yIHByb3Bvc2VkRW5jb2RpbmcgaW4gKGRvY3Vt
ZW50RW5jb2RpbmcsIHNuaWZmZWRFbmNvZGluZyk6Ci0gICAgICAgICAgICAgICAgdSA9IHNlbGYu
X2NvbnZlcnRGcm9tKHByb3Bvc2VkRW5jb2RpbmcpCi0gICAgICAgICAgICAgICAgaWYgdTogYnJl
YWsKLQotICAgICAgICAjIElmIG5vIGx1Y2sgYW5kIHdlIGhhdmUgYXV0by1kZXRlY3Rpb24gbGli
cmFyeSwgdHJ5IHRoYXQ6Ci0gICAgICAgIGlmIG5vdCB1IGFuZCBjaGFyZGV0IGFuZCBub3QgaXNp
bnN0YW5jZShzZWxmLm1hcmt1cCwgdW5pY29kZSk6Ci0gICAgICAgICAgICB1ID0gc2VsZi5fY29u
dmVydEZyb20oY2hhcmRldC5kZXRlY3Qoc2VsZi5tYXJrdXApWydlbmNvZGluZyddKQotCi0gICAg
ICAgICMgQXMgYSBsYXN0IHJlc29ydCwgdHJ5IHV0Zi04IGFuZCB3aW5kb3dzLTEyNTI6Ci0gICAg
ICAgIGlmIG5vdCB1OgotICAgICAgICAgICAgZm9yIHByb3Bvc2VkX2VuY29kaW5nIGluICgidXRm
LTgiLCAid2luZG93cy0xMjUyIik6Ci0gICAgICAgICAgICAgICAgdSA9IHNlbGYuX2NvbnZlcnRG
cm9tKHByb3Bvc2VkX2VuY29kaW5nKQotICAgICAgICAgICAgICAgIGlmIHU6IGJyZWFrCi0KLSAg
ICAgICAgc2VsZi51bmljb2RlID0gdQotICAgICAgICBpZiBub3QgdTogc2VsZi5vcmlnaW5hbEVu
Y29kaW5nID0gTm9uZQotCi0gICAgZGVmIF9zdWJNU0NoYXIoc2VsZiwgbWF0Y2gpOgotICAgICAg
ICAiIiJDaGFuZ2VzIGEgTVMgc21hcnQgcXVvdGUgY2hhcmFjdGVyIHRvIGFuIFhNTCBvciBIVE1M
Ci0gICAgICAgIGVudGl0eS4iIiIKLSAgICAgICAgb3JpZyA9IG1hdGNoLmdyb3VwKDEpCi0gICAg
ICAgIHN1YiA9IHNlbGYuTVNfQ0hBUlMuZ2V0KG9yaWcpCi0gICAgICAgIGlmIHR5cGUoc3ViKSA9
PSB0eXBlcy5UdXBsZVR5cGU6Ci0gICAgICAgICAgICBpZiBzZWxmLnNtYXJ0UXVvdGVzVG8gPT0g
J3htbCc6Ci0gICAgICAgICAgICAgICAgc3ViID0gJyYjeCcuZW5jb2RlKCkgKyBzdWJbMV0uZW5j
b2RlKCkgKyAnOycuZW5jb2RlKCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAg
c3ViID0gJyYnLmVuY29kZSgpICsgc3ViWzBdLmVuY29kZSgpICsgJzsnLmVuY29kZSgpCi0gICAg
ICAgIGVsc2U6Ci0gICAgICAgICAgICBzdWIgPSBzdWIuZW5jb2RlKCkKLSAgICAgICAgcmV0dXJu
IHN1YgotCi0gICAgZGVmIF9jb252ZXJ0RnJvbShzZWxmLCBwcm9wb3NlZCk6Ci0gICAgICAgIHBy
b3Bvc2VkID0gc2VsZi5maW5kX2NvZGVjKHByb3Bvc2VkKQotICAgICAgICBpZiBub3QgcHJvcG9z
ZWQgb3IgcHJvcG9zZWQgaW4gc2VsZi50cmllZEVuY29kaW5nczoKLSAgICAgICAgICAgIHJldHVy
biBOb25lCi0gICAgICAgIHNlbGYudHJpZWRFbmNvZGluZ3MuYXBwZW5kKHByb3Bvc2VkKQotICAg
ICAgICBtYXJrdXAgPSBzZWxmLm1hcmt1cAotCi0gICAgICAgICMgQ29udmVydCBzbWFydCBxdW90
ZXMgdG8gSFRNTCBpZiBjb21pbmcgZnJvbSBhbiBlbmNvZGluZwotICAgICAgICAjIHRoYXQgbWln
aHQgaGF2ZSB0aGVtLgotICAgICAgICBpZiBzZWxmLnNtYXJ0UXVvdGVzVG8gYW5kIHByb3Bvc2Vk
Lmxvd2VyKCkgaW4oIndpbmRvd3MtMTI1MiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiaXNvLTg4NTktMSIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaXNvLTg4NTktMiIpOgotICAg
ICAgICAgICAgc21hcnRfcXVvdGVzX3JlID0gIihbXHg4MC1ceDlmXSkiCi0gICAgICAgICAgICBz
bWFydF9xdW90ZXNfY29tcGlsZWQgPSByZS5jb21waWxlKHNtYXJ0X3F1b3Rlc19yZSkKLSAgICAg
ICAgICAgIG1hcmt1cCA9IHNtYXJ0X3F1b3Rlc19jb21waWxlZC5zdWIoc2VsZi5fc3ViTVNDaGFy
LCBtYXJrdXApCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgIyBwcmludCAiVHJ5aW5nIHRv
IGNvbnZlcnQgZG9jdW1lbnQgdG8gJXMiICUgcHJvcG9zZWQKLSAgICAgICAgICAgIHUgPSBzZWxm
Ll90b1VuaWNvZGUobWFya3VwLCBwcm9wb3NlZCkKLSAgICAgICAgICAgIHNlbGYubWFya3VwID0g
dQotICAgICAgICAgICAgc2VsZi5vcmlnaW5hbEVuY29kaW5nID0gcHJvcG9zZWQKLSAgICAgICAg
ZXhjZXB0IEV4Y2VwdGlvbiwgZToKLSAgICAgICAgICAgICMgcHJpbnQgIlRoYXQgZGlkbid0IHdv
cmshIgotICAgICAgICAgICAgIyBwcmludCBlCi0gICAgICAgICAgICByZXR1cm4gTm9uZQotICAg
ICAgICAjcHJpbnQgIkNvcnJlY3QgZW5jb2Rpbmc6ICVzIiAlIHByb3Bvc2VkCi0gICAgICAgIHJl
dHVybiBzZWxmLm1hcmt1cAotCi0gICAgZGVmIF90b1VuaWNvZGUoc2VsZiwgZGF0YSwgZW5jb2Rp
bmcpOgotICAgICAgICAnJydHaXZlbiBhIHN0cmluZyBhbmQgaXRzIGVuY29kaW5nLCBkZWNvZGVz
IHRoZSBzdHJpbmcgaW50byBVbmljb2RlLgotICAgICAgICAlZW5jb2RpbmcgaXMgYSBzdHJpbmcg
cmVjb2duaXplZCBieSBlbmNvZGluZ3MuYWxpYXNlcycnJwotCi0gICAgICAgICMgc3RyaXAgQnl0
ZSBPcmRlciBNYXJrIChpZiBwcmVzZW50KQotICAgICAgICBpZiAobGVuKGRhdGEpID49IDQpIGFu
ZCAoZGF0YVs6Ml0gPT0gJ1x4ZmVceGZmJykgXAotICAgICAgICAgICAgICAgYW5kIChkYXRhWzI6
NF0gIT0gJ1x4MDBceDAwJyk6Ci0gICAgICAgICAgICBlbmNvZGluZyA9ICd1dGYtMTZiZScKLSAg
ICAgICAgICAgIGRhdGEgPSBkYXRhWzI6XQotICAgICAgICBlbGlmIChsZW4oZGF0YSkgPj0gNCkg
YW5kIChkYXRhWzoyXSA9PSAnXHhmZlx4ZmUnKSBcCi0gICAgICAgICAgICAgICAgIGFuZCAoZGF0
YVsyOjRdICE9ICdceDAwXHgwMCcpOgotICAgICAgICAgICAgZW5jb2RpbmcgPSAndXRmLTE2bGUn
Ci0gICAgICAgICAgICBkYXRhID0gZGF0YVsyOl0KLSAgICAgICAgZWxpZiBkYXRhWzozXSA9PSAn
XHhlZlx4YmJceGJmJzoKLSAgICAgICAgICAgIGVuY29kaW5nID0gJ3V0Zi04JwotICAgICAgICAg
ICAgZGF0YSA9IGRhdGFbMzpdCi0gICAgICAgIGVsaWYgZGF0YVs6NF0gPT0gJ1x4MDBceDAwXHhm
ZVx4ZmYnOgotICAgICAgICAgICAgZW5jb2RpbmcgPSAndXRmLTMyYmUnCi0gICAgICAgICAgICBk
YXRhID0gZGF0YVs0Ol0KLSAgICAgICAgZWxpZiBkYXRhWzo0XSA9PSAnXHhmZlx4ZmVceDAwXHgw
MCc6Ci0gICAgICAgICAgICBlbmNvZGluZyA9ICd1dGYtMzJsZScKLSAgICAgICAgICAgIGRhdGEg
PSBkYXRhWzQ6XQotICAgICAgICBuZXdkYXRhID0gdW5pY29kZShkYXRhLCBlbmNvZGluZykKLSAg
ICAgICAgcmV0dXJuIG5ld2RhdGEKLQotICAgIGRlZiBfZGV0ZWN0RW5jb2Rpbmcoc2VsZiwgeG1s
X2RhdGEsIGlzSFRNTD1GYWxzZSk6Ci0gICAgICAgICIiIkdpdmVuIGEgZG9jdW1lbnQsIHRyaWVz
IHRvIGRldGVjdCBpdHMgWE1MIGVuY29kaW5nLiIiIgotICAgICAgICB4bWxfZW5jb2RpbmcgPSBz
bmlmZmVkX3htbF9lbmNvZGluZyA9IE5vbmUKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgaWYg
eG1sX2RhdGFbOjRdID09ICdceDRjXHg2Zlx4YTdceDk0JzoKLSAgICAgICAgICAgICAgICAjIEVC
Q0RJQwotICAgICAgICAgICAgICAgIHhtbF9kYXRhID0gc2VsZi5fZWJjZGljX3RvX2FzY2lpKHht
bF9kYXRhKQotICAgICAgICAgICAgZWxpZiB4bWxfZGF0YVs6NF0gPT0gJ1x4MDBceDNjXHgwMFx4
M2YnOgotICAgICAgICAgICAgICAgICMgVVRGLTE2QkUKLSAgICAgICAgICAgICAgICBzbmlmZmVk
X3htbF9lbmNvZGluZyA9ICd1dGYtMTZiZScKLSAgICAgICAgICAgICAgICB4bWxfZGF0YSA9IHVu
aWNvZGUoeG1sX2RhdGEsICd1dGYtMTZiZScpLmVuY29kZSgndXRmLTgnKQotICAgICAgICAgICAg
ZWxpZiAobGVuKHhtbF9kYXRhKSA+PSA0KSBhbmQgKHhtbF9kYXRhWzoyXSA9PSAnXHhmZVx4ZmYn
KSBcCi0gICAgICAgICAgICAgICAgICAgICBhbmQgKHhtbF9kYXRhWzI6NF0gIT0gJ1x4MDBceDAw
Jyk6Ci0gICAgICAgICAgICAgICAgIyBVVEYtMTZCRSB3aXRoIEJPTQotICAgICAgICAgICAgICAg
IHNuaWZmZWRfeG1sX2VuY29kaW5nID0gJ3V0Zi0xNmJlJwotICAgICAgICAgICAgICAgIHhtbF9k
YXRhID0gdW5pY29kZSh4bWxfZGF0YVsyOl0sICd1dGYtMTZiZScpLmVuY29kZSgndXRmLTgnKQot
ICAgICAgICAgICAgZWxpZiB4bWxfZGF0YVs6NF0gPT0gJ1x4M2NceDAwXHgzZlx4MDAnOgotICAg
ICAgICAgICAgICAgICMgVVRGLTE2TEUKLSAgICAgICAgICAgICAgICBzbmlmZmVkX3htbF9lbmNv
ZGluZyA9ICd1dGYtMTZsZScKLSAgICAgICAgICAgICAgICB4bWxfZGF0YSA9IHVuaWNvZGUoeG1s
X2RhdGEsICd1dGYtMTZsZScpLmVuY29kZSgndXRmLTgnKQotICAgICAgICAgICAgZWxpZiAobGVu
KHhtbF9kYXRhKSA+PSA0KSBhbmQgKHhtbF9kYXRhWzoyXSA9PSAnXHhmZlx4ZmUnKSBhbmQgXAot
ICAgICAgICAgICAgICAgICAgICAgKHhtbF9kYXRhWzI6NF0gIT0gJ1x4MDBceDAwJyk6Ci0gICAg
ICAgICAgICAgICAgIyBVVEYtMTZMRSB3aXRoIEJPTQotICAgICAgICAgICAgICAgIHNuaWZmZWRf
eG1sX2VuY29kaW5nID0gJ3V0Zi0xNmxlJwotICAgICAgICAgICAgICAgIHhtbF9kYXRhID0gdW5p
Y29kZSh4bWxfZGF0YVsyOl0sICd1dGYtMTZsZScpLmVuY29kZSgndXRmLTgnKQotICAgICAgICAg
ICAgZWxpZiB4bWxfZGF0YVs6NF0gPT0gJ1x4MDBceDAwXHgwMFx4M2MnOgotICAgICAgICAgICAg
ICAgICMgVVRGLTMyQkUKLSAgICAgICAgICAgICAgICBzbmlmZmVkX3htbF9lbmNvZGluZyA9ICd1
dGYtMzJiZScKLSAgICAgICAgICAgICAgICB4bWxfZGF0YSA9IHVuaWNvZGUoeG1sX2RhdGEsICd1
dGYtMzJiZScpLmVuY29kZSgndXRmLTgnKQotICAgICAgICAgICAgZWxpZiB4bWxfZGF0YVs6NF0g
PT0gJ1x4M2NceDAwXHgwMFx4MDAnOgotICAgICAgICAgICAgICAgICMgVVRGLTMyTEUKLSAgICAg
ICAgICAgICAgICBzbmlmZmVkX3htbF9lbmNvZGluZyA9ICd1dGYtMzJsZScKLSAgICAgICAgICAg
ICAgICB4bWxfZGF0YSA9IHVuaWNvZGUoeG1sX2RhdGEsICd1dGYtMzJsZScpLmVuY29kZSgndXRm
LTgnKQotICAgICAgICAgICAgZWxpZiB4bWxfZGF0YVs6NF0gPT0gJ1x4MDBceDAwXHhmZVx4ZmYn
OgotICAgICAgICAgICAgICAgICMgVVRGLTMyQkUgd2l0aCBCT00KLSAgICAgICAgICAgICAgICBz
bmlmZmVkX3htbF9lbmNvZGluZyA9ICd1dGYtMzJiZScKLSAgICAgICAgICAgICAgICB4bWxfZGF0
YSA9IHVuaWNvZGUoeG1sX2RhdGFbNDpdLCAndXRmLTMyYmUnKS5lbmNvZGUoJ3V0Zi04JykKLSAg
ICAgICAgICAgIGVsaWYgeG1sX2RhdGFbOjRdID09ICdceGZmXHhmZVx4MDBceDAwJzoKLSAgICAg
ICAgICAgICAgICAjIFVURi0zMkxFIHdpdGggQk9NCi0gICAgICAgICAgICAgICAgc25pZmZlZF94
bWxfZW5jb2RpbmcgPSAndXRmLTMybGUnCi0gICAgICAgICAgICAgICAgeG1sX2RhdGEgPSB1bmlj
b2RlKHhtbF9kYXRhWzQ6XSwgJ3V0Zi0zMmxlJykuZW5jb2RlKCd1dGYtOCcpCi0gICAgICAgICAg
ICBlbGlmIHhtbF9kYXRhWzozXSA9PSAnXHhlZlx4YmJceGJmJzoKLSAgICAgICAgICAgICAgICAj
IFVURi04IHdpdGggQk9NCi0gICAgICAgICAgICAgICAgc25pZmZlZF94bWxfZW5jb2RpbmcgPSAn
dXRmLTgnCi0gICAgICAgICAgICAgICAgeG1sX2RhdGEgPSB1bmljb2RlKHhtbF9kYXRhWzM6XSwg
J3V0Zi04JykuZW5jb2RlKCd1dGYtOCcpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAg
ICAgIHNuaWZmZWRfeG1sX2VuY29kaW5nID0gJ2FzY2lpJwotICAgICAgICAgICAgICAgIHBhc3MK
LSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgeG1sX2VuY29kaW5nX21hdGNoID0gTm9uZQot
ICAgICAgICB4bWxfZW5jb2RpbmdfcmUgPSAnXjxcPy4qZW5jb2Rpbmc9W1wnIl0oLio/KVtcJyJd
LipcPz4nLmVuY29kZSgpCi0gICAgICAgIHhtbF9lbmNvZGluZ19tYXRjaCA9IHJlLmNvbXBpbGUo
eG1sX2VuY29kaW5nX3JlKS5tYXRjaCh4bWxfZGF0YSkKLSAgICAgICAgaWYgbm90IHhtbF9lbmNv
ZGluZ19tYXRjaCBhbmQgaXNIVE1MOgotICAgICAgICAgICAgbWV0YV9yZSA9ICc8XHMqbWV0YVte
Pl0rY2hhcnNldD0oW14+XSo/KVs7XCciPl0nLmVuY29kZSgpCi0gICAgICAgICAgICByZWdleHAg
PSByZS5jb21waWxlKG1ldGFfcmUsIHJlLkkpCi0gICAgICAgICAgICB4bWxfZW5jb2RpbmdfbWF0
Y2ggPSByZWdleHAuc2VhcmNoKHhtbF9kYXRhKQotICAgICAgICBpZiB4bWxfZW5jb2RpbmdfbWF0
Y2ggaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICB4bWxfZW5jb2RpbmcgPSB4bWxfZW5jb2Rpbmdf
bWF0Y2guZ3JvdXBzKClbMF0uZGVjb2RlKAotICAgICAgICAgICAgICAgICdhc2NpaScpLmxvd2Vy
KCkKLSAgICAgICAgICAgIGlmIGlzSFRNTDoKLSAgICAgICAgICAgICAgICBzZWxmLmRlY2xhcmVk
SFRNTEVuY29kaW5nID0geG1sX2VuY29kaW5nCi0gICAgICAgICAgICBpZiBzbmlmZmVkX3htbF9l
bmNvZGluZyBhbmQgXAotICAgICAgICAgICAgICAgKHhtbF9lbmNvZGluZyBpbiAoJ2lzby0xMDY0
Ni11Y3MtMicsICd1Y3MtMicsICdjc3VuaWNvZGUnLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ2lzby0xMDY0Ni11Y3MtNCcsICd1Y3MtNCcsICdjc3VjczQnLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJ3V0Zi0xNicsICd1dGYtMzInLCAndXRmXzE2JywgJ3V0
Zl8zMicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXRmMTYnLCAndTE2Jykp
OgotICAgICAgICAgICAgICAgIHhtbF9lbmNvZGluZyA9IHNuaWZmZWRfeG1sX2VuY29kaW5nCi0g
ICAgICAgIHJldHVybiB4bWxfZGF0YSwgeG1sX2VuY29kaW5nLCBzbmlmZmVkX3htbF9lbmNvZGlu
ZwotCi0KLSAgICBkZWYgZmluZF9jb2RlYyhzZWxmLCBjaGFyc2V0KToKLSAgICAgICAgcmV0dXJu
IHNlbGYuX2NvZGVjKHNlbGYuQ0hBUlNFVF9BTElBU0VTLmdldChjaGFyc2V0LCBjaGFyc2V0KSkg
XAotICAgICAgICAgICAgICAgb3IgKGNoYXJzZXQgYW5kIHNlbGYuX2NvZGVjKGNoYXJzZXQucmVw
bGFjZSgiLSIsICIiKSkpIFwKLSAgICAgICAgICAgICAgIG9yIChjaGFyc2V0IGFuZCBzZWxmLl9j
b2RlYyhjaGFyc2V0LnJlcGxhY2UoIi0iLCAiXyIpKSkgXAotICAgICAgICAgICAgICAgb3IgY2hh
cnNldAotCi0gICAgZGVmIF9jb2RlYyhzZWxmLCBjaGFyc2V0KToKLSAgICAgICAgaWYgbm90IGNo
YXJzZXQ6IHJldHVybiBjaGFyc2V0Ci0gICAgICAgIGNvZGVjID0gTm9uZQotICAgICAgICB0cnk6
Ci0gICAgICAgICAgICBjb2RlY3MubG9va3VwKGNoYXJzZXQpCi0gICAgICAgICAgICBjb2RlYyA9
IGNoYXJzZXQKLSAgICAgICAgZXhjZXB0IChMb29rdXBFcnJvciwgVmFsdWVFcnJvcik6Ci0gICAg
ICAgICAgICBwYXNzCi0gICAgICAgIHJldHVybiBjb2RlYwotCi0gICAgRUJDRElDX1RPX0FTQ0lJ
X01BUCA9IE5vbmUKLSAgICBkZWYgX2ViY2RpY190b19hc2NpaShzZWxmLCBzKToKLSAgICAgICAg
YyA9IHNlbGYuX19jbGFzc19fCi0gICAgICAgIGlmIG5vdCBjLkVCQ0RJQ19UT19BU0NJSV9NQVA6
Ci0gICAgICAgICAgICBlbWFwID0gKDAsMSwyLDMsMTU2LDksMTM0LDEyNywxNTEsMTQxLDE0Miwx
MSwxMiwxMywxNCwxNSwKLSAgICAgICAgICAgICAgICAgICAgMTYsMTcsMTgsMTksMTU3LDEzMyw4
LDEzNSwyNCwyNSwxNDYsMTQzLDI4LDI5LDMwLDMxLAotICAgICAgICAgICAgICAgICAgICAxMjgs
MTI5LDEzMCwxMzEsMTMyLDEwLDIzLDI3LDEzNiwxMzcsMTM4LDEzOSwxNDAsNSw2LDcsCi0gICAg
ICAgICAgICAgICAgICAgIDE0NCwxNDUsMjIsMTQ3LDE0OCwxNDksMTUwLDQsMTUyLDE1MywxNTQs
MTU1LDIwLDIxLDE1OCwyNiwKLSAgICAgICAgICAgICAgICAgICAgMzIsMTYwLDE2MSwxNjIsMTYz
LDE2NCwxNjUsMTY2LDE2NywxNjgsOTEsNDYsNjAsNDAsNDMsMzMsCi0gICAgICAgICAgICAgICAg
ICAgIDM4LDE2OSwxNzAsMTcxLDE3MiwxNzMsMTc0LDE3NSwxNzYsMTc3LDkzLDM2LDQyLDQxLDU5
LDk0LAotICAgICAgICAgICAgICAgICAgICA0NSw0NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4Mywx
ODQsMTg1LDEyNCw0NCwzNyw5NSw2Miw2MywKLSAgICAgICAgICAgICAgICAgICAgMTg2LDE4Nywx
ODgsMTg5LDE5MCwxOTEsMTkyLDE5MywxOTQsOTYsNTgsMzUsNjQsMzksNjEsMzQsCi0gICAgICAg
ICAgICAgICAgICAgIDE5NSw5Nyw5OCw5OSwxMDAsMTAxLDEwMiwxMDMsMTA0LDEwNSwxOTYsMTk3
LDE5OCwxOTksMjAwLAotICAgICAgICAgICAgICAgICAgICAyMDEsMjAyLDEwNiwxMDcsMTA4LDEw
OSwxMTAsMTExLDExMiwxMTMsMTE0LDIwMywyMDQsMjA1LAotICAgICAgICAgICAgICAgICAgICAy
MDYsMjA3LDIwOCwyMDksMTI2LDExNSwxMTYsMTE3LDExOCwxMTksMTIwLDEyMSwxMjIsMjEwLAot
ICAgICAgICAgICAgICAgICAgICAyMTEsMjEyLDIxMywyMTQsMjE1LDIxNiwyMTcsMjE4LDIxOSwy
MjAsMjIxLDIyMiwyMjMsMjI0LAotICAgICAgICAgICAgICAgICAgICAyMjUsMjI2LDIyNywyMjgs
MjI5LDIzMCwyMzEsMTIzLDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLAotICAgICAgICAgICAgICAg
ICAgICA3MywyMzIsMjMzLDIzNCwyMzUsMjM2LDIzNywxMjUsNzQsNzUsNzYsNzcsNzgsNzksODAs
ODEsCi0gICAgICAgICAgICAgICAgICAgIDgyLDIzOCwyMzksMjQwLDI0MSwyNDIsMjQzLDkyLDE1
OSw4Myw4NCw4NSw4Niw4Nyw4OCw4OSwKLSAgICAgICAgICAgICAgICAgICAgOTAsMjQ0LDI0NSwy
NDYsMjQ3LDI0OCwyNDksNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsCi0gICAgICAgICAg
ICAgICAgICAgIDI1MCwyNTEsMjUyLDI1MywyNTQsMjU1KQotICAgICAgICAgICAgaW1wb3J0IHN0
cmluZwotICAgICAgICAgICAgYy5FQkNESUNfVE9fQVNDSUlfTUFQID0gc3RyaW5nLm1ha2V0cmFu
cyggXAotICAgICAgICAgICAgJycuam9pbihtYXAoY2hyLCByYW5nZSgyNTYpKSksICcnLmpvaW4o
bWFwKGNociwgZW1hcCkpKQotICAgICAgICByZXR1cm4gcy50cmFuc2xhdGUoYy5FQkNESUNfVE9f
QVNDSUlfTUFQKQotCi0gICAgTVNfQ0hBUlMgPSB7ICdceDgwJyA6ICgnZXVybycsICcyMEFDJyks
Ci0gICAgICAgICAgICAgICAgICdceDgxJyA6ICcgJywKLSAgICAgICAgICAgICAgICAgJ1x4ODIn
IDogKCdzYnF1bycsICcyMDFBJyksCi0gICAgICAgICAgICAgICAgICdceDgzJyA6ICgnZm5vZics
ICcxOTInKSwKLSAgICAgICAgICAgICAgICAgJ1x4ODQnIDogKCdiZHF1bycsICcyMDFFJyksCi0g
ICAgICAgICAgICAgICAgICdceDg1JyA6ICgnaGVsbGlwJywgJzIwMjYnKSwKLSAgICAgICAgICAg
ICAgICAgJ1x4ODYnIDogKCdkYWdnZXInLCAnMjAyMCcpLAotICAgICAgICAgICAgICAgICAnXHg4
NycgOiAoJ0RhZ2dlcicsICcyMDIxJyksCi0gICAgICAgICAgICAgICAgICdceDg4JyA6ICgnY2ly
YycsICcyQzYnKSwKLSAgICAgICAgICAgICAgICAgJ1x4ODknIDogKCdwZXJtaWwnLCAnMjAzMCcp
LAotICAgICAgICAgICAgICAgICAnXHg4QScgOiAoJ1NjYXJvbicsICcxNjAnKSwKLSAgICAgICAg
ICAgICAgICAgJ1x4OEInIDogKCdsc2FxdW8nLCAnMjAzOScpLAotICAgICAgICAgICAgICAgICAn
XHg4QycgOiAoJ09FbGlnJywgJzE1MicpLAotICAgICAgICAgICAgICAgICAnXHg4RCcgOiAnPycs
Ci0gICAgICAgICAgICAgICAgICdceDhFJyA6ICgnI3gxN0QnLCAnMTdEJyksCi0gICAgICAgICAg
ICAgICAgICdceDhGJyA6ICc/JywKLSAgICAgICAgICAgICAgICAgJ1x4OTAnIDogJz8nLAotICAg
ICAgICAgICAgICAgICAnXHg5MScgOiAoJ2xzcXVvJywgJzIwMTgnKSwKLSAgICAgICAgICAgICAg
ICAgJ1x4OTInIDogKCdyc3F1bycsICcyMDE5JyksCi0gICAgICAgICAgICAgICAgICdceDkzJyA6
ICgnbGRxdW8nLCAnMjAxQycpLAotICAgICAgICAgICAgICAgICAnXHg5NCcgOiAoJ3JkcXVvJywg
JzIwMUQnKSwKLSAgICAgICAgICAgICAgICAgJ1x4OTUnIDogKCdidWxsJywgJzIwMjInKSwKLSAg
ICAgICAgICAgICAgICAgJ1x4OTYnIDogKCduZGFzaCcsICcyMDEzJyksCi0gICAgICAgICAgICAg
ICAgICdceDk3JyA6ICgnbWRhc2gnLCAnMjAxNCcpLAotICAgICAgICAgICAgICAgICAnXHg5OCcg
OiAoJ3RpbGRlJywgJzJEQycpLAotICAgICAgICAgICAgICAgICAnXHg5OScgOiAoJ3RyYWRlJywg
JzIxMjInKSwKLSAgICAgICAgICAgICAgICAgJ1x4OWEnIDogKCdzY2Fyb24nLCAnMTYxJyksCi0g
ICAgICAgICAgICAgICAgICdceDliJyA6ICgncnNhcXVvJywgJzIwM0EnKSwKLSAgICAgICAgICAg
ICAgICAgJ1x4OWMnIDogKCdvZWxpZycsICcxNTMnKSwKLSAgICAgICAgICAgICAgICAgJ1x4OWQn
IDogJz8nLAotICAgICAgICAgICAgICAgICAnXHg5ZScgOiAoJyN4MTdFJywgJzE3RScpLAotICAg
ICAgICAgICAgICAgICAnXHg5ZicgOiAoJ1l1bWwnLCAnJyksfQotCi0jIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwot
Ci0KLSNCeSBkZWZhdWx0LCBhY3QgYXMgYW4gSFRNTCBwcmV0dHktcHJpbnRlci4KLWlmIF9fbmFt
ZV9fID09ICdfX21haW5fXyc6Ci0gICAgaW1wb3J0IHN5cwotICAgIHNvdXAgPSBCZWF1dGlmdWxT
b3VwKHN5cy5zdGRpbikKLSAgICBwcmludCBzb3VwLnByZXR0aWZ5KCkKSW5kZXg6IFdlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvYnVnemlsbGEucHkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9idWd6aWxsYS5weQkocmV2aXNpb24gNTUwNTIpCisrKyBXZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2J1Z3ppbGxhLnB5CSh3b3JraW5nIGNvcHkpCkBAIC00
MSw5ICs0MSw5IEBAIGZyb20gd2Via2l0cHkuY29tbWl0dGVycyBpbXBvcnQgQ29tbWl0dGUKIGZy
b20gd2Via2l0cHkuY3JlZGVudGlhbHMgaW1wb3J0IENyZWRlbnRpYWxzCiBmcm9tIHdlYmtpdHB5
LnVzZXIgaW1wb3J0IFVzZXIKIAotIyBXZWJLaXQgaW5jbHVkZXMgYSBidWlsdCBjb3B5IG9mIEJl
YXV0aWZ1bFNvdXAgaW4gU2NyaXB0cy93ZWJraXRweQorIyBXZWJLaXQgaW5jbHVkZXMgYSBidWls
dCBjb3B5IG9mIEJlYXV0aWZ1bFNvdXAgaW4gU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5CiAj
IHNvIHRoaXMgaW1wb3J0IHNob3VsZCBhbHdheXMgc3VjY2VlZC4KLWZyb20gLkJlYXV0aWZ1bFNv
dXAgaW1wb3J0IEJlYXV0aWZ1bFNvdXAsIFNvdXBTdHJhaW5lcgorZnJvbSB3ZWJraXRweS50aGly
ZHBhcnR5LkJlYXV0aWZ1bFNvdXAgaW1wb3J0IEJlYXV0aWZ1bFNvdXAsIFNvdXBTdHJhaW5lcgog
CiBmcm9tIG1lY2hhbml6ZSBpbXBvcnQgQnJvd3NlcgogCkluZGV4OiBXZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2J1Z3ppbGxhX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvYnVnemlsbGFfdW5pdHRlc3QucHkJKHJldmlzaW9uIDU1MDUy
KQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9idWd6aWxsYV91bml0dGVzdC5weQko
d29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQCBmcm9tIHdlYmtpdHB5LmJ1Z3ppbGxhIGlt
cG9ydCBCdWd6aWxsYSwgCiBmcm9tIHdlYmtpdHB5Lm91dHB1dGNhcHR1cmUgaW1wb3J0IE91dHB1
dENhcHR1cmUKIGZyb20gd2Via2l0cHkubW9jayBpbXBvcnQgTW9jawogCi1mcm9tIHdlYmtpdHB5
LkJlYXV0aWZ1bFNvdXAgaW1wb3J0IEJlYXV0aWZ1bFNvdXAKK2Zyb20gd2Via2l0cHkudGhpcmRw
YXJ0eS5CZWF1dGlmdWxTb3VwIGltcG9ydCBCZWF1dGlmdWxTb3VwCiAKIAogY2xhc3MgTW9ja0Jy
b3dzZXIob2JqZWN0KToKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvYnVpbGRi
b3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9idWlsZGJv
dC5weQkocmV2aXNpb24gNTUwNTIpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2J1
aWxkYm90LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zNCw5ICszNCw5IEBAIGltcG9ydCB1cmxsaWIy
CiAjIEltcG9ydCBXZWJLaXQtc3BlY2lmaWMgbW9kdWxlcy4KIGZyb20gd2Via2l0cHkud2Via2l0
X2xvZ2dpbmcgaW1wb3J0IGxvZwogCi0jIFdlYktpdCBpbmNsdWRlcyBhIGJ1aWx0IGNvcHkgb2Yg
QmVhdXRpZnVsU291cCBpbiBTY3JpcHRzL3dlYmtpdHB5CisjIFdlYktpdCBpbmNsdWRlcyBhIGJ1
aWx0IGNvcHkgb2YgQmVhdXRpZnVsU291cCBpbiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkK
ICMgc28gdGhpcyBpbXBvcnQgc2hvdWxkIGFsd2F5cyBzdWNjZWVkLgotZnJvbSAuQmVhdXRpZnVs
U291cCBpbXBvcnQgQmVhdXRpZnVsU291cAorZnJvbSB3ZWJraXRweS50aGlyZHBhcnR5LkJlYXV0
aWZ1bFNvdXAgaW1wb3J0IEJlYXV0aWZ1bFNvdXAKIAogCiBjbGFzcyBCdWlsZEJvdDoKSW5kZXg6
IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvYnVpbGRib3RfdW5pdHRlc3QucHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9idWlsZGJvdF91bml0dGVzdC5w
eQkocmV2aXNpb24gNTUwNTIpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2J1aWxk
Ym90X3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBAIGltcG9ydCB1
bml0dGVzdAogCiBmcm9tIHdlYmtpdHB5LmJ1aWxkYm90IGltcG9ydCBCdWlsZEJvdAogCi1mcm9t
IHdlYmtpdHB5LkJlYXV0aWZ1bFNvdXAgaW1wb3J0IEJlYXV0aWZ1bFNvdXAKK2Zyb20gd2Via2l0
cHkudGhpcmRwYXJ0eS5CZWF1dGlmdWxTb3VwIGltcG9ydCBCZWF1dGlmdWxTb3VwCiAKIGNsYXNz
IEJ1aWxkQm90VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKSW5kZXg6IFdlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvc3RhdHVzc2VydmVyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvc3RhdHVzc2VydmVyLnB5CShyZXZpc2lvbiA1NTA1MikKKysrIFdl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3RhdHVzc2VydmVyLnB5CSh3b3JraW5nIGNvcHkp
CkBAIC0zMCw5ICszMCw5IEBAIGZyb20gd2Via2l0cHkubmV0d29ya3RyYW5zYWN0aW9uIGltcG9y
dCAKIGZyb20gd2Via2l0cHkud2Via2l0X2xvZ2dpbmcgaW1wb3J0IGxvZwogZnJvbSBtZWNoYW5p
emUgaW1wb3J0IEJyb3dzZXIKIAotIyBXZWJLaXQgaW5jbHVkZXMgYSBidWlsdCBjb3B5IG9mIEJl
YXV0aWZ1bFNvdXAgaW4gU2NyaXB0cy93ZWJraXRweQorIyBXZWJLaXQgaW5jbHVkZXMgYSBidWls
dCBjb3B5IG9mIEJlYXV0aWZ1bFNvdXAgaW4gU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5CiAj
IHNvIHRoaXMgaW1wb3J0IHNob3VsZCBhbHdheXMgc3VjY2VlZC4KLWZyb20gLkJlYXV0aWZ1bFNv
dXAgaW1wb3J0IEJlYXV0aWZ1bFNvdXAKK2Zyb20gd2Via2l0cHkudGhpcmRwYXJ0eS5CZWF1dGlm
dWxTb3VwIGltcG9ydCBCZWF1dGlmdWxTb3VwCiAKIGltcG9ydCB1cmxsaWIyCiAKSW5kZXg6IFdl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9CZWF1dGlmdWxTb3VwLnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9CZWF1
dGlmdWxTb3VwLnB5CShyZXZpc2lvbiA1NTA1MikJKGZyb20gV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9CZWF1dGlmdWxTb3VwLnB5OjU1MDUyKQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS90aGlyZHBhcnR5L0JlYXV0aWZ1bFNvdXAucHkJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwyMDAwIEBACisiIiJCZWF1dGlmdWwgU291cAorRWxpeGlyIGFuZCBUb25pYworIlRoZSBT
Y3JlZW4tU2NyYXBlcidzIEZyaWVuZCIKK2h0dHA6Ly93d3cuY3J1bW15LmNvbS9zb2Z0d2FyZS9C
ZWF1dGlmdWxTb3VwLworCitCZWF1dGlmdWwgU291cCBwYXJzZXMgYSAocG9zc2libHkgaW52YWxp
ZCkgWE1MIG9yIEhUTUwgZG9jdW1lbnQgaW50byBhCit0cmVlIHJlcHJlc2VudGF0aW9uLiBJdCBw
cm92aWRlcyBtZXRob2RzIGFuZCBQeXRob25pYyBpZGlvbXMgdGhhdCBtYWtlCitpdCBlYXN5IHRv
IG5hdmlnYXRlLCBzZWFyY2gsIGFuZCBtb2RpZnkgdGhlIHRyZWUuCisKK0Egd2VsbC1mb3JtZWQg
WE1ML0hUTUwgZG9jdW1lbnQgeWllbGRzIGEgd2VsbC1mb3JtZWQgZGF0YQorc3RydWN0dXJlLiBB
biBpbGwtZm9ybWVkIFhNTC9IVE1MIGRvY3VtZW50IHlpZWxkcyBhIGNvcnJlc3BvbmRpbmdseQor
aWxsLWZvcm1lZCBkYXRhIHN0cnVjdHVyZS4gSWYgeW91ciBkb2N1bWVudCBpcyBvbmx5IGxvY2Fs
bHkKK3dlbGwtZm9ybWVkLCB5b3UgY2FuIHVzZSB0aGlzIGxpYnJhcnkgdG8gZmluZCBhbmQgcHJv
Y2VzcyB0aGUKK3dlbGwtZm9ybWVkIHBhcnQgb2YgaXQuCisKK0JlYXV0aWZ1bCBTb3VwIHdvcmtz
IHdpdGggUHl0aG9uIDIuMiBhbmQgdXAuIEl0IGhhcyBubyBleHRlcm5hbAorZGVwZW5kZW5jaWVz
LCBidXQgeW91J2xsIGhhdmUgbW9yZSBzdWNjZXNzIGF0IGNvbnZlcnRpbmcgZGF0YSB0byBVVEYt
OAoraWYgeW91IGFsc28gaW5zdGFsbCB0aGVzZSB0aHJlZSBwYWNrYWdlczoKKworKiBjaGFyZGV0
LCBmb3IgYXV0by1kZXRlY3RpbmcgY2hhcmFjdGVyIGVuY29kaW5ncworICBodHRwOi8vY2hhcmRl
dC5mZWVkcGFyc2VyLm9yZy8KKyogY2prY29kZWNzIGFuZCBpY29udl9jb2RlYywgd2hpY2ggYWRk
IG1vcmUgZW5jb2RpbmdzIHRvIHRoZSBvbmVzIHN1cHBvcnRlZAorICBieSBzdG9jayBQeXRob24u
CisgIGh0dHA6Ly9jamtweXRob24uaTE4bi5vcmcvCisKK0JlYXV0aWZ1bCBTb3VwIGRlZmluZXMg
Y2xhc3NlcyBmb3IgdHdvIG1haW4gcGFyc2luZyBzdHJhdGVnaWVzOgorCisgKiBCZWF1dGlmdWxT
dG9uZVNvdXAsIGZvciBwYXJzaW5nIFhNTCwgU0dNTCwgb3IgeW91ciBkb21haW4tc3BlY2lmaWMK
KyAgIGxhbmd1YWdlIHRoYXQga2luZCBvZiBsb29rcyBsaWtlIFhNTC4KKworICogQmVhdXRpZnVs
U291cCwgZm9yIHBhcnNpbmcgcnVuLW9mLXRoZS1taWxsIEhUTUwgY29kZSwgYmUgaXQgdmFsaWQK
KyAgIG9yIGludmFsaWQuIFRoaXMgY2xhc3MgaGFzIHdlYiBicm93c2VyLWxpa2UgaGV1cmlzdGlj
cyBmb3IKKyAgIG9idGFpbmluZyBhIHNlbnNpYmxlIHBhcnNlIHRyZWUgaW4gdGhlIGZhY2Ugb2Yg
Y29tbW9uIEhUTUwgZXJyb3JzLgorCitCZWF1dGlmdWwgU291cCBhbHNvIGRlZmluZXMgYSBjbGFz
cyAoVW5pY29kZURhbW1pdCkgZm9yIGF1dG9kZXRlY3RpbmcKK3RoZSBlbmNvZGluZyBvZiBhbiBI
VE1MIG9yIFhNTCBkb2N1bWVudCwgYW5kIGNvbnZlcnRpbmcgaXQgdG8KK1VuaWNvZGUuIE11Y2gg
b2YgdGhpcyBjb2RlIGlzIHRha2VuIGZyb20gTWFyayBQaWxncmltJ3MgVW5pdmVyc2FsIEZlZWQg
UGFyc2VyLgorCitGb3IgbW9yZSB0aGFuIHlvdSBldmVyIHdhbnRlZCB0byBrbm93IGFib3V0IEJl
YXV0aWZ1bCBTb3VwLCBzZWUgdGhlCitkb2N1bWVudGF0aW9uOgoraHR0cDovL3d3dy5jcnVtbXku
Y29tL3NvZnR3YXJlL0JlYXV0aWZ1bFNvdXAvZG9jdW1lbnRhdGlvbi5odG1sCisKK0hlcmUsIGhh
dmUgc29tZSBsZWdhbGVzZToKKworQ29weXJpZ2h0IChjKSAyMDA0LTIwMDksIExlb25hcmQgUmlj
aGFyZHNvbgorCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKK21ldDoKKworICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICAgIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgICAgZGlzY2xh
aW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
CisgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0
aGUgdGhlIEJlYXV0aWZ1bCBTb3VwIENvbnNvcnRpdW0gYW5kIEFsbAorICAgIE5pZ2h0IEtvc2hl
ciBCYWtlcnkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZQorICAgIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3
YXJlCisgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKK0EgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCitD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKK0VYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKK1BST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUworU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UsIERBTU1JVC4KKworIiIiCitmcm9tIF9fZnV0dXJlX18gaW1w
b3J0IGdlbmVyYXRvcnMKKworX19hdXRob3JfXyA9ICJMZW9uYXJkIFJpY2hhcmRzb24gKGxlb25h
cmRyQHNlZ2ZhdWx0Lm9yZykiCitfX3ZlcnNpb25fXyA9ICIzLjEuMC4xIgorX19jb3B5cmlnaHRf
XyA9ICJDb3B5cmlnaHQgKGMpIDIwMDQtMjAwOSBMZW9uYXJkIFJpY2hhcmRzb24iCitfX2xpY2Vu
c2VfXyA9ICJOZXctc3R5bGUgQlNEIgorCitpbXBvcnQgY29kZWNzCitpbXBvcnQgbWFya3VwYmFz
ZQoraW1wb3J0IHR5cGVzCitpbXBvcnQgcmUKK2Zyb20gSFRNTFBhcnNlciBpbXBvcnQgSFRNTFBh
cnNlciwgSFRNTFBhcnNlRXJyb3IKK3RyeToKKyAgICBmcm9tIGh0bWxlbnRpdHlkZWZzIGltcG9y
dCBuYW1lMmNvZGVwb2ludAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIG5hbWUyY29kZXBvaW50
ID0ge30KK3RyeToKKyAgICBzZXQKK2V4Y2VwdCBOYW1lRXJyb3I6CisgICAgZnJvbSBzZXRzIGlt
cG9ydCBTZXQgYXMgc2V0CisKKyNUaGVzZSBoYWNrcyBtYWtlIEJlYXV0aWZ1bCBTb3VwIGFibGUg
dG8gcGFyc2UgWE1MIHdpdGggbmFtZXNwYWNlcworbWFya3VwYmFzZS5fZGVjbG5hbWVfbWF0Y2gg
PSByZS5jb21waWxlKHInW2EtekEtWl1bLV8uOmEtekEtWjAtOV0qXHMqJykubWF0Y2gKKworREVG
QVVMVF9PVVRQVVRfRU5DT0RJTkcgPSAidXRmLTgiCisKKyMgRmlyc3QsIHRoZSBjbGFzc2VzIHRo
YXQgcmVwcmVzZW50IG1hcmt1cCBlbGVtZW50cy4KKworZGVmIHNvYih1bmljb2RlLCBlbmNvZGlu
Zyk6CisgICAgIiIiUmV0dXJucyBlaXRoZXIgdGhlIGdpdmVuIFVuaWNvZGUgc3RyaW5nIG9yIGl0
cyBlbmNvZGluZy4iIiIKKyAgICBpZiBlbmNvZGluZyBpcyBOb25lOgorICAgICAgICByZXR1cm4g
dW5pY29kZQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiB1bmljb2RlLmVuY29kZShlbmNvZGlu
ZykKKworY2xhc3MgUGFnZUVsZW1lbnQ6CisgICAgIiIiQ29udGFpbnMgdGhlIG5hdmlnYXRpb25h
bCBpbmZvcm1hdGlvbiBmb3Igc29tZSBwYXJ0IG9mIHRoZSBwYWdlCisgICAgKGVpdGhlciBhIHRh
ZyBvciBhIHBpZWNlIG9mIHRleHQpIiIiCisKKyAgICBkZWYgc2V0dXAoc2VsZiwgcGFyZW50PU5v
bmUsIHByZXZpb3VzPU5vbmUpOgorICAgICAgICAiIiJTZXRzIHVwIHRoZSBpbml0aWFsIHJlbGF0
aW9ucyBiZXR3ZWVuIHRoaXMgZWxlbWVudCBhbmQKKyAgICAgICAgb3RoZXIgZWxlbWVudHMuIiIi
CisgICAgICAgIHNlbGYucGFyZW50ID0gcGFyZW50CisgICAgICAgIHNlbGYucHJldmlvdXMgPSBw
cmV2aW91cworICAgICAgICBzZWxmLm5leHQgPSBOb25lCisgICAgICAgIHNlbGYucHJldmlvdXNT
aWJsaW5nID0gTm9uZQorICAgICAgICBzZWxmLm5leHRTaWJsaW5nID0gTm9uZQorICAgICAgICBp
ZiBzZWxmLnBhcmVudCBhbmQgc2VsZi5wYXJlbnQuY29udGVudHM6CisgICAgICAgICAgICBzZWxm
LnByZXZpb3VzU2libGluZyA9IHNlbGYucGFyZW50LmNvbnRlbnRzWy0xXQorICAgICAgICAgICAg
c2VsZi5wcmV2aW91c1NpYmxpbmcubmV4dFNpYmxpbmcgPSBzZWxmCisKKyAgICBkZWYgcmVwbGFj
ZVdpdGgoc2VsZiwgcmVwbGFjZVdpdGgpOgorICAgICAgICBvbGRQYXJlbnQgPSBzZWxmLnBhcmVu
dAorICAgICAgICBteUluZGV4ID0gc2VsZi5wYXJlbnQuY29udGVudHMuaW5kZXgoc2VsZikKKyAg
ICAgICAgaWYgaGFzYXR0cihyZXBsYWNlV2l0aCwgJ3BhcmVudCcpIGFuZCByZXBsYWNlV2l0aC5w
YXJlbnQgPT0gc2VsZi5wYXJlbnQ6CisgICAgICAgICAgICAjIFdlJ3JlIHJlcGxhY2luZyB0aGlz
IGVsZW1lbnQgd2l0aCBvbmUgb2YgaXRzIHNpYmxpbmdzLgorICAgICAgICAgICAgaW5kZXggPSBz
ZWxmLnBhcmVudC5jb250ZW50cy5pbmRleChyZXBsYWNlV2l0aCkKKyAgICAgICAgICAgIGlmIGlu
ZGV4IGFuZCBpbmRleCA8IG15SW5kZXg6CisgICAgICAgICAgICAgICAgIyBGdXJ0aGVybW9yZSwg
aXQgY29tZXMgYmVmb3JlIHRoaXMgZWxlbWVudC4gVGhhdAorICAgICAgICAgICAgICAgICMgbWVh
bnMgdGhhdCB3aGVuIHdlIGV4dHJhY3QgaXQsIHRoZSBpbmRleCBvZiB0aGlzCisgICAgICAgICAg
ICAgICAgIyBlbGVtZW50IHdpbGwgY2hhbmdlLgorICAgICAgICAgICAgICAgIG15SW5kZXggPSBt
eUluZGV4IC0gMQorICAgICAgICBzZWxmLmV4dHJhY3QoKQorICAgICAgICBvbGRQYXJlbnQuaW5z
ZXJ0KG15SW5kZXgsIHJlcGxhY2VXaXRoKQorCisgICAgZGVmIGV4dHJhY3Qoc2VsZik6CisgICAg
ICAgICIiIkRlc3RydWN0aXZlbHkgcmlwcyB0aGlzIGVsZW1lbnQgb3V0IG9mIHRoZSB0cmVlLiIi
IgorICAgICAgICBpZiBzZWxmLnBhcmVudDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAg
ICAgICBzZWxmLnBhcmVudC5jb250ZW50cy5yZW1vdmUoc2VsZikKKyAgICAgICAgICAgIGV4Y2Vw
dCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAjRmluZCB0aGUg
dHdvIGVsZW1lbnRzIHRoYXQgd291bGQgYmUgbmV4dCB0byBlYWNoIG90aGVyIGlmCisgICAgICAg
ICN0aGlzIGVsZW1lbnQgKGFuZCBhbnkgY2hpbGRyZW4pIGhhZG4ndCBiZWVuIHBhcnNlZC4gQ29u
bmVjdAorICAgICAgICAjdGhlIHR3by4KKyAgICAgICAgbGFzdENoaWxkID0gc2VsZi5fbGFzdFJl
Y3Vyc2l2ZUNoaWxkKCkKKyAgICAgICAgbmV4dEVsZW1lbnQgPSBsYXN0Q2hpbGQubmV4dAorCisg
ICAgICAgIGlmIHNlbGYucHJldmlvdXM6CisgICAgICAgICAgICBzZWxmLnByZXZpb3VzLm5leHQg
PSBuZXh0RWxlbWVudAorICAgICAgICBpZiBuZXh0RWxlbWVudDoKKyAgICAgICAgICAgIG5leHRF
bGVtZW50LnByZXZpb3VzID0gc2VsZi5wcmV2aW91cworICAgICAgICBzZWxmLnByZXZpb3VzID0g
Tm9uZQorICAgICAgICBsYXN0Q2hpbGQubmV4dCA9IE5vbmUKKworICAgICAgICBzZWxmLnBhcmVu
dCA9IE5vbmUKKyAgICAgICAgaWYgc2VsZi5wcmV2aW91c1NpYmxpbmc6CisgICAgICAgICAgICBz
ZWxmLnByZXZpb3VzU2libGluZy5uZXh0U2libGluZyA9IHNlbGYubmV4dFNpYmxpbmcKKyAgICAg
ICAgaWYgc2VsZi5uZXh0U2libGluZzoKKyAgICAgICAgICAgIHNlbGYubmV4dFNpYmxpbmcucHJl
dmlvdXNTaWJsaW5nID0gc2VsZi5wcmV2aW91c1NpYmxpbmcKKyAgICAgICAgc2VsZi5wcmV2aW91
c1NpYmxpbmcgPSBzZWxmLm5leHRTaWJsaW5nID0gTm9uZQorICAgICAgICByZXR1cm4gc2VsZgor
CisgICAgZGVmIF9sYXN0UmVjdXJzaXZlQ2hpbGQoc2VsZik6CisgICAgICAgICJGaW5kcyB0aGUg
bGFzdCBlbGVtZW50IGJlbmVhdGggdGhpcyBvYmplY3QgdG8gYmUgcGFyc2VkLiIKKyAgICAgICAg
bGFzdENoaWxkID0gc2VsZgorICAgICAgICB3aGlsZSBoYXNhdHRyKGxhc3RDaGlsZCwgJ2NvbnRl
bnRzJykgYW5kIGxhc3RDaGlsZC5jb250ZW50czoKKyAgICAgICAgICAgIGxhc3RDaGlsZCA9IGxh
c3RDaGlsZC5jb250ZW50c1stMV0KKyAgICAgICAgcmV0dXJuIGxhc3RDaGlsZAorCisgICAgZGVm
IGluc2VydChzZWxmLCBwb3NpdGlvbiwgbmV3Q2hpbGQpOgorICAgICAgICBpZiAoaXNpbnN0YW5j
ZShuZXdDaGlsZCwgYmFzZXN0cmluZykKKyAgICAgICAgICAgIG9yIGlzaW5zdGFuY2UobmV3Q2hp
bGQsIHVuaWNvZGUpKSBcCisgICAgICAgICAgICBhbmQgbm90IGlzaW5zdGFuY2UobmV3Q2hpbGQs
IE5hdmlnYWJsZVN0cmluZyk6CisgICAgICAgICAgICBuZXdDaGlsZCA9IE5hdmlnYWJsZVN0cmlu
ZyhuZXdDaGlsZCkKKworICAgICAgICBwb3NpdGlvbiA9ICBtaW4ocG9zaXRpb24sIGxlbihzZWxm
LmNvbnRlbnRzKSkKKyAgICAgICAgaWYgaGFzYXR0cihuZXdDaGlsZCwgJ3BhcmVudCcpIGFuZCBu
ZXdDaGlsZC5wYXJlbnQgIT0gTm9uZToKKyAgICAgICAgICAgICMgV2UncmUgJ2luc2VydGluZycg
YW4gZWxlbWVudCB0aGF0J3MgYWxyZWFkeSBvbmUKKyAgICAgICAgICAgICMgb2YgdGhpcyBvYmpl
Y3QncyBjaGlsZHJlbi4KKyAgICAgICAgICAgIGlmIG5ld0NoaWxkLnBhcmVudCA9PSBzZWxmOgor
ICAgICAgICAgICAgICAgIGluZGV4ID0gc2VsZi5maW5kKG5ld0NoaWxkKQorICAgICAgICAgICAg
ICAgIGlmIGluZGV4IGFuZCBpbmRleCA8IHBvc2l0aW9uOgorICAgICAgICAgICAgICAgICAgICAj
IEZ1cnRoZXJtb3JlIHdlJ3JlIG1vdmluZyBpdCBmdXJ0aGVyIGRvd24gdGhlCisgICAgICAgICAg
ICAgICAgICAgICMgbGlzdCBvZiB0aGlzIG9iamVjdCdzIGNoaWxkcmVuLiBUaGF0IG1lYW5zIHRo
YXQKKyAgICAgICAgICAgICAgICAgICAgIyB3aGVuIHdlIGV4dHJhY3QgdGhpcyBlbGVtZW50LCBv
dXIgdGFyZ2V0IGluZGV4CisgICAgICAgICAgICAgICAgICAgICMgd2lsbCBqdW1wIGRvd24gb25l
LgorICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uIC0gMQorICAgICAgICAg
ICAgbmV3Q2hpbGQuZXh0cmFjdCgpCisKKyAgICAgICAgbmV3Q2hpbGQucGFyZW50ID0gc2VsZgor
ICAgICAgICBwcmV2aW91c0NoaWxkID0gTm9uZQorICAgICAgICBpZiBwb3NpdGlvbiA9PSAwOgor
ICAgICAgICAgICAgbmV3Q2hpbGQucHJldmlvdXNTaWJsaW5nID0gTm9uZQorICAgICAgICAgICAg
bmV3Q2hpbGQucHJldmlvdXMgPSBzZWxmCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmV2
aW91c0NoaWxkID0gc2VsZi5jb250ZW50c1twb3NpdGlvbi0xXQorICAgICAgICAgICAgbmV3Q2hp
bGQucHJldmlvdXNTaWJsaW5nID0gcHJldmlvdXNDaGlsZAorICAgICAgICAgICAgbmV3Q2hpbGQu
cHJldmlvdXNTaWJsaW5nLm5leHRTaWJsaW5nID0gbmV3Q2hpbGQKKyAgICAgICAgICAgIG5ld0No
aWxkLnByZXZpb3VzID0gcHJldmlvdXNDaGlsZC5fbGFzdFJlY3Vyc2l2ZUNoaWxkKCkKKyAgICAg
ICAgaWYgbmV3Q2hpbGQucHJldmlvdXM6CisgICAgICAgICAgICBuZXdDaGlsZC5wcmV2aW91cy5u
ZXh0ID0gbmV3Q2hpbGQKKworICAgICAgICBuZXdDaGlsZHNMYXN0RWxlbWVudCA9IG5ld0NoaWxk
Ll9sYXN0UmVjdXJzaXZlQ2hpbGQoKQorCisgICAgICAgIGlmIHBvc2l0aW9uID49IGxlbihzZWxm
LmNvbnRlbnRzKToKKyAgICAgICAgICAgIG5ld0NoaWxkLm5leHRTaWJsaW5nID0gTm9uZQorCisg
ICAgICAgICAgICBwYXJlbnQgPSBzZWxmCisgICAgICAgICAgICBwYXJlbnRzTmV4dFNpYmxpbmcg
PSBOb25lCisgICAgICAgICAgICB3aGlsZSBub3QgcGFyZW50c05leHRTaWJsaW5nOgorICAgICAg
ICAgICAgICAgIHBhcmVudHNOZXh0U2libGluZyA9IHBhcmVudC5uZXh0U2libGluZworICAgICAg
ICAgICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQKKyAgICAgICAgICAgICAgICBpZiBub3Qg
cGFyZW50OiAjIFRoaXMgaXMgdGhlIGxhc3QgZWxlbWVudCBpbiB0aGUgZG9jdW1lbnQuCisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBwYXJlbnRzTmV4dFNpYmxpbmc6
CisgICAgICAgICAgICAgICAgbmV3Q2hpbGRzTGFzdEVsZW1lbnQubmV4dCA9IHBhcmVudHNOZXh0
U2libGluZworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBuZXdDaGlsZHNMYXN0
RWxlbWVudC5uZXh0ID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbmV4dENoaWxk
ID0gc2VsZi5jb250ZW50c1twb3NpdGlvbl0KKyAgICAgICAgICAgIG5ld0NoaWxkLm5leHRTaWJs
aW5nID0gbmV4dENoaWxkCisgICAgICAgICAgICBpZiBuZXdDaGlsZC5uZXh0U2libGluZzoKKyAg
ICAgICAgICAgICAgICBuZXdDaGlsZC5uZXh0U2libGluZy5wcmV2aW91c1NpYmxpbmcgPSBuZXdD
aGlsZAorICAgICAgICAgICAgbmV3Q2hpbGRzTGFzdEVsZW1lbnQubmV4dCA9IG5leHRDaGlsZAor
CisgICAgICAgIGlmIG5ld0NoaWxkc0xhc3RFbGVtZW50Lm5leHQ6CisgICAgICAgICAgICBuZXdD
aGlsZHNMYXN0RWxlbWVudC5uZXh0LnByZXZpb3VzID0gbmV3Q2hpbGRzTGFzdEVsZW1lbnQKKyAg
ICAgICAgc2VsZi5jb250ZW50cy5pbnNlcnQocG9zaXRpb24sIG5ld0NoaWxkKQorCisgICAgZGVm
IGFwcGVuZChzZWxmLCB0YWcpOgorICAgICAgICAiIiJBcHBlbmRzIHRoZSBnaXZlbiB0YWcgdG8g
dGhlIGNvbnRlbnRzIG9mIHRoaXMgdGFnLiIiIgorICAgICAgICBzZWxmLmluc2VydChsZW4oc2Vs
Zi5jb250ZW50cyksIHRhZykKKworICAgIGRlZiBmaW5kTmV4dChzZWxmLCBuYW1lPU5vbmUsIGF0
dHJzPXt9LCB0ZXh0PU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgZmly
c3QgaXRlbSB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuIGNyaXRlcmlhIGFuZAorICAgICAgICBhcHBl
YXJzIGFmdGVyIHRoaXMgVGFnIGluIHRoZSBkb2N1bWVudC4iIiIKKyAgICAgICAgcmV0dXJuIHNl
bGYuX2ZpbmRPbmUoc2VsZi5maW5kQWxsTmV4dCwgbmFtZSwgYXR0cnMsIHRleHQsICoqa3dhcmdz
KQorCisgICAgZGVmIGZpbmRBbGxOZXh0KHNlbGYsIG5hbWU9Tm9uZSwgYXR0cnM9e30sIHRleHQ9
Tm9uZSwgbGltaXQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpOgorICAgICAg
ICAiIiJSZXR1cm5zIGFsbCBpdGVtcyB0aGF0IG1hdGNoIHRoZSBnaXZlbiBjcml0ZXJpYSBhbmQg
YXBwZWFyCisgICAgICAgIGFmdGVyIHRoaXMgVGFnIGluIHRoZSBkb2N1bWVudC4iIiIKKyAgICAg
ICAgcmV0dXJuIHNlbGYuX2ZpbmRBbGwobmFtZSwgYXR0cnMsIHRleHQsIGxpbWl0LCBzZWxmLm5l
eHRHZW5lcmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKQorCisg
ICAgZGVmIGZpbmROZXh0U2libGluZyhzZWxmLCBuYW1lPU5vbmUsIGF0dHJzPXt9LCB0ZXh0PU5v
bmUsICoqa3dhcmdzKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgY2xvc2VzdCBzaWJsaW5nIHRv
IHRoaXMgVGFnIHRoYXQgbWF0Y2hlcyB0aGUKKyAgICAgICAgZ2l2ZW4gY3JpdGVyaWEgYW5kIGFw
cGVhcnMgYWZ0ZXIgdGhpcyBUYWcgaW4gdGhlIGRvY3VtZW50LiIiIgorICAgICAgICByZXR1cm4g
c2VsZi5fZmluZE9uZShzZWxmLmZpbmROZXh0U2libGluZ3MsIG5hbWUsIGF0dHJzLCB0ZXh0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKmt3YXJncykKKworICAgIGRlZiBmaW5kTmV4
dFNpYmxpbmdzKHNlbGYsIG5hbWU9Tm9uZSwgYXR0cnM9e30sIHRleHQ9Tm9uZSwgbGltaXQ9Tm9u
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAqKmt3YXJncyk6CisgICAgICAgICIiIlJldHVy
bnMgdGhlIHNpYmxpbmdzIG9mIHRoaXMgVGFnIHRoYXQgbWF0Y2ggdGhlIGdpdmVuCisgICAgICAg
IGNyaXRlcmlhIGFuZCBhcHBlYXIgYWZ0ZXIgdGhpcyBUYWcgaW4gdGhlIGRvY3VtZW50LiIiIgor
ICAgICAgICByZXR1cm4gc2VsZi5fZmluZEFsbChuYW1lLCBhdHRycywgdGV4dCwgbGltaXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubmV4dFNpYmxpbmdHZW5lcmF0b3IsICoq
a3dhcmdzKQorICAgIGZldGNoTmV4dFNpYmxpbmdzID0gZmluZE5leHRTaWJsaW5ncyAjIENvbXBh
dGliaWxpdHkgd2l0aCBwcmUtMy54CisKKyAgICBkZWYgZmluZFByZXZpb3VzKHNlbGYsIG5hbWU9
Tm9uZSwgYXR0cnM9e30sIHRleHQ9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICAiIiJSZXR1cm5z
IHRoZSBmaXJzdCBpdGVtIHRoYXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gY3JpdGVyaWEgYW5kCisgICAg
ICAgIGFwcGVhcnMgYmVmb3JlIHRoaXMgVGFnIGluIHRoZSBkb2N1bWVudC4iIiIKKyAgICAgICAg
cmV0dXJuIHNlbGYuX2ZpbmRPbmUoc2VsZi5maW5kQWxsUHJldmlvdXMsIG5hbWUsIGF0dHJzLCB0
ZXh0LCAqKmt3YXJncykKKworICAgIGRlZiBmaW5kQWxsUHJldmlvdXMoc2VsZiwgbmFtZT1Ob25l
LCBhdHRycz17fSwgdGV4dD1Ob25lLCBsaW1pdD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAg
ICAgKiprd2FyZ3MpOgorICAgICAgICAiIiJSZXR1cm5zIGFsbCBpdGVtcyB0aGF0IG1hdGNoIHRo
ZSBnaXZlbiBjcml0ZXJpYSBhbmQgYXBwZWFyCisgICAgICAgIGJlZm9yZSB0aGlzIFRhZyBpbiB0
aGUgZG9jdW1lbnQuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9maW5kQWxsKG5hbWUsIGF0dHJz
LCB0ZXh0LCBsaW1pdCwgc2VsZi5wcmV2aW91c0dlbmVyYXRvciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICoqa3dhcmdzKQorICAgIGZldGNoUHJldmlvdXMgPSBmaW5kQWxsUHJldmlvdXMg
IyBDb21wYXRpYmlsaXR5IHdpdGggcHJlLTMueAorCisgICAgZGVmIGZpbmRQcmV2aW91c1NpYmxp
bmcoc2VsZiwgbmFtZT1Ob25lLCBhdHRycz17fSwgdGV4dD1Ob25lLCAqKmt3YXJncyk6CisgICAg
ICAgICIiIlJldHVybnMgdGhlIGNsb3Nlc3Qgc2libGluZyB0byB0aGlzIFRhZyB0aGF0IG1hdGNo
ZXMgdGhlCisgICAgICAgIGdpdmVuIGNyaXRlcmlhIGFuZCBhcHBlYXJzIGJlZm9yZSB0aGlzIFRh
ZyBpbiB0aGUgZG9jdW1lbnQuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9maW5kT25lKHNlbGYu
ZmluZFByZXZpb3VzU2libGluZ3MsIG5hbWUsIGF0dHJzLCB0ZXh0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAqKmt3YXJncykKKworICAgIGRlZiBmaW5kUHJldmlvdXNTaWJsaW5ncyhz
ZWxmLCBuYW1lPU5vbmUsIGF0dHJzPXt9LCB0ZXh0PU5vbmUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxpbWl0PU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUg
c2libGluZ3Mgb2YgdGhpcyBUYWcgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4KKyAgICAgICAgY3JpdGVy
aWEgYW5kIGFwcGVhciBiZWZvcmUgdGhpcyBUYWcgaW4gdGhlIGRvY3VtZW50LiIiIgorICAgICAg
ICByZXR1cm4gc2VsZi5fZmluZEFsbChuYW1lLCBhdHRycywgdGV4dCwgbGltaXQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHJldmlvdXNTaWJsaW5nR2VuZXJhdG9yLCAqKmt3
YXJncykKKyAgICBmZXRjaFByZXZpb3VzU2libGluZ3MgPSBmaW5kUHJldmlvdXNTaWJsaW5ncyAj
IENvbXBhdGliaWxpdHkgd2l0aCBwcmUtMy54CisKKyAgICBkZWYgZmluZFBhcmVudChzZWxmLCBu
YW1lPU5vbmUsIGF0dHJzPXt9LCAqKmt3YXJncyk6CisgICAgICAgICIiIlJldHVybnMgdGhlIGNs
b3Nlc3QgcGFyZW50IG9mIHRoaXMgVGFnIHRoYXQgbWF0Y2hlcyB0aGUgZ2l2ZW4KKyAgICAgICAg
Y3JpdGVyaWEuIiIiCisgICAgICAgICMgTk9URTogV2UgY2FuJ3QgdXNlIF9maW5kT25lIGJlY2F1
c2UgZmluZFBhcmVudHMgdGFrZXMgYSBkaWZmZXJlbnQKKyAgICAgICAgIyBzZXQgb2YgYXJndW1l
bnRzLgorICAgICAgICByID0gTm9uZQorICAgICAgICBsID0gc2VsZi5maW5kUGFyZW50cyhuYW1l
LCBhdHRycywgMSkKKyAgICAgICAgaWYgbDoKKyAgICAgICAgICAgIHIgPSBsWzBdCisgICAgICAg
IHJldHVybiByCisKKyAgICBkZWYgZmluZFBhcmVudHMoc2VsZiwgbmFtZT1Ob25lLCBhdHRycz17
fSwgbGltaXQ9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBwYXJlbnRz
IG9mIHRoaXMgVGFnIHRoYXQgbWF0Y2ggdGhlIGdpdmVuCisgICAgICAgIGNyaXRlcmlhLiIiIgor
CisgICAgICAgIHJldHVybiBzZWxmLl9maW5kQWxsKG5hbWUsIGF0dHJzLCBOb25lLCBsaW1pdCwg
c2VsZi5wYXJlbnRHZW5lcmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqa3dh
cmdzKQorICAgIGZldGNoUGFyZW50cyA9IGZpbmRQYXJlbnRzICMgQ29tcGF0aWJpbGl0eSB3aXRo
IHByZS0zLngKKworICAgICNUaGVzZSBtZXRob2RzIGRvIHRoZSByZWFsIGhlYXZ5IGxpZnRpbmcu
CisKKyAgICBkZWYgX2ZpbmRPbmUoc2VsZiwgbWV0aG9kLCBuYW1lLCBhdHRycywgdGV4dCwgKipr
d2FyZ3MpOgorICAgICAgICByID0gTm9uZQorICAgICAgICBsID0gbWV0aG9kKG5hbWUsIGF0dHJz
LCB0ZXh0LCAxLCAqKmt3YXJncykKKyAgICAgICAgaWYgbDoKKyAgICAgICAgICAgIHIgPSBsWzBd
CisgICAgICAgIHJldHVybiByCisKKyAgICBkZWYgX2ZpbmRBbGwoc2VsZiwgbmFtZSwgYXR0cnMs
IHRleHQsIGxpbWl0LCBnZW5lcmF0b3IsICoqa3dhcmdzKToKKyAgICAgICAgIkl0ZXJhdGVzIG92
ZXIgYSBnZW5lcmF0b3IgbG9va2luZyBmb3IgdGhpbmdzIHRoYXQgbWF0Y2guIgorCisgICAgICAg
IGlmIGlzaW5zdGFuY2UobmFtZSwgU291cFN0cmFpbmVyKToKKyAgICAgICAgICAgIHN0cmFpbmVy
ID0gbmFtZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBCdWlsZCBhIFNvdXBTdHJhaW5l
cgorICAgICAgICAgICAgc3RyYWluZXIgPSBTb3VwU3RyYWluZXIobmFtZSwgYXR0cnMsIHRleHQs
ICoqa3dhcmdzKQorICAgICAgICByZXN1bHRzID0gUmVzdWx0U2V0KHN0cmFpbmVyKQorICAgICAg
ICBnID0gZ2VuZXJhdG9yKCkKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHRyeToK
KyAgICAgICAgICAgICAgICBpID0gZy5uZXh0KCkKKyAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRl
cmF0aW9uOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBpOgorICAgICAg
ICAgICAgICAgIGZvdW5kID0gc3RyYWluZXIuc2VhcmNoKGkpCisgICAgICAgICAgICAgICAgaWYg
Zm91bmQ6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKGZvdW5kKQorICAgICAg
ICAgICAgICAgICAgICBpZiBsaW1pdCBhbmQgbGVuKHJlc3VsdHMpID49IGxpbWl0OgorICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcmV0dXJuIHJlc3VsdHMKKworICAgICNU
aGVzZSBHZW5lcmF0b3JzIGNhbiBiZSB1c2VkIHRvIG5hdmlnYXRlIHN0YXJ0aW5nIGZyb20gYm90
aAorICAgICNOYXZpZ2FibGVTdHJpbmdzIGFuZCBUYWdzLgorICAgIGRlZiBuZXh0R2VuZXJhdG9y
KHNlbGYpOgorICAgICAgICBpID0gc2VsZgorICAgICAgICB3aGlsZSBpOgorICAgICAgICAgICAg
aSA9IGkubmV4dAorICAgICAgICAgICAgeWllbGQgaQorCisgICAgZGVmIG5leHRTaWJsaW5nR2Vu
ZXJhdG9yKHNlbGYpOgorICAgICAgICBpID0gc2VsZgorICAgICAgICB3aGlsZSBpOgorICAgICAg
ICAgICAgaSA9IGkubmV4dFNpYmxpbmcKKyAgICAgICAgICAgIHlpZWxkIGkKKworICAgIGRlZiBw
cmV2aW91c0dlbmVyYXRvcihzZWxmKToKKyAgICAgICAgaSA9IHNlbGYKKyAgICAgICAgd2hpbGUg
aToKKyAgICAgICAgICAgIGkgPSBpLnByZXZpb3VzCisgICAgICAgICAgICB5aWVsZCBpCisKKyAg
ICBkZWYgcHJldmlvdXNTaWJsaW5nR2VuZXJhdG9yKHNlbGYpOgorICAgICAgICBpID0gc2VsZgor
ICAgICAgICB3aGlsZSBpOgorICAgICAgICAgICAgaSA9IGkucHJldmlvdXNTaWJsaW5nCisgICAg
ICAgICAgICB5aWVsZCBpCisKKyAgICBkZWYgcGFyZW50R2VuZXJhdG9yKHNlbGYpOgorICAgICAg
ICBpID0gc2VsZgorICAgICAgICB3aGlsZSBpOgorICAgICAgICAgICAgaSA9IGkucGFyZW50Cisg
ICAgICAgICAgICB5aWVsZCBpCisKKyAgICAjIFV0aWxpdHkgbWV0aG9kcworICAgIGRlZiBzdWJz
dGl0dXRlRW5jb2Rpbmcoc2VsZiwgc3RyLCBlbmNvZGluZz1Ob25lKToKKyAgICAgICAgZW5jb2Rp
bmcgPSBlbmNvZGluZyBvciAidXRmLTgiCisgICAgICAgIHJldHVybiBzdHIucmVwbGFjZSgiJVNP
VVAtRU5DT0RJTkclIiwgZW5jb2RpbmcpCisKKyAgICBkZWYgdG9FbmNvZGluZyhzZWxmLCBzLCBl
bmNvZGluZz1Ob25lKToKKyAgICAgICAgIiIiRW5jb2RlcyBhbiBvYmplY3QgdG8gYSBzdHJpbmcg
aW4gc29tZSBlbmNvZGluZywgb3IgdG8gVW5pY29kZS4KKyAgICAgICAgLiIiIgorICAgICAgICBp
ZiBpc2luc3RhbmNlKHMsIHVuaWNvZGUpOgorICAgICAgICAgICAgaWYgZW5jb2Rpbmc6CisgICAg
ICAgICAgICAgICAgcyA9IHMuZW5jb2RlKGVuY29kaW5nKQorICAgICAgICBlbGlmIGlzaW5zdGFu
Y2Uocywgc3RyKToKKyAgICAgICAgICAgIGlmIGVuY29kaW5nOgorICAgICAgICAgICAgICAgIHMg
PSBzLmVuY29kZShlbmNvZGluZykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAg
cyA9IHVuaWNvZGUocykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGVuY29kaW5nOgor
ICAgICAgICAgICAgICAgIHMgID0gc2VsZi50b0VuY29kaW5nKHN0cihzKSwgZW5jb2RpbmcpCisg
ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHMgPSB1bmljb2RlKHMpCisgICAgICAg
IHJldHVybiBzCisKK2NsYXNzIE5hdmlnYWJsZVN0cmluZyh1bmljb2RlLCBQYWdlRWxlbWVudCk6
CisKKyAgICBkZWYgX19uZXdfXyhjbHMsIHZhbHVlKToKKyAgICAgICAgIiIiQ3JlYXRlIGEgbmV3
IE5hdmlnYWJsZVN0cmluZy4KKworICAgICAgICBXaGVuIHVucGlja2xpbmcgYSBOYXZpZ2FibGVT
dHJpbmcsIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aXRoCisgICAgICAgIHRoZSBzdHJpbmcgaW4g
REVGQVVMVF9PVVRQVVRfRU5DT0RJTkcuIFRoYXQgZW5jb2RpbmcgbmVlZHMgdG8gYmUKKyAgICAg
ICAgcGFzc2VkIGluIHRvIHRoZSBzdXBlcmNsYXNzJ3MgX19uZXdfXyBvciB0aGUgc3VwZXJjbGFz
cyB3b24ndCBrbm93CisgICAgICAgIGhvdyB0byBoYW5kbGUgbm9uLUFTQ0lJIGNoYXJhY3RlcnMu
CisgICAgICAgICIiIgorICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCB1bmljb2RlKToKKyAg
ICAgICAgICAgIHJldHVybiB1bmljb2RlLl9fbmV3X18oY2xzLCB2YWx1ZSkKKyAgICAgICAgcmV0
dXJuIHVuaWNvZGUuX19uZXdfXyhjbHMsIHZhbHVlLCBERUZBVUxUX09VVFBVVF9FTkNPRElORykK
KworICAgIGRlZiBfX2dldG5ld2FyZ3NfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICh1bmljb2Rl
KHNlbGYpLCkKKworICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBhdHRyKToKKyAgICAgICAgIiIi
dGV4dC5zdHJpbmcgZ2l2ZXMgeW91IHRleHQuIFRoaXMgaXMgZm9yIGJhY2t3YXJkcworICAgICAg
ICBjb21wYXRpYmlsaXR5IGZvciBOYXZpZ2FibGUqU3RyaW5nLCBidXQgZm9yIENEYXRhKiBpdCBs
ZXRzIHlvdQorICAgICAgICBnZXQgdGhlIHN0cmluZyB3aXRob3V0IHRoZSBDRGF0YSB3cmFwcGVy
LiIiIgorICAgICAgICBpZiBhdHRyID09ICdzdHJpbmcnOgorICAgICAgICAgICAgcmV0dXJuIHNl
bGYKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yLCAiJyVz
JyBvYmplY3QgaGFzIG5vIGF0dHJpYnV0ZSAnJXMnIiAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVf
XywgYXR0cikKKworICAgIGRlZiBlbmNvZGUoc2VsZiwgZW5jb2Rpbmc9REVGQVVMVF9PVVRQVVRf
RU5DT0RJTkcpOgorICAgICAgICByZXR1cm4gc2VsZi5kZWNvZGUoKS5lbmNvZGUoZW5jb2Rpbmcp
CisKKyAgICBkZWYgZGVjb2RlR2l2ZW5FdmVudHVhbEVuY29kaW5nKHNlbGYsIGV2ZW50dWFsRW5j
b2RpbmcpOgorICAgICAgICByZXR1cm4gc2VsZgorCitjbGFzcyBDRGF0YShOYXZpZ2FibGVTdHJp
bmcpOgorCisgICAgZGVmIGRlY29kZUdpdmVuRXZlbnR1YWxFbmNvZGluZyhzZWxmLCBldmVudHVh
bEVuY29kaW5nKToKKyAgICAgICAgcmV0dXJuIHUnPCFbQ0RBVEFbJyArIHNlbGYgKyB1J11dPicK
KworY2xhc3MgUHJvY2Vzc2luZ0luc3RydWN0aW9uKE5hdmlnYWJsZVN0cmluZyk6CisKKyAgICBk
ZWYgZGVjb2RlR2l2ZW5FdmVudHVhbEVuY29kaW5nKHNlbGYsIGV2ZW50dWFsRW5jb2RpbmcpOgor
ICAgICAgICBvdXRwdXQgPSBzZWxmCisgICAgICAgIGlmIHUnJVNPVVAtRU5DT0RJTkclJyBpbiBv
dXRwdXQ6CisgICAgICAgICAgICBvdXRwdXQgPSBzZWxmLnN1YnN0aXR1dGVFbmNvZGluZyhvdXRw
dXQsIGV2ZW50dWFsRW5jb2RpbmcpCisgICAgICAgIHJldHVybiB1Jzw/JyArIG91dHB1dCArIHUn
Pz4nCisKK2NsYXNzIENvbW1lbnQoTmF2aWdhYmxlU3RyaW5nKToKKyAgICBkZWYgZGVjb2RlR2l2
ZW5FdmVudHVhbEVuY29kaW5nKHNlbGYsIGV2ZW50dWFsRW5jb2RpbmcpOgorICAgICAgICByZXR1
cm4gdSc8IS0tJyArIHNlbGYgKyB1Jy0tPicKKworY2xhc3MgRGVjbGFyYXRpb24oTmF2aWdhYmxl
U3RyaW5nKToKKyAgICBkZWYgZGVjb2RlR2l2ZW5FdmVudHVhbEVuY29kaW5nKHNlbGYsIGV2ZW50
dWFsRW5jb2RpbmcpOgorICAgICAgICByZXR1cm4gdSc8IScgKyBzZWxmICsgdSc+JworCitjbGFz
cyBUYWcoUGFnZUVsZW1lbnQpOgorCisgICAgIiIiUmVwcmVzZW50cyBhIGZvdW5kIEhUTUwgdGFn
IHdpdGggaXRzIGF0dHJpYnV0ZXMgYW5kIGNvbnRlbnRzLiIiIgorCisgICAgZGVmIF9pbnZlcnQo
aCk6CisgICAgICAgICJDaGVhcCBmdW5jdGlvbiB0byBpbnZlcnQgYSBoYXNoLiIKKyAgICAgICAg
aSA9IHt9CisgICAgICAgIGZvciBrLHYgaW4gaC5pdGVtcygpOgorICAgICAgICAgICAgaVt2XSA9
IGsKKyAgICAgICAgcmV0dXJuIGkKKworICAgIFhNTF9FTlRJVElFU19UT19TUEVDSUFMX0NIQVJT
ID0geyAiYXBvcyIgOiAiJyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJxdW90IiA6ICciJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFt
cCIgOiAiJiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsdCIgOiAi
PCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJndCIgOiAiPiIgfQor
CisgICAgWE1MX1NQRUNJQUxfQ0hBUlNfVE9fRU5USVRJRVMgPSBfaW52ZXJ0KFhNTF9FTlRJVElF
U19UT19TUEVDSUFMX0NIQVJTKQorCisgICAgZGVmIF9jb252ZXJ0RW50aXRpZXMoc2VsZiwgbWF0
Y2gpOgorICAgICAgICAiIiJVc2VkIGluIGEgY2FsbCB0byByZS5zdWIgdG8gcmVwbGFjZSBIVE1M
LCBYTUwsIGFuZCBudW1lcmljCisgICAgICAgIGVudGl0aWVzIHdpdGggdGhlIGFwcHJvcHJpYXRl
IFVuaWNvZGUgY2hhcmFjdGVycy4gSWYgSFRNTAorICAgICAgICBlbnRpdGllcyBhcmUgYmVpbmcg
Y29udmVydGVkLCBhbnkgdW5yZWNvZ25pemVkIGVudGl0aWVzIGFyZQorICAgICAgICBlc2NhcGVk
LiIiIgorICAgICAgICB4ID0gbWF0Y2guZ3JvdXAoMSkKKyAgICAgICAgaWYgc2VsZi5jb252ZXJ0
SFRNTEVudGl0aWVzIGFuZCB4IGluIG5hbWUyY29kZXBvaW50OgorICAgICAgICAgICAgcmV0dXJu
IHVuaWNocihuYW1lMmNvZGVwb2ludFt4XSkKKyAgICAgICAgZWxpZiB4IGluIHNlbGYuWE1MX0VO
VElUSUVTX1RPX1NQRUNJQUxfQ0hBUlM6CisgICAgICAgICAgICBpZiBzZWxmLmNvbnZlcnRYTUxF
bnRpdGllczoKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5YTUxfRU5USVRJRVNfVE9fU1BF
Q0lBTF9DSEFSU1t4XQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4g
dScmJXM7JyAlIHgKKyAgICAgICAgZWxpZiBsZW4oeCkgPiAwIGFuZCB4WzBdID09ICcjJzoKKyAg
ICAgICAgICAgICMgSGFuZGxlIG51bWVyaWMgZW50aXRpZXMKKyAgICAgICAgICAgIGlmIGxlbih4
KSA+IDEgYW5kIHhbMV0gPT0gJ3gnOgorICAgICAgICAgICAgICAgIHJldHVybiB1bmljaHIoaW50
KHhbMjpdLCAxNikpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiB1
bmljaHIoaW50KHhbMTpdKSkKKworICAgICAgICBlbGlmIHNlbGYuZXNjYXBlVW5yZWNvZ25pemVk
RW50aXRpZXM6CisgICAgICAgICAgICByZXR1cm4gdScmYW1wOyVzOycgJSB4CisgICAgICAgIGVs
c2U6CisgICAgICAgICAgICByZXR1cm4gdScmJXM7JyAlIHgKKworICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBwYXJzZXIsIG5hbWUsIGF0dHJzPU5vbmUsIHBhcmVudD1Ob25lLAorICAgICAgICAgICAg
ICAgICBwcmV2aW91cz1Ob25lKToKKyAgICAgICAgIkJhc2ljIGNvbnN0cnVjdG9yLiIKKworICAg
ICAgICAjIFdlIGRvbid0IGFjdHVhbGx5IHN0b3JlIHRoZSBwYXJzZXIgb2JqZWN0OiB0aGF0IGxl
dHMgZXh0cmFjdGVkCisgICAgICAgICMgY2h1bmtzIGJlIGdhcmJhZ2UtY29sbGVjdGVkCisgICAg
ICAgIHNlbGYucGFyc2VyQ2xhc3MgPSBwYXJzZXIuX19jbGFzc19fCisgICAgICAgIHNlbGYuaXNT
ZWxmQ2xvc2luZyA9IHBhcnNlci5pc1NlbGZDbG9zaW5nVGFnKG5hbWUpCisgICAgICAgIHNlbGYu
bmFtZSA9IG5hbWUKKyAgICAgICAgaWYgYXR0cnMgPT0gTm9uZToKKyAgICAgICAgICAgIGF0dHJz
ID0gW10KKyAgICAgICAgc2VsZi5hdHRycyA9IGF0dHJzCisgICAgICAgIHNlbGYuY29udGVudHMg
PSBbXQorICAgICAgICBzZWxmLnNldHVwKHBhcmVudCwgcHJldmlvdXMpCisgICAgICAgIHNlbGYu
aGlkZGVuID0gRmFsc2UKKyAgICAgICAgc2VsZi5jb250YWluc1N1YnN0aXR1dGlvbnMgPSBGYWxz
ZQorICAgICAgICBzZWxmLmNvbnZlcnRIVE1MRW50aXRpZXMgPSBwYXJzZXIuY29udmVydEhUTUxF
bnRpdGllcworICAgICAgICBzZWxmLmNvbnZlcnRYTUxFbnRpdGllcyA9IHBhcnNlci5jb252ZXJ0
WE1MRW50aXRpZXMKKyAgICAgICAgc2VsZi5lc2NhcGVVbnJlY29nbml6ZWRFbnRpdGllcyA9IHBh
cnNlci5lc2NhcGVVbnJlY29nbml6ZWRFbnRpdGllcworCisgICAgICAgIGRlZiBjb252ZXJ0KGt2
YWwpOgorICAgICAgICAgICAgIkNvbnZlcnRzIEhUTUwsIFhNTCBhbmQgbnVtZXJpYyBlbnRpdGll
cyBpbiB0aGUgYXR0cmlidXRlIHZhbHVlLiIKKyAgICAgICAgICAgIGssIHZhbCA9IGt2YWwKKyAg
ICAgICAgICAgIGlmIHZhbCBpcyBOb25lOgorICAgICAgICAgICAgICAgIHJldHVybiBrdmFsCisg
ICAgICAgICAgICByZXR1cm4gKGssIHJlLnN1YigiJigjXGQrfCN4WzAtOWEtZkEtRl0rfFx3Kyk7
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2NvbnZlcnRFbnRpdGllcywg
dmFsKSkKKyAgICAgICAgc2VsZi5hdHRycyA9IG1hcChjb252ZXJ0LCBzZWxmLmF0dHJzKQorCisg
ICAgZGVmIGdldChzZWxmLCBrZXksIGRlZmF1bHQ9Tm9uZSk6CisgICAgICAgICIiIlJldHVybnMg
dGhlIHZhbHVlIG9mIHRoZSAna2V5JyBhdHRyaWJ1dGUgZm9yIHRoZSB0YWcsIG9yCisgICAgICAg
IHRoZSB2YWx1ZSBnaXZlbiBmb3IgJ2RlZmF1bHQnIGlmIGl0IGRvZXNuJ3QgaGF2ZSB0aGF0Cisg
ICAgICAgIGF0dHJpYnV0ZS4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2dldEF0dHJNYXAoKS5n
ZXQoa2V5LCBkZWZhdWx0KQorCisgICAgZGVmIGhhc19rZXkoc2VsZiwga2V5KToKKyAgICAgICAg
cmV0dXJuIHNlbGYuX2dldEF0dHJNYXAoKS5oYXNfa2V5KGtleSkKKworICAgIGRlZiBfX2dldGl0
ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICAiIiJ0YWdba2V5XSByZXR1cm5zIHRoZSB2YWx1ZSBv
ZiB0aGUgJ2tleScgYXR0cmlidXRlIGZvciB0aGUgdGFnLAorICAgICAgICBhbmQgdGhyb3dzIGFu
IGV4Y2VwdGlvbiBpZiBpdCdzIG5vdCB0aGVyZS4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2dl
dEF0dHJNYXAoKVtrZXldCisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgICJJdGVy
YXRpbmcgb3ZlciBhIHRhZyBpdGVyYXRlcyBvdmVyIGl0cyBjb250ZW50cy4iCisgICAgICAgIHJl
dHVybiBpdGVyKHNlbGYuY29udGVudHMpCisKKyAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAg
ICAgIlRoZSBsZW5ndGggb2YgYSB0YWcgaXMgdGhlIGxlbmd0aCBvZiBpdHMgbGlzdCBvZiBjb250
ZW50cy4iCisgICAgICAgIHJldHVybiBsZW4oc2VsZi5jb250ZW50cykKKworICAgIGRlZiBfX2Nv
bnRhaW5zX18oc2VsZiwgeCk6CisgICAgICAgIHJldHVybiB4IGluIHNlbGYuY29udGVudHMKKwor
ICAgIGRlZiBfX25vbnplcm9fXyhzZWxmKToKKyAgICAgICAgIkEgdGFnIGlzIG5vbi1Ob25lIGV2
ZW4gaWYgaXQgaGFzIG5vIGNvbnRlbnRzLiIKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRl
ZiBfX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKToKKyAgICAgICAgIiIiU2V0dGluZyB0YWdb
a2V5XSBzZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ2tleScgYXR0cmlidXRlIGZvciB0aGUKKyAgICAg
ICAgdGFnLiIiIgorICAgICAgICBzZWxmLl9nZXRBdHRyTWFwKCkKKyAgICAgICAgc2VsZi5hdHRy
TWFwW2tleV0gPSB2YWx1ZQorICAgICAgICBmb3VuZCA9IEZhbHNlCisgICAgICAgIGZvciBpIGlu
IHJhbmdlKDAsIGxlbihzZWxmLmF0dHJzKSk6CisgICAgICAgICAgICBpZiBzZWxmLmF0dHJzW2ld
WzBdID09IGtleToKKyAgICAgICAgICAgICAgICBzZWxmLmF0dHJzW2ldID0gKGtleSwgdmFsdWUp
CisgICAgICAgICAgICAgICAgZm91bmQgPSBUcnVlCisgICAgICAgIGlmIG5vdCBmb3VuZDoKKyAg
ICAgICAgICAgIHNlbGYuYXR0cnMuYXBwZW5kKChrZXksIHZhbHVlKSkKKyAgICAgICAgc2VsZi5f
Z2V0QXR0ck1hcCgpW2tleV0gPSB2YWx1ZQorCisgICAgZGVmIF9fZGVsaXRlbV9fKHNlbGYsIGtl
eSk6CisgICAgICAgICJEZWxldGluZyB0YWdba2V5XSBkZWxldGVzIGFsbCAna2V5JyBhdHRyaWJ1
dGVzIGZvciB0aGUgdGFnLiIKKyAgICAgICAgZm9yIGl0ZW0gaW4gc2VsZi5hdHRyczoKKyAgICAg
ICAgICAgIGlmIGl0ZW1bMF0gPT0ga2V5OgorICAgICAgICAgICAgICAgIHNlbGYuYXR0cnMucmVt
b3ZlKGl0ZW0pCisgICAgICAgICAgICAgICAgI1dlIGRvbid0IGJyZWFrIGJlY2F1c2UgYmFkIEhU
TUwgY2FuIGRlZmluZSB0aGUgc2FtZQorICAgICAgICAgICAgICAgICNhdHRyaWJ1dGUgbXVsdGlw
bGUgdGltZXMuCisgICAgICAgICAgICBzZWxmLl9nZXRBdHRyTWFwKCkKKyAgICAgICAgICAgIGlm
IHNlbGYuYXR0ck1hcC5oYXNfa2V5KGtleSk6CisgICAgICAgICAgICAgICAgZGVsIHNlbGYuYXR0
ck1hcFtrZXldCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAg
ICAgICAgIiIiQ2FsbGluZyBhIHRhZyBsaWtlIGEgZnVuY3Rpb24gaXMgdGhlIHNhbWUgYXMgY2Fs
bGluZyBpdHMKKyAgICAgICAgZmluZEFsbCgpIG1ldGhvZC4gRWcuIHRhZygnYScpIHJldHVybnMg
YSBsaXN0IG9mIGFsbCB0aGUgQSB0YWdzCisgICAgICAgIGZvdW5kIHdpdGhpbiB0aGlzIHRhZy4i
IiIKKyAgICAgICAgcmV0dXJuIGFwcGx5KHNlbGYuZmluZEFsbCwgYXJncywga3dhcmdzKQorCisg
ICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIHRhZyk6CisgICAgICAgICNwcmludCAiR2V0YXR0ciAl
cy4lcyIgJSAoc2VsZi5fX2NsYXNzX18sIHRhZykKKyAgICAgICAgaWYgbGVuKHRhZykgPiAzIGFu
ZCB0YWcucmZpbmQoJ1RhZycpID09IGxlbih0YWcpLTM6CisgICAgICAgICAgICByZXR1cm4gc2Vs
Zi5maW5kKHRhZ1s6LTNdKQorICAgICAgICBlbGlmIHRhZy5maW5kKCdfXycpICE9IDA6CisgICAg
ICAgICAgICByZXR1cm4gc2VsZi5maW5kKHRhZykKKyAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJy
b3IsICInJXMnIG9iamVjdCBoYXMgbm8gYXR0cmlidXRlICclcyciICUgKHNlbGYuX19jbGFzc19f
LCB0YWcpCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgIiIiUmV0dXJu
cyB0cnVlIGlmZiB0aGlzIHRhZyBoYXMgdGhlIHNhbWUgbmFtZSwgdGhlIHNhbWUgYXR0cmlidXRl
cywKKyAgICAgICAgYW5kIHRoZSBzYW1lIGNvbnRlbnRzIChyZWN1cnNpdmVseSkgYXMgdGhlIGdp
dmVuIHRhZy4KKworICAgICAgICBOT1RFOiByaWdodCBub3cgdGhpcyB3aWxsIHJldHVybiBmYWxz
ZSBpZiB0d28gdGFncyBoYXZlIHRoZQorICAgICAgICBzYW1lIGF0dHJpYnV0ZXMgaW4gYSBkaWZm
ZXJlbnQgb3JkZXIuIFNob3VsZCB0aGlzIGJlIGZpeGVkPyIiIgorICAgICAgICBpZiBub3QgaGFz
YXR0cihvdGhlciwgJ25hbWUnKSBvciBub3QgaGFzYXR0cihvdGhlciwgJ2F0dHJzJykgb3Igbm90
IGhhc2F0dHIob3RoZXIsICdjb250ZW50cycpIG9yIHNlbGYubmFtZSAhPSBvdGhlci5uYW1lIG9y
IHNlbGYuYXR0cnMgIT0gb3RoZXIuYXR0cnMgb3IgbGVuKHNlbGYpICE9IGxlbihvdGhlcik6Cisg
ICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHNl
bGYuY29udGVudHMpKToKKyAgICAgICAgICAgIGlmIHNlbGYuY29udGVudHNbaV0gIT0gb3RoZXIu
Y29udGVudHNbaV06CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVy
biBUcnVlCisKKyAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgIiIiUmV0dXJu
cyB0cnVlIGlmZiB0aGlzIHRhZyBpcyBub3QgaWRlbnRpY2FsIHRvIHRoZSBvdGhlciB0YWcsCisg
ICAgICAgIGFzIGRlZmluZWQgaW4gX19lcV9fLiIiIgorICAgICAgICByZXR1cm4gbm90IHNlbGYg
PT0gb3RoZXIKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmLCBlbmNvZGluZz1ERUZBVUxUX09VVFBV
VF9FTkNPRElORyk6CisgICAgICAgICIiIlJlbmRlcnMgdGhpcyB0YWcgYXMgYSBzdHJpbmcuIiIi
CisgICAgICAgIHJldHVybiBzZWxmLmRlY29kZShldmVudHVhbEVuY29kaW5nPWVuY29kaW5nKQor
CisgICAgQkFSRV9BTVBFUlNBTkRfT1JfQlJBQ0tFVCA9IHJlLmNvbXBpbGUoIihbPD5dfCIKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICImKD8hI1xkKzt8I3hb
MC05YS1mQS1GXSs7fFx3KzspIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICsgIikiKQorCisgICAgZGVmIF9zdWJfZW50aXR5KHNlbGYsIHgpOgorICAgICAgICAi
IiJVc2VkIHdpdGggYSByZWd1bGFyIGV4cHJlc3Npb24gdG8gc3Vic3RpdHV0ZSB0aGUKKyAgICAg
ICAgYXBwcm9wcmlhdGUgWE1MIGVudGl0eSBmb3IgYW4gWE1MIHNwZWNpYWwgY2hhcmFjdGVyLiIi
IgorICAgICAgICByZXR1cm4gIiYiICsgc2VsZi5YTUxfU1BFQ0lBTF9DSEFSU19UT19FTlRJVElF
U1t4Lmdyb3VwKDApWzBdXSArICI7IgorCisgICAgZGVmIF9fdW5pY29kZV9fKHNlbGYpOgorICAg
ICAgICByZXR1cm4gc2VsZi5kZWNvZGUoKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAg
ICAgIHJldHVybiBzZWxmLmVuY29kZSgpCisKKyAgICBkZWYgZW5jb2RlKHNlbGYsIGVuY29kaW5n
PURFRkFVTFRfT1VUUFVUX0VOQ09ESU5HLAorICAgICAgICAgICAgICAgcHJldHR5UHJpbnQ9RmFs
c2UsIGluZGVudExldmVsPTApOgorICAgICAgICByZXR1cm4gc2VsZi5kZWNvZGUocHJldHR5UHJp
bnQsIGluZGVudExldmVsLCBlbmNvZGluZykuZW5jb2RlKGVuY29kaW5nKQorCisgICAgZGVmIGRl
Y29kZShzZWxmLCBwcmV0dHlQcmludD1GYWxzZSwgaW5kZW50TGV2ZWw9MCwKKyAgICAgICAgICAg
ICAgIGV2ZW50dWFsRW5jb2Rpbmc9REVGQVVMVF9PVVRQVVRfRU5DT0RJTkcpOgorICAgICAgICAi
IiJSZXR1cm5zIGEgc3RyaW5nIG9yIFVuaWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhpcyB0YWcg
YW5kCisgICAgICAgIGl0cyBjb250ZW50cy4gVG8gZ2V0IFVuaWNvZGUsIHBhc3MgTm9uZSBmb3Ig
ZW5jb2RpbmcuIiIiCisKKyAgICAgICAgYXR0cnMgPSBbXQorICAgICAgICBpZiBzZWxmLmF0dHJz
OgorICAgICAgICAgICAgZm9yIGtleSwgdmFsIGluIHNlbGYuYXR0cnM6CisgICAgICAgICAgICAg
ICAgZm10ID0gJyVzPSIlcyInCisgICAgICAgICAgICAgICAgaWYgaXNTdHJpbmcodmFsKToKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuY29udGFpbnNTdWJzdGl0dXRpb25zCisgICAgICAg
ICAgICAgICAgICAgICAgICBhbmQgZXZlbnR1YWxFbmNvZGluZyBpcyBub3QgTm9uZQorICAgICAg
ICAgICAgICAgICAgICAgICAgYW5kICclU09VUC1FTkNPRElORyUnIGluIHZhbCk6CisgICAgICAg
ICAgICAgICAgICAgICAgICB2YWwgPSBzZWxmLnN1YnN0aXR1dGVFbmNvZGluZyh2YWwsIGV2ZW50
dWFsRW5jb2RpbmcpCisKKyAgICAgICAgICAgICAgICAgICAgIyBUaGUgYXR0cmlidXRlIHZhbHVl
IGVpdGhlcjoKKyAgICAgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICAgICAjICog
Q29udGFpbnMgbm8gZW1iZWRkZWQgZG91YmxlIHF1b3RlcyBvciBzaW5nbGUgcXVvdGVzLgorICAg
ICAgICAgICAgICAgICAgICAjICAgTm8gcHJvYmxlbTogd2UgZW5jbG9zZSBpdCBpbiBkb3VibGUg
cXVvdGVzLgorICAgICAgICAgICAgICAgICAgICAjICogQ29udGFpbnMgZW1iZWRkZWQgc2luZ2xl
IHF1b3Rlcy4gTm8gcHJvYmxlbToKKyAgICAgICAgICAgICAgICAgICAgIyAgIGRvdWJsZSBxdW90
ZXMgd29yayBoZXJlIHRvby4KKyAgICAgICAgICAgICAgICAgICAgIyAqIENvbnRhaW5zIGVtYmVk
ZGVkIGRvdWJsZSBxdW90ZXMuIE5vIHByb2JsZW06CisgICAgICAgICAgICAgICAgICAgICMgICB3
ZSBlbmNsb3NlIGl0IGluIHNpbmdsZSBxdW90ZXMuCisgICAgICAgICAgICAgICAgICAgICMgKiBF
bWJlZHMgYm90aCBzaW5nbGUgX2FuZF8gZG91YmxlIHF1b3Rlcy4gVGhpcworICAgICAgICAgICAg
ICAgICAgICAjICAgY2FuJ3QgaGFwcGVuIG5hdHVyYWxseSwgYnV0IGl0IGNhbiBoYXBwZW4gaWYK
KyAgICAgICAgICAgICAgICAgICAgIyAgIHlvdSBtb2RpZnkgYW4gYXR0cmlidXRlIHZhbHVlIGFm
dGVyIHBhcnNpbmcKKyAgICAgICAgICAgICAgICAgICAgIyAgIHRoZSBkb2N1bWVudC4gTm93IHdl
IGhhdmUgYSBiaXQgb2YgYQorICAgICAgICAgICAgICAgICAgICAjICAgcHJvYmxlbS4gV2Ugc29s
dmUgaXQgYnkgZW5jbG9zaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAjICAgYXR0cmlidXRl
IGluIHNpbmdsZSBxdW90ZXMsIGFuZCBlc2NhcGluZyBhbnkKKyAgICAgICAgICAgICAgICAgICAg
IyAgIGVtYmVkZGVkIHNpbmdsZSBxdW90ZXMgdG8gWE1MIGVudGl0aWVzLgorICAgICAgICAgICAg
ICAgICAgICBpZiAnIicgaW4gdmFsOgorICAgICAgICAgICAgICAgICAgICAgICAgZm10ID0gIiVz
PSclcyciCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAiJyIgaW4gdmFsOgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICMgVE9ETzogcmVwbGFjZSB3aXRoIGFwb3Mgd2hlbgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICMgYXBwcm9wcmlhdGUuCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFsID0gdmFsLnJlcGxhY2UoIiciLCAiJnNxdW90OyIpCisKKyAgICAgICAgICAg
ICAgICAgICAgIyBOb3cgd2UncmUgb2theSB3L3IvdCBxdW90ZXMuIEJ1dCB0aGUgYXR0cmlidXRl
CisgICAgICAgICAgICAgICAgICAgICMgdmFsdWUgbWlnaHQgYWxzbyBjb250YWluIGFuZ2xlIGJy
YWNrZXRzLCBvcgorICAgICAgICAgICAgICAgICAgICAjIGFtcGVyc2FuZHMgdGhhdCBhcmVuJ3Qg
cGFydCBvZiBlbnRpdGllcy4gV2UgbmVlZAorICAgICAgICAgICAgICAgICAgICAjIHRvIGVzY2Fw
ZSB0aG9zZSB0byBYTUwgZW50aXRpZXMgdG9vLgorICAgICAgICAgICAgICAgICAgICB2YWwgPSBz
ZWxmLkJBUkVfQU1QRVJTQU5EX09SX0JSQUNLRVQuc3ViKHNlbGYuX3N1Yl9lbnRpdHksIHZhbCkK
KyAgICAgICAgICAgICAgICBpZiB2YWwgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgIyBI
YW5kbGUgYm9vbGVhbiBhdHRyaWJ1dGVzLgorICAgICAgICAgICAgICAgICAgICBkZWNvZGVkID0g
a2V5CisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZGVjb2RlZCA9
IGZtdCAlIChrZXksIHZhbCkKKyAgICAgICAgICAgICAgICBhdHRycy5hcHBlbmQoZGVjb2RlZCkK
KyAgICAgICAgY2xvc2UgPSAnJworICAgICAgICBjbG9zZVRhZyA9ICcnCisgICAgICAgIGlmIHNl
bGYuaXNTZWxmQ2xvc2luZzoKKyAgICAgICAgICAgIGNsb3NlID0gJyAvJworICAgICAgICBlbHNl
OgorICAgICAgICAgICAgY2xvc2VUYWcgPSAnPC8lcz4nICUgc2VsZi5uYW1lCisKKyAgICAgICAg
aW5kZW50VGFnLCBpbmRlbnRDb250ZW50cyA9IDAsIDAKKyAgICAgICAgaWYgcHJldHR5UHJpbnQ6
CisgICAgICAgICAgICBpbmRlbnRUYWcgPSBpbmRlbnRMZXZlbAorICAgICAgICAgICAgc3BhY2Ug
PSAoJyAnICogKGluZGVudFRhZy0xKSkKKyAgICAgICAgICAgIGluZGVudENvbnRlbnRzID0gaW5k
ZW50VGFnICsgMQorICAgICAgICBjb250ZW50cyA9IHNlbGYuZGVjb2RlQ29udGVudHMocHJldHR5
UHJpbnQsIGluZGVudENvbnRlbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZXZlbnR1YWxFbmNvZGluZykKKyAgICAgICAgaWYgc2VsZi5oaWRkZW46CisgICAgICAg
ICAgICBzID0gY29udGVudHMKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHMgPSBbXQorICAg
ICAgICAgICAgYXR0cmlidXRlU3RyaW5nID0gJycKKyAgICAgICAgICAgIGlmIGF0dHJzOgorICAg
ICAgICAgICAgICAgIGF0dHJpYnV0ZVN0cmluZyA9ICcgJyArICcgJy5qb2luKGF0dHJzKQorICAg
ICAgICAgICAgaWYgcHJldHR5UHJpbnQ6CisgICAgICAgICAgICAgICAgcy5hcHBlbmQoc3BhY2Up
CisgICAgICAgICAgICBzLmFwcGVuZCgnPCVzJXMlcz4nICUgKHNlbGYubmFtZSwgYXR0cmlidXRl
U3RyaW5nLCBjbG9zZSkpCisgICAgICAgICAgICBpZiBwcmV0dHlQcmludDoKKyAgICAgICAgICAg
ICAgICBzLmFwcGVuZCgiXG4iKQorICAgICAgICAgICAgcy5hcHBlbmQoY29udGVudHMpCisgICAg
ICAgICAgICBpZiBwcmV0dHlQcmludCBhbmQgY29udGVudHMgYW5kIGNvbnRlbnRzWy0xXSAhPSAi
XG4iOgorICAgICAgICAgICAgICAgIHMuYXBwZW5kKCJcbiIpCisgICAgICAgICAgICBpZiBwcmV0
dHlQcmludCBhbmQgY2xvc2VUYWc6CisgICAgICAgICAgICAgICAgcy5hcHBlbmQoc3BhY2UpCisg
ICAgICAgICAgICBzLmFwcGVuZChjbG9zZVRhZykKKyAgICAgICAgICAgIGlmIHByZXR0eVByaW50
IGFuZCBjbG9zZVRhZyBhbmQgc2VsZi5uZXh0U2libGluZzoKKyAgICAgICAgICAgICAgICBzLmFw
cGVuZCgiXG4iKQorICAgICAgICAgICAgcyA9ICcnLmpvaW4ocykKKyAgICAgICAgcmV0dXJuIHMK
KworICAgIGRlZiBkZWNvbXBvc2Uoc2VsZik6CisgICAgICAgICIiIlJlY3Vyc2l2ZWx5IGRlc3Ry
b3lzIHRoZSBjb250ZW50cyBvZiB0aGlzIHRyZWUuIiIiCisgICAgICAgIGNvbnRlbnRzID0gW2kg
Zm9yIGkgaW4gc2VsZi5jb250ZW50c10KKyAgICAgICAgZm9yIGkgaW4gY29udGVudHM6CisgICAg
ICAgICAgICBpZiBpc2luc3RhbmNlKGksIFRhZyk6CisgICAgICAgICAgICAgICAgaS5kZWNvbXBv
c2UoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpLmV4dHJhY3QoKQorICAg
ICAgICBzZWxmLmV4dHJhY3QoKQorCisgICAgZGVmIHByZXR0aWZ5KHNlbGYsIGVuY29kaW5nPURF
RkFVTFRfT1VUUFVUX0VOQ09ESU5HKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZW5jb2RlKGVuY29k
aW5nLCBUcnVlKQorCisgICAgZGVmIGVuY29kZUNvbnRlbnRzKHNlbGYsIGVuY29kaW5nPURFRkFV
TFRfT1VUUFVUX0VOQ09ESU5HLAorICAgICAgICAgICAgICAgICAgICAgICBwcmV0dHlQcmludD1G
YWxzZSwgaW5kZW50TGV2ZWw9MCk6CisgICAgICAgIHJldHVybiBzZWxmLmRlY29kZUNvbnRlbnRz
KHByZXR0eVByaW50LCBpbmRlbnRMZXZlbCkuZW5jb2RlKGVuY29kaW5nKQorCisgICAgZGVmIGRl
Y29kZUNvbnRlbnRzKHNlbGYsIHByZXR0eVByaW50PUZhbHNlLCBpbmRlbnRMZXZlbD0wLAorICAg
ICAgICAgICAgICAgICAgICAgICBldmVudHVhbEVuY29kaW5nPURFRkFVTFRfT1VUUFVUX0VOQ09E
SU5HKToKKyAgICAgICAgIiIiUmVuZGVycyB0aGUgY29udGVudHMgb2YgdGhpcyB0YWcgYXMgYSBz
dHJpbmcgaW4gdGhlIGdpdmVuCisgICAgICAgIGVuY29kaW5nLiBJZiBlbmNvZGluZyBpcyBOb25l
LCByZXR1cm5zIGEgVW5pY29kZSBzdHJpbmcuLiIiIgorICAgICAgICBzPVtdCisgICAgICAgIGZv
ciBjIGluIHNlbGY6CisgICAgICAgICAgICB0ZXh0ID0gTm9uZQorICAgICAgICAgICAgaWYgaXNp
bnN0YW5jZShjLCBOYXZpZ2FibGVTdHJpbmcpOgorICAgICAgICAgICAgICAgIHRleHQgPSBjLmRl
Y29kZUdpdmVuRXZlbnR1YWxFbmNvZGluZyhldmVudHVhbEVuY29kaW5nKQorICAgICAgICAgICAg
ZWxpZiBpc2luc3RhbmNlKGMsIFRhZyk6CisgICAgICAgICAgICAgICAgcy5hcHBlbmQoYy5kZWNv
ZGUocHJldHR5UHJpbnQsIGluZGVudExldmVsLCBldmVudHVhbEVuY29kaW5nKSkKKyAgICAgICAg
ICAgIGlmIHRleHQgYW5kIHByZXR0eVByaW50OgorICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0
LnN0cmlwKCkKKyAgICAgICAgICAgIGlmIHRleHQ6CisgICAgICAgICAgICAgICAgaWYgcHJldHR5
UHJpbnQ6CisgICAgICAgICAgICAgICAgICAgIHMuYXBwZW5kKCIgIiAqIChpbmRlbnRMZXZlbC0x
KSkKKyAgICAgICAgICAgICAgICBzLmFwcGVuZCh0ZXh0KQorICAgICAgICAgICAgICAgIGlmIHBy
ZXR0eVByaW50OgorICAgICAgICAgICAgICAgICAgICBzLmFwcGVuZCgiXG4iKQorICAgICAgICBy
ZXR1cm4gJycuam9pbihzKQorCisgICAgI1NvdXAgbWV0aG9kcworCisgICAgZGVmIGZpbmQoc2Vs
ZiwgbmFtZT1Ob25lLCBhdHRycz17fSwgcmVjdXJzaXZlPVRydWUsIHRleHQ9Tm9uZSwKKyAgICAg
ICAgICAgICAqKmt3YXJncyk6CisgICAgICAgICIiIlJldHVybiBvbmx5IHRoZSBmaXJzdCBjaGls
ZCBvZiB0aGlzIFRhZyBtYXRjaGluZyB0aGUgZ2l2ZW4KKyAgICAgICAgY3JpdGVyaWEuIiIiCisg
ICAgICAgIHIgPSBOb25lCisgICAgICAgIGwgPSBzZWxmLmZpbmRBbGwobmFtZSwgYXR0cnMsIHJl
Y3Vyc2l2ZSwgdGV4dCwgMSwgKiprd2FyZ3MpCisgICAgICAgIGlmIGw6CisgICAgICAgICAgICBy
ID0gbFswXQorICAgICAgICByZXR1cm4gcgorICAgIGZpbmRDaGlsZCA9IGZpbmQKKworICAgIGRl
ZiBmaW5kQWxsKHNlbGYsIG5hbWU9Tm9uZSwgYXR0cnM9e30sIHJlY3Vyc2l2ZT1UcnVlLCB0ZXh0
PU5vbmUsCisgICAgICAgICAgICAgICAgbGltaXQ9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICAi
IiJFeHRyYWN0cyBhIGxpc3Qgb2YgVGFnIG9iamVjdHMgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4KKyAg
ICAgICAgY3JpdGVyaWEuICBZb3UgY2FuIHNwZWNpZnkgdGhlIG5hbWUgb2YgdGhlIFRhZyBhbmQg
YW55CisgICAgICAgIGF0dHJpYnV0ZXMgeW91IHdhbnQgdGhlIFRhZyB0byBoYXZlLgorCisgICAg
ICAgIFRoZSB2YWx1ZSBvZiBhIGtleS12YWx1ZSBwYWlyIGluIHRoZSAnYXR0cnMnIG1hcCBjYW4g
YmUgYQorICAgICAgICBzdHJpbmcsIGEgbGlzdCBvZiBzdHJpbmdzLCBhIHJlZ3VsYXIgZXhwcmVz
c2lvbiBvYmplY3QsIG9yIGEKKyAgICAgICAgY2FsbGFibGUgdGhhdCB0YWtlcyBhIHN0cmluZyBh
bmQgcmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUKKyAgICAgICAgc3RyaW5nIG1hdGNoZXMgZm9y
IHNvbWUgY3VzdG9tIGRlZmluaXRpb24gb2YgJ21hdGNoZXMnLiBUaGUKKyAgICAgICAgc2FtZSBp
cyB0cnVlIG9mIHRoZSB0YWcgbmFtZS4iIiIKKyAgICAgICAgZ2VuZXJhdG9yID0gc2VsZi5yZWN1
cnNpdmVDaGlsZEdlbmVyYXRvcgorICAgICAgICBpZiBub3QgcmVjdXJzaXZlOgorICAgICAgICAg
ICAgZ2VuZXJhdG9yID0gc2VsZi5jaGlsZEdlbmVyYXRvcgorICAgICAgICByZXR1cm4gc2VsZi5f
ZmluZEFsbChuYW1lLCBhdHRycywgdGV4dCwgbGltaXQsIGdlbmVyYXRvciwgKiprd2FyZ3MpCisg
ICAgZmluZENoaWxkcmVuID0gZmluZEFsbAorCisgICAgIyBQcmUtMy54IGNvbXBhdGliaWxpdHkg
bWV0aG9kcy4gV2lsbCBnbyBhd2F5IGluIDQuMC4KKyAgICBmaXJzdCA9IGZpbmQKKyAgICBmZXRj
aCA9IGZpbmRBbGwKKworICAgIGRlZiBmZXRjaFRleHQoc2VsZiwgdGV4dD1Ob25lLCByZWN1cnNp
dmU9VHJ1ZSwgbGltaXQ9Tm9uZSk6CisgICAgICAgIHJldHVybiBzZWxmLmZpbmRBbGwodGV4dD10
ZXh0LCByZWN1cnNpdmU9cmVjdXJzaXZlLCBsaW1pdD1saW1pdCkKKworICAgIGRlZiBmaXJzdFRl
eHQoc2VsZiwgdGV4dD1Ob25lLCByZWN1cnNpdmU9VHJ1ZSk6CisgICAgICAgIHJldHVybiBzZWxm
LmZpbmQodGV4dD10ZXh0LCByZWN1cnNpdmU9cmVjdXJzaXZlKQorCisgICAgIyAzLnggY29tcGF0
aWJpbGl0eSBtZXRob2RzLiBXaWxsIGdvIGF3YXkgaW4gNC4wLgorICAgIGRlZiByZW5kZXJDb250
ZW50cyhzZWxmLCBlbmNvZGluZz1ERUZBVUxUX09VVFBVVF9FTkNPRElORywKKyAgICAgICAgICAg
ICAgICAgICAgICAgcHJldHR5UHJpbnQ9RmFsc2UsIGluZGVudExldmVsPTApOgorICAgICAgICBp
ZiBlbmNvZGluZyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZGVjb2RlQ29udGVu
dHMocHJldHR5UHJpbnQsIGluZGVudExldmVsLCBlbmNvZGluZykKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIHJldHVybiBzZWxmLmVuY29kZUNvbnRlbnRzKGVuY29kaW5nLCBwcmV0dHlQcmlu
dCwgaW5kZW50TGV2ZWwpCisKKworICAgICNQcml2YXRlIG1ldGhvZHMKKworICAgIGRlZiBfZ2V0
QXR0ck1hcChzZWxmKToKKyAgICAgICAgIiIiSW5pdGlhbGl6ZXMgYSBtYXAgcmVwcmVzZW50YXRp
b24gb2YgdGhpcyB0YWcncyBhdHRyaWJ1dGVzLAorICAgICAgICBpZiBub3QgYWxyZWFkeSBpbml0
aWFsaXplZC4iIiIKKyAgICAgICAgaWYgbm90IGdldGF0dHIoc2VsZiwgJ2F0dHJNYXAnKToKKyAg
ICAgICAgICAgIHNlbGYuYXR0ck1hcCA9IHt9CisgICAgICAgICAgICBmb3IgKGtleSwgdmFsdWUp
IGluIHNlbGYuYXR0cnM6CisgICAgICAgICAgICAgICAgc2VsZi5hdHRyTWFwW2tleV0gPSB2YWx1
ZQorICAgICAgICByZXR1cm4gc2VsZi5hdHRyTWFwCisKKyAgICAjR2VuZXJhdG9yIG1ldGhvZHMK
KyAgICBkZWYgcmVjdXJzaXZlQ2hpbGRHZW5lcmF0b3Ioc2VsZik6CisgICAgICAgIGlmIG5vdCBs
ZW4oc2VsZi5jb250ZW50cyk6CisgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCisgICAg
ICAgIHN0b3BOb2RlID0gc2VsZi5fbGFzdFJlY3Vyc2l2ZUNoaWxkKCkubmV4dAorICAgICAgICBj
dXJyZW50ID0gc2VsZi5jb250ZW50c1swXQorICAgICAgICB3aGlsZSBjdXJyZW50IGlzIG5vdCBz
dG9wTm9kZToKKyAgICAgICAgICAgIHlpZWxkIGN1cnJlbnQKKyAgICAgICAgICAgIGN1cnJlbnQg
PSBjdXJyZW50Lm5leHQKKworICAgIGRlZiBjaGlsZEdlbmVyYXRvcihzZWxmKToKKyAgICAgICAg
aWYgbm90IGxlbihzZWxmLmNvbnRlbnRzKToKKyAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRp
b24KKyAgICAgICAgY3VycmVudCA9IHNlbGYuY29udGVudHNbMF0KKyAgICAgICAgd2hpbGUgY3Vy
cmVudDoKKyAgICAgICAgICAgIHlpZWxkIGN1cnJlbnQKKyAgICAgICAgICAgIGN1cnJlbnQgPSBj
dXJyZW50Lm5leHRTaWJsaW5nCisgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KKworIyBOZXh0
LCBhIGNvdXBsZSBjbGFzc2VzIHRvIHJlcHJlc2VudCBxdWVyaWVzIGFuZCB0aGVpciByZXN1bHRz
LgorY2xhc3MgU291cFN0cmFpbmVyOgorICAgICIiIkVuY2Fwc3VsYXRlcyBhIG51bWJlciBvZiB3
YXlzIG9mIG1hdGNoaW5nIGEgbWFya3VwIGVsZW1lbnQgKHRhZyBvcgorICAgIHRleHQpLiIiIgor
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWU9Tm9uZSwgYXR0cnM9e30sIHRleHQ9Tm9uZSwg
Kiprd2FyZ3MpOgorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgIGlmIGlzU3RyaW5n
KGF0dHJzKToKKyAgICAgICAgICAgIGt3YXJnc1snY2xhc3MnXSA9IGF0dHJzCisgICAgICAgICAg
ICBhdHRycyA9IE5vbmUKKyAgICAgICAgaWYga3dhcmdzOgorICAgICAgICAgICAgaWYgYXR0cnM6
CisgICAgICAgICAgICAgICAgYXR0cnMgPSBhdHRycy5jb3B5KCkKKyAgICAgICAgICAgICAgICBh
dHRycy51cGRhdGUoa3dhcmdzKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBh
dHRycyA9IGt3YXJncworICAgICAgICBzZWxmLmF0dHJzID0gYXR0cnMKKyAgICAgICAgc2VsZi50
ZXh0ID0gdGV4dAorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIGlmIHNlbGYudGV4
dDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnRleHQKKyAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgIHJldHVybiAiJXN8JXMiICUgKHNlbGYubmFtZSwgc2VsZi5hdHRycykKKworICAgIGRlZiBz
ZWFyY2hUYWcoc2VsZiwgbWFya3VwTmFtZT1Ob25lLCBtYXJrdXBBdHRycz17fSk6CisgICAgICAg
IGZvdW5kID0gTm9uZQorICAgICAgICBtYXJrdXAgPSBOb25lCisgICAgICAgIGlmIGlzaW5zdGFu
Y2UobWFya3VwTmFtZSwgVGFnKToKKyAgICAgICAgICAgIG1hcmt1cCA9IG1hcmt1cE5hbWUKKyAg
ICAgICAgICAgIG1hcmt1cEF0dHJzID0gbWFya3VwCisgICAgICAgIGNhbGxGdW5jdGlvbldpdGhU
YWdEYXRhID0gY2FsbGFibGUoc2VsZi5uYW1lKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFuZCBub3QgaXNpbnN0YW5jZShtYXJrdXBOYW1lLCBUYWcpCisKKyAgICAgICAgaWYg
KG5vdCBzZWxmLm5hbWUpIFwKKyAgICAgICAgICAgICAgIG9yIGNhbGxGdW5jdGlvbldpdGhUYWdE
YXRhIFwKKyAgICAgICAgICAgICAgIG9yIChtYXJrdXAgYW5kIHNlbGYuX21hdGNoZXMobWFya3Vw
LCBzZWxmLm5hbWUpKSBcCisgICAgICAgICAgICAgICBvciAobm90IG1hcmt1cCBhbmQgc2VsZi5f
bWF0Y2hlcyhtYXJrdXBOYW1lLCBzZWxmLm5hbWUpKToKKyAgICAgICAgICAgIGlmIGNhbGxGdW5j
dGlvbldpdGhUYWdEYXRhOgorICAgICAgICAgICAgICAgIG1hdGNoID0gc2VsZi5uYW1lKG1hcmt1
cE5hbWUsIG1hcmt1cEF0dHJzKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBt
YXRjaCA9IFRydWUKKyAgICAgICAgICAgICAgICBtYXJrdXBBdHRyTWFwID0gTm9uZQorICAgICAg
ICAgICAgICAgIGZvciBhdHRyLCBtYXRjaEFnYWluc3QgaW4gc2VsZi5hdHRycy5pdGVtcygpOgor
ICAgICAgICAgICAgICAgICAgICBpZiBub3QgbWFya3VwQXR0ck1hcDoKKyAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiBoYXNhdHRyKG1hcmt1cEF0dHJzLCAnZ2V0Jyk6CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbWFya3VwQXR0ck1hcCA9IG1hcmt1cEF0dHJzCisgICAgICAgICAgICAg
ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrdXBBdHRy
TWFwID0ge30KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Igayx2IGluIG1hcmt1cEF0
dHJzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrdXBBdHRyTWFwW2tdID0g
dgorICAgICAgICAgICAgICAgICAgICBhdHRyVmFsdWUgPSBtYXJrdXBBdHRyTWFwLmdldChhdHRy
KQorICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5fbWF0Y2hlcyhhdHRyVmFsdWUsIG1h
dGNoQWdhaW5zdCk6CisgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IEZhbHNlCisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgbWF0Y2g6CisgICAgICAg
ICAgICAgICAgaWYgbWFya3VwOgorICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IG1hcmt1cAor
ICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gbWFya3Vw
TmFtZQorICAgICAgICByZXR1cm4gZm91bmQKKworICAgIGRlZiBzZWFyY2goc2VsZiwgbWFya3Vw
KToKKyAgICAgICAgI3ByaW50ICdsb29raW5nIGZvciAlcyBpbiAlcycgJSAoc2VsZiwgbWFya3Vw
KQorICAgICAgICBmb3VuZCA9IE5vbmUKKyAgICAgICAgIyBJZiBnaXZlbiBhIGxpc3Qgb2YgaXRl
bXMsIHNjYW4gaXQgZm9yIGEgdGV4dCBlbGVtZW50IHRoYXQKKyAgICAgICAgIyBtYXRjaGVzLgor
ICAgICAgICBpZiBpc0xpc3QobWFya3VwKSBhbmQgbm90IGlzaW5zdGFuY2UobWFya3VwLCBUYWcp
OgorICAgICAgICAgICAgZm9yIGVsZW1lbnQgaW4gbWFya3VwOgorICAgICAgICAgICAgICAgIGlm
IGlzaW5zdGFuY2UoZWxlbWVudCwgTmF2aWdhYmxlU3RyaW5nKSBcCisgICAgICAgICAgICAgICAg
ICAgICAgIGFuZCBzZWxmLnNlYXJjaChlbGVtZW50KToKKyAgICAgICAgICAgICAgICAgICAgZm91
bmQgPSBlbGVtZW50CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICMgSWYgaXQn
cyBhIFRhZywgbWFrZSBzdXJlIGl0cyBuYW1lIG9yIGF0dHJpYnV0ZXMgbWF0Y2guCisgICAgICAg
ICMgRG9uJ3QgYm90aGVyIHdpdGggVGFncyBpZiB3ZSdyZSBzZWFyY2hpbmcgZm9yIHRleHQuCisg
ICAgICAgIGVsaWYgaXNpbnN0YW5jZShtYXJrdXAsIFRhZyk6CisgICAgICAgICAgICBpZiBub3Qg
c2VsZi50ZXh0OgorICAgICAgICAgICAgICAgIGZvdW5kID0gc2VsZi5zZWFyY2hUYWcobWFya3Vw
KQorICAgICAgICAjIElmIGl0J3MgdGV4dCwgbWFrZSBzdXJlIHRoZSB0ZXh0IG1hdGNoZXMuCisg
ICAgICAgIGVsaWYgaXNpbnN0YW5jZShtYXJrdXAsIE5hdmlnYWJsZVN0cmluZykgb3IgXAorICAg
ICAgICAgICAgICAgICBpc1N0cmluZyhtYXJrdXApOgorICAgICAgICAgICAgaWYgc2VsZi5fbWF0
Y2hlcyhtYXJrdXAsIHNlbGYudGV4dCk6CisgICAgICAgICAgICAgICAgZm91bmQgPSBtYXJrdXAK
KyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbiwgIkkgZG9uJ3Qga25v
dyBob3cgdG8gbWF0Y2ggYWdhaW5zdCBhICVzIiBcCisgICAgICAgICAgICAgICAgICAlIG1hcmt1
cC5fX2NsYXNzX18KKyAgICAgICAgcmV0dXJuIGZvdW5kCisKKyAgICBkZWYgX21hdGNoZXMoc2Vs
ZiwgbWFya3VwLCBtYXRjaEFnYWluc3QpOgorICAgICAgICAjcHJpbnQgIk1hdGNoaW5nICVzIGFn
YWluc3QgJXMiICUgKG1hcmt1cCwgbWF0Y2hBZ2FpbnN0KQorICAgICAgICByZXN1bHQgPSBGYWxz
ZQorICAgICAgICBpZiBtYXRjaEFnYWluc3QgPT0gVHJ1ZSBhbmQgdHlwZShtYXRjaEFnYWluc3Qp
ID09IHR5cGVzLkJvb2xlYW5UeXBlOgorICAgICAgICAgICAgcmVzdWx0ID0gbWFya3VwICE9IE5v
bmUKKyAgICAgICAgZWxpZiBjYWxsYWJsZShtYXRjaEFnYWluc3QpOgorICAgICAgICAgICAgcmVz
dWx0ID0gbWF0Y2hBZ2FpbnN0KG1hcmt1cCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICND
dXN0b20gbWF0Y2ggbWV0aG9kcyB0YWtlIHRoZSB0YWcgYXMgYW4gYXJndW1lbnQsIGJ1dCBhbGwK
KyAgICAgICAgICAgICNvdGhlciB3YXlzIG9mIG1hdGNoaW5nIG1hdGNoIHRoZSB0YWcgbmFtZSBh
cyBhIHN0cmluZy4KKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobWFya3VwLCBUYWcpOgorICAg
ICAgICAgICAgICAgIG1hcmt1cCA9IG1hcmt1cC5uYW1lCisgICAgICAgICAgICBpZiBtYXJrdXAg
aXMgbm90IE5vbmUgYW5kIG5vdCBpc1N0cmluZyhtYXJrdXApOgorICAgICAgICAgICAgICAgIG1h
cmt1cCA9IHVuaWNvZGUobWFya3VwKQorICAgICAgICAgICAgI05vdyB3ZSBrbm93IHRoYXQgY2h1
bmsgaXMgZWl0aGVyIGEgc3RyaW5nLCBvciBOb25lLgorICAgICAgICAgICAgaWYgaGFzYXR0ciht
YXRjaEFnYWluc3QsICdtYXRjaCcpOgorICAgICAgICAgICAgICAgICMgSXQncyBhIHJlZ2V4cCBv
YmplY3QuCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbWFya3VwIGFuZCBtYXRjaEFnYWluc3Qu
c2VhcmNoKG1hcmt1cCkKKyAgICAgICAgICAgIGVsaWYgKGlzTGlzdChtYXRjaEFnYWluc3QpCisg
ICAgICAgICAgICAgICAgICBhbmQgKG1hcmt1cCBpcyBub3QgTm9uZSBvciBub3QgaXNTdHJpbmco
bWF0Y2hBZ2FpbnN0KSkpOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1hcmt1cCBpbiBtYXRj
aEFnYWluc3QKKyAgICAgICAgICAgIGVsaWYgaGFzYXR0cihtYXRjaEFnYWluc3QsICdpdGVtcycp
OgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1hcmt1cC5oYXNfa2V5KG1hdGNoQWdhaW5zdCkK
KyAgICAgICAgICAgIGVsaWYgbWF0Y2hBZ2FpbnN0IGFuZCBpc1N0cmluZyhtYXJrdXApOgorICAg
ICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobWFya3VwLCB1bmljb2RlKToKKyAgICAgICAgICAg
ICAgICAgICAgbWF0Y2hBZ2FpbnN0ID0gdW5pY29kZShtYXRjaEFnYWluc3QpCisgICAgICAgICAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hBZ2FpbnN0ID0gc3RyKG1hdGNo
QWdhaW5zdCkKKworICAgICAgICAgICAgaWYgbm90IHJlc3VsdDoKKyAgICAgICAgICAgICAgICBy
ZXN1bHQgPSBtYXRjaEFnYWluc3QgPT0gbWFya3VwCisgICAgICAgIHJldHVybiByZXN1bHQKKwor
Y2xhc3MgUmVzdWx0U2V0KGxpc3QpOgorICAgICIiIkEgUmVzdWx0U2V0IGlzIGp1c3QgYSBsaXN0
IHRoYXQga2VlcHMgdHJhY2sgb2YgdGhlIFNvdXBTdHJhaW5lcgorICAgIHRoYXQgY3JlYXRlZCBp
dC4iIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc291cmNlKToKKyAgICAgICAgbGlzdC5fX2lu
aXRfXyhbXSkKKyAgICAgICAgc2VsZi5zb3VyY2UgPSBzb3VyY2UKKworIyBOb3csIHNvbWUgaGVs
cGVyIGZ1bmN0aW9ucy4KKworZGVmIGlzTGlzdChsKToKKyAgICAiIiJDb252ZW5pZW5jZSBtZXRo
b2QgdGhhdCB3b3JrcyB3aXRoIGFsbCAyLnggdmVyc2lvbnMgb2YgUHl0aG9uCisgICAgdG8gZGV0
ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHNvbWV0aGluZyBpcyBsaXN0bGlrZS4iIiIKKyAgICByZXR1
cm4gKChoYXNhdHRyKGwsICdfX2l0ZXJfXycpIGFuZCBub3QgaXNTdHJpbmcobCkpCisgICAgICAg
ICAgICBvciAodHlwZShsKSBpbiAodHlwZXMuTGlzdFR5cGUsIHR5cGVzLlR1cGxlVHlwZSkpKQor
CitkZWYgaXNTdHJpbmcocyk6CisgICAgIiIiQ29udmVuaWVuY2UgbWV0aG9kIHRoYXQgd29ya3Mg
d2l0aCBhbGwgMi54IHZlcnNpb25zIG9mIFB5dGhvbgorICAgIHRvIGRldGVybWluZSB3aGV0aGVy
IG9yIG5vdCBzb21ldGhpbmcgaXMgc3RyaW5nbGlrZS4iIiIKKyAgICB0cnk6CisgICAgICAgIHJl
dHVybiBpc2luc3RhbmNlKHMsIHVuaWNvZGUpIG9yIGlzaW5zdGFuY2UocywgYmFzZXN0cmluZykK
KyAgICBleGNlcHQgTmFtZUVycm9yOgorICAgICAgICByZXR1cm4gaXNpbnN0YW5jZShzLCBzdHIp
CisKK2RlZiBidWlsZFRhZ01hcChkZWZhdWx0LCAqYXJncyk6CisgICAgIiIiVHVybnMgYSBsaXN0
IG9mIG1hcHMsIGxpc3RzLCBvciBzY2FsYXJzIGludG8gYSBzaW5nbGUgbWFwLgorICAgIFVzZWQg
dG8gYnVpbGQgdGhlIFNFTEZfQ0xPU0lOR19UQUdTLCBORVNUQUJMRV9UQUdTLCBhbmQKKyAgICBO
RVNUSU5HX1JFU0VUX1RBR1MgbWFwcyBvdXQgb2YgbGlzdHMgYW5kIHBhcnRpYWwgbWFwcy4iIiIK
KyAgICBidWlsdCA9IHt9CisgICAgZm9yIHBvcnRpb24gaW4gYXJnczoKKyAgICAgICAgaWYgaGFz
YXR0cihwb3J0aW9uLCAnaXRlbXMnKToKKyAgICAgICAgICAgICNJdCdzIGEgbWFwLiBNZXJnZSBp
dC4KKyAgICAgICAgICAgIGZvciBrLHYgaW4gcG9ydGlvbi5pdGVtcygpOgorICAgICAgICAgICAg
ICAgIGJ1aWx0W2tdID0gdgorICAgICAgICBlbGlmIGlzTGlzdChwb3J0aW9uKSBhbmQgbm90IGlz
U3RyaW5nKHBvcnRpb24pOgorICAgICAgICAgICAgI0l0J3MgYSBsaXN0LiBNYXAgZWFjaCBpdGVt
IHRvIHRoZSBkZWZhdWx0LgorICAgICAgICAgICAgZm9yIGsgaW4gcG9ydGlvbjoKKyAgICAgICAg
ICAgICAgICBidWlsdFtrXSA9IGRlZmF1bHQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICNJ
dCdzIGEgc2NhbGFyLiBNYXAgaXQgdG8gdGhlIGRlZmF1bHQuCisgICAgICAgICAgICBidWlsdFtw
b3J0aW9uXSA9IGRlZmF1bHQKKyAgICByZXR1cm4gYnVpbHQKKworIyBOb3csIHRoZSBwYXJzZXIg
Y2xhc3Nlcy4KKworY2xhc3MgSFRNTFBhcnNlckJ1aWxkZXIoSFRNTFBhcnNlcik6CisKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgc291cCk6CisgICAgICAgIEhUTUxQYXJzZXIuX19pbml0X18oc2Vs
ZikKKyAgICAgICAgc2VsZi5zb3VwID0gc291cAorCisgICAgIyBXZSBpbmhlcml0IGZlZWQoKSBh
bmQgcmVzZXQoKS4KKworICAgIGRlZiBoYW5kbGVfc3RhcnR0YWcoc2VsZiwgbmFtZSwgYXR0cnMp
OgorICAgICAgICBpZiBuYW1lID09ICdtZXRhJzoKKyAgICAgICAgICAgIHNlbGYuc291cC5leHRy
YWN0Q2hhcnNldEZyb21NZXRhKGF0dHJzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2Vs
Zi5zb3VwLnVua25vd25fc3RhcnR0YWcobmFtZSwgYXR0cnMpCisKKyAgICBkZWYgaGFuZGxlX2Vu
ZHRhZyhzZWxmLCBuYW1lKToKKyAgICAgICAgc2VsZi5zb3VwLnVua25vd25fZW5kdGFnKG5hbWUp
CisKKyAgICBkZWYgaGFuZGxlX2RhdGEoc2VsZiwgY29udGVudCk6CisgICAgICAgIHNlbGYuc291
cC5oYW5kbGVfZGF0YShjb250ZW50KQorCisgICAgZGVmIF90b1N0cmluZ1N1YmNsYXNzKHNlbGYs
IHRleHQsIHN1YmNsYXNzKToKKyAgICAgICAgIiIiQWRkcyBhIGNlcnRhaW4gcGllY2Ugb2YgdGV4
dCB0byB0aGUgdHJlZSBhcyBhIE5hdmlnYWJsZVN0cmluZworICAgICAgICBzdWJjbGFzcy4iIiIK
KyAgICAgICAgc2VsZi5zb3VwLmVuZERhdGEoKQorICAgICAgICBzZWxmLmhhbmRsZV9kYXRhKHRl
eHQpCisgICAgICAgIHNlbGYuc291cC5lbmREYXRhKHN1YmNsYXNzKQorCisgICAgZGVmIGhhbmRs
ZV9waShzZWxmLCB0ZXh0KToKKyAgICAgICAgIiIiSGFuZGxlIGEgcHJvY2Vzc2luZyBpbnN0cnVj
dGlvbiBhcyBhIFByb2Nlc3NpbmdJbnN0cnVjdGlvbgorICAgICAgICBvYmplY3QsIHBvc3NpYmx5
IG9uZSB3aXRoIGEgJVNPVVAtRU5DT0RJTkclIHNsb3QgaW50byB3aGljaCBhbgorICAgICAgICBl
bmNvZGluZyB3aWxsIGJlIHBsdWdnZWQgbGF0ZXIuIiIiCisgICAgICAgIGlmIHRleHRbOjNdID09
ICJ4bWwiOgorICAgICAgICAgICAgdGV4dCA9IHUieG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9
JyVTT1VQLUVOQ09ESU5HJSciCisgICAgICAgIHNlbGYuX3RvU3RyaW5nU3ViY2xhc3ModGV4dCwg
UHJvY2Vzc2luZ0luc3RydWN0aW9uKQorCisgICAgZGVmIGhhbmRsZV9jb21tZW50KHNlbGYsIHRl
eHQpOgorICAgICAgICAiSGFuZGxlIGNvbW1lbnRzIGFzIENvbW1lbnQgb2JqZWN0cy4iCisgICAg
ICAgIHNlbGYuX3RvU3RyaW5nU3ViY2xhc3ModGV4dCwgQ29tbWVudCkKKworICAgIGRlZiBoYW5k
bGVfY2hhcnJlZihzZWxmLCByZWYpOgorICAgICAgICAiSGFuZGxlIGNoYXJhY3RlciByZWZlcmVu
Y2VzIGFzIGRhdGEuIgorICAgICAgICBpZiBzZWxmLnNvdXAuY29udmVydEVudGl0aWVzOgorICAg
ICAgICAgICAgZGF0YSA9IHVuaWNocihpbnQocmVmKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgIGRhdGEgPSAnJiMlczsnICUgcmVmCisgICAgICAgIHNlbGYuaGFuZGxlX2RhdGEoZGF0YSkK
KworICAgIGRlZiBoYW5kbGVfZW50aXR5cmVmKHNlbGYsIHJlZik6CisgICAgICAgICIiIkhhbmRs
ZSBlbnRpdHkgcmVmZXJlbmNlcyBhcyBkYXRhLCBwb3NzaWJseSBjb252ZXJ0aW5nIGtub3duCisg
ICAgICAgIEhUTUwgYW5kL29yIFhNTCBlbnRpdHkgcmVmZXJlbmNlcyB0byB0aGUgY29ycmVzcG9u
ZGluZyBVbmljb2RlCisgICAgICAgIGNoYXJhY3RlcnMuIiIiCisgICAgICAgIGRhdGEgPSBOb25l
CisgICAgICAgIGlmIHNlbGYuc291cC5jb252ZXJ0SFRNTEVudGl0aWVzOgorICAgICAgICAgICAg
dHJ5OgorICAgICAgICAgICAgICAgIGRhdGEgPSB1bmljaHIobmFtZTJjb2RlcG9pbnRbcmVmXSkK
KyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAg
ICAgICAgaWYgbm90IGRhdGEgYW5kIHNlbGYuc291cC5jb252ZXJ0WE1MRW50aXRpZXM6CisgICAg
ICAgICAgICAgICAgZGF0YSA9IHNlbGYuc291cC5YTUxfRU5USVRJRVNfVE9fU1BFQ0lBTF9DSEFS
Uy5nZXQocmVmKQorCisgICAgICAgIGlmIG5vdCBkYXRhIGFuZCBzZWxmLnNvdXAuY29udmVydEhU
TUxFbnRpdGllcyBhbmQgXAorICAgICAgICAgICAgbm90IHNlbGYuc291cC5YTUxfRU5USVRJRVNf
VE9fU1BFQ0lBTF9DSEFSUy5nZXQocmVmKToKKyAgICAgICAgICAgICAgICAjIFRPRE86IFdlJ3Zl
IGdvdCBhIHByb2JsZW0gaGVyZS4gV2UncmUgdG9sZCB0aGlzIGlzCisgICAgICAgICAgICAgICAg
IyBhbiBlbnRpdHkgcmVmZXJlbmNlLCBidXQgaXQncyBub3QgYW4gWE1MIGVudGl0eQorICAgICAg
ICAgICAgICAgICMgcmVmZXJlbmNlIG9yIGFuIEhUTUwgZW50aXR5IHJlZmVyZW5jZS4gTm9uZXRo
ZWxlc3MsCisgICAgICAgICAgICAgICAgIyB0aGUgbG9naWNhbCB0aGluZyB0byBkbyBpcyB0byBw
YXNzIGl0IHRocm91Z2ggYXMgYW4KKyAgICAgICAgICAgICAgICAjIHVucmVjb2duaXplZCBlbnRp
dHkgcmVmZXJlbmNlLgorICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAjIEV4Y2Vw
dDogd2hlbiB0aGUgaW5wdXQgaXMgIiZjYXJvbDsiIHRoaXMgZnVuY3Rpb24KKyAgICAgICAgICAg
ICAgICAjIHdpbGwgYmUgY2FsbGVkIHdpdGggaW5wdXQgImNhcm9sIi4gV2hlbiB0aGUgaW5wdXQg
aXMKKyAgICAgICAgICAgICAgICAjICJBVCZUIiwgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxl
ZCB3aXRoIGlucHV0CisgICAgICAgICAgICAgICAgIyAiVCIuIFdlIGhhdmUgbm8gd2F5IG9mIGtu
b3dpbmcgd2hldGhlciBhIHNlbWljb2xvbgorICAgICAgICAgICAgICAgICMgd2FzIHByZXNlbnQg
b3JpZ2luYWxseSwgc28gd2UgZG9uJ3Qga25vdyB3aGV0aGVyCisgICAgICAgICAgICAgICAgIyB0
aGlzIGlzIGFuIHVua25vd24gZW50aXR5IG9yIGp1c3QgYSBtaXNwbGFjZWQKKyAgICAgICAgICAg
ICAgICAjIGFtcGVyc2FuZC4KKyAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgIyBU
aGUgbW9yZSBjb21tb24gY2FzZSBpcyBhIG1pc3BsYWNlZCBhbXBlcnNhbmQsIHNvIEkKKyAgICAg
ICAgICAgICAgICAjIGVzY2FwZSB0aGUgYW1wZXJzYW5kIGFuZCBvbWl0IHRoZSB0cmFpbGluZyBz
ZW1pY29sb24uCisgICAgICAgICAgICAgICAgZGF0YSA9ICImYW1wOyVzIiAlIHJlZgorICAgICAg
ICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgICMgVGhpcyBjYXNlIGlzIGRpZmZlcmVudCBmcm9t
IHRoZSBvbmUgYWJvdmUsIGJlY2F1c2Ugd2UKKyAgICAgICAgICAgICMgaGF2ZW4ndCBhbHJlYWR5
IGdvbmUgdGhyb3VnaCBhIHN1cHBvc2VkbHkgY29tcHJlaGVuc2l2ZQorICAgICAgICAgICAgIyBt
YXBwaW5nIG9mIGVudGl0aWVzIHRvIFVuaWNvZGUgY2hhcmFjdGVycy4gV2UgbWlnaHQgbm90Cisg
ICAgICAgICAgICAjIGhhdmUgZ29uZSB0aHJvdWdoIGFueSBtYXBwaW5nIGF0IGFsbC4gU28gdGhl
IGNoYW5jZXMgYXJlCisgICAgICAgICAgICAjIHZlcnkgaGlnaCB0aGF0IHRoaXMgaXMgYSByZWFs
IGVudGl0eSwgYW5kIG5vdCBhCisgICAgICAgICAgICAjIG1pc3BsYWNlZCBhbXBlcnNhbmQuCisg
ICAgICAgICAgICBkYXRhID0gIiYlczsiICUgcmVmCisgICAgICAgIHNlbGYuaGFuZGxlX2RhdGEo
ZGF0YSkKKworICAgIGRlZiBoYW5kbGVfZGVjbChzZWxmLCBkYXRhKToKKyAgICAgICAgIkhhbmRs
ZSBET0NUWVBFcyBhbmQgdGhlIGxpa2UgYXMgRGVjbGFyYXRpb24gb2JqZWN0cy4iCisgICAgICAg
IHNlbGYuX3RvU3RyaW5nU3ViY2xhc3MoZGF0YSwgRGVjbGFyYXRpb24pCisKKyAgICBkZWYgcGFy
c2VfZGVjbGFyYXRpb24oc2VsZiwgaSk6CisgICAgICAgICIiIlRyZWF0IGEgYm9ndXMgU0dNTCBk
ZWNsYXJhdGlvbiBhcyByYXcgZGF0YS4gVHJlYXQgYSBDREFUQQorICAgICAgICBkZWNsYXJhdGlv
biBhcyBhIENEYXRhIG9iamVjdC4iIiIKKyAgICAgICAgaiA9IE5vbmUKKyAgICAgICAgaWYgc2Vs
Zi5yYXdkYXRhW2k6aSs5XSA9PSAnPCFbQ0RBVEFbJzoKKyAgICAgICAgICAgICBrID0gc2VsZi5y
YXdkYXRhLmZpbmQoJ11dPicsIGkpCisgICAgICAgICAgICAgaWYgayA9PSAtMToKKyAgICAgICAg
ICAgICAgICAgayA9IGxlbihzZWxmLnJhd2RhdGEpCisgICAgICAgICAgICAgZGF0YSA9IHNlbGYu
cmF3ZGF0YVtpKzk6a10KKyAgICAgICAgICAgICBqID0gayszCisgICAgICAgICAgICAgc2VsZi5f
dG9TdHJpbmdTdWJjbGFzcyhkYXRhLCBDRGF0YSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg
IHRyeToKKyAgICAgICAgICAgICAgICBqID0gSFRNTFBhcnNlci5wYXJzZV9kZWNsYXJhdGlvbihz
ZWxmLCBpKQorICAgICAgICAgICAgZXhjZXB0IEhUTUxQYXJzZUVycm9yOgorICAgICAgICAgICAg
ICAgIHRvSGFuZGxlID0gc2VsZi5yYXdkYXRhW2k6XQorICAgICAgICAgICAgICAgIHNlbGYuaGFu
ZGxlX2RhdGEodG9IYW5kbGUpCisgICAgICAgICAgICAgICAgaiA9IGkgKyBsZW4odG9IYW5kbGUp
CisgICAgICAgIHJldHVybiBqCisKKworY2xhc3MgQmVhdXRpZnVsU3RvbmVTb3VwKFRhZyk6CisK
KyAgICAiIiJUaGlzIGNsYXNzIGNvbnRhaW5zIHRoZSBiYXNpYyBwYXJzZXIgYW5kIHNlYXJjaCBj
b2RlLiBJdCBkZWZpbmVzCisgICAgYSBwYXJzZXIgdGhhdCBrbm93cyBub3RoaW5nIGFib3V0IHRh
ZyBiZWhhdmlvciBleGNlcHQgZm9yIHRoZQorICAgIGZvbGxvd2luZzoKKworICAgICAgWW91IGNh
bid0IGNsb3NlIGEgdGFnIHdpdGhvdXQgY2xvc2luZyBhbGwgdGhlIHRhZ3MgaXQgZW5jbG9zZXMu
CisgICAgICBUaGF0IGlzLCAiPGZvbz48YmFyPjwvZm9vPiIgYWN0dWFsbHkgbWVhbnMKKyAgICAg
ICI8Zm9vPjxiYXI+PC9iYXI+PC9mb28+Ii4KKworICAgIFtBbm90aGVyIHBvc3NpYmxlIGV4cGxh
bmF0aW9uIGlzICI8Zm9vPjxiYXIgLz48L2Zvbz4iLCBidXQgc2luY2UKKyAgICB0aGlzIGNsYXNz
IGRlZmluZXMgbm8gU0VMRl9DTE9TSU5HX1RBR1MsIGl0IHdpbGwgbmV2ZXIgdXNlIHRoYXQKKyAg
ICBleHBsYW5hdGlvbi5dCisKKyAgICBUaGlzIGNsYXNzIGlzIHVzZWZ1bCBmb3IgcGFyc2luZyBY
TUwgb3IgbWFkZS11cCBtYXJrdXAgbGFuZ3VhZ2VzLAorICAgIG9yIHdoZW4gQmVhdXRpZnVsU291
cCBtYWtlcyBhbiBhc3N1bXB0aW9uIGNvdW50ZXIgdG8gd2hhdCB5b3Ugd2VyZQorICAgIGV4cGVj
dGluZy4iIiIKKworICAgIFNFTEZfQ0xPU0lOR19UQUdTID0ge30KKyAgICBORVNUQUJMRV9UQUdT
ID0ge30KKyAgICBSRVNFVF9ORVNUSU5HX1RBR1MgPSB7fQorICAgIFFVT1RFX1RBR1MgPSB7fQor
ICAgIFBSRVNFUlZFX1dISVRFU1BBQ0VfVEFHUyA9IFtdCisKKyAgICBNQVJLVVBfTUFTU0FHRSA9
IFsocmUuY29tcGlsZSgnKDxbXjw+XSopLz4nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgbGFt
YmRhIHg6IHguZ3JvdXAoMSkgKyAnIC8+JyksCisgICAgICAgICAgICAgICAgICAgICAgKHJlLmNv
bXBpbGUoJzwhXHMrKFtePD5dKik+JyksCisgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSB4
OiAnPCEnICsgeC5ncm91cCgxKSArICc+JykKKyAgICAgICAgICAgICAgICAgICAgICBdCisKKyAg
ICBST09UX1RBR19OQU1FID0gdSdbZG9jdW1lbnRdJworCisgICAgSFRNTF9FTlRJVElFUyA9ICJo
dG1sIgorICAgIFhNTF9FTlRJVElFUyA9ICJ4bWwiCisgICAgWEhUTUxfRU5USVRJRVMgPSAieGh0
bWwiCisgICAgIyBUT0RPOiBUaGlzIG9ubHkgZXhpc3RzIGZvciBiYWNrd2FyZHMtY29tcGF0aWJp
bGl0eQorICAgIEFMTF9FTlRJVElFUyA9IFhIVE1MX0VOVElUSUVTCisKKyAgICAjIFVzZWQgd2hl
biBkZXRlcm1pbmluZyB3aGV0aGVyIGEgdGV4dCBub2RlIGlzIGFsbCB3aGl0ZXNwYWNlIGFuZAor
ICAgICMgY2FuIGJlIHJlcGxhY2VkIHdpdGggYSBzaW5nbGUgc3BhY2UuIEEgdGV4dCBub2RlIHRo
YXQgY29udGFpbnMKKyAgICAjIGZhbmN5IFVuaWNvZGUgc3BhY2VzICh1c3VhbGx5IG5vbi1icmVh
a2luZykgc2hvdWxkIGJlIGxlZnQKKyAgICAjIGFsb25lLgorICAgIFNUUklQX0FTQ0lJX1NQQUNF
UyA9IHsgOTogTm9uZSwgMTA6IE5vbmUsIDEyOiBOb25lLCAxMzogTm9uZSwgMzI6IE5vbmUsIH0K
KworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXJrdXA9IiIsIHBhcnNlT25seVRoZXNlPU5vbmUs
IGZyb21FbmNvZGluZz1Ob25lLAorICAgICAgICAgICAgICAgICBtYXJrdXBNYXNzYWdlPVRydWUs
IHNtYXJ0UXVvdGVzVG89WE1MX0VOVElUSUVTLAorICAgICAgICAgICAgICAgICBjb252ZXJ0RW50
aXRpZXM9Tm9uZSwgc2VsZkNsb3NpbmdUYWdzPU5vbmUsIGlzSFRNTD1GYWxzZSwKKyAgICAgICAg
ICAgICAgICAgYnVpbGRlcj1IVE1MUGFyc2VyQnVpbGRlcik6CisgICAgICAgICIiIlRoZSBTb3Vw
IG9iamVjdCBpcyBpbml0aWFsaXplZCBhcyB0aGUgJ3Jvb3QgdGFnJywgYW5kIHRoZQorICAgICAg
ICBwcm92aWRlZCBtYXJrdXAgKHdoaWNoIGNhbiBiZSBhIHN0cmluZyBvciBhIGZpbGUtbGlrZSBv
YmplY3QpCisgICAgICAgIGlzIGZlZCBpbnRvIHRoZSB1bmRlcmx5aW5nIHBhcnNlci4KKworICAg
ICAgICBIVE1MUGFyc2VyIHdpbGwgcHJvY2VzcyBtb3N0IGJhZCBIVE1MLCBhbmQgdGhlIEJlYXV0
aWZ1bFNvdXAKKyAgICAgICAgY2xhc3MgaGFzIHNvbWUgdHJpY2tzIGZvciBkZWFsaW5nIHdpdGgg
c29tZSBIVE1MIHRoYXQga2lsbHMKKyAgICAgICAgSFRNTFBhcnNlciwgYnV0IEJlYXV0aWZ1bCBT
b3VwIGNhbiBub25ldGhlbGVzcyBjaG9rZSBvciBsb3NlIGRhdGEKKyAgICAgICAgaWYgeW91ciBk
YXRhIHVzZXMgc2VsZi1jbG9zaW5nIHRhZ3Mgb3IgZGVjbGFyYXRpb25zCisgICAgICAgIGluY29y
cmVjdGx5LgorCisgICAgICAgIEJ5IGRlZmF1bHQsIEJlYXV0aWZ1bCBTb3VwIHVzZXMgcmVnZXhl
cyB0byBzYW5pdGl6ZSBpbnB1dCwKKyAgICAgICAgYXZvaWRpbmcgdGhlIHZhc3QgbWFqb3JpdHkg
b2YgdGhlc2UgcHJvYmxlbXMuIElmIHRoZSBwcm9ibGVtcworICAgICAgICBkb24ndCBhcHBseSB0
byB5b3UsIHBhc3MgaW4gRmFsc2UgZm9yIG1hcmt1cE1hc3NhZ2UsIGFuZAorICAgICAgICB5b3Un
bGwgZ2V0IGJldHRlciBwZXJmb3JtYW5jZS4KKworICAgICAgICBUaGUgZGVmYXVsdCBwYXJzZXIg
bWFzc2FnZSB0ZWNobmlxdWVzIGZpeCB0aGUgdHdvIG1vc3QgY29tbW9uCisgICAgICAgIGluc3Rh
bmNlcyBvZiBpbnZhbGlkIEhUTUwgdGhhdCBjaG9rZSBIVE1MUGFyc2VyOgorCisgICAgICAgICA8
YnIvPiAoTm8gc3BhY2UgYmV0d2VlbiBuYW1lIG9mIGNsb3NpbmcgdGFnIGFuZCB0YWcgY2xvc2Up
CisgICAgICAgICA8ISAtLUNvbW1lbnQtLT4gKEV4dHJhbmVvdXMgd2hpdGVzcGFjZSBpbiBkZWNs
YXJhdGlvbikKKworICAgICAgICBZb3UgY2FuIHBhc3MgaW4gYSBjdXN0b20gbGlzdCBvZiAoUkUg
b2JqZWN0LCByZXBsYWNlIG1ldGhvZCkKKyAgICAgICAgdHVwbGVzIHRvIGdldCBCZWF1dGlmdWwg
U291cCB0byBzY3J1YiB5b3VyIGlucHV0IHRoZSB3YXkgeW91CisgICAgICAgIHdhbnQuIiIiCisK
KyAgICAgICAgc2VsZi5wYXJzZU9ubHlUaGVzZSA9IHBhcnNlT25seVRoZXNlCisgICAgICAgIHNl
bGYuZnJvbUVuY29kaW5nID0gZnJvbUVuY29kaW5nCisgICAgICAgIHNlbGYuc21hcnRRdW90ZXNU
byA9IHNtYXJ0UXVvdGVzVG8KKyAgICAgICAgc2VsZi5jb252ZXJ0RW50aXRpZXMgPSBjb252ZXJ0
RW50aXRpZXMKKyAgICAgICAgIyBTZXQgdGhlIHJ1bGVzIGZvciBob3cgd2UnbGwgZGVhbCB3aXRo
IHRoZSBlbnRpdGllcyB3ZQorICAgICAgICAjIGVuY291bnRlcgorICAgICAgICBpZiBzZWxmLmNv
bnZlcnRFbnRpdGllczoKKyAgICAgICAgICAgICMgSXQgZG9lc24ndCBtYWtlIHNlbnNlIHRvIGNv
bnZlcnQgZW5jb2RlZCBjaGFyYWN0ZXJzIHRvCisgICAgICAgICAgICAjIGVudGl0aWVzIGV2ZW4g
d2hpbGUgeW91J3JlIGNvbnZlcnRpbmcgZW50aXRpZXMgdG8gVW5pY29kZS4KKyAgICAgICAgICAg
ICMgSnVzdCBjb252ZXJ0IGl0IGFsbCB0byBVbmljb2RlLgorICAgICAgICAgICAgc2VsZi5zbWFy
dFF1b3Rlc1RvID0gTm9uZQorICAgICAgICAgICAgaWYgY29udmVydEVudGl0aWVzID09IHNlbGYu
SFRNTF9FTlRJVElFUzoKKyAgICAgICAgICAgICAgICBzZWxmLmNvbnZlcnRYTUxFbnRpdGllcyA9
IEZhbHNlCisgICAgICAgICAgICAgICAgc2VsZi5jb252ZXJ0SFRNTEVudGl0aWVzID0gVHJ1ZQor
ICAgICAgICAgICAgICAgIHNlbGYuZXNjYXBlVW5yZWNvZ25pemVkRW50aXRpZXMgPSBUcnVlCisg
ICAgICAgICAgICBlbGlmIGNvbnZlcnRFbnRpdGllcyA9PSBzZWxmLlhIVE1MX0VOVElUSUVTOgor
ICAgICAgICAgICAgICAgIHNlbGYuY29udmVydFhNTEVudGl0aWVzID0gVHJ1ZQorICAgICAgICAg
ICAgICAgIHNlbGYuY29udmVydEhUTUxFbnRpdGllcyA9IFRydWUKKyAgICAgICAgICAgICAgICBz
ZWxmLmVzY2FwZVVucmVjb2duaXplZEVudGl0aWVzID0gRmFsc2UKKyAgICAgICAgICAgIGVsaWYg
Y29udmVydEVudGl0aWVzID09IHNlbGYuWE1MX0VOVElUSUVTOgorICAgICAgICAgICAgICAgIHNl
bGYuY29udmVydFhNTEVudGl0aWVzID0gVHJ1ZQorICAgICAgICAgICAgICAgIHNlbGYuY29udmVy
dEhUTUxFbnRpdGllcyA9IEZhbHNlCisgICAgICAgICAgICAgICAgc2VsZi5lc2NhcGVVbnJlY29n
bml6ZWRFbnRpdGllcyA9IEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmNv
bnZlcnRYTUxFbnRpdGllcyA9IEZhbHNlCisgICAgICAgICAgICBzZWxmLmNvbnZlcnRIVE1MRW50
aXRpZXMgPSBGYWxzZQorICAgICAgICAgICAgc2VsZi5lc2NhcGVVbnJlY29nbml6ZWRFbnRpdGll
cyA9IEZhbHNlCisKKyAgICAgICAgc2VsZi5pbnN0YW5jZVNlbGZDbG9zaW5nVGFncyA9IGJ1aWxk
VGFnTWFwKE5vbmUsIHNlbGZDbG9zaW5nVGFncykKKyAgICAgICAgc2VsZi5idWlsZGVyID0gYnVp
bGRlcihzZWxmKQorICAgICAgICBzZWxmLnJlc2V0KCkKKworICAgICAgICBpZiBoYXNhdHRyKG1h
cmt1cCwgJ3JlYWQnKTogICAgICAgICMgSXQncyBhIGZpbGUtdHlwZSBvYmplY3QuCisgICAgICAg
ICAgICBtYXJrdXAgPSBtYXJrdXAucmVhZCgpCisgICAgICAgIHNlbGYubWFya3VwID0gbWFya3Vw
CisgICAgICAgIHNlbGYubWFya3VwTWFzc2FnZSA9IG1hcmt1cE1hc3NhZ2UKKyAgICAgICAgdHJ5
OgorICAgICAgICAgICAgc2VsZi5fZmVlZChpc0hUTUw9aXNIVE1MKQorICAgICAgICBleGNlcHQg
U3RvcFBhcnNpbmc6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYubWFya3VwID0gTm9u
ZSAgICAgICAgICAgICAgICAgIyBUaGUgbWFya3VwIGNhbiBub3cgYmUgR0NlZC4KKyAgICAgICAg
c2VsZi5idWlsZGVyID0gTm9uZSAgICAgICAgICAgICAgICAjIFNvIGNhbiB0aGUgYnVpbGRlci4K
KworICAgIGRlZiBfZmVlZChzZWxmLCBpbkRvY3VtZW50RW5jb2Rpbmc9Tm9uZSwgaXNIVE1MPUZh
bHNlKToKKyAgICAgICAgIyBDb252ZXJ0IHRoZSBkb2N1bWVudCB0byBVbmljb2RlLgorICAgICAg
ICBtYXJrdXAgPSBzZWxmLm1hcmt1cAorICAgICAgICBpZiBpc2luc3RhbmNlKG1hcmt1cCwgdW5p
Y29kZSk6CisgICAgICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLCAnb3JpZ2luYWxFbmNvZGlu
ZycpOgorICAgICAgICAgICAgICAgIHNlbGYub3JpZ2luYWxFbmNvZGluZyA9IE5vbmUKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIGRhbW1pdCA9IFVuaWNvZGVEYW1taXRcCisgICAgICAgICAg
ICAgICAgICAgICAobWFya3VwLCBbc2VsZi5mcm9tRW5jb2RpbmcsIGluRG9jdW1lbnRFbmNvZGlu
Z10sCisgICAgICAgICAgICAgICAgICAgICAgc21hcnRRdW90ZXNUbz1zZWxmLnNtYXJ0UXVvdGVz
VG8sIGlzSFRNTD1pc0hUTUwpCisgICAgICAgICAgICBtYXJrdXAgPSBkYW1taXQudW5pY29kZQor
ICAgICAgICAgICAgc2VsZi5vcmlnaW5hbEVuY29kaW5nID0gZGFtbWl0Lm9yaWdpbmFsRW5jb2Rp
bmcKKyAgICAgICAgICAgIHNlbGYuZGVjbGFyZWRIVE1MRW5jb2RpbmcgPSBkYW1taXQuZGVjbGFy
ZWRIVE1MRW5jb2RpbmcKKyAgICAgICAgaWYgbWFya3VwOgorICAgICAgICAgICAgaWYgc2VsZi5t
YXJrdXBNYXNzYWdlOgorICAgICAgICAgICAgICAgIGlmIG5vdCBpc0xpc3Qoc2VsZi5tYXJrdXBN
YXNzYWdlKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXJrdXBNYXNzYWdlID0gc2VsZi5N
QVJLVVBfTUFTU0FHRQorICAgICAgICAgICAgICAgIGZvciBmaXgsIG0gaW4gc2VsZi5tYXJrdXBN
YXNzYWdlOgorICAgICAgICAgICAgICAgICAgICBtYXJrdXAgPSBmaXguc3ViKG0sIG1hcmt1cCkK
KyAgICAgICAgICAgICAgICAjIFRPRE86IFdlIGdldCByaWQgb2YgbWFya3VwTWFzc2FnZSBzbyB0
aGF0IHRoZQorICAgICAgICAgICAgICAgICMgc291cCBvYmplY3QgY2FuIGJlIGRlZXBjb3BpZWQg
bGF0ZXIgb24uIFNvbWUKKyAgICAgICAgICAgICAgICAjIFB5dGhvbiBpbnN0YWxsYXRpb25zIGNh
bid0IGNvcHkgcmVnZXhlcy4gSWYgYW55b25lCisgICAgICAgICAgICAgICAgIyB3YXMgcmVseWlu
ZyBvbiB0aGUgZXhpc3RlbmNlIG9mIG1hcmt1cE1hc3NhZ2UsIHRoaXMKKyAgICAgICAgICAgICAg
ICAjIG1pZ2h0IGNhdXNlIHByb2JsZW1zLgorICAgICAgICAgICAgICAgIGRlbChzZWxmLm1hcmt1
cE1hc3NhZ2UpCisgICAgICAgIHNlbGYuYnVpbGRlci5yZXNldCgpCisKKyAgICAgICAgc2VsZi5i
dWlsZGVyLmZlZWQobWFya3VwKQorICAgICAgICAjIENsb3NlIG91dCBhbnkgdW5maW5pc2hlZCBz
dHJpbmdzIGFuZCBjbG9zZSBhbGwgdGhlIG9wZW4gdGFncy4KKyAgICAgICAgc2VsZi5lbmREYXRh
KCkKKyAgICAgICAgd2hpbGUgc2VsZi5jdXJyZW50VGFnLm5hbWUgIT0gc2VsZi5ST09UX1RBR19O
QU1FOgorICAgICAgICAgICAgc2VsZi5wb3BUYWcoKQorCisgICAgZGVmIGlzU2VsZkNsb3NpbmdU
YWcoc2VsZiwgbmFtZSk6CisgICAgICAgICIiIlJldHVybnMgdHJ1ZSBpZmYgdGhlIGdpdmVuIHN0
cmluZyBpcyB0aGUgbmFtZSBvZiBhCisgICAgICAgIHNlbGYtY2xvc2luZyB0YWcgYWNjb3JkaW5n
IHRvIHRoaXMgcGFyc2VyLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5TRUxGX0NMT1NJTkdfVEFH
Uy5oYXNfa2V5KG5hbWUpIFwKKyAgICAgICAgICAgICAgIG9yIHNlbGYuaW5zdGFuY2VTZWxmQ2xv
c2luZ1RhZ3MuaGFzX2tleShuYW1lKQorCisgICAgZGVmIHJlc2V0KHNlbGYpOgorICAgICAgICBU
YWcuX19pbml0X18oc2VsZiwgc2VsZiwgc2VsZi5ST09UX1RBR19OQU1FKQorICAgICAgICBzZWxm
LmhpZGRlbiA9IDEKKyAgICAgICAgc2VsZi5idWlsZGVyLnJlc2V0KCkKKyAgICAgICAgc2VsZi5j
dXJyZW50RGF0YSA9IFtdCisgICAgICAgIHNlbGYuY3VycmVudFRhZyA9IE5vbmUKKyAgICAgICAg
c2VsZi50YWdTdGFjayA9IFtdCisgICAgICAgIHNlbGYucXVvdGVTdGFjayA9IFtdCisgICAgICAg
IHNlbGYucHVzaFRhZyhzZWxmKQorCisgICAgZGVmIHBvcFRhZyhzZWxmKToKKyAgICAgICAgdGFn
ID0gc2VsZi50YWdTdGFjay5wb3AoKQorICAgICAgICAjIFRhZ3Mgd2l0aCBqdXN0IG9uZSBzdHJp
bmctb3duaW5nIGNoaWxkIGdldCB0aGUgY2hpbGQgYXMgYQorICAgICAgICAjICdzdHJpbmcnIHBy
b3BlcnR5LCBzbyB0aGF0IHNvdXAudGFnLnN0cmluZyBpcyBzaG9ydGhhbmQgZm9yCisgICAgICAg
ICMgc291cC50YWcuY29udGVudHNbMF0KKyAgICAgICAgaWYgbGVuKHNlbGYuY3VycmVudFRhZy5j
b250ZW50cykgPT0gMSBhbmQgXAorICAgICAgICAgICBpc2luc3RhbmNlKHNlbGYuY3VycmVudFRh
Zy5jb250ZW50c1swXSwgTmF2aWdhYmxlU3RyaW5nKToKKyAgICAgICAgICAgIHNlbGYuY3VycmVu
dFRhZy5zdHJpbmcgPSBzZWxmLmN1cnJlbnRUYWcuY29udGVudHNbMF0KKworICAgICAgICAjcHJp
bnQgIlBvcCIsIHRhZy5uYW1lCisgICAgICAgIGlmIHNlbGYudGFnU3RhY2s6CisgICAgICAgICAg
ICBzZWxmLmN1cnJlbnRUYWcgPSBzZWxmLnRhZ1N0YWNrWy0xXQorICAgICAgICByZXR1cm4gc2Vs
Zi5jdXJyZW50VGFnCisKKyAgICBkZWYgcHVzaFRhZyhzZWxmLCB0YWcpOgorICAgICAgICAjcHJp
bnQgIlB1c2giLCB0YWcubmFtZQorICAgICAgICBpZiBzZWxmLmN1cnJlbnRUYWc6CisgICAgICAg
ICAgICBzZWxmLmN1cnJlbnRUYWcuY29udGVudHMuYXBwZW5kKHRhZykKKyAgICAgICAgc2VsZi50
YWdTdGFjay5hcHBlbmQodGFnKQorICAgICAgICBzZWxmLmN1cnJlbnRUYWcgPSBzZWxmLnRhZ1N0
YWNrWy0xXQorCisgICAgZGVmIGVuZERhdGEoc2VsZiwgY29udGFpbmVyQ2xhc3M9TmF2aWdhYmxl
U3RyaW5nKToKKyAgICAgICAgaWYgc2VsZi5jdXJyZW50RGF0YToKKyAgICAgICAgICAgIGN1cnJl
bnREYXRhID0gdScnLmpvaW4oc2VsZi5jdXJyZW50RGF0YSkKKyAgICAgICAgICAgIGlmIChjdXJy
ZW50RGF0YS50cmFuc2xhdGUoc2VsZi5TVFJJUF9BU0NJSV9TUEFDRVMpID09ICcnIGFuZAorICAg
ICAgICAgICAgICAgIG5vdCBzZXQoW3RhZy5uYW1lIGZvciB0YWcgaW4gc2VsZi50YWdTdGFja10p
LmludGVyc2VjdGlvbigKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5QUkVTRVJWRV9XSElURVNQ
QUNFX1RBR1MpKToKKyAgICAgICAgICAgICAgICBpZiAnXG4nIGluIGN1cnJlbnREYXRhOgorICAg
ICAgICAgICAgICAgICAgICBjdXJyZW50RGF0YSA9ICdcbicKKyAgICAgICAgICAgICAgICBlbHNl
OgorICAgICAgICAgICAgICAgICAgICBjdXJyZW50RGF0YSA9ICcgJworICAgICAgICAgICAgc2Vs
Zi5jdXJyZW50RGF0YSA9IFtdCisgICAgICAgICAgICBpZiBzZWxmLnBhcnNlT25seVRoZXNlIGFu
ZCBsZW4oc2VsZi50YWdTdGFjaykgPD0gMSBhbmQgXAorICAgICAgICAgICAgICAgICAgIChub3Qg
c2VsZi5wYXJzZU9ubHlUaGVzZS50ZXh0IG9yIFwKKyAgICAgICAgICAgICAgICAgICAgbm90IHNl
bGYucGFyc2VPbmx5VGhlc2Uuc2VhcmNoKGN1cnJlbnREYXRhKSk6CisgICAgICAgICAgICAgICAg
cmV0dXJuCisgICAgICAgICAgICBvID0gY29udGFpbmVyQ2xhc3MoY3VycmVudERhdGEpCisgICAg
ICAgICAgICBvLnNldHVwKHNlbGYuY3VycmVudFRhZywgc2VsZi5wcmV2aW91cykKKyAgICAgICAg
ICAgIGlmIHNlbGYucHJldmlvdXM6CisgICAgICAgICAgICAgICAgc2VsZi5wcmV2aW91cy5uZXh0
ID0gbworICAgICAgICAgICAgc2VsZi5wcmV2aW91cyA9IG8KKyAgICAgICAgICAgIHNlbGYuY3Vy
cmVudFRhZy5jb250ZW50cy5hcHBlbmQobykKKworCisgICAgZGVmIF9wb3BUb1RhZyhzZWxmLCBu
YW1lLCBpbmNsdXNpdmVQb3A9VHJ1ZSk6CisgICAgICAgICIiIlBvcHMgdGhlIHRhZyBzdGFjayB1
cCB0byBhbmQgaW5jbHVkaW5nIHRoZSBtb3N0IHJlY2VudAorICAgICAgICBpbnN0YW5jZSBvZiB0
aGUgZ2l2ZW4gdGFnLiBJZiBpbmNsdXNpdmVQb3AgaXMgZmFsc2UsIHBvcHMgdGhlIHRhZworICAg
ICAgICBzdGFjayB1cCB0byBidXQgKm5vdCogaW5jbHVkaW5nIHRoZSBtb3N0IHJlY2VudCBpbnN0
cWFuY2Ugb2YKKyAgICAgICAgdGhlIGdpdmVuIHRhZy4iIiIKKyAgICAgICAgI3ByaW50ICJQb3Bw
aW5nIHRvICVzIiAlIG5hbWUKKyAgICAgICAgaWYgbmFtZSA9PSBzZWxmLlJPT1RfVEFHX05BTUU6
CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBudW1Qb3BzID0gMAorICAgICAgICBtb3N0
UmVjZW50VGFnID0gTm9uZQorICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oc2VsZi50YWdTdGFj
ayktMSwgMCwgLTEpOgorICAgICAgICAgICAgaWYgbmFtZSA9PSBzZWxmLnRhZ1N0YWNrW2ldLm5h
bWU6CisgICAgICAgICAgICAgICAgbnVtUG9wcyA9IGxlbihzZWxmLnRhZ1N0YWNrKS1pCisgICAg
ICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgbm90IGluY2x1c2l2ZVBvcDoKKyAgICAgICAg
ICAgIG51bVBvcHMgPSBudW1Qb3BzIC0gMQorCisgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIG51
bVBvcHMpOgorICAgICAgICAgICAgbW9zdFJlY2VudFRhZyA9IHNlbGYucG9wVGFnKCkKKyAgICAg
ICAgcmV0dXJuIG1vc3RSZWNlbnRUYWcKKworICAgIGRlZiBfc21hcnRQb3Aoc2VsZiwgbmFtZSk6
CisKKyAgICAgICAgIiIiV2UgbmVlZCB0byBwb3AgdXAgdG8gdGhlIHByZXZpb3VzIHRhZyBvZiB0
aGlzIHR5cGUsIHVubGVzcworICAgICAgICBvbmUgb2YgdGhpcyB0YWcncyBuZXN0aW5nIHJlc2V0
IHRyaWdnZXJzIGNvbWVzIGJldHdlZW4gdGhpcworICAgICAgICB0YWcgYW5kIHRoZSBwcmV2aW91
cyB0YWcgb2YgdGhpcyB0eXBlLCBPUiB1bmxlc3MgdGhpcyB0YWcgaXMgYQorICAgICAgICBnZW5l
cmljIG5lc3RpbmcgdHJpZ2dlciBhbmQgYW5vdGhlciBnZW5lcmljIG5lc3RpbmcgdHJpZ2dlcgor
ICAgICAgICBjb21lcyBiZXR3ZWVuIHRoaXMgdGFnIGFuZCB0aGUgcHJldmlvdXMgdGFnIG9mIHRo
aXMgdHlwZS4KKworICAgICAgICBFeGFtcGxlczoKKyAgICAgICAgIDxwPkZvbzxiPkJhciAqPHA+
KiBzaG91bGQgcG9wIHRvICdwJywgbm90ICdiJy4KKyAgICAgICAgIDxwPkZvbzx0YWJsZT5CYXIg
KjxwPiogc2hvdWxkIHBvcCB0byAndGFibGUnLCBub3QgJ3AnLgorICAgICAgICAgPHA+Rm9vPHRh
YmxlPjx0cj5CYXIgKjxwPiogc2hvdWxkIHBvcCB0byAndHInLCBub3QgJ3AnLgorCisgICAgICAg
ICA8bGk+PHVsPjxsaT4gKjxsaT4qIHNob3VsZCBwb3AgdG8gJ3VsJywgbm90IHRoZSBmaXJzdCAn
bGknLgorICAgICAgICAgPHRyPjx0YWJsZT48dHI+ICo8dHI+KiBzaG91bGQgcG9wIHRvICd0YWJs
ZScsIG5vdCB0aGUgZmlyc3QgJ3RyJworICAgICAgICAgPHRkPjx0cj48dGQ+ICo8dGQ+KiBzaG91
bGQgcG9wIHRvICd0cicsIG5vdCB0aGUgZmlyc3QgJ3RkJworICAgICAgICAiIiIKKworICAgICAg
ICBuZXN0aW5nUmVzZXRUcmlnZ2VycyA9IHNlbGYuTkVTVEFCTEVfVEFHUy5nZXQobmFtZSkKKyAg
ICAgICAgaXNOZXN0YWJsZSA9IG5lc3RpbmdSZXNldFRyaWdnZXJzICE9IE5vbmUKKyAgICAgICAg
aXNSZXNldE5lc3RpbmcgPSBzZWxmLlJFU0VUX05FU1RJTkdfVEFHUy5oYXNfa2V5KG5hbWUpCisg
ICAgICAgIHBvcFRvID0gTm9uZQorICAgICAgICBpbmNsdXNpdmUgPSBUcnVlCisgICAgICAgIGZv
ciBpIGluIHJhbmdlKGxlbihzZWxmLnRhZ1N0YWNrKS0xLCAwLCAtMSk6CisgICAgICAgICAgICBw
ID0gc2VsZi50YWdTdGFja1tpXQorICAgICAgICAgICAgaWYgKG5vdCBwIG9yIHAubmFtZSA9PSBu
YW1lKSBhbmQgbm90IGlzTmVzdGFibGU6CisgICAgICAgICAgICAgICAgI05vbi1uZXN0YWJsZSB0
YWdzIGdldCBwb3BwZWQgdG8gdGhlIHRvcCBvciB0byB0aGVpcgorICAgICAgICAgICAgICAgICNs
YXN0IG9jY3VyYW5jZS4KKyAgICAgICAgICAgICAgICBwb3BUbyA9IG5hbWUKKyAgICAgICAgICAg
ICAgICBicmVhaworICAgICAgICAgICAgaWYgKG5lc3RpbmdSZXNldFRyaWdnZXJzICE9IE5vbmUK
KyAgICAgICAgICAgICAgICBhbmQgcC5uYW1lIGluIG5lc3RpbmdSZXNldFRyaWdnZXJzKSBcCisg
ICAgICAgICAgICAgICAgb3IgKG5lc3RpbmdSZXNldFRyaWdnZXJzID09IE5vbmUgYW5kIGlzUmVz
ZXROZXN0aW5nCisgICAgICAgICAgICAgICAgICAgIGFuZCBzZWxmLlJFU0VUX05FU1RJTkdfVEFH
Uy5oYXNfa2V5KHAubmFtZSkpOgorCisgICAgICAgICAgICAgICAgI0lmIHdlIGVuY291bnRlciBv
bmUgb2YgdGhlIG5lc3RpbmcgcmVzZXQgdHJpZ2dlcnMKKyAgICAgICAgICAgICAgICAjcGVjdWxp
YXIgdG8gdGhpcyB0YWcsIG9yIHdlIGVuY291bnRlciBhbm90aGVyIHRhZworICAgICAgICAgICAg
ICAgICN0aGF0IGNhdXNlcyBuZXN0aW5nIHRvIHJlc2V0LCBwb3AgdXAgdG8gYnV0IG5vdAorICAg
ICAgICAgICAgICAgICNpbmNsdWRpbmcgdGhhdCB0YWcuCisgICAgICAgICAgICAgICAgcG9wVG8g
PSBwLm5hbWUKKyAgICAgICAgICAgICAgICBpbmNsdXNpdmUgPSBGYWxzZQorICAgICAgICAgICAg
ICAgIGJyZWFrCisgICAgICAgICAgICBwID0gcC5wYXJlbnQKKyAgICAgICAgaWYgcG9wVG86Cisg
ICAgICAgICAgICBzZWxmLl9wb3BUb1RhZyhwb3BUbywgaW5jbHVzaXZlKQorCisgICAgZGVmIHVu
a25vd25fc3RhcnR0YWcoc2VsZiwgbmFtZSwgYXR0cnMsIHNlbGZDbG9zaW5nPTApOgorICAgICAg
ICAjcHJpbnQgIlN0YXJ0IHRhZyAlczogJXMiICUgKG5hbWUsIGF0dHJzKQorICAgICAgICBpZiBz
ZWxmLnF1b3RlU3RhY2s6CisgICAgICAgICAgICAjVGhpcyBpcyBub3QgYSByZWFsIHRhZy4KKyAg
ICAgICAgICAgICNwcmludCAiPCVzPiBpcyBub3QgcmVhbCEiICUgbmFtZQorICAgICAgICAgICAg
YXR0cnMgPSAnJy5qb2luKG1hcChsYW1iZGEoeCwgeSk6ICcgJXM9IiVzIicgJSAoeCwgeSksIGF0
dHJzKSkKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlX2RhdGEoJzwlcyVzPicgJSAobmFtZSwgYXR0
cnMpKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuZW5kRGF0YSgpCisKKyAgICAg
ICAgaWYgbm90IHNlbGYuaXNTZWxmQ2xvc2luZ1RhZyhuYW1lKSBhbmQgbm90IHNlbGZDbG9zaW5n
OgorICAgICAgICAgICAgc2VsZi5fc21hcnRQb3AobmFtZSkKKworICAgICAgICBpZiBzZWxmLnBh
cnNlT25seVRoZXNlIGFuZCBsZW4oc2VsZi50YWdTdGFjaykgPD0gMSBcCisgICAgICAgICAgICAg
ICBhbmQgKHNlbGYucGFyc2VPbmx5VGhlc2UudGV4dCBvciBub3Qgc2VsZi5wYXJzZU9ubHlUaGVz
ZS5zZWFyY2hUYWcobmFtZSwgYXR0cnMpKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAg
IHRhZyA9IFRhZyhzZWxmLCBuYW1lLCBhdHRycywgc2VsZi5jdXJyZW50VGFnLCBzZWxmLnByZXZp
b3VzKQorICAgICAgICBpZiBzZWxmLnByZXZpb3VzOgorICAgICAgICAgICAgc2VsZi5wcmV2aW91
cy5uZXh0ID0gdGFnCisgICAgICAgIHNlbGYucHJldmlvdXMgPSB0YWcKKyAgICAgICAgc2VsZi5w
dXNoVGFnKHRhZykKKyAgICAgICAgaWYgc2VsZkNsb3Npbmcgb3Igc2VsZi5pc1NlbGZDbG9zaW5n
VGFnKG5hbWUpOgorICAgICAgICAgICAgc2VsZi5wb3BUYWcoKQorICAgICAgICBpZiBuYW1lIGlu
IHNlbGYuUVVPVEVfVEFHUzoKKyAgICAgICAgICAgICNwcmludCAiQmVnaW5uaW5nIHF1b3RlICgl
cykiICUgbmFtZQorICAgICAgICAgICAgc2VsZi5xdW90ZVN0YWNrLmFwcGVuZChuYW1lKQorICAg
ICAgICAgICAgc2VsZi5saXRlcmFsID0gMQorICAgICAgICByZXR1cm4gdGFnCisKKyAgICBkZWYg
dW5rbm93bl9lbmR0YWcoc2VsZiwgbmFtZSk6CisgICAgICAgICNwcmludCAiRW5kIHRhZyAlcyIg
JSBuYW1lCisgICAgICAgIGlmIHNlbGYucXVvdGVTdGFjayBhbmQgc2VsZi5xdW90ZVN0YWNrWy0x
XSAhPSBuYW1lOgorICAgICAgICAgICAgI1RoaXMgaXMgbm90IGEgcmVhbCBlbmQgdGFnLgorICAg
ICAgICAgICAgI3ByaW50ICI8LyVzPiBpcyBub3QgcmVhbCEiICUgbmFtZQorICAgICAgICAgICAg
c2VsZi5oYW5kbGVfZGF0YSgnPC8lcz4nICUgbmFtZSkKKyAgICAgICAgICAgIHJldHVybgorICAg
ICAgICBzZWxmLmVuZERhdGEoKQorICAgICAgICBzZWxmLl9wb3BUb1RhZyhuYW1lKQorICAgICAg
ICBpZiBzZWxmLnF1b3RlU3RhY2sgYW5kIHNlbGYucXVvdGVTdGFja1stMV0gPT0gbmFtZToKKyAg
ICAgICAgICAgIHNlbGYucXVvdGVTdGFjay5wb3AoKQorICAgICAgICAgICAgc2VsZi5saXRlcmFs
ID0gKGxlbihzZWxmLnF1b3RlU3RhY2spID4gMCkKKworICAgIGRlZiBoYW5kbGVfZGF0YShzZWxm
LCBkYXRhKToKKyAgICAgICAgc2VsZi5jdXJyZW50RGF0YS5hcHBlbmQoZGF0YSkKKworICAgIGRl
ZiBleHRyYWN0Q2hhcnNldEZyb21NZXRhKHNlbGYsIGF0dHJzKToKKyAgICAgICAgc2VsZi51bmtu
b3duX3N0YXJ0dGFnKCdtZXRhJywgYXR0cnMpCisKKworY2xhc3MgQmVhdXRpZnVsU291cChCZWF1
dGlmdWxTdG9uZVNvdXApOgorCisgICAgIiIiVGhpcyBwYXJzZXIga25vd3MgdGhlIGZvbGxvd2lu
ZyBmYWN0cyBhYm91dCBIVE1MOgorCisgICAgKiBTb21lIHRhZ3MgaGF2ZSBubyBjbG9zaW5nIHRh
ZyBhbmQgc2hvdWxkIGJlIGludGVycHJldGVkIGFzIGJlaW5nCisgICAgICBjbG9zZWQgYXMgc29v
biBhcyB0aGV5IGFyZSBlbmNvdW50ZXJlZC4KKworICAgICogVGhlIHRleHQgaW5zaWRlIHNvbWUg
dGFncyAoaWUuICdzY3JpcHQnKSBtYXkgY29udGFpbiB0YWdzIHdoaWNoCisgICAgICBhcmUgbm90
IHJlYWxseSBwYXJ0IG9mIHRoZSBkb2N1bWVudCBhbmQgd2hpY2ggc2hvdWxkIGJlIHBhcnNlZAor
ICAgICAgYXMgdGV4dCwgbm90IHRhZ3MuIElmIHlvdSB3YW50IHRvIHBhcnNlIHRoZSB0ZXh0IGFz
IHRhZ3MsIHlvdSBjYW4KKyAgICAgIGFsd2F5cyBmZXRjaCBpdCBhbmQgcGFyc2UgaXQgZXhwbGlj
aXRseS4KKworICAgICogVGFnIG5lc3RpbmcgcnVsZXM6CisKKyAgICAgIE1vc3QgdGFncyBjYW4n
dCBiZSBuZXN0ZWQgYXQgYWxsLiBGb3IgaW5zdGFuY2UsIHRoZSBvY2N1cmFuY2Ugb2YKKyAgICAg
IGEgPHA+IHRhZyBzaG91bGQgaW1wbGljaXRseSBjbG9zZSB0aGUgcHJldmlvdXMgPHA+IHRhZy4K
KworICAgICAgIDxwPlBhcmExPHA+UGFyYTIKKyAgICAgICAgc2hvdWxkIGJlIHRyYW5zZm9ybWVk
IGludG86CisgICAgICAgPHA+UGFyYTE8L3A+PHA+UGFyYTIKKworICAgICAgU29tZSB0YWdzIGNh
biBiZSBuZXN0ZWQgYXJiaXRyYXJpbHkuIEZvciBpbnN0YW5jZSwgdGhlIG9jY3VyYW5jZQorICAg
ICAgb2YgYSA8YmxvY2txdW90ZT4gdGFnIHNob3VsZCBfbm90XyBpbXBsaWNpdGx5IGNsb3NlIHRo
ZSBwcmV2aW91cworICAgICAgPGJsb2NrcXVvdGU+IHRhZy4KKworICAgICAgIEFsaWNlIHNhaWQ6
IDxibG9ja3F1b3RlPkJvYiBzYWlkOiA8YmxvY2txdW90ZT5CbGFoCisgICAgICAgIHNob3VsZCBO
T1QgYmUgdHJhbnNmb3JtZWQgaW50bzoKKyAgICAgICBBbGljZSBzYWlkOiA8YmxvY2txdW90ZT5C
b2Igc2FpZDogPC9ibG9ja3F1b3RlPjxibG9ja3F1b3RlPkJsYWgKKworICAgICAgU29tZSB0YWdz
IGNhbiBiZSBuZXN0ZWQsIGJ1dCB0aGUgbmVzdGluZyBpcyByZXNldCBieSB0aGUKKyAgICAgIGlu
dGVycG9zaXRpb24gb2Ygb3RoZXIgdGFncy4gRm9yIGluc3RhbmNlLCBhIDx0cj4gdGFnIHNob3Vs
ZAorICAgICAgaW1wbGljaXRseSBjbG9zZSB0aGUgcHJldmlvdXMgPHRyPiB0YWcgd2l0aGluIHRo
ZSBzYW1lIDx0YWJsZT4sCisgICAgICBidXQgbm90IGNsb3NlIGEgPHRyPiB0YWcgaW4gYW5vdGhl
ciB0YWJsZS4KKworICAgICAgIDx0YWJsZT48dHI+QmxhaDx0cj5CbGFoCisgICAgICAgIHNob3Vs
ZCBiZSB0cmFuc2Zvcm1lZCBpbnRvOgorICAgICAgIDx0YWJsZT48dHI+QmxhaDwvdHI+PHRyPkJs
YWgKKyAgICAgICAgYnV0LAorICAgICAgIDx0cj5CbGFoPHRhYmxlPjx0cj5CbGFoCisgICAgICAg
IHNob3VsZCBOT1QgYmUgdHJhbnNmb3JtZWQgaW50bworICAgICAgIDx0cj5CbGFoPHRhYmxlPjwv
dHI+PHRyPkJsYWgKKworICAgIERpZmZlcmluZyBhc3N1bXB0aW9ucyBhYm91dCB0YWcgbmVzdGlu
ZyBydWxlcyBhcmUgYSBtYWpvciBzb3VyY2UKKyAgICBvZiBwcm9ibGVtcyB3aXRoIHRoZSBCZWF1
dGlmdWxTb3VwIGNsYXNzLiBJZiBCZWF1dGlmdWxTb3VwIGlzIG5vdAorICAgIHRyZWF0aW5nIGFz
IG5lc3RhYmxlIGEgdGFnIHlvdXIgcGFnZSBhdXRob3IgdHJlYXRzIGFzIG5lc3RhYmxlLAorICAg
IHRyeSBJQ2FudEJlbGlldmVJdHNCZWF1dGlmdWxTb3VwLCBNaW5pbWFsU291cCwgb3IKKyAgICBC
ZWF1dGlmdWxTdG9uZVNvdXAgYmVmb3JlIHdyaXRpbmcgeW91ciBvd24gc3ViY2xhc3MuIiIiCisK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgaWYgbm90
IGt3YXJncy5oYXNfa2V5KCdzbWFydFF1b3Rlc1RvJyk6CisgICAgICAgICAgICBrd2FyZ3NbJ3Nt
YXJ0UXVvdGVzVG8nXSA9IHNlbGYuSFRNTF9FTlRJVElFUworICAgICAgICBrd2FyZ3NbJ2lzSFRN
TCddID0gVHJ1ZQorICAgICAgICBCZWF1dGlmdWxTdG9uZVNvdXAuX19pbml0X18oc2VsZiwgKmFy
Z3MsICoqa3dhcmdzKQorCisgICAgU0VMRl9DTE9TSU5HX1RBR1MgPSBidWlsZFRhZ01hcChOb25l
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWydicicgLCAnaHInLCAnaW5w
dXQnLCAnaW1nJywgJ21ldGEnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
J3NwYWNlcicsICdsaW5rJywgJ2ZyYW1lJywgJ2Jhc2UnXSkKKworICAgIFBSRVNFUlZFX1dISVRF
U1BBQ0VfVEFHUyA9IHNldChbJ3ByZScsICd0ZXh0YXJlYSddKQorCisgICAgUVVPVEVfVEFHUyA9
IHsnc2NyaXB0JyA6IE5vbmUsICd0ZXh0YXJlYScgOiBOb25lfQorCisgICAgI0FjY29yZGluZyB0
byB0aGUgSFRNTCBzdGFuZGFyZCwgZWFjaCBvZiB0aGVzZSBpbmxpbmUgdGFncyBjYW4KKyAgICAj
Y29udGFpbiBhbm90aGVyIHRhZyBvZiB0aGUgc2FtZSB0eXBlLiBGdXJ0aGVybW9yZSwgaXQncyBj
b21tb24KKyAgICAjdG8gYWN0dWFsbHkgdXNlIHRoZXNlIHRhZ3MgdGhpcyB3YXkuCisgICAgTkVT
VEFCTEVfSU5MSU5FX1RBR1MgPSBbJ3NwYW4nLCAnZm9udCcsICdxJywgJ29iamVjdCcsICdiZG8n
LCAnc3ViJywgJ3N1cCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlciddCisK
KyAgICAjQWNjb3JkaW5nIHRvIHRoZSBIVE1MIHN0YW5kYXJkLCB0aGVzZSBibG9jayB0YWdzIGNh
biBjb250YWluCisgICAgI2Fub3RoZXIgdGFnIG9mIHRoZSBzYW1lIHR5cGUuIEZ1cnRoZXJtb3Jl
LCBpdCdzIGNvbW1vbgorICAgICN0byBhY3R1YWxseSB1c2UgdGhlc2UgdGFncyB0aGlzIHdheS4K
KyAgICBORVNUQUJMRV9CTE9DS19UQUdTID0gWydibG9ja3F1b3RlJywgJ2RpdicsICdmaWVsZHNl
dCcsICdpbnMnLCAnZGVsJ10KKworICAgICNMaXN0cyBjYW4gY29udGFpbiBvdGhlciBsaXN0cywg
YnV0IHRoZXJlIGFyZSByZXN0cmljdGlvbnMuCisgICAgTkVTVEFCTEVfTElTVF9UQUdTID0geyAn
b2wnIDogW10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAndWwnIDogW10sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAnbGknIDogWyd1bCcsICdvbCddLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJ2RsJyA6IFtdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RkJyA6
IFsnZGwnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdkdCcgOiBbJ2RsJ10gfQorCisg
ICAgI1RhYmxlcyBjYW4gY29udGFpbiBvdGhlciB0YWJsZXMsIGJ1dCB0aGVyZSBhcmUgcmVzdHJp
Y3Rpb25zLgorICAgIE5FU1RBQkxFX1RBQkxFX1RBR1MgPSB7J3RhYmxlJyA6IFtdLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJ3RyJyA6IFsndGFibGUnLCAndGJvZHknLCAndGZvb3QnLCAn
dGhlYWQnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZCcgOiBbJ3RyJ10sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAndGgnIDogWyd0ciddLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ3RoZWFkJyA6IFsndGFibGUnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICd0Ym9keScgOiBbJ3RhYmxlJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAndGZvb3Qn
IDogWyd0YWJsZSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgTk9OX05F
U1RBQkxFX0JMT0NLX1RBR1MgPSBbJ2FkZHJlc3MnLCAnZm9ybScsICdwJywgJ3ByZSddCisKKyAg
ICAjSWYgb25lIG9mIHRoZXNlIHRhZ3MgaXMgZW5jb3VudGVyZWQsIGFsbCB0YWdzIHVwIHRvIHRo
ZSBuZXh0IHRhZyBvZgorICAgICN0aGlzIHR5cGUgYXJlIHBvcHBlZC4KKyAgICBSRVNFVF9ORVNU
SU5HX1RBR1MgPSBidWlsZFRhZ01hcChOb25lLCBORVNUQUJMRV9CTE9DS19UQUdTLCAnbm9zY3Jp
cHQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5PTl9ORVNUQUJMRV9C
TE9DS19UQUdTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FU1RBQkxF
X0xJU1RfVEFHUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVNUQUJM
RV9UQUJMRV9UQUdTKQorCisgICAgTkVTVEFCTEVfVEFHUyA9IGJ1aWxkVGFnTWFwKFtdLCBORVNU
QUJMRV9JTkxJTkVfVEFHUywgTkVTVEFCTEVfQkxPQ0tfVEFHUywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTkVTVEFCTEVfTElTVF9UQUdTLCBORVNUQUJMRV9UQUJMRV9UQUdTKQor
CisgICAgIyBVc2VkIHRvIGRldGVjdCB0aGUgY2hhcnNldCBpbiBhIE1FVEEgdGFnOyBzZWUgc3Rh
cnRfbWV0YQorICAgIENIQVJTRVRfUkUgPSByZS5jb21waWxlKCIoKF58OylccypjaGFyc2V0PSko
W147XSopIiwgcmUuTSkKKworICAgIGRlZiBleHRyYWN0Q2hhcnNldEZyb21NZXRhKHNlbGYsIGF0
dHJzKToKKyAgICAgICAgIiIiQmVhdXRpZnVsIFNvdXAgY2FuIGRldGVjdCBhIGNoYXJzZXQgaW5j
bHVkZWQgaW4gYSBNRVRBIHRhZywKKyAgICAgICAgdHJ5IHRvIGNvbnZlcnQgdGhlIGRvY3VtZW50
IHRvIHRoYXQgY2hhcnNldCwgYW5kIHJlLXBhcnNlIHRoZQorICAgICAgICBkb2N1bWVudCBmcm9t
IHRoZSBiZWdpbm5pbmcuIiIiCisgICAgICAgIGh0dHBFcXVpdiA9IE5vbmUKKyAgICAgICAgY29u
dGVudFR5cGUgPSBOb25lCisgICAgICAgIGNvbnRlbnRUeXBlSW5kZXggPSBOb25lCisgICAgICAg
IHRhZ05lZWRzRW5jb2RpbmdTdWJzdGl0dXRpb24gPSBGYWxzZQorCisgICAgICAgIGZvciBpIGlu
IHJhbmdlKDAsIGxlbihhdHRycykpOgorICAgICAgICAgICAga2V5LCB2YWx1ZSA9IGF0dHJzW2ld
CisgICAgICAgICAgICBrZXkgPSBrZXkubG93ZXIoKQorICAgICAgICAgICAgaWYga2V5ID09ICdo
dHRwLWVxdWl2JzoKKyAgICAgICAgICAgICAgICBodHRwRXF1aXYgPSB2YWx1ZQorICAgICAgICAg
ICAgZWxpZiBrZXkgPT0gJ2NvbnRlbnQnOgorICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlID0g
dmFsdWUKKyAgICAgICAgICAgICAgICBjb250ZW50VHlwZUluZGV4ID0gaQorCisgICAgICAgIGlm
IGh0dHBFcXVpdiBhbmQgY29udGVudFR5cGU6ICMgSXQncyBhbiBpbnRlcmVzdGluZyBtZXRhIHRh
Zy4KKyAgICAgICAgICAgIG1hdGNoID0gc2VsZi5DSEFSU0VUX1JFLnNlYXJjaChjb250ZW50VHlw
ZSkKKyAgICAgICAgICAgIGlmIG1hdGNoOgorICAgICAgICAgICAgICAgIGlmIChzZWxmLmRlY2xh
cmVkSFRNTEVuY29kaW5nIGlzIG5vdCBOb25lIG9yCisgICAgICAgICAgICAgICAgICAgIHNlbGYu
b3JpZ2luYWxFbmNvZGluZyA9PSBzZWxmLmZyb21FbmNvZGluZyk6CisgICAgICAgICAgICAgICAg
ICAgICMgQW4gSFRNTCBlbmNvZGluZyB3YXMgc25pZmZlZCB3aGlsZSBjb252ZXJ0aW5nCisgICAg
ICAgICAgICAgICAgICAgICMgdGhlIGRvY3VtZW50IHRvIFVuaWNvZGUsIG9yIGFuIEhUTUwgZW5j
b2Rpbmcgd2FzCisgICAgICAgICAgICAgICAgICAgICMgc25pZmZlZCBkdXJpbmcgYSBwcmV2aW91
cyBwYXNzIHRocm91Z2ggdGhlCisgICAgICAgICAgICAgICAgICAgICMgZG9jdW1lbnQsIG9yIGFu
IGVuY29kaW5nIHdhcyBzcGVjaWZpZWQKKyAgICAgICAgICAgICAgICAgICAgIyBleHBsaWNpdGx5
IGFuZCBpdCB3b3JrZWQuIFJld3JpdGUgdGhlIG1ldGEgdGFnLgorICAgICAgICAgICAgICAgICAg
ICBkZWYgcmV3cml0ZShtYXRjaCk6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF0
Y2guZ3JvdXAoMSkgKyAiJVNPVVAtRU5DT0RJTkclIgorICAgICAgICAgICAgICAgICAgICBuZXdB
dHRyID0gc2VsZi5DSEFSU0VUX1JFLnN1YihyZXdyaXRlLCBjb250ZW50VHlwZSkKKyAgICAgICAg
ICAgICAgICAgICAgYXR0cnNbY29udGVudFR5cGVJbmRleF0gPSAoYXR0cnNbY29udGVudFR5cGVJ
bmRleF1bMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5ld0F0dHIpCisgICAgICAgICAgICAgICAgICAgIHRhZ05lZWRzRW5jb2RpbmdTdWJzdGl0dXRp
b24gPSBUcnVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBU
aGlzIGlzIG91ciBmaXJzdCBwYXNzIHRocm91Z2ggdGhlIGRvY3VtZW50LgorICAgICAgICAgICAg
ICAgICAgICAjIEdvIHRocm91Z2ggaXQgYWdhaW4gd2l0aCB0aGUgZW5jb2RpbmcgaW5mb3JtYXRp
b24uCisgICAgICAgICAgICAgICAgICAgIG5ld0NoYXJzZXQgPSBtYXRjaC5ncm91cCgzKQorICAg
ICAgICAgICAgICAgICAgICBpZiBuZXdDaGFyc2V0IGFuZCBuZXdDaGFyc2V0ICE9IHNlbGYub3Jp
Z2luYWxFbmNvZGluZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGVjbGFyZWRIVE1M
RW5jb2RpbmcgPSBuZXdDaGFyc2V0CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9mZWVk
KHNlbGYuZGVjbGFyZWRIVE1MRW5jb2RpbmcpCisgICAgICAgICAgICAgICAgICAgICAgICByYWlz
ZSBTdG9wUGFyc2luZworICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHRhZyA9IHNl
bGYudW5rbm93bl9zdGFydHRhZygibWV0YSIsIGF0dHJzKQorICAgICAgICBpZiB0YWcgYW5kIHRh
Z05lZWRzRW5jb2RpbmdTdWJzdGl0dXRpb246CisgICAgICAgICAgICB0YWcuY29udGFpbnNTdWJz
dGl0dXRpb25zID0gVHJ1ZQorCisKK2NsYXNzIFN0b3BQYXJzaW5nKEV4Y2VwdGlvbik6CisgICAg
cGFzcworCitjbGFzcyBJQ2FudEJlbGlldmVJdHNCZWF1dGlmdWxTb3VwKEJlYXV0aWZ1bFNvdXAp
OgorCisgICAgIiIiVGhlIEJlYXV0aWZ1bFNvdXAgY2xhc3MgaXMgb3JpZW50ZWQgdG93YXJkcyBz
a2lwcGluZyBvdmVyCisgICAgY29tbW9uIEhUTUwgZXJyb3JzIGxpa2UgdW5jbG9zZWQgdGFncy4g
SG93ZXZlciwgc29tZXRpbWVzIGl0IG1ha2VzCisgICAgZXJyb3JzIG9mIGl0cyBvd24uIEZvciBp
bnN0YW5jZSwgY29uc2lkZXIgdGhpcyBmcmFnbWVudDoKKworICAgICA8Yj5Gb288Yj5CYXI8L2I+
PC9iPgorCisgICAgVGhpcyBpcyBwZXJmZWN0bHkgdmFsaWQgKGlmIGJpemFycmUpIEhUTUwuIEhv
d2V2ZXIsIHRoZQorICAgIEJlYXV0aWZ1bFNvdXAgY2xhc3Mgd2lsbCBpbXBsaWNpdGx5IGNsb3Nl
IHRoZSBmaXJzdCBiIHRhZyB3aGVuIGl0CisgICAgZW5jb3VudGVycyB0aGUgc2Vjb25kICdiJy4g
SXQgd2lsbCB0aGluayB0aGUgYXV0aG9yIHdyb3RlCisgICAgIjxiPkZvbzxiPkJhciIsIGFuZCBk
aWRuJ3QgY2xvc2UgdGhlIGZpcnN0ICdiJyB0YWcsIGJlY2F1c2UKKyAgICB0aGVyZSdzIG5vIHJl
YWwtd29ybGQgcmVhc29uIHRvIGJvbGQgc29tZXRoaW5nIHRoYXQncyBhbHJlYWR5CisgICAgYm9s
ZC4gV2hlbiBpdCBlbmNvdW50ZXJzICc8L2I+PC9iPicgaXQgd2lsbCBjbG9zZSB0d28gbW9yZSAn
YicKKyAgICB0YWdzLCBmb3IgYSBncmFuZCB0b3RhbCBvZiB0aHJlZSB0YWdzIGNsb3NlZCBpbnN0
ZWFkIG9mIHR3by4gVGhpcworICAgIGNhbiB0aHJvdyBvZmYgdGhlIHJlc3Qgb2YgeW91ciBkb2N1
bWVudCBzdHJ1Y3R1cmUuIFRoZSBzYW1lIGlzCisgICAgdHJ1ZSBvZiBhIG51bWJlciBvZiBvdGhl
ciB0YWdzLCBsaXN0ZWQgYmVsb3cuCisKKyAgICBJdCdzIG11Y2ggbW9yZSBjb21tb24gZm9yIHNv
bWVvbmUgdG8gZm9yZ2V0IHRvIGNsb3NlIGEgJ2InIHRhZworICAgIHRoYW4gdG8gYWN0dWFsbHkg
dXNlIG5lc3RlZCAnYicgdGFncywgYW5kIHRoZSBCZWF1dGlmdWxTb3VwIGNsYXNzCisgICAgaGFu
ZGxlcyB0aGUgY29tbW9uIGNhc2UuIFRoaXMgY2xhc3MgaGFuZGxlcyB0aGUgbm90LWNvLWNvbW1v
bgorICAgIGNhc2U6IHdoZXJlIHlvdSBjYW4ndCBiZWxpZXZlIHNvbWVvbmUgd3JvdGUgd2hhdCB0
aGV5IGRpZCwgYnV0CisgICAgaXQncyB2YWxpZCBIVE1MIGFuZCBCZWF1dGlmdWxTb3VwIHNjcmV3
ZWQgdXAgYnkgYXNzdW1pbmcgaXQKKyAgICB3b3VsZG4ndCBiZS4iIiIKKworICAgIElfQ0FOVF9C
RUxJRVZFX1RIRVlSRV9ORVNUQUJMRV9JTkxJTkVfVEFHUyA9IFwKKyAgICAgWydlbScsICdiaWcn
LCAnaScsICdzbWFsbCcsICd0dCcsICdhYmJyJywgJ2Fjcm9ueW0nLCAnc3Ryb25nJywKKyAgICAg
ICdjaXRlJywgJ2NvZGUnLCAnZGZuJywgJ2tiZCcsICdzYW1wJywgJ3N0cm9uZycsICd2YXInLCAn
YicsCisgICAgICAnYmlnJ10KKworICAgIElfQ0FOVF9CRUxJRVZFX1RIRVlSRV9ORVNUQUJMRV9C
TE9DS19UQUdTID0gWydub3NjcmlwdCddCisKKyAgICBORVNUQUJMRV9UQUdTID0gYnVpbGRUYWdN
YXAoW10sIEJlYXV0aWZ1bFNvdXAuTkVTVEFCTEVfVEFHUywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgSV9DQU5UX0JFTElFVkVfVEhFWVJFX05FU1RBQkxFX0JMT0NLX1RBR1MsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElfQ0FOVF9CRUxJRVZFX1RIRVlSRV9ORVNU
QUJMRV9JTkxJTkVfVEFHUykKKworY2xhc3MgTWluaW1hbFNvdXAoQmVhdXRpZnVsU291cCk6Cisg
ICAgIiIiVGhlIE1pbmltYWxTb3VwIGNsYXNzIGlzIGZvciBwYXJzaW5nIEhUTUwgdGhhdCBjb250
YWlucworICAgIHBhdGhvbG9naWNhbGx5IGJhZCBtYXJrdXAuIEl0IG1ha2VzIG5vIGFzc3VtcHRp
b25zIGFib3V0IHRhZworICAgIG5lc3RpbmcsIGJ1dCBpdCBkb2VzIGtub3cgd2hpY2ggdGFncyBh
cmUgc2VsZi1jbG9zaW5nLCB0aGF0CisgICAgPHNjcmlwdD4gdGFncyBjb250YWluIEphdmFzY3Jp
cHQgYW5kIHNob3VsZCBub3QgYmUgcGFyc2VkLCB0aGF0CisgICAgTUVUQSB0YWdzIG1heSBjb250
YWluIGVuY29kaW5nIGluZm9ybWF0aW9uLCBhbmQgc28gb24uCisKKyAgICBUaGlzIGFsc28gbWFr
ZXMgaXQgYmV0dGVyIGZvciBzdWJjbGFzc2luZyB0aGFuIEJlYXV0aWZ1bFN0b25lU291cAorICAg
IG9yIEJlYXV0aWZ1bFNvdXAuIiIiCisKKyAgICBSRVNFVF9ORVNUSU5HX1RBR1MgPSBidWlsZFRh
Z01hcCgnbm9zY3JpcHQnKQorICAgIE5FU1RBQkxFX1RBR1MgPSB7fQorCitjbGFzcyBCZWF1dGlm
dWxTT0FQKEJlYXV0aWZ1bFN0b25lU291cCk6CisgICAgIiIiVGhpcyBjbGFzcyB3aWxsIHB1c2gg
YSB0YWcgd2l0aCBvbmx5IGEgc2luZ2xlIHN0cmluZyBjaGlsZCBpbnRvCisgICAgdGhlIHRhZydz
IHBhcmVudCBhcyBhbiBhdHRyaWJ1dGUuIFRoZSBhdHRyaWJ1dGUncyBuYW1lIGlzIHRoZSB0YWcK
KyAgICBuYW1lLCBhbmQgdGhlIHZhbHVlIGlzIHRoZSBzdHJpbmcgY2hpbGQuIEFuIGV4YW1wbGUg
c2hvdWxkIGdpdmUKKyAgICB0aGUgZmxhdm9yIG9mIHRoZSBjaGFuZ2U6CisKKyAgICA8Zm9vPjxi
YXI+YmF6PC9iYXI+PC9mb28+CisgICAgID0+CisgICAgPGZvbyBiYXI9ImJheiI+PGJhcj5iYXo8
L2Jhcj48L2Zvbz4KKworICAgIFlvdSBjYW4gdGhlbiBhY2Nlc3MgZm9vVGFnWydiYXInXSBpbnN0
ZWFkIG9mIGZvb1RhZy5iYXJUYWcuc3RyaW5nLgorCisgICAgVGhpcyBpcywgb2YgY291cnNlLCB1
c2VmdWwgZm9yIHNjcmFwaW5nIHN0cnVjdHVyZXMgdGhhdCB0ZW5kIHRvCisgICAgdXNlIHN1YmVs
ZW1lbnRzIGluc3RlYWQgb2YgYXR0cmlidXRlcywgc3VjaCBhcyBTT0FQIG1lc3NhZ2VzLiBOb3Rl
CisgICAgdGhhdCBpdCBtb2RpZmllcyBpdHMgaW5wdXQsIHNvIGRvbid0IHByaW50IHRoZSBtb2Rp
ZmllZCB2ZXJzaW9uCisgICAgb3V0LgorCisgICAgSSdtIG5vdCBzdXJlIGhvdyBtYW55IHBlb3Bs
ZSByZWFsbHkgd2FudCB0byB1c2UgdGhpcyBjbGFzczsgbGV0IG1lCisgICAga25vdyBpZiB5b3Ug
ZG8uIE1haW5seSBJIGxpa2UgdGhlIG5hbWUuIiIiCisKKyAgICBkZWYgcG9wVGFnKHNlbGYpOgor
ICAgICAgICBpZiBsZW4oc2VsZi50YWdTdGFjaykgPiAxOgorICAgICAgICAgICAgdGFnID0gc2Vs
Zi50YWdTdGFja1stMV0KKyAgICAgICAgICAgIHBhcmVudCA9IHNlbGYudGFnU3RhY2tbLTJdCisg
ICAgICAgICAgICBwYXJlbnQuX2dldEF0dHJNYXAoKQorICAgICAgICAgICAgaWYgKGlzaW5zdGFu
Y2UodGFnLCBUYWcpIGFuZCBsZW4odGFnLmNvbnRlbnRzKSA9PSAxIGFuZAorICAgICAgICAgICAg
ICAgIGlzaW5zdGFuY2UodGFnLmNvbnRlbnRzWzBdLCBOYXZpZ2FibGVTdHJpbmcpIGFuZAorICAg
ICAgICAgICAgICAgIG5vdCBwYXJlbnQuYXR0ck1hcC5oYXNfa2V5KHRhZy5uYW1lKSk6CisgICAg
ICAgICAgICAgICAgcGFyZW50W3RhZy5uYW1lXSA9IHRhZy5jb250ZW50c1swXQorICAgICAgICBC
ZWF1dGlmdWxTdG9uZVNvdXAucG9wVGFnKHNlbGYpCisKKyNFbnRlcnByaXNlIGNsYXNzIG5hbWVz
ISBJdCBoYXMgY29tZSB0byBvdXIgYXR0ZW50aW9uIHRoYXQgc29tZSBwZW9wbGUKKyN0aGluayB0
aGUgbmFtZXMgb2YgdGhlIEJlYXV0aWZ1bCBTb3VwIHBhcnNlciBjbGFzc2VzIGFyZSB0b28gc2ls
bHkKKyNhbmQgInVucHJvZmVzc2lvbmFsIiBmb3IgdXNlIGluIGVudGVycHJpc2Ugc2NyZWVuLXNj
cmFwaW5nLiBXZSBmZWVsCisjeW91ciBwYWluISBGb3Igc3VjaC1taW5kZWQgZm9saywgdGhlIEJl
YXV0aWZ1bCBTb3VwIENvbnNvcnRpdW0gQW5kCisjQWxsLU5pZ2h0IEtvc2hlciBCYWtlcnkgcmVj
b21tZW5kcyByZW5hbWluZyB0aGlzIGZpbGUgdG8KKyMiUm9idXN0UGFyc2VyLnB5IiAob3IsIGlu
IGNhc2VzIG9mIGV4dHJlbWUgZW50ZXJwcmlzaW5lc3MsCisjIlJvYnVzdFBhcnNlckJlYW5JbnRl
cmZhY2UuY2xhc3MiKSBhbmQgdXNpbmcgdGhlIGZvbGxvd2luZworI2VudGVycHJpc2UtZnJpZW5k
bHkgY2xhc3MgYWxpYXNlczoKK2NsYXNzIFJvYnVzdFhNTFBhcnNlcihCZWF1dGlmdWxTdG9uZVNv
dXApOgorICAgIHBhc3MKK2NsYXNzIFJvYnVzdEhUTUxQYXJzZXIoQmVhdXRpZnVsU291cCk6Cisg
ICAgcGFzcworY2xhc3MgUm9idXN0V2Fja0Fzc0hUTUxQYXJzZXIoSUNhbnRCZWxpZXZlSXRzQmVh
dXRpZnVsU291cCk6CisgICAgcGFzcworY2xhc3MgUm9idXN0SW5zYW5lbHlXYWNrQXNzSFRNTFBh
cnNlcihNaW5pbWFsU291cCk6CisgICAgcGFzcworY2xhc3MgU2ltcGxpZnlpbmdTT0FQUGFyc2Vy
KEJlYXV0aWZ1bFNPQVApOgorICAgIHBhc3MKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIEJvbnVzIGxpYnJhcnk6IFVuaWNvZGUs
IERhbW1pdAorIworIyBUaGlzIGNsYXNzIGZvcmNlcyBYTUwgZGF0YSBpbnRvIGEgc3RhbmRhcmQg
Zm9ybWF0ICh1c3VhbGx5IHRvIFVURi04CisjIG9yIFVuaWNvZGUpLiAgSXQgaXMgaGVhdmlseSBi
YXNlZCBvbiBjb2RlIGZyb20gTWFyayBQaWxncmltJ3MKKyMgVW5pdmVyc2FsIEZlZWQgUGFyc2Vy
LiBJdCBkb2VzIG5vdCByZXdyaXRlIHRoZSBYTUwgb3IgSFRNTCB0bworIyByZWZsZWN0IGEgbmV3
IGVuY29kaW5nOiB0aGF0IGhhcHBlbnMgaW4gQmVhdXRpZnVsU3RvbmVTb3VwLmhhbmRsZV9waQor
IyAoWE1MKSBhbmQgQmVhdXRpZnVsU291cC5zdGFydF9tZXRhIChIVE1MKS4KKworIyBBdXRvZGV0
ZWN0cyBjaGFyYWN0ZXIgZW5jb2RpbmdzLgorIyBEb3dubG9hZCBmcm9tIGh0dHA6Ly9jaGFyZGV0
LmZlZWRwYXJzZXIub3JnLwordHJ5OgorICAgIGltcG9ydCBjaGFyZGV0CisjICAgIGltcG9ydCBj
aGFyZGV0LmNvbnN0YW50cworIyAgICBjaGFyZGV0LmNvbnN0YW50cy5fZGVidWcgPSAxCitleGNl
cHQgSW1wb3J0RXJyb3I6CisgICAgY2hhcmRldCA9IE5vbmUKKworIyBjamtjb2RlY3MgYW5kIGlj
b252X2NvZGVjIG1ha2UgUHl0aG9uIGtub3cgYWJvdXQgbW9yZSBjaGFyYWN0ZXIgZW5jb2Rpbmdz
LgorIyBCb3RoIGFyZSBhdmFpbGFibGUgZnJvbSBodHRwOi8vY2prcHl0aG9uLmkxOG4ub3JnLwor
IyBUaGV5J3JlIGJ1aWx0IGluIGlmIHlvdSB1c2UgUHl0aG9uIDIuNC4KK3RyeToKKyAgICBpbXBv
cnQgY2prY29kZWNzLmFsaWFzZXMKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBwYXNzCit0cnk6
CisgICAgaW1wb3J0IGljb252X2NvZGVjCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcGFzcwor
CitjbGFzcyBVbmljb2RlRGFtbWl0OgorICAgICIiIkEgY2xhc3MgZm9yIGRldGVjdGluZyB0aGUg
ZW5jb2Rpbmcgb2YgYSAqTUwgZG9jdW1lbnQgYW5kCisgICAgY29udmVydGluZyBpdCB0byBhIFVu
aWNvZGUgc3RyaW5nLiBJZiB0aGUgc291cmNlIGVuY29kaW5nIGlzCisgICAgd2luZG93cy0xMjUy
LCBjYW4gcmVwbGFjZSBNUyBzbWFydCBxdW90ZXMgd2l0aCB0aGVpciBIVE1MIG9yIFhNTAorICAg
IGVxdWl2YWxlbnRzLiIiIgorCisgICAgIyBUaGlzIGRpY3Rpb25hcnkgbWFwcyBjb21tb25seSBz
ZWVuIHZhbHVlcyBmb3IgImNoYXJzZXQiIGluIEhUTUwKKyAgICAjIG1ldGEgdGFncyB0byB0aGUg
Y29ycmVzcG9uZGluZyBQeXRob24gY29kZWMgbmFtZXMuIEl0IG9ubHkgY292ZXJzCisgICAgIyB2
YWx1ZXMgdGhhdCBhcmVuJ3QgaW4gUHl0aG9uJ3MgYWxpYXNlcyBhbmQgY2FuJ3QgYmUgZGV0ZXJt
aW5lZAorICAgICMgYnkgdGhlIGhldXJpc3RpY3MgaW4gZmluZF9jb2RlYy4KKyAgICBDSEFSU0VU
X0FMSUFTRVMgPSB7ICJtYWNpbnRvc2giIDogIm1hYy1yb21hbiIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAieC1zamlzIiA6ICJzaGlmdC1qaXMiIH0KKworICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBtYXJrdXAsIG92ZXJyaWRlRW5jb2RpbmdzPVtdLAorICAgICAgICAgICAgICAgICBzbWFydFF1
b3Rlc1RvPSd4bWwnLCBpc0hUTUw9RmFsc2UpOgorICAgICAgICBzZWxmLmRlY2xhcmVkSFRNTEVu
Y29kaW5nID0gTm9uZQorICAgICAgICBzZWxmLm1hcmt1cCwgZG9jdW1lbnRFbmNvZGluZywgc25p
ZmZlZEVuY29kaW5nID0gXAorICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZGV0ZWN0RW5jb2Rp
bmcobWFya3VwLCBpc0hUTUwpCisgICAgICAgIHNlbGYuc21hcnRRdW90ZXNUbyA9IHNtYXJ0UXVv
dGVzVG8KKyAgICAgICAgc2VsZi50cmllZEVuY29kaW5ncyA9IFtdCisgICAgICAgIGlmIG1hcmt1
cCA9PSAnJyBvciBpc2luc3RhbmNlKG1hcmt1cCwgdW5pY29kZSk6CisgICAgICAgICAgICBzZWxm
Lm9yaWdpbmFsRW5jb2RpbmcgPSBOb25lCisgICAgICAgICAgICBzZWxmLnVuaWNvZGUgPSB1bmlj
b2RlKG1hcmt1cCkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHUgPSBOb25lCisgICAg
ICAgIGZvciBwcm9wb3NlZEVuY29kaW5nIGluIG92ZXJyaWRlRW5jb2RpbmdzOgorICAgICAgICAg
ICAgdSA9IHNlbGYuX2NvbnZlcnRGcm9tKHByb3Bvc2VkRW5jb2RpbmcpCisgICAgICAgICAgICBp
ZiB1OiBicmVhaworICAgICAgICBpZiBub3QgdToKKyAgICAgICAgICAgIGZvciBwcm9wb3NlZEVu
Y29kaW5nIGluIChkb2N1bWVudEVuY29kaW5nLCBzbmlmZmVkRW5jb2RpbmcpOgorICAgICAgICAg
ICAgICAgIHUgPSBzZWxmLl9jb252ZXJ0RnJvbShwcm9wb3NlZEVuY29kaW5nKQorICAgICAgICAg
ICAgICAgIGlmIHU6IGJyZWFrCisKKyAgICAgICAgIyBJZiBubyBsdWNrIGFuZCB3ZSBoYXZlIGF1
dG8tZGV0ZWN0aW9uIGxpYnJhcnksIHRyeSB0aGF0OgorICAgICAgICBpZiBub3QgdSBhbmQgY2hh
cmRldCBhbmQgbm90IGlzaW5zdGFuY2Uoc2VsZi5tYXJrdXAsIHVuaWNvZGUpOgorICAgICAgICAg
ICAgdSA9IHNlbGYuX2NvbnZlcnRGcm9tKGNoYXJkZXQuZGV0ZWN0KHNlbGYubWFya3VwKVsnZW5j
b2RpbmcnXSkKKworICAgICAgICAjIEFzIGEgbGFzdCByZXNvcnQsIHRyeSB1dGYtOCBhbmQgd2lu
ZG93cy0xMjUyOgorICAgICAgICBpZiBub3QgdToKKyAgICAgICAgICAgIGZvciBwcm9wb3NlZF9l
bmNvZGluZyBpbiAoInV0Zi04IiwgIndpbmRvd3MtMTI1MiIpOgorICAgICAgICAgICAgICAgIHUg
PSBzZWxmLl9jb252ZXJ0RnJvbShwcm9wb3NlZF9lbmNvZGluZykKKyAgICAgICAgICAgICAgICBp
ZiB1OiBicmVhaworCisgICAgICAgIHNlbGYudW5pY29kZSA9IHUKKyAgICAgICAgaWYgbm90IHU6
IHNlbGYub3JpZ2luYWxFbmNvZGluZyA9IE5vbmUKKworICAgIGRlZiBfc3ViTVNDaGFyKHNlbGYs
IG1hdGNoKToKKyAgICAgICAgIiIiQ2hhbmdlcyBhIE1TIHNtYXJ0IHF1b3RlIGNoYXJhY3RlciB0
byBhbiBYTUwgb3IgSFRNTAorICAgICAgICBlbnRpdHkuIiIiCisgICAgICAgIG9yaWcgPSBtYXRj
aC5ncm91cCgxKQorICAgICAgICBzdWIgPSBzZWxmLk1TX0NIQVJTLmdldChvcmlnKQorICAgICAg
ICBpZiB0eXBlKHN1YikgPT0gdHlwZXMuVHVwbGVUeXBlOgorICAgICAgICAgICAgaWYgc2VsZi5z
bWFydFF1b3Rlc1RvID09ICd4bWwnOgorICAgICAgICAgICAgICAgIHN1YiA9ICcmI3gnLmVuY29k
ZSgpICsgc3ViWzFdLmVuY29kZSgpICsgJzsnLmVuY29kZSgpCisgICAgICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgICAgIHN1YiA9ICcmJy5lbmNvZGUoKSArIHN1YlswXS5lbmNvZGUoKSArICc7
Jy5lbmNvZGUoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3ViID0gc3ViLmVuY29kZSgp
CisgICAgICAgIHJldHVybiBzdWIKKworICAgIGRlZiBfY29udmVydEZyb20oc2VsZiwgcHJvcG9z
ZWQpOgorICAgICAgICBwcm9wb3NlZCA9IHNlbGYuZmluZF9jb2RlYyhwcm9wb3NlZCkKKyAgICAg
ICAgaWYgbm90IHByb3Bvc2VkIG9yIHByb3Bvc2VkIGluIHNlbGYudHJpZWRFbmNvZGluZ3M6Cisg
ICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBzZWxmLnRyaWVkRW5jb2RpbmdzLmFwcGVu
ZChwcm9wb3NlZCkKKyAgICAgICAgbWFya3VwID0gc2VsZi5tYXJrdXAKKworICAgICAgICAjIENv
bnZlcnQgc21hcnQgcXVvdGVzIHRvIEhUTUwgaWYgY29taW5nIGZyb20gYW4gZW5jb2RpbmcKKyAg
ICAgICAgIyB0aGF0IG1pZ2h0IGhhdmUgdGhlbS4KKyAgICAgICAgaWYgc2VsZi5zbWFydFF1b3Rl
c1RvIGFuZCBwcm9wb3NlZC5sb3dlcigpIGluKCJ3aW5kb3dzLTEyNTIiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlzby04ODU5LTEiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlz
by04ODU5LTIiKToKKyAgICAgICAgICAgIHNtYXJ0X3F1b3Rlc19yZSA9ICIoW1x4ODAtXHg5Zl0p
IgorICAgICAgICAgICAgc21hcnRfcXVvdGVzX2NvbXBpbGVkID0gcmUuY29tcGlsZShzbWFydF9x
dW90ZXNfcmUpCisgICAgICAgICAgICBtYXJrdXAgPSBzbWFydF9xdW90ZXNfY29tcGlsZWQuc3Vi
KHNlbGYuX3N1Yk1TQ2hhciwgbWFya3VwKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMg
cHJpbnQgIlRyeWluZyB0byBjb252ZXJ0IGRvY3VtZW50IHRvICVzIiAlIHByb3Bvc2VkCisgICAg
ICAgICAgICB1ID0gc2VsZi5fdG9Vbmljb2RlKG1hcmt1cCwgcHJvcG9zZWQpCisgICAgICAgICAg
ICBzZWxmLm1hcmt1cCA9IHUKKyAgICAgICAgICAgIHNlbGYub3JpZ2luYWxFbmNvZGluZyA9IHBy
b3Bvc2VkCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICAjIHByaW50
ICJUaGF0IGRpZG4ndCB3b3JrISIKKyAgICAgICAgICAgICMgcHJpbnQgZQorICAgICAgICAgICAg
cmV0dXJuIE5vbmUKKyAgICAgICAgI3ByaW50ICJDb3JyZWN0IGVuY29kaW5nOiAlcyIgJSBwcm9w
b3NlZAorICAgICAgICByZXR1cm4gc2VsZi5tYXJrdXAKKworICAgIGRlZiBfdG9Vbmljb2RlKHNl
bGYsIGRhdGEsIGVuY29kaW5nKToKKyAgICAgICAgJycnR2l2ZW4gYSBzdHJpbmcgYW5kIGl0cyBl
bmNvZGluZywgZGVjb2RlcyB0aGUgc3RyaW5nIGludG8gVW5pY29kZS4KKyAgICAgICAgJWVuY29k
aW5nIGlzIGEgc3RyaW5nIHJlY29nbml6ZWQgYnkgZW5jb2RpbmdzLmFsaWFzZXMnJycKKworICAg
ICAgICAjIHN0cmlwIEJ5dGUgT3JkZXIgTWFyayAoaWYgcHJlc2VudCkKKyAgICAgICAgaWYgKGxl
bihkYXRhKSA+PSA0KSBhbmQgKGRhdGFbOjJdID09ICdceGZlXHhmZicpIFwKKyAgICAgICAgICAg
ICAgIGFuZCAoZGF0YVsyOjRdICE9ICdceDAwXHgwMCcpOgorICAgICAgICAgICAgZW5jb2Rpbmcg
PSAndXRmLTE2YmUnCisgICAgICAgICAgICBkYXRhID0gZGF0YVsyOl0KKyAgICAgICAgZWxpZiAo
bGVuKGRhdGEpID49IDQpIGFuZCAoZGF0YVs6Ml0gPT0gJ1x4ZmZceGZlJykgXAorICAgICAgICAg
ICAgICAgICBhbmQgKGRhdGFbMjo0XSAhPSAnXHgwMFx4MDAnKToKKyAgICAgICAgICAgIGVuY29k
aW5nID0gJ3V0Zi0xNmxlJworICAgICAgICAgICAgZGF0YSA9IGRhdGFbMjpdCisgICAgICAgIGVs
aWYgZGF0YVs6M10gPT0gJ1x4ZWZceGJiXHhiZic6CisgICAgICAgICAgICBlbmNvZGluZyA9ICd1
dGYtOCcKKyAgICAgICAgICAgIGRhdGEgPSBkYXRhWzM6XQorICAgICAgICBlbGlmIGRhdGFbOjRd
ID09ICdceDAwXHgwMFx4ZmVceGZmJzoKKyAgICAgICAgICAgIGVuY29kaW5nID0gJ3V0Zi0zMmJl
JworICAgICAgICAgICAgZGF0YSA9IGRhdGFbNDpdCisgICAgICAgIGVsaWYgZGF0YVs6NF0gPT0g
J1x4ZmZceGZlXHgwMFx4MDAnOgorICAgICAgICAgICAgZW5jb2RpbmcgPSAndXRmLTMybGUnCisg
ICAgICAgICAgICBkYXRhID0gZGF0YVs0Ol0KKyAgICAgICAgbmV3ZGF0YSA9IHVuaWNvZGUoZGF0
YSwgZW5jb2RpbmcpCisgICAgICAgIHJldHVybiBuZXdkYXRhCisKKyAgICBkZWYgX2RldGVjdEVu
Y29kaW5nKHNlbGYsIHhtbF9kYXRhLCBpc0hUTUw9RmFsc2UpOgorICAgICAgICAiIiJHaXZlbiBh
IGRvY3VtZW50LCB0cmllcyB0byBkZXRlY3QgaXRzIFhNTCBlbmNvZGluZy4iIiIKKyAgICAgICAg
eG1sX2VuY29kaW5nID0gc25pZmZlZF94bWxfZW5jb2RpbmcgPSBOb25lCisgICAgICAgIHRyeToK
KyAgICAgICAgICAgIGlmIHhtbF9kYXRhWzo0XSA9PSAnXHg0Y1x4NmZceGE3XHg5NCc6CisgICAg
ICAgICAgICAgICAgIyBFQkNESUMKKyAgICAgICAgICAgICAgICB4bWxfZGF0YSA9IHNlbGYuX2Vi
Y2RpY190b19hc2NpaSh4bWxfZGF0YSkKKyAgICAgICAgICAgIGVsaWYgeG1sX2RhdGFbOjRdID09
ICdceDAwXHgzY1x4MDBceDNmJzoKKyAgICAgICAgICAgICAgICAjIFVURi0xNkJFCisgICAgICAg
ICAgICAgICAgc25pZmZlZF94bWxfZW5jb2RpbmcgPSAndXRmLTE2YmUnCisgICAgICAgICAgICAg
ICAgeG1sX2RhdGEgPSB1bmljb2RlKHhtbF9kYXRhLCAndXRmLTE2YmUnKS5lbmNvZGUoJ3V0Zi04
JykKKyAgICAgICAgICAgIGVsaWYgKGxlbih4bWxfZGF0YSkgPj0gNCkgYW5kICh4bWxfZGF0YVs6
Ml0gPT0gJ1x4ZmVceGZmJykgXAorICAgICAgICAgICAgICAgICAgICAgYW5kICh4bWxfZGF0YVsy
OjRdICE9ICdceDAwXHgwMCcpOgorICAgICAgICAgICAgICAgICMgVVRGLTE2QkUgd2l0aCBCT00K
KyAgICAgICAgICAgICAgICBzbmlmZmVkX3htbF9lbmNvZGluZyA9ICd1dGYtMTZiZScKKyAgICAg
ICAgICAgICAgICB4bWxfZGF0YSA9IHVuaWNvZGUoeG1sX2RhdGFbMjpdLCAndXRmLTE2YmUnKS5l
bmNvZGUoJ3V0Zi04JykKKyAgICAgICAgICAgIGVsaWYgeG1sX2RhdGFbOjRdID09ICdceDNjXHgw
MFx4M2ZceDAwJzoKKyAgICAgICAgICAgICAgICAjIFVURi0xNkxFCisgICAgICAgICAgICAgICAg
c25pZmZlZF94bWxfZW5jb2RpbmcgPSAndXRmLTE2bGUnCisgICAgICAgICAgICAgICAgeG1sX2Rh
dGEgPSB1bmljb2RlKHhtbF9kYXRhLCAndXRmLTE2bGUnKS5lbmNvZGUoJ3V0Zi04JykKKyAgICAg
ICAgICAgIGVsaWYgKGxlbih4bWxfZGF0YSkgPj0gNCkgYW5kICh4bWxfZGF0YVs6Ml0gPT0gJ1x4
ZmZceGZlJykgYW5kIFwKKyAgICAgICAgICAgICAgICAgICAgICh4bWxfZGF0YVsyOjRdICE9ICdc
eDAwXHgwMCcpOgorICAgICAgICAgICAgICAgICMgVVRGLTE2TEUgd2l0aCBCT00KKyAgICAgICAg
ICAgICAgICBzbmlmZmVkX3htbF9lbmNvZGluZyA9ICd1dGYtMTZsZScKKyAgICAgICAgICAgICAg
ICB4bWxfZGF0YSA9IHVuaWNvZGUoeG1sX2RhdGFbMjpdLCAndXRmLTE2bGUnKS5lbmNvZGUoJ3V0
Zi04JykKKyAgICAgICAgICAgIGVsaWYgeG1sX2RhdGFbOjRdID09ICdceDAwXHgwMFx4MDBceDNj
JzoKKyAgICAgICAgICAgICAgICAjIFVURi0zMkJFCisgICAgICAgICAgICAgICAgc25pZmZlZF94
bWxfZW5jb2RpbmcgPSAndXRmLTMyYmUnCisgICAgICAgICAgICAgICAgeG1sX2RhdGEgPSB1bmlj
b2RlKHhtbF9kYXRhLCAndXRmLTMyYmUnKS5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgICAgIGVs
aWYgeG1sX2RhdGFbOjRdID09ICdceDNjXHgwMFx4MDBceDAwJzoKKyAgICAgICAgICAgICAgICAj
IFVURi0zMkxFCisgICAgICAgICAgICAgICAgc25pZmZlZF94bWxfZW5jb2RpbmcgPSAndXRmLTMy
bGUnCisgICAgICAgICAgICAgICAgeG1sX2RhdGEgPSB1bmljb2RlKHhtbF9kYXRhLCAndXRmLTMy
bGUnKS5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgICAgIGVsaWYgeG1sX2RhdGFbOjRdID09ICdc
eDAwXHgwMFx4ZmVceGZmJzoKKyAgICAgICAgICAgICAgICAjIFVURi0zMkJFIHdpdGggQk9NCisg
ICAgICAgICAgICAgICAgc25pZmZlZF94bWxfZW5jb2RpbmcgPSAndXRmLTMyYmUnCisgICAgICAg
ICAgICAgICAgeG1sX2RhdGEgPSB1bmljb2RlKHhtbF9kYXRhWzQ6XSwgJ3V0Zi0zMmJlJykuZW5j
b2RlKCd1dGYtOCcpCisgICAgICAgICAgICBlbGlmIHhtbF9kYXRhWzo0XSA9PSAnXHhmZlx4ZmVc
eDAwXHgwMCc6CisgICAgICAgICAgICAgICAgIyBVVEYtMzJMRSB3aXRoIEJPTQorICAgICAgICAg
ICAgICAgIHNuaWZmZWRfeG1sX2VuY29kaW5nID0gJ3V0Zi0zMmxlJworICAgICAgICAgICAgICAg
IHhtbF9kYXRhID0gdW5pY29kZSh4bWxfZGF0YVs0Ol0sICd1dGYtMzJsZScpLmVuY29kZSgndXRm
LTgnKQorICAgICAgICAgICAgZWxpZiB4bWxfZGF0YVs6M10gPT0gJ1x4ZWZceGJiXHhiZic6Cisg
ICAgICAgICAgICAgICAgIyBVVEYtOCB3aXRoIEJPTQorICAgICAgICAgICAgICAgIHNuaWZmZWRf
eG1sX2VuY29kaW5nID0gJ3V0Zi04JworICAgICAgICAgICAgICAgIHhtbF9kYXRhID0gdW5pY29k
ZSh4bWxfZGF0YVszOl0sICd1dGYtOCcpLmVuY29kZSgndXRmLTgnKQorICAgICAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgICAgICBzbmlmZmVkX3htbF9lbmNvZGluZyA9ICdhc2NpaScKKyAgICAg
ICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHhtbF9lbmNvZGlu
Z19tYXRjaCA9IE5vbmUKKyAgICAgICAgeG1sX2VuY29kaW5nX3JlID0gJ148XD8uKmVuY29kaW5n
PVtcJyJdKC4qPylbXCciXS4qXD8+Jy5lbmNvZGUoKQorICAgICAgICB4bWxfZW5jb2RpbmdfbWF0
Y2ggPSByZS5jb21waWxlKHhtbF9lbmNvZGluZ19yZSkubWF0Y2goeG1sX2RhdGEpCisgICAgICAg
IGlmIG5vdCB4bWxfZW5jb2RpbmdfbWF0Y2ggYW5kIGlzSFRNTDoKKyAgICAgICAgICAgIG1ldGFf
cmUgPSAnPFxzKm1ldGFbXj5dK2NoYXJzZXQ9KFtePl0qPylbO1wnIj5dJy5lbmNvZGUoKQorICAg
ICAgICAgICAgcmVnZXhwID0gcmUuY29tcGlsZShtZXRhX3JlLCByZS5JKQorICAgICAgICAgICAg
eG1sX2VuY29kaW5nX21hdGNoID0gcmVnZXhwLnNlYXJjaCh4bWxfZGF0YSkKKyAgICAgICAgaWYg
eG1sX2VuY29kaW5nX21hdGNoIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgeG1sX2VuY29kaW5n
ID0geG1sX2VuY29kaW5nX21hdGNoLmdyb3VwcygpWzBdLmRlY29kZSgKKyAgICAgICAgICAgICAg
ICAnYXNjaWknKS5sb3dlcigpCisgICAgICAgICAgICBpZiBpc0hUTUw6CisgICAgICAgICAgICAg
ICAgc2VsZi5kZWNsYXJlZEhUTUxFbmNvZGluZyA9IHhtbF9lbmNvZGluZworICAgICAgICAgICAg
aWYgc25pZmZlZF94bWxfZW5jb2RpbmcgYW5kIFwKKyAgICAgICAgICAgICAgICh4bWxfZW5jb2Rp
bmcgaW4gKCdpc28tMTA2NDYtdWNzLTInLCAndWNzLTInLCAnY3N1bmljb2RlJywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICdpc28tMTA2NDYtdWNzLTQnLCAndWNzLTQnLCAnY3N1
Y3M0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1dGYtMTYnLCAndXRmLTMy
JywgJ3V0Zl8xNicsICd1dGZfMzInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
J3V0ZjE2JywgJ3UxNicpKToKKyAgICAgICAgICAgICAgICB4bWxfZW5jb2RpbmcgPSBzbmlmZmVk
X3htbF9lbmNvZGluZworICAgICAgICByZXR1cm4geG1sX2RhdGEsIHhtbF9lbmNvZGluZywgc25p
ZmZlZF94bWxfZW5jb2RpbmcKKworCisgICAgZGVmIGZpbmRfY29kZWMoc2VsZiwgY2hhcnNldCk6
CisgICAgICAgIHJldHVybiBzZWxmLl9jb2RlYyhzZWxmLkNIQVJTRVRfQUxJQVNFUy5nZXQoY2hh
cnNldCwgY2hhcnNldCkpIFwKKyAgICAgICAgICAgICAgIG9yIChjaGFyc2V0IGFuZCBzZWxmLl9j
b2RlYyhjaGFyc2V0LnJlcGxhY2UoIi0iLCAiIikpKSBcCisgICAgICAgICAgICAgICBvciAoY2hh
cnNldCBhbmQgc2VsZi5fY29kZWMoY2hhcnNldC5yZXBsYWNlKCItIiwgIl8iKSkpIFwKKyAgICAg
ICAgICAgICAgIG9yIGNoYXJzZXQKKworICAgIGRlZiBfY29kZWMoc2VsZiwgY2hhcnNldCk6Cisg
ICAgICAgIGlmIG5vdCBjaGFyc2V0OiByZXR1cm4gY2hhcnNldAorICAgICAgICBjb2RlYyA9IE5v
bmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29kZWNzLmxvb2t1cChjaGFyc2V0KQorICAg
ICAgICAgICAgY29kZWMgPSBjaGFyc2V0CisgICAgICAgIGV4Y2VwdCAoTG9va3VwRXJyb3IsIFZh
bHVlRXJyb3IpOgorICAgICAgICAgICAgcGFzcworICAgICAgICByZXR1cm4gY29kZWMKKworICAg
IEVCQ0RJQ19UT19BU0NJSV9NQVAgPSBOb25lCisgICAgZGVmIF9lYmNkaWNfdG9fYXNjaWkoc2Vs
Ziwgcyk6CisgICAgICAgIGMgPSBzZWxmLl9fY2xhc3NfXworICAgICAgICBpZiBub3QgYy5FQkNE
SUNfVE9fQVNDSUlfTUFQOgorICAgICAgICAgICAgZW1hcCA9ICgwLDEsMiwzLDE1Niw5LDEzNCwx
MjcsMTUxLDE0MSwxNDIsMTEsMTIsMTMsMTQsMTUsCisgICAgICAgICAgICAgICAgICAgIDE2LDE3
LDE4LDE5LDE1NywxMzMsOCwxMzUsMjQsMjUsMTQ2LDE0MywyOCwyOSwzMCwzMSwKKyAgICAgICAg
ICAgICAgICAgICAgMTI4LDEyOSwxMzAsMTMxLDEzMiwxMCwyMywyNywxMzYsMTM3LDEzOCwxMzks
MTQwLDUsNiw3LAorICAgICAgICAgICAgICAgICAgICAxNDQsMTQ1LDIyLDE0NywxNDgsMTQ5LDE1
MCw0LDE1MiwxNTMsMTU0LDE1NSwyMCwyMSwxNTgsMjYsCisgICAgICAgICAgICAgICAgICAgIDMy
LDE2MCwxNjEsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDkxLDQ2LDYwLDQwLDQzLDMzLAor
ICAgICAgICAgICAgICAgICAgICAzOCwxNjksMTcwLDE3MSwxNzIsMTczLDE3NCwxNzUsMTc2LDE3
Nyw5MywzNiw0Miw0MSw1OSw5NCwKKyAgICAgICAgICAgICAgICAgICAgNDUsNDcsMTc4LDE3OSwx
ODAsMTgxLDE4MiwxODMsMTg0LDE4NSwxMjQsNDQsMzcsOTUsNjIsNjMsCisgICAgICAgICAgICAg
ICAgICAgIDE4NiwxODcsMTg4LDE4OSwxOTAsMTkxLDE5MiwxOTMsMTk0LDk2LDU4LDM1LDY0LDM5
LDYxLDM0LAorICAgICAgICAgICAgICAgICAgICAxOTUsOTcsOTgsOTksMTAwLDEwMSwxMDIsMTAz
LDEwNCwxMDUsMTk2LDE5NywxOTgsMTk5LDIwMCwKKyAgICAgICAgICAgICAgICAgICAgMjAxLDIw
MiwxMDYsMTA3LDEwOCwxMDksMTEwLDExMSwxMTIsMTEzLDExNCwyMDMsMjA0LDIwNSwKKyAgICAg
ICAgICAgICAgICAgICAgMjA2LDIwNywyMDgsMjA5LDEyNiwxMTUsMTE2LDExNywxMTgsMTE5LDEy
MCwxMjEsMTIyLDIxMCwKKyAgICAgICAgICAgICAgICAgICAgMjExLDIxMiwyMTMsMjE0LDIxNSwy
MTYsMjE3LDIxOCwyMTksMjIwLDIyMSwyMjIsMjIzLDIyNCwKKyAgICAgICAgICAgICAgICAgICAg
MjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMjMxLDEyMyw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3MiwK
KyAgICAgICAgICAgICAgICAgICAgNzMsMjMyLDIzMywyMzQsMjM1LDIzNiwyMzcsMTI1LDc0LDc1
LDc2LDc3LDc4LDc5LDgwLDgxLAorICAgICAgICAgICAgICAgICAgICA4MiwyMzgsMjM5LDI0MCwy
NDEsMjQyLDI0Myw5MiwxNTksODMsODQsODUsODYsODcsODgsODksCisgICAgICAgICAgICAgICAg
ICAgIDkwLDI0NCwyNDUsMjQ2LDI0NywyNDgsMjQ5LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2
LDU3LAorICAgICAgICAgICAgICAgICAgICAyNTAsMjUxLDI1MiwyNTMsMjU0LDI1NSkKKyAgICAg
ICAgICAgIGltcG9ydCBzdHJpbmcKKyAgICAgICAgICAgIGMuRUJDRElDX1RPX0FTQ0lJX01BUCA9
IHN0cmluZy5tYWtldHJhbnMoIFwKKyAgICAgICAgICAgICcnLmpvaW4obWFwKGNociwgcmFuZ2Uo
MjU2KSkpLCAnJy5qb2luKG1hcChjaHIsIGVtYXApKSkKKyAgICAgICAgcmV0dXJuIHMudHJhbnNs
YXRlKGMuRUJDRElDX1RPX0FTQ0lJX01BUCkKKworICAgIE1TX0NIQVJTID0geyAnXHg4MCcgOiAo
J2V1cm8nLCAnMjBBQycpLAorICAgICAgICAgICAgICAgICAnXHg4MScgOiAnICcsCisgICAgICAg
ICAgICAgICAgICdceDgyJyA6ICgnc2JxdW8nLCAnMjAxQScpLAorICAgICAgICAgICAgICAgICAn
XHg4MycgOiAoJ2Zub2YnLCAnMTkyJyksCisgICAgICAgICAgICAgICAgICdceDg0JyA6ICgnYmRx
dW8nLCAnMjAxRScpLAorICAgICAgICAgICAgICAgICAnXHg4NScgOiAoJ2hlbGxpcCcsICcyMDI2
JyksCisgICAgICAgICAgICAgICAgICdceDg2JyA6ICgnZGFnZ2VyJywgJzIwMjAnKSwKKyAgICAg
ICAgICAgICAgICAgJ1x4ODcnIDogKCdEYWdnZXInLCAnMjAyMScpLAorICAgICAgICAgICAgICAg
ICAnXHg4OCcgOiAoJ2NpcmMnLCAnMkM2JyksCisgICAgICAgICAgICAgICAgICdceDg5JyA6ICgn
cGVybWlsJywgJzIwMzAnKSwKKyAgICAgICAgICAgICAgICAgJ1x4OEEnIDogKCdTY2Fyb24nLCAn
MTYwJyksCisgICAgICAgICAgICAgICAgICdceDhCJyA6ICgnbHNhcXVvJywgJzIwMzknKSwKKyAg
ICAgICAgICAgICAgICAgJ1x4OEMnIDogKCdPRWxpZycsICcxNTInKSwKKyAgICAgICAgICAgICAg
ICAgJ1x4OEQnIDogJz8nLAorICAgICAgICAgICAgICAgICAnXHg4RScgOiAoJyN4MTdEJywgJzE3
RCcpLAorICAgICAgICAgICAgICAgICAnXHg4RicgOiAnPycsCisgICAgICAgICAgICAgICAgICdc
eDkwJyA6ICc/JywKKyAgICAgICAgICAgICAgICAgJ1x4OTEnIDogKCdsc3F1bycsICcyMDE4Jyks
CisgICAgICAgICAgICAgICAgICdceDkyJyA6ICgncnNxdW8nLCAnMjAxOScpLAorICAgICAgICAg
ICAgICAgICAnXHg5MycgOiAoJ2xkcXVvJywgJzIwMUMnKSwKKyAgICAgICAgICAgICAgICAgJ1x4
OTQnIDogKCdyZHF1bycsICcyMDFEJyksCisgICAgICAgICAgICAgICAgICdceDk1JyA6ICgnYnVs
bCcsICcyMDIyJyksCisgICAgICAgICAgICAgICAgICdceDk2JyA6ICgnbmRhc2gnLCAnMjAxMycp
LAorICAgICAgICAgICAgICAgICAnXHg5NycgOiAoJ21kYXNoJywgJzIwMTQnKSwKKyAgICAgICAg
ICAgICAgICAgJ1x4OTgnIDogKCd0aWxkZScsICcyREMnKSwKKyAgICAgICAgICAgICAgICAgJ1x4
OTknIDogKCd0cmFkZScsICcyMTIyJyksCisgICAgICAgICAgICAgICAgICdceDlhJyA6ICgnc2Nh
cm9uJywgJzE2MScpLAorICAgICAgICAgICAgICAgICAnXHg5YicgOiAoJ3JzYXF1bycsICcyMDNB
JyksCisgICAgICAgICAgICAgICAgICdceDljJyA6ICgnb2VsaWcnLCAnMTUzJyksCisgICAgICAg
ICAgICAgICAgICdceDlkJyA6ICc/JywKKyAgICAgICAgICAgICAgICAgJ1x4OWUnIDogKCcjeDE3
RScsICcxN0UnKSwKKyAgICAgICAgICAgICAgICAgJ1x4OWYnIDogKCdZdW1sJywgJycpLH0KKwor
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMKKworCisjQnkgZGVmYXVsdCwgYWN0IGFzIGFuIEhUTUwgcHJldHR5LXBy
aW50ZXIuCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIGltcG9ydCBzeXMKKyAgICBz
b3VwID0gQmVhdXRpZnVsU291cChzeXMuc3RkaW4pCisgICAgcHJpbnQgc291cC5wcmV0dGlmeSgp
Cg==
</data>
<flag name="review"
          id="31914"
          type_id="1"
          status="+"
          setter="abarth"
    />
    <flag name="commit-queue"
          id="31915"
          type_id="3"
          status="-"
          setter="cjerdonek"
    />
          </attachment>
      

    </bug>

</bugzilla>