<?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>141145</bug_id>
          
          <creation_ts>2015-02-01 18:11:15 -0800</creation_ts>
          <short_desc>Remove slickspeed from webkit.org</short_desc>
          <delta_ts>2015-02-01 18:44:34 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</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="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1066024</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-02-01 18:11:15 -0800</bug_when>
    <thetext>Remove slickspeed from webkit.org</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1066025</commentid>
    <comment_count>1</comment_count>
      <attachid>245851</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-02-01 18:13:46 -0800</bug_when>
    <thetext>Created attachment 245851
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1066026</commentid>
    <comment_count>2</comment_count>
      <attachid>245851</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-02-01 18:42:57 -0800</bug_when>
    <thetext>Comment on attachment 245851
Patch

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

&gt; Websites/webkit.org/ChangeLog:8
&gt; +        The benchmark no longer works, probably some broken PHP.

Looks like it&apos;s linked to from WebKit blog, 3rd party sites and even from a book:

Just sayin&apos;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1066027</commentid>
    <comment_count>3</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-02-01 18:44:34 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 245851 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=245851&amp;action=review
&gt; 
&gt; &gt; Websites/webkit.org/ChangeLog:8
&gt; &gt; +        The benchmark no longer works, probably some broken PHP.
&gt; 
&gt; Looks like it&apos;s linked to from WebKit blog, 3rd party sites and even from a
&gt; book:
&gt; 
&gt; Just sayin&apos;.

I guess we&apos;ll keep it then. It would be nice to fix it though.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245851</attachid>
            <date>2015-02-01 18:13:46 -0800</date>
            <delta_ts>2015-02-01 18:44:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141145-20150201181353.patch</filename>
            <type>text/plain</type>
            <size>303360</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc5NDcxCmRpZmYgLS1naXQgYS9XZWJzaXRlcy93ZWJraXQu
b3JnL0NoYW5nZUxvZyBiL1dlYnNpdGVzL3dlYmtpdC5vcmcvQ2hhbmdlTG9nCmluZGV4IDNlYTRk
MDJjNmE4YTM1MmJmN2Q2YTM5MjY3YjIxNzM1ZTRiZmNiZDMuLjkyZThiNGExYTA3ZDExYWEwYjIy
MWEyMDQzOTYwMDg5YWMwNjk0MmEgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3dlYmtpdC5vcmcvQ2hh
bmdlTG9nCisrKyBiL1dlYnNpdGVzL3dlYmtpdC5vcmcvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMg
QEAKKzIwMTUtMDItMDEgIEJlbmphbWluIFBvdWxhaW4gIDxiZW5qYW1pbkB3ZWJraXQub3JnPgor
CisgICAgICAgIFJlbW92ZSBzbGlja3NwZWVkIGZyb20gd2Via2l0Lm9yZworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMTQ1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIGJlbmNobWFyayBubyBsb25n
ZXIgd29ya3MsIHByb2JhYmx5IHNvbWUgYnJva2VuIFBIUC4KKworICAgICAgICBJdCBpcyB1c2Vs
ZXNzIGFueXdheS4gTW9kZXJuIHNlbGVjdG9ycyBiZW5jaG1hcmsgc2hvdWxkIHVzZQorICAgICAg
ICBhIHJlYWxpc3RpYyBkaXN0cmlidXRpb24gb2YgbWF0Y2hlcyBhbmQgdGFrZSBpbnRvIGFjY291
bnQKKyAgICAgICAgc3R5bGUgaW52YWxpZGF0aW9uLgorCisgICAgICAgICogcGVyZi9zbGlja3Nw
ZWVkL2NvbmZpZy5pbmk6IFJlbW92ZWQuCisgICAgICAgICogcGVyZi9zbGlja3NwZWVkL2Zvb3Rl
ci5odG1sOiBSZW1vdmVkLgorICAgICAgICAqIHBlcmYvc2xpY2tzcGVlZC9mcmFtZXdvcmtzL0Rv
bVF1ZXJ5LmpzOiBSZW1vdmVkLgorICAgICAgICAqIHBlcmYvc2xpY2tzcGVlZC9mcmFtZXdvcmtz
L2R1bW15LmpzOiBSZW1vdmVkLgorICAgICAgICAqIHBlcmYvc2xpY2tzcGVlZC9mcmFtZXdvcmtz
L2pxdWVyeS0xLjIuMy5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBwZXJmL3NsaWNrc3BlZWQvZnJh
bWV3b3Jrcy9wcm90b3R5cGUuanM6IFJlbW92ZWQuCisgICAgICAgICogcGVyZi9zbGlja3NwZWVk
L2hlYWRlci5odG1sOiBSZW1vdmVkLgorICAgICAgICAqIHBlcmYvc2xpY2tzcGVlZC9pbmRleC5w
aHA6IFJlbW92ZWQuCisgICAgICAgICogcGVyZi9zbGlja3NwZWVkL2luc3RydWN0aW9ucy50eHQ6
IFJlbW92ZWQuCisgICAgICAgICogcGVyZi9zbGlja3NwZWVkL2xvZ28ucG5nOiBSZW1vdmVkLgor
ICAgICAgICAqIHBlcmYvc2xpY2tzcGVlZC9zZWxlY3RvcnMubGlzdDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBwZXJmL3NsaWNrc3BlZWQvc3R5bGUuY3NzOiBSZW1vdmVkLgorICAgICAgICAqIHBlcmYv
c2xpY2tzcGVlZC9zeXN0ZW0vaW5kZXgucGhwOiBSZW1vdmVkLgorICAgICAgICAqIHBlcmYvc2xp
Y2tzcGVlZC9zeXN0ZW0vc2xpY2tzcGVlZC5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBwZXJmL3Ns
aWNrc3BlZWQvc3lzdGVtL3RlbXBsYXRlLnBocDogUmVtb3ZlZC4KKyAgICAgICAgKiBwZXJmL3Ns
aWNrc3BlZWQvdGVtcGxhdGUuaHRtbDogUmVtb3ZlZC4KKwogMjAxNS0wMS0zMCAgQ2hyaXMgRHVt
ZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCAiU2luZ2xldG9uIHBhdHRlcm4i
IHNlY3Rpb24gdG8gdGhlIFdlYktpdCBjb2Rpbmcgc3R5bGUKZGlmZiAtLWdpdCBhL1dlYnNpdGVz
L3dlYmtpdC5vcmcvcGVyZi9zbGlja3NwZWVkL2NvbmZpZy5pbmkgYi9XZWJzaXRlcy93ZWJraXQu
b3JnL3BlcmYvc2xpY2tzcGVlZC9jb25maWcuaW5pCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAyYWM2ZjNhY2EyZjRmZDAyNzRiNTM4NDRhY2NhMGQ0OTc3NGUyN2FkLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1dlYnNpdGVzL3dlYmtpdC5vcmcv
cGVyZi9zbGlja3NwZWVkL2NvbmZpZy5pbmkKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBA
Ci0gW3Byb3RvdHlwZSAxLjYuMC4yXQotIAotIAlmaWxlID0gInByb3RvdHlwZS5qcyIKLSAJbW9k
aWZpZXIgPSAiIgotIAlmdW5jdGlvbiA9ICIkJCIKLSAJCi0gW2pRdWVyeSAxLjIuM10KLSAKLSAJ
ZmlsZSA9ICJqcXVlcnktMS4yLjMuanMiCi0gCW1vZGlmaWVyID0gIkAiCi0gCWZ1bmN0aW9uID0g
IiQiCi0gCQotOyBbTW9vVG9vbHMgMS4yZGV2XQotOyAKLTsgCWZpbGUgPSAibW9vdG9vbHMuanMi
Ci07IAltb2RpZmllciA9ICIiCi07IAlmdW5jdGlvbiA9ICIkJCIKLTsgCQotIFtleHQgMi4wXQot
IAlmaWxlID0gIkRvbVF1ZXJ5LmpzIgotIAltb2RpZmllciA9ICIiCi0gCWZ1bmN0aW9uID0gIkV4
dC5xdWVyeSIKLSAJCi07IFtjc3NRdWVyeSAyLjAyXQotOyAJZmlsZSA9ICJjc3NRdWVyeS1wLmpz
IgotOyAJbW9kaWZpZXIgPSAiIgotOyAJZnVuY3Rpb24gPSAiY3NzUXVlcnkiCi07IAkKLTsgW2Rv
am8gcXVlcnldCi07IAlmaWxlID0gImRvam8tcXVlcnkuanMiCi07IAltb2RpZmllciA9ICIiCi07
IAlmdW5jdGlvbiA9ICJkb2pvLnF1ZXJ5IgotOyAgIAotOyBbTW9jaGlLaXQgMS40ZGV2XQotOyAJ
ZmlsZSA9ICJNb2NoaUtpdC5qcyIKLTsgCW1vZGlmaWVyID0gIiIKLTsgCWZ1bmN0aW9uID0gIiQk
IgotCi0JW05hdGl2ZV0KLQlmaWxlID0gImR1bW15LmpzIgotCW1vZGlmaWVyID0gIiIKLQlmdW5j
dGlvbiA9ICJkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsIgotCi07IGp1c3QgYWRkIGEgZnJhbWV3
b3JrIGhlcmUgZm9sbG93aW5nIHRoZSBjb252ZW50aW9ucyB0byBhZGQgYW5vdGhlciBmcmFtZXdv
cmsuCi07IHRoZSBtb2RpZmllciBwYXJhbWV0ZXIgaXMgZm9yIGF0dHJpYnV0ZSBzZWxlY3RvcnMs
IGFzIGpxdWVyeSB1c2VzIHRoZSBAIHN5bnRheC4KLTsgdGhlIGZ1bmN0aW9uIHBhcmFtZXRlciBp
cyB0byBjaG9vc2UgdGhlIHJpZ2h0IGNzcyBzZWxlY3RvciBmdW5jdGlvbiBuYW1lCi07IHRoZSBp
bmNsdWRlIHBhcmFtZXRlciBpcyB0byBpbmNsdWRlIHRoZSByaWdodCBqYXZhc2NyaXB0IGZpbGUK
LQotOyBbbXlmcmFtZXdvcmtdCi07IGZpbGUgPSAibXlGcmFtZXdvcmsuanMiCi07IG1vZGlmaWVy
ID0gIiUiCi07IGZ1bmN0aW9uID0gImdldEVsZW1lbnRzIgpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMv
d2Via2l0Lm9yZy9wZXJmL3NsaWNrc3BlZWQvZm9vdGVyLmh0bWwgYi9XZWJzaXRlcy93ZWJraXQu
b3JnL3BlcmYvc2xpY2tzcGVlZC9mb290ZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNmUwZjdjMjY1OTA5NzIxYWFiODgyZDY3NDM4MzBhZjBhYjlhZjI5My4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9XZWJzaXRlcy93ZWJraXQub3Jn
L3BlcmYvc2xpY2tzcGVlZC9mb290ZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBA
QAotPGRpdiBpZD0iZm9vdGVyIj4KLQk8cCBjbGFzcz0iZm9vdGVyIj5jb3B5cmlnaHQgJmNvcHk7
IDIwMDcgPGEgaHJlZj0iaHR0cDovL21vb3Rvb2xzLm5ldCI+aHR0cDovL21vb3Rvb2xzLm5ldDwv
YT4gfCBNSVQgTGljZW5zZSB8IDxhIGhyZWY9Imh0dHA6Ly9zbGlja3NwZWVkLmdvb2dsZWNvZGUu
Y29tL3N2bi90cnVuayI+ZG93bmxvYWQgZnJvbSBnb29nbGVjb2RlPC9hPjwvcD4KLTwvZGl2Pgpc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3dlYmtpdC5v
cmcvcGVyZi9zbGlja3NwZWVkL2ZyYW1ld29ya3MvRG9tUXVlcnkuanMgYi9XZWJzaXRlcy93ZWJr
aXQub3JnL3BlcmYvc2xpY2tzcGVlZC9mcmFtZXdvcmtzL0RvbVF1ZXJ5LmpzCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA1NDljOGFmZjA1NWMwNjI0OGMxN2FmMGQ5OTZlNzZhYWY3ZDY3
MGE3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1dlYnNp
dGVzL3dlYmtpdC5vcmcvcGVyZi9zbGlja3NwZWVkL2ZyYW1ld29ya3MvRG9tUXVlcnkuanMKKysr
IC9kZXYvbnVsbApAQCAtMSw4MTUgKzAsMCBAQAotLyoNCi0gKiBFeHQgSlMgTGlicmFyeSAyLjAN
Ci0gKiBDb3B5cmlnaHQoYykgMjAwNi0yMDA3LCBFeHQgSlMsIExMQy4NCi0gKiBsaWNlbnNpbmdA
ZXh0anMuY29tDQotICogDQotICogaHR0cDovL2V4dGpzLmNvbS9saWNlbnNlDQotICovDQotDQot
LyoNCi0gKiBUaGlzIGlzIGNvZGUgaXMgYWxzbyBkaXN0cmlidXRlZCB1bmRlciBNSVQgbGljZW5z
ZSBmb3IgdXNlDQotICogd2l0aCBqUXVlcnkgYW5kIHByb3RvdHlwZSBKYXZhU2NyaXB0IGxpYnJh
cmllcy4NCi0gKi8NCi0vKioNCi0gKiBAY2xhc3MgRXh0LkRvbVF1ZXJ5DQotUHJvdmlkZXMgaGln
aCBwZXJmb3JtYW5jZSBzZWxlY3Rvci94cGF0aCBwcm9jZXNzaW5nIGJ5IGNvbXBpbGluZyBxdWVy
aWVzIGludG8gcmV1c2FibGUgZnVuY3Rpb25zLiBOZXcgcHNldWRvIGNsYXNzZXMgYW5kIG1hdGNo
ZXJzIGNhbiBiZSBwbHVnZ2VkLiBJdCB3b3JrcyBvbiBIVE1MIGFuZCBYTUwgZG9jdW1lbnRzIChp
ZiBhIGNvbnRlbnQgbm9kZSBpcyBwYXNzZWQgaW4pLg0KLTxwPg0KLURvbVF1ZXJ5IHN1cHBvcnRz
IG1vc3Qgb2YgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDUvV0QtY3NzMy1z
ZWxlY3RvcnMtMjAwNTEyMTUvI3NlbGVjdG9ycyI+Q1NTMyBzZWxlY3RvcnMgc3BlYzwvYT4sIGFs
b25nIHdpdGggc29tZSBjdXN0b20gc2VsZWN0b3JzIGFuZCBiYXNpYyBYUGF0aC48L3A+DQotDQot
PHA+DQotQWxsIHNlbGVjdG9ycywgYXR0cmlidXRlIGZpbHRlcnMgYW5kIHBzZXVkb3MgYmVsb3cg
Y2FuIGJlIGNvbWJpbmVkIGluZmluaXRlbHkgaW4gYW55IG9yZGVyLiBGb3IgZXhhbXBsZSAiZGl2
LmZvbzpudGgtY2hpbGQob2RkKVtAZm9vPWJhcl0uYmFyOmZpcnN0IiB3b3VsZCBiZSBhIHBlcmZl
Y3RseSB2YWxpZCBzZWxlY3Rvci4gTm9kZSBmaWx0ZXJzIGFyZSBwcm9jZXNzZWQgaW4gdGhlIG9y
ZGVyIGluIHdoaWNoIHRoZXkgYXBwZWFyLCB3aGljaCBhbGxvd3MgeW91IHRvIG9wdGltaXplIHlv
dXIgcXVlcmllcyBmb3IgeW91ciBkb2N1bWVudCBzdHJ1Y3R1cmUuDQotPC9wPg0KLTxoND5FbGVt
ZW50IFNlbGVjdG9yczo8L2g0Pg0KLTx1bCBjbGFzcz0ibGlzdCI+DQotICAgIDxsaT4gPGI+Kjwv
Yj4gYW55IGVsZW1lbnQ8L2xpPg0KLSAgICA8bGk+IDxiPkU8L2I+IGFuIGVsZW1lbnQgd2l0aCB0
aGUgdGFnIEU8L2xpPg0KLSAgICA8bGk+IDxiPkUgRjwvYj4gQWxsIGRlc2NlbmRlbnQgZWxlbWVu
dHMgb2YgRSB0aGF0IGhhdmUgdGhlIHRhZyBGPC9saT4NCi0gICAgPGxpPiA8Yj5FID4gRjwvYj4g
b3IgPGI+RS9GPC9iPiBhbGwgZGlyZWN0IGNoaWxkcmVuIGVsZW1lbnRzIG9mIEUgdGhhdCBoYXZl
IHRoZSB0YWcgRjwvbGk+DQotICAgIDxsaT4gPGI+RSArIEY8L2I+IGFsbCBlbGVtZW50cyB3aXRo
IHRoZSB0YWcgRiB0aGF0IGFyZSBpbW1lZGlhdGVseSBwcmVjZWRlZCBieSBhbiBlbGVtZW50IHdp
dGggdGhlIHRhZyBFPC9saT4NCi0gICAgPGxpPiA8Yj5FIH4gRjwvYj4gYWxsIGVsZW1lbnRzIHdp
dGggdGhlIHRhZyBGIHRoYXQgYXJlIHByZWNlZGVkIGJ5IGEgc2libGluZyBlbGVtZW50IHdpdGgg
dGhlIHRhZyBFPC9saT4NCi08L3VsPg0KLTxoND5BdHRyaWJ1dGUgU2VsZWN0b3JzOjwvaDQ+DQot
PHA+VGhlIHVzZSBvZiBAIGFuZCBxdW90ZXMgYXJlIG9wdGlvbmFsLiBGb3IgZXhhbXBsZSwgZGl2
W0Bmb289J2JhciddIGlzIGFsc28gYSB2YWxpZCBhdHRyaWJ1dGUgc2VsZWN0b3IuPC9wPg0KLTx1
bCBjbGFzcz0ibGlzdCI+DQotICAgIDxsaT4gPGI+RVtmb29dPC9iPiBoYXMgYW4gYXR0cmlidXRl
ICJmb28iPC9saT4NCi0gICAgPGxpPiA8Yj5FW2Zvbz1iYXJdPC9iPiBoYXMgYW4gYXR0cmlidXRl
ICJmb28iIHRoYXQgZXF1YWxzICJiYXIiPC9saT4NCi0gICAgPGxpPiA8Yj5FW2Zvb149YmFyXTwv
Yj4gaGFzIGFuIGF0dHJpYnV0ZSAiZm9vIiB0aGF0IHN0YXJ0cyB3aXRoICJiYXIiPC9saT4NCi0g
ICAgPGxpPiA8Yj5FW2ZvbyQ9YmFyXTwvYj4gaGFzIGFuIGF0dHJpYnV0ZSAiZm9vIiB0aGF0IGVu
ZHMgd2l0aCAiYmFyIjwvbGk+DQotICAgIDxsaT4gPGI+RVtmb28qPWJhcl08L2I+IGhhcyBhbiBh
dHRyaWJ1dGUgImZvbyIgdGhhdCBjb250YWlucyB0aGUgc3Vic3RyaW5nICJiYXIiPC9saT4NCi0g
ICAgPGxpPiA8Yj5FW2ZvbyU9Ml08L2I+IGhhcyBhbiBhdHRyaWJ1dGUgImZvbyIgdGhhdCBpcyBl
dmVubHkgZGl2aXNpYmxlIGJ5IDI8L2xpPg0KLSAgICA8bGk+IDxiPkVbZm9vIT1iYXJdPC9iPiBo
YXMgYW4gYXR0cmlidXRlICJmb28iIHRoYXQgZG9lcyBub3QgZXF1YWwgImJhciI8L2xpPg0KLTwv
dWw+DQotPGg0PlBzZXVkbyBDbGFzc2VzOjwvaDQ+DQotPHVsIGNsYXNzPSJsaXN0Ij4NCi0gICAg
PGxpPiA8Yj5FOmZpcnN0LWNoaWxkPC9iPiBFIGlzIHRoZSBmaXJzdCBjaGlsZCBvZiBpdHMgcGFy
ZW50PC9saT4NCi0gICAgPGxpPiA8Yj5FOmxhc3QtY2hpbGQ8L2I+IEUgaXMgdGhlIGxhc3QgY2hp
bGQgb2YgaXRzIHBhcmVudDwvbGk+DQotICAgIDxsaT4gPGI+RTpudGgtY2hpbGQoPGk+bjwvaT4p
PC9iPiBFIGlzIHRoZSA8aT5uPC9pPnRoIGNoaWxkIG9mIGl0cyBwYXJlbnQgKDEgYmFzZWQgYXMg
cGVyIHRoZSBzcGVjKTwvbGk+DQotICAgIDxsaT4gPGI+RTpudGgtY2hpbGQob2RkKTwvYj4gRSBp
cyBhbiBvZGQgY2hpbGQgb2YgaXRzIHBhcmVudDwvbGk+DQotICAgIDxsaT4gPGI+RTpudGgtY2hp
bGQoZXZlbik8L2I+IEUgaXMgYW4gZXZlbiBjaGlsZCBvZiBpdHMgcGFyZW50PC9saT4NCi0gICAg
PGxpPiA8Yj5FOm9ubHktY2hpbGQ8L2I+IEUgaXMgdGhlIG9ubHkgY2hpbGQgb2YgaXRzIHBhcmVu
dDwvbGk+DQotICAgIDxsaT4gPGI+RTpjaGVja2VkPC9iPiBFIGlzIGFuIGVsZW1lbnQgdGhhdCBp
cyBoYXMgYSBjaGVja2VkIGF0dHJpYnV0ZSB0aGF0IGlzIHRydWUgKGUuZy4gYSByYWRpbyBvciBj
aGVja2JveCkgPC9saT4NCi0gICAgPGxpPiA8Yj5FOmZpcnN0PC9iPiB0aGUgZmlyc3QgRSBpbiB0
aGUgcmVzdWx0c2V0PC9saT4NCi0gICAgPGxpPiA8Yj5FOmxhc3Q8L2I+IHRoZSBsYXN0IEUgaW4g
dGhlIHJlc3VsdHNldDwvbGk+DQotICAgIDxsaT4gPGI+RTpudGgoPGk+bjwvaT4pPC9iPiB0aGUg
PGk+bjwvaT50aCBFIGluIHRoZSByZXN1bHRzZXQgKDEgYmFzZWQpPC9saT4NCi0gICAgPGxpPiA8
Yj5FOm9kZDwvYj4gc2hvcnRjdXQgZm9yIDpudGgtY2hpbGQob2RkKTwvbGk+DQotICAgIDxsaT4g
PGI+RTpldmVuPC9iPiBzaG9ydGN1dCBmb3IgOm50aC1jaGlsZChldmVuKTwvbGk+DQotICAgIDxs
aT4gPGI+RTpjb250YWlucyhmb28pPC9iPiBFJ3MgaW5uZXJIVE1MIGNvbnRhaW5zIHRoZSBzdWJz
dHJpbmcgImZvbyI8L2xpPg0KLSAgICA8bGk+IDxiPkU6bm9kZVZhbHVlKGZvbyk8L2I+IEUgY29u
dGFpbnMgYSB0ZXh0Tm9kZSB3aXRoIGEgbm9kZVZhbHVlIHRoYXQgZXF1YWxzICJmb28iPC9saT4N
Ci0gICAgPGxpPiA8Yj5FOm5vdChTKTwvYj4gYW4gRSBlbGVtZW50IHRoYXQgZG9lcyBub3QgbWF0
Y2ggc2ltcGxlIHNlbGVjdG9yIFM8L2xpPg0KLSAgICA8bGk+IDxiPkU6aGFzKFMpPC9iPiBhbiBF
IGVsZW1lbnQgdGhhdCBoYXMgYSBkZXNjZW5kZW50IHRoYXQgbWF0Y2hlcyBzaW1wbGUgc2VsZWN0
b3IgUzwvbGk+DQotICAgIDxsaT4gPGI+RTpuZXh0KFMpPC9iPiBhbiBFIGVsZW1lbnQgd2hvc2Ug
bmV4dCBzaWJsaW5nIG1hdGNoZXMgc2ltcGxlIHNlbGVjdG9yIFM8L2xpPg0KLSAgICA8bGk+IDxi
PkU6cHJldihTKTwvYj4gYW4gRSBlbGVtZW50IHdob3NlIHByZXZpb3VzIHNpYmxpbmcgbWF0Y2hl
cyBzaW1wbGUgc2VsZWN0b3IgUzwvbGk+DQotPC91bD4NCi08aDQ+Q1NTIFZhbHVlIFNlbGVjdG9y
czo8L2g0Pg0KLTx1bCBjbGFzcz0ibGlzdCI+DQotICAgIDxsaT4gPGI+RXtkaXNwbGF5PW5vbmV9
PC9iPiBjc3MgdmFsdWUgImRpc3BsYXkiIHRoYXQgZXF1YWxzICJub25lIjwvbGk+DQotICAgIDxs
aT4gPGI+RXtkaXNwbGF5Xj1ub25lfTwvYj4gY3NzIHZhbHVlICJkaXNwbGF5IiB0aGF0IHN0YXJ0
cyB3aXRoICJub25lIjwvbGk+DQotICAgIDxsaT4gPGI+RXtkaXNwbGF5JD1ub25lfTwvYj4gY3Nz
IHZhbHVlICJkaXNwbGF5IiB0aGF0IGVuZHMgd2l0aCAibm9uZSI8L2xpPg0KLSAgICA8bGk+IDxi
PkV7ZGlzcGxheSo9bm9uZX08L2I+IGNzcyB2YWx1ZSAiZGlzcGxheSIgdGhhdCBjb250YWlucyB0
aGUgc3Vic3RyaW5nICJub25lIjwvbGk+DQotICAgIDxsaT4gPGI+RXtkaXNwbGF5JT0yfTwvYj4g
Y3NzIHZhbHVlICJkaXNwbGF5IiB0aGF0IGlzIGV2ZW5seSBkaXZpc2libGUgYnkgMjwvbGk+DQot
ICAgIDxsaT4gPGI+RXtkaXNwbGF5IT1ub25lfTwvYj4gY3NzIHZhbHVlICJkaXNwbGF5IiB0aGF0
IGRvZXMgbm90IGVxdWFsICJub25lIjwvbGk+DQotPC91bD4NCi0gKiBAc2luZ2xldG9uDQotICov
DQotRXh0ID0ge307DQotIA0KLUV4dC5Eb21RdWVyeSA9IGZ1bmN0aW9uKCl7DQotICAgIHZhciBj
YWNoZSA9IHt9LCBzaW1wbGVDYWNoZSA9IHt9LCB2YWx1ZUNhY2hlID0ge307DQotICAgIHZhciBu
b25TcGFjZSA9IC9cUy87DQotICAgIHZhciB0cmltUmUgPSAvXlxzK3xccyskL2c7DQotICAgIHZh
ciB0cGxSZSA9IC9ceyhcZCspXH0vZzsNCi0gICAgdmFyIG1vZGVSZSA9IC9eKFxzP1tcLz4rfl1c
cz98XHN8JCkvOw0KLSAgICB2YXIgdGFnVG9rZW5SZSA9IC9eKCMpPyhbXHctXCpdKykvOw0KLSAg
ICB2YXIgbnRoUmUgPSAvKFxkKiluXCs/KFxkKikvLCBudGhSZTIgPSAvXEQvOw0KLQ0KLSAgICBm
dW5jdGlvbiBjaGlsZChwLCBpbmRleCl7DQotICAgICAgICB2YXIgaSA9IDA7DQotICAgICAgICB2
YXIgbiA9IHAuZmlyc3RDaGlsZDsNCi0gICAgICAgIHdoaWxlKG4pew0KLSAgICAgICAgICAgIGlm
KG4ubm9kZVR5cGUgPT0gMSl7DQotICAgICAgICAgICAgICAgaWYoKytpID09IGluZGV4KXsNCi0g
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG47DQotICAgICAgICAgICAgICAgfQ0KLSAgICAgICAg
ICAgIH0NCi0gICAgICAgICAgICBuID0gbi5uZXh0U2libGluZzsNCi0gICAgICAgIH0NCi0gICAg
ICAgIHJldHVybiBudWxsOw0KLSAgICB9Ow0KLQ0KLSAgICBmdW5jdGlvbiBuZXh0KG4pew0KLSAg
ICAgICAgd2hpbGUoKG4gPSBuLm5leHRTaWJsaW5nKSAmJiBuLm5vZGVUeXBlICE9IDEpOw0KLSAg
ICAgICAgcmV0dXJuIG47DQotICAgIH07DQotDQotICAgIGZ1bmN0aW9uIHByZXYobil7DQotICAg
ICAgICB3aGlsZSgobiA9IG4ucHJldmlvdXNTaWJsaW5nKSAmJiBuLm5vZGVUeXBlICE9IDEpOw0K
LSAgICAgICAgcmV0dXJuIG47DQotICAgIH07DQotDQotICAgIGZ1bmN0aW9uIGNoaWxkcmVuKGQp
ew0KLSAgICAgICAgdmFyIG4gPSBkLmZpcnN0Q2hpbGQsIG5pID0gLTE7DQotIAkgICAgd2hpbGUo
bil7DQotIAkgICAgICAgIHZhciBueCA9IG4ubmV4dFNpYmxpbmc7DQotIAkgICAgICAgIGlmKG4u
bm9kZVR5cGUgPT0gMyAmJiAhbm9uU3BhY2UudGVzdChuLm5vZGVWYWx1ZSkpew0KLSAJICAgICAg
ICAgICAgZC5yZW1vdmVDaGlsZChuKTsNCi0gCSAgICAgICAgfWVsc2V7DQotIAkgICAgICAgICAg
ICBuLm5vZGVJbmRleCA9ICsrbmk7DQotIAkgICAgICAgIH0NCi0gCSAgICAgICAgbiA9IG54Ow0K
LSAJICAgIH0NCi0gCSAgICByZXR1cm4gdGhpczsNCi0gCX07DQotDQotICAgIGZ1bmN0aW9uIGJ5
Q2xhc3NOYW1lKGMsIGEsIHYpew0KLSAgICAgICAgaWYoIXYpew0KLSAgICAgICAgICAgIHJldHVy
biBjOw0KLSAgICAgICAgfQ0KLSAgICAgICAgdmFyIHIgPSBbXSwgcmkgPSAtMSwgY247DQotICAg
ICAgICBmb3IodmFyIGkgPSAwLCBjaTsgY2kgPSBjW2ldOyBpKyspew0KLSAgICAgICAgICAgIGlm
KCgnICcrY2kuY2xhc3NOYW1lKycgJykuaW5kZXhPZih2KSAhPSAtMSl7DQotICAgICAgICAgICAg
ICAgIHJbKytyaV0gPSBjaTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBy
ZXR1cm4gcjsNCi0gICAgfTsNCi0NCi0gICAgZnVuY3Rpb24gYXR0clZhbHVlKG4sIGF0dHIpew0K
LSAgICAgICAgaWYoIW4udGFnTmFtZSAmJiB0eXBlb2Ygbi5sZW5ndGggIT0gInVuZGVmaW5lZCIp
ew0KLSAgICAgICAgICAgIG4gPSBuWzBdOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYoIW4pew0K
LSAgICAgICAgICAgIHJldHVybiBudWxsOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYoYXR0ciA9
PSAiZm9yIil7DQotICAgICAgICAgICAgcmV0dXJuIG4uaHRtbEZvcjsNCi0gICAgICAgIH0NCi0g
ICAgICAgIGlmKGF0dHIgPT0gImNsYXNzIiB8fCBhdHRyID09ICJjbGFzc05hbWUiKXsNCi0gICAg
ICAgICAgICByZXR1cm4gbi5jbGFzc05hbWU7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4g
bi5nZXRBdHRyaWJ1dGUoYXR0cikgfHwgblthdHRyXTsNCi0NCi0gICAgfTsNCi0NCi0gICAgZnVu
Y3Rpb24gZ2V0Tm9kZXMobnMsIG1vZGUsIHRhZ05hbWUpew0KLSAgICAgICAgdmFyIHJlc3VsdCA9
IFtdLCByaSA9IC0xLCBjczsNCi0gICAgICAgIGlmKCFucyl7DQotICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsNCi0gICAgICAgIH0NCi0gICAgICAgIHRhZ05hbWUgPSB0YWdOYW1lIHx8ICIqIjsN
Ci0gICAgICAgIGlmKHR5cGVvZiBucy5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPSAidW5kZWZpbmVk
Iil7DQotICAgICAgICAgICAgbnMgPSBbbnNdOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYoIW1v
ZGUpew0KLSAgICAgICAgICAgIGZvcih2YXIgaSA9IDAsIG5pOyBuaSA9IG5zW2ldOyBpKyspew0K
LSAgICAgICAgICAgICAgICBjcyA9IG5pLmdldEVsZW1lbnRzQnlUYWdOYW1lKHRhZ05hbWUpOw0K
LSAgICAgICAgICAgICAgICBmb3IodmFyIGogPSAwLCBjaTsgY2kgPSBjc1tqXTsgaisrKXsNCi0g
ICAgICAgICAgICAgICAgICAgIHJlc3VsdFsrK3JpXSA9IGNpOw0KLSAgICAgICAgICAgICAgICB9
DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfWVsc2UgaWYobW9kZSA9PSAiLyIgfHwgbW9kZSA9
PSAiPiIpew0KLSAgICAgICAgICAgIHZhciB1dGFnID0gdGFnTmFtZS50b1VwcGVyQ2FzZSgpOw0K
LSAgICAgICAgICAgIGZvcih2YXIgaSA9IDAsIG5pLCBjbjsgbmkgPSBuc1tpXTsgaSsrKXsNCi0g
ICAgICAgICAgICAgICAgY24gPSBuaS5jaGlsZHJlbiB8fCBuaS5jaGlsZE5vZGVzOw0KLSAgICAg
ICAgICAgICAgICBmb3IodmFyIGogPSAwLCBjajsgY2ogPSBjbltqXTsgaisrKXsNCi0gICAgICAg
ICAgICAgICAgICAgIGlmKGNqLm5vZGVOYW1lID09IHV0YWcgfHwgY2oubm9kZU5hbWUgPT0gdGFn
TmFtZSAgfHwgdGFnTmFtZSA9PSAnKicpew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dFsrK3JpXSA9IGNqOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9
DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfWVsc2UgaWYobW9kZSA9PSAiKyIpew0KLSAgICAg
ICAgICAgIHZhciB1dGFnID0gdGFnTmFtZS50b1VwcGVyQ2FzZSgpOw0KLSAgICAgICAgICAgIGZv
cih2YXIgaSA9IDAsIG47IG4gPSBuc1tpXTsgaSsrKXsNCi0gICAgICAgICAgICAgICAgd2hpbGUo
KG4gPSBuLm5leHRTaWJsaW5nKSAmJiBuLm5vZGVUeXBlICE9IDEpOw0KLSAgICAgICAgICAgICAg
ICBpZihuICYmIChuLm5vZGVOYW1lID09IHV0YWcgfHwgbi5ub2RlTmFtZSA9PSB0YWdOYW1lIHx8
IHRhZ05hbWUgPT0gJyonKSl7DQotICAgICAgICAgICAgICAgICAgICByZXN1bHRbKytyaV0gPSBu
Ow0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfWVsc2UgaWYo
bW9kZSA9PSAifiIpew0KLSAgICAgICAgICAgIGZvcih2YXIgaSA9IDAsIG47IG4gPSBuc1tpXTsg
aSsrKXsNCi0gICAgICAgICAgICAgICAgd2hpbGUoKG4gPSBuLm5leHRTaWJsaW5nKSAmJiAobi5u
b2RlVHlwZSAhPSAxIHx8ICh0YWdOYW1lID09ICcqJyB8fCBuLnRhZ05hbWUudG9Mb3dlckNhc2Uo
KSE9dGFnTmFtZSkpKTsNCi0gICAgICAgICAgICAgICAgaWYobil7DQotICAgICAgICAgICAgICAg
ICAgICByZXN1bHRbKytyaV0gPSBuOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAg
fQ0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsNCi0gICAgfTsNCi0NCi0gICAg
ZnVuY3Rpb24gY29uY2F0KGEsIGIpew0KLSAgICAgICAgaWYoYi5zbGljZSl7DQotICAgICAgICAg
ICAgcmV0dXJuIGEuY29uY2F0KGIpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZm9yKHZhciBpID0g
MCwgbCA9IGIubGVuZ3RoOyBpIDwgbDsgaSsrKXsNCi0gICAgICAgICAgICBhW2EubGVuZ3RoXSA9
IGJbaV07DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gYTsNCi0gICAgfQ0KLQ0KLSAgICBm
dW5jdGlvbiBieVRhZyhjcywgdGFnTmFtZSl7DQotICAgICAgICBpZihjcy50YWdOYW1lIHx8IGNz
ID09IGRvY3VtZW50KXsNCi0gICAgICAgICAgICBjcyA9IFtjc107DQotICAgICAgICB9DQotICAg
ICAgICBpZighdGFnTmFtZSl7DQotICAgICAgICAgICAgcmV0dXJuIGNzOw0KLSAgICAgICAgfQ0K
LSAgICAgICAgdmFyIHIgPSBbXSwgcmkgPSAtMTsNCi0gICAgICAgIHRhZ05hbWUgPSB0YWdOYW1l
LnRvTG93ZXJDYXNlKCk7DQotICAgICAgICBmb3IodmFyIGkgPSAwLCBjaTsgY2kgPSBjc1tpXTsg
aSsrKXsNCi0gICAgICAgICAgICBpZihjaS5ub2RlVHlwZSA9PSAxICYmIGNpLnRhZ05hbWUudG9M
b3dlckNhc2UoKT09dGFnTmFtZSl7DQotICAgICAgICAgICAgICAgIHJbKytyaV0gPSBjaTsNCi0g
ICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gcjsNCi0gICAgfTsNCi0N
Ci0gICAgZnVuY3Rpb24gYnlJZChjcywgYXR0ciwgaWQpew0KLSAgICAgICAgaWYoY3MudGFnTmFt
ZSB8fCBjcyA9PSBkb2N1bWVudCl7DQotICAgICAgICAgICAgY3MgPSBbY3NdOw0KLSAgICAgICAg
fQ0KLSAgICAgICAgaWYoIWlkKXsNCi0gICAgICAgICAgICByZXR1cm4gY3M7DQotICAgICAgICB9
DQotICAgICAgICB2YXIgciA9IFtdLCByaSA9IC0xOw0KLSAgICAgICAgZm9yKHZhciBpID0gMCxj
aTsgY2kgPSBjc1tpXTsgaSsrKXsNCi0gICAgICAgICAgICBpZihjaSAmJiBjaS5pZCA9PSBpZCl7
DQotICAgICAgICAgICAgICAgIHJbKytyaV0gPSBjaTsNCi0gICAgICAgICAgICAgICAgcmV0dXJu
IHI7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIHI7DQotICAg
IH07DQotDQotICAgIGZ1bmN0aW9uIGJ5QXR0cmlidXRlKGNzLCBhdHRyLCB2YWx1ZSwgb3AsIGN1
c3RvbSl7DQotICAgICAgICB2YXIgciA9IFtdLCByaSA9IC0xLCBzdCA9IGN1c3RvbT09InsiOw0K
LSAgICAgICAgdmFyIGYgPSBFeHQuRG9tUXVlcnkub3BlcmF0b3JzW29wXTsNCi0gICAgICAgIGZv
cih2YXIgaSA9IDAsIGNpOyBjaSA9IGNzW2ldOyBpKyspew0KLSAgICAgICAgICAgIHZhciBhOw0K
LSAgICAgICAgICAgIGlmKHN0KXsNCi0gICAgICAgICAgICAgICAgYSA9IEV4dC5Eb21RdWVyeS5n
ZXRTdHlsZShjaSwgYXR0cik7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGVsc2UgaWYo
YXR0ciA9PSAiY2xhc3MiIHx8IGF0dHIgPT0gImNsYXNzTmFtZSIpew0KLSAgICAgICAgICAgICAg
ICBhID0gY2kuY2xhc3NOYW1lOw0KLSAgICAgICAgICAgIH1lbHNlIGlmKGF0dHIgPT0gImZvciIp
ew0KLSAgICAgICAgICAgICAgICBhID0gY2kuaHRtbEZvcjsNCi0gICAgICAgICAgICB9ZWxzZSBp
ZihhdHRyID09ICJocmVmIil7DQotICAgICAgICAgICAgICAgIGEgPSBjaS5nZXRBdHRyaWJ1dGUo
ImhyZWYiLCAyKTsNCi0gICAgICAgICAgICB9ZWxzZXsNCi0gICAgICAgICAgICAgICAgYSA9IGNp
LmdldEF0dHJpYnV0ZShhdHRyKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYoKGYg
JiYgZihhLCB2YWx1ZSkpIHx8ICghZiAmJiBhKSl7DQotICAgICAgICAgICAgICAgIHJbKytyaV0g
PSBjaTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gcjsNCi0g
ICAgfTsNCi0NCi0gICAgZnVuY3Rpb24gYnlQc2V1ZG8oY3MsIG5hbWUsIHZhbHVlKXsNCi0gICAg
ICAgIHJldHVybiBFeHQuRG9tUXVlcnkucHNldWRvc1tuYW1lXShjcywgdmFsdWUpOw0KLSAgICB9
Ow0KLQ0KLSAgICAvLyBUaGlzIGlzIGZvciBJRSBNU1hNTCB3aGljaCBkb2VzIG5vdCBzdXBwb3J0
IGV4cGFuZG9zLg0KLSAgICAvLyBJRSBydW5zIHRoZSBzYW1lIHNwZWVkIHVzaW5nIHNldEF0dHJp
YnV0ZSwgaG93ZXZlciBGRiBzbG93cyB3YXkgZG93bg0KLSAgICAvLyBhbmQgU2FmYXJpIGNvbXBs
ZXRlbHkgZmFpbHMgc28gdGhleSBuZWVkIHRvIGNvbnRpbnVlIHRvIHVzZSBleHBhbmRvcy4NCi0g
ICAgdmFyIGlzSUUgPSB3aW5kb3cuQWN0aXZlWE9iamVjdCA/IHRydWUgOiBmYWxzZTsNCi0NCi0g
ICAgLy8gdGhpcyBldmFsIGlzIHN0b3AgdGhlIGNvbXByZXNzb3IgZnJvbQ0KLSAgICAvLyByZW5h
bWluZyB0aGUgdmFyaWFibGUgdG8gc29tZXRoaW5nIHNob3J0ZXINCi0gICAgZXZhbCgidmFyIGJh
dGNoID0gMzA4MDM7Iik7DQotDQotICAgIHZhciBrZXkgPSAzMDgwMzsNCi0NCi0gICAgZnVuY3Rp
b24gbm9kdXBJRVhtbChjcyl7DQotICAgICAgICB2YXIgZCA9ICsra2V5Ow0KLSAgICAgICAgY3Nb
MF0uc2V0QXR0cmlidXRlKCJfbm9kdXAiLCBkKTsNCi0gICAgICAgIHZhciByID0gW2NzWzBdXTsN
Ci0gICAgICAgIGZvcih2YXIgaSA9IDEsIGxlbiA9IGNzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKXsN
Ci0gICAgICAgICAgICB2YXIgYyA9IGNzW2ldOw0KLSAgICAgICAgICAgIGlmKCFjLmdldEF0dHJp
YnV0ZSgiX25vZHVwIikgIT0gZCl7DQotICAgICAgICAgICAgICAgIGMuc2V0QXR0cmlidXRlKCJf
bm9kdXAiLCBkKTsNCi0gICAgICAgICAgICAgICAgcltyLmxlbmd0aF0gPSBjOw0KLSAgICAgICAg
ICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIGZvcih2YXIgaSA9IDAsIGxlbiA9IGNzLmxlbmd0
aDsgaSA8IGxlbjsgaSsrKXsNCi0gICAgICAgICAgICBjc1tpXS5yZW1vdmVBdHRyaWJ1dGUoIl9u
b2R1cCIpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIHI7DQotICAgIH0NCi0NCi0gICAg
ZnVuY3Rpb24gbm9kdXAoY3Mpew0KLSAgICAgICAgaWYoIWNzKXsNCi0gICAgICAgICAgICByZXR1
cm4gW107DQotICAgICAgICB9DQotICAgICAgICB2YXIgbGVuID0gY3MubGVuZ3RoLCBjLCBpLCBy
ID0gY3MsIGNqLCByaSA9IC0xOw0KLSAgICAgICAgaWYoIWxlbiB8fCB0eXBlb2YgY3Mubm9kZVR5
cGUgIT0gInVuZGVmaW5lZCIgfHwgbGVuID09IDEpew0KLSAgICAgICAgICAgIHJldHVybiBjczsN
Ci0gICAgICAgIH0NCi0gICAgICAgIGlmKGlzSUUgJiYgdHlwZW9mIGNzWzBdLnNlbGVjdFNpbmds
ZU5vZGUgIT0gInVuZGVmaW5lZCIpew0KLSAgICAgICAgICAgIHJldHVybiBub2R1cElFWG1sKGNz
KTsNCi0gICAgICAgIH0NCi0gICAgICAgIHZhciBkID0gKytrZXk7DQotICAgICAgICBjc1swXS5f
bm9kdXAgPSBkOw0KLSAgICAgICAgZm9yKGkgPSAxOyBjID0gY3NbaV07IGkrKyl7DQotICAgICAg
ICAgICAgaWYoYy5fbm9kdXAgIT0gZCl7DQotICAgICAgICAgICAgICAgIGMuX25vZHVwID0gZDsN
Ci0gICAgICAgICAgICB9ZWxzZXsNCi0gICAgICAgICAgICAgICAgciA9IFtdOw0KLSAgICAgICAg
ICAgICAgICBmb3IodmFyIGogPSAwOyBqIDwgaTsgaisrKXsNCi0gICAgICAgICAgICAgICAgICAg
IHJbKytyaV0gPSBjc1tqXTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBm
b3IoaiA9IGkrMTsgY2ogPSBjc1tqXTsgaisrKXsNCi0gICAgICAgICAgICAgICAgICAgIGlmKGNq
Ll9ub2R1cCAhPSBkKXsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjai5fbm9kdXAgPSBkOw0K
LSAgICAgICAgICAgICAgICAgICAgICAgIHJbKytyaV0gPSBjajsNCi0gICAgICAgICAgICAgICAg
ICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICByZXR1cm4gcjsNCi0g
ICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gcjsNCi0gICAgfQ0KLQ0K
LSAgICBmdW5jdGlvbiBxdWlja0RpZmZJRVhtbChjMSwgYzIpew0KLSAgICAgICAgdmFyIGQgPSAr
K2tleTsNCi0gICAgICAgIGZvcih2YXIgaSA9IDAsIGxlbiA9IGMxLmxlbmd0aDsgaSA8IGxlbjsg
aSsrKXsNCi0gICAgICAgICAgICBjMVtpXS5zZXRBdHRyaWJ1dGUoIl9xZGlmZiIsIGQpOw0KLSAg
ICAgICAgfQ0KLSAgICAgICAgdmFyIHIgPSBbXTsNCi0gICAgICAgIGZvcih2YXIgaSA9IDAsIGxl
biA9IGMyLmxlbmd0aDsgaSA8IGxlbjsgaSsrKXsNCi0gICAgICAgICAgICBpZihjMltpXS5nZXRB
dHRyaWJ1dGUoIl9xZGlmZiIpICE9IGQpew0KLSAgICAgICAgICAgICAgICByW3IubGVuZ3RoXSA9
IGMyW2ldOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIGZvcih2YXIgaSA9
IDAsIGxlbiA9IGMxLmxlbmd0aDsgaSA8IGxlbjsgaSsrKXsNCi0gICAgICAgICAgIGMxW2ldLnJl
bW92ZUF0dHJpYnV0ZSgiX3FkaWZmIik7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gcjsN
Ci0gICAgfQ0KLQ0KLSAgICBmdW5jdGlvbiBxdWlja0RpZmYoYzEsIGMyKXsNCi0gICAgICAgIHZh
ciBsZW4xID0gYzEubGVuZ3RoOw0KLSAgICAgICAgaWYoIWxlbjEpew0KLSAgICAgICAgICAgIHJl
dHVybiBjMjsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmKGlzSUUgJiYgYzFbMF0uc2VsZWN0U2lu
Z2xlTm9kZSl7DQotICAgICAgICAgICAgcmV0dXJuIHF1aWNrRGlmZklFWG1sKGMxLCBjMik7DQot
ICAgICAgICB9DQotICAgICAgICB2YXIgZCA9ICsra2V5Ow0KLSAgICAgICAgZm9yKHZhciBpID0g
MDsgaSA8IGxlbjE7IGkrKyl7DQotICAgICAgICAgICAgYzFbaV0uX3FkaWZmID0gZDsNCi0gICAg
ICAgIH0NCi0gICAgICAgIHZhciByID0gW107DQotICAgICAgICBmb3IodmFyIGkgPSAwLCBsZW4g
PSBjMi5sZW5ndGg7IGkgPCBsZW47IGkrKyl7DQotICAgICAgICAgICAgaWYoYzJbaV0uX3FkaWZm
ICE9IGQpew0KLSAgICAgICAgICAgICAgICByW3IubGVuZ3RoXSA9IGMyW2ldOw0KLSAgICAgICAg
ICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiByOw0KLSAgICB9DQotDQotICAgIGZ1
bmN0aW9uIHF1aWNrSWQobnMsIG1vZGUsIHJvb3QsIGlkKXsNCi0gICAgICAgIGlmKG5zID09IHJv
b3Qpew0KLSAgICAgICAgICAgdmFyIGQgPSByb290Lm93bmVyRG9jdW1lbnQgfHwgcm9vdDsNCi0g
ICAgICAgICAgIHJldHVybiBkLmdldEVsZW1lbnRCeUlkKGlkKTsNCi0gICAgICAgIH0NCi0gICAg
ICAgIG5zID0gZ2V0Tm9kZXMobnMsIG1vZGUsICIqIik7DQotICAgICAgICByZXR1cm4gYnlJZChu
cywgbnVsbCwgaWQpOw0KLSAgICB9DQotDQotICAgIHJldHVybiB7DQotICAgICAgICBnZXRTdHls
ZSA6IGZ1bmN0aW9uKGVsLCBuYW1lKXsNCi0gICAgICAgICAgICByZXR1cm4gRXh0LmZseShlbCku
Z2V0U3R5bGUobmFtZSk7DQotICAgICAgICB9LA0KLSAgICAgICAgLyoqDQotICAgICAgICAgKiBD
b21waWxlcyBhIHNlbGVjdG9yL3hwYXRoIHF1ZXJ5IGludG8gYSByZXVzYWJsZSBmdW5jdGlvbi4g
VGhlIHJldHVybmVkIGZ1bmN0aW9uDQotICAgICAgICAgKiB0YWtlcyBvbmUgcGFyYW1ldGVyICJy
b290IiAob3B0aW9uYWwpLCB3aGljaCBpcyB0aGUgY29udGV4dCBub2RlIGZyb20gd2hlcmUgdGhl
IHF1ZXJ5IHNob3VsZCBzdGFydC4NCi0gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBzZWxlY3Rv
ciBUaGUgc2VsZWN0b3IveHBhdGggcXVlcnkNCi0gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0
eXBlIChvcHRpb25hbCkgRWl0aGVyICJzZWxlY3QiICh0aGUgZGVmYXVsdCkgb3IgInNpbXBsZSIg
Zm9yIGEgc2ltcGxlIHNlbGVjdG9yIG1hdGNoDQotICAgICAgICAgKiBAcmV0dXJuIHtGdW5jdGlv
bn0NCi0gICAgICAgICAqLw0KLSAgICAgICAgY29tcGlsZSA6IGZ1bmN0aW9uKHBhdGgsIHR5cGUp
ew0KLSAgICAgICAgICAgIHR5cGUgPSB0eXBlIHx8ICJzZWxlY3QiOw0KLQ0KLSAgICAgICAgICAg
IHZhciBmbiA9IFsidmFyIGYgPSBmdW5jdGlvbihyb290KXtcbiB2YXIgbW9kZTsgKytiYXRjaDsg
dmFyIG4gPSByb290IHx8IGRvY3VtZW50O1xuIl07DQotICAgICAgICAgICAgdmFyIHEgPSBwYXRo
LCBtb2RlLCBscTsNCi0gICAgICAgICAgICB2YXIgdGsgPSBFeHQuRG9tUXVlcnkubWF0Y2hlcnM7
DQotICAgICAgICAgICAgdmFyIHRrbGVuID0gdGsubGVuZ3RoOw0KLSAgICAgICAgICAgIHZhciBt
bTsNCi0NCi0gICAgICAgICAgICAvLyBhY2NlcHQgbGVhZGluZyBtb2RlIHN3aXRjaA0KLSAgICAg
ICAgICAgIHZhciBsbW9kZSA9IHEubWF0Y2gobW9kZVJlKTsNCi0gICAgICAgICAgICBpZihsbW9k
ZSAmJiBsbW9kZVsxXSl7DQotICAgICAgICAgICAgICAgIGZuW2ZuLmxlbmd0aF0gPSAnbW9kZT0i
JytsbW9kZVsxXS5yZXBsYWNlKHRyaW1SZSwgIiIpKyciOyc7DQotICAgICAgICAgICAgICAgIHEg
PSBxLnJlcGxhY2UobG1vZGVbMV0sICIiKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAg
Ly8gc3RyaXAgbGVhZGluZyBzbGFzaGVzDQotICAgICAgICAgICAgd2hpbGUocGF0aC5zdWJzdHIo
MCwgMSk9PSIvIil7DQotICAgICAgICAgICAgICAgIHBhdGggPSBwYXRoLnN1YnN0cigxKTsNCi0g
ICAgICAgICAgICB9DQotDQotICAgICAgICAgICAgd2hpbGUocSAmJiBscSAhPSBxKXsNCi0gICAg
ICAgICAgICAgICAgbHEgPSBxOw0KLSAgICAgICAgICAgICAgICB2YXIgdG0gPSBxLm1hdGNoKHRh
Z1Rva2VuUmUpOw0KLSAgICAgICAgICAgICAgICBpZih0eXBlID09ICJzZWxlY3QiKXsNCi0gICAg
ICAgICAgICAgICAgICAgIGlmKHRtKXsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpZih0bVsx
XSA9PSAiIyIpew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbltmbi5sZW5ndGhdID0g
J24gPSBxdWlja0lkKG4sIG1vZGUsIHJvb3QsICInK3RtWzJdKyciKTsnOw0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIH1lbHNlew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbltmbi5s
ZW5ndGhdID0gJ24gPSBnZXROb2RlcyhuLCBtb2RlLCAiJyt0bVsyXSsnIik7JzsNCi0gICAgICAg
ICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgcSA9IHEucmVwbGFj
ZSh0bVswXSwgIiIpOw0KLSAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYocS5zdWJzdHIoMCwg
MSkgIT0gJ0AnKXsNCi0gICAgICAgICAgICAgICAgICAgICAgICBmbltmbi5sZW5ndGhdID0gJ24g
PSBnZXROb2RlcyhuLCBtb2RlLCAiKiIpOyc7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAg
ICAgICAgICAgICAgIH1lbHNlew0KLSAgICAgICAgICAgICAgICAgICAgaWYodG0pew0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmKHRtWzFdID09ICIjIil7DQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZuW2ZuLmxlbmd0aF0gPSAnbiA9IGJ5SWQobiwgbnVsbCwgIicrdG1bMl0rJyIp
Oyc7DQotICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7DQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZuW2ZuLmxlbmd0aF0gPSAnbiA9IGJ5VGFnKG4sICInK3RtWzJdKyciKTsnOw0K
LSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICBxID0g
cS5yZXBsYWNlKHRtWzBdLCAiIik7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAg
ICAgICAgIH0NCi0gICAgICAgICAgICAgICAgd2hpbGUoIShtbSA9IHEubWF0Y2gobW9kZVJlKSkp
ew0KLSAgICAgICAgICAgICAgICAgICAgdmFyIG1hdGNoZWQgPSBmYWxzZTsNCi0gICAgICAgICAg
ICAgICAgICAgIGZvcih2YXIgaiA9IDA7IGogPCB0a2xlbjsgaisrKXsNCi0gICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgdCA9IHRrW2pdOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBt
ID0gcS5tYXRjaCh0LnJlKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpZihtKXsNCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZm5bZm4ubGVuZ3RoXSA9IHQuc2VsZWN0LnJlcGxhY2Uo
dHBsUmUsIGZ1bmN0aW9uKHgsIGkpew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbVtpXTsNCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcSA9IHEucmVwbGFjZShtWzBdLCAiIik7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1hdGNoZWQgPSB0cnVlOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0g
ICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAg
ICAgICAgICAgICAgICAvLyBwcmV2ZW50IGluZmluaXRlIGxvb3Agb24gYmFkIHNlbGVjdG9yDQot
ICAgICAgICAgICAgICAgICAgICBpZighbWF0Y2hlZCl7DQotICAgICAgICAgICAgICAgICAgICAg
ICAgdGhyb3cgJ0Vycm9yIHBhcnNpbmcgc2VsZWN0b3IsIHBhcnNpbmcgZmFpbGVkIGF0ICInICsg
cSArICciJzsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAg
ICAgICAgICAgICAgICBpZihtbVsxXSl7DQotICAgICAgICAgICAgICAgICAgICBmbltmbi5sZW5n
dGhdID0gJ21vZGU9IicrbW1bMV0ucmVwbGFjZSh0cmltUmUsICIiKSsnIjsnOw0KLSAgICAgICAg
ICAgICAgICAgICAgcSA9IHEucmVwbGFjZShtbVsxXSwgIiIpOw0KLSAgICAgICAgICAgICAgICB9
DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGZuW2ZuLmxlbmd0aF0gPSAicmV0dXJuIG5v
ZHVwKG4pO1xufSI7DQotICAgICAgICAgICAgZXZhbChmbi5qb2luKCIiKSk7DQotICAgICAgICAg
ICAgcmV0dXJuIGY7DQotICAgICAgICB9LA0KLQ0KLSAgICAgICAgLyoqDQotICAgICAgICAgKiBT
ZWxlY3RzIGEgZ3JvdXAgb2YgZWxlbWVudHMuDQotICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30g
c2VsZWN0b3IgVGhlIHNlbGVjdG9yL3hwYXRoIHF1ZXJ5IChjYW4gYmUgYSBjb21tYSBzZXBhcmF0
ZWQgbGlzdCBvZiBzZWxlY3RvcnMpDQotICAgICAgICAgKiBAcGFyYW0ge05vZGV9IHJvb3QgKG9w
dGlvbmFsKSBUaGUgc3RhcnQgb2YgdGhlIHF1ZXJ5IChkZWZhdWx0cyB0byBkb2N1bWVudCkuDQot
ICAgICAgICAgKiBAcmV0dXJuIHtBcnJheX0NCi0gICAgICAgICAqLw0KLSAgICAgICAgc2VsZWN0
IDogZnVuY3Rpb24ocGF0aCwgcm9vdCwgdHlwZSl7DQotICAgICAgICAgICAgaWYoIXJvb3QgfHwg
cm9vdCA9PSBkb2N1bWVudCl7DQotICAgICAgICAgICAgICAgIHJvb3QgPSBkb2N1bWVudDsNCi0g
ICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYodHlwZW9mIHJvb3QgPT0gInN0cmluZyIpew0K
LSAgICAgICAgICAgICAgICByb290ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocm9vdCk7DQot
ICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHZhciBwYXRocyA9IHBhdGguc3BsaXQoIiwiKTsN
Ci0gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IFtdOw0KLSAgICAgICAgICAgIGZvcih2YXIgaSA9
IDAsIGxlbiA9IHBhdGhzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKXsNCi0gICAgICAgICAgICAgICAg
dmFyIHAgPSBwYXRoc1tpXS5yZXBsYWNlKHRyaW1SZSwgIiIpOw0KLSAgICAgICAgICAgICAgICBp
ZighY2FjaGVbcF0pew0KLSAgICAgICAgICAgICAgICAgICAgY2FjaGVbcF0gPSBFeHQuRG9tUXVl
cnkuY29tcGlsZShwKTsNCi0gICAgICAgICAgICAgICAgICAgIGlmKCFjYWNoZVtwXSl7DQotICAg
ICAgICAgICAgICAgICAgICAgICAgdGhyb3cgcCArICIgaXMgbm90IGEgdmFsaWQgc2VsZWN0b3Ii
Ow0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAg
ICAgICAgIHZhciByZXN1bHQgPSBjYWNoZVtwXShyb290KTsNCi0gICAgICAgICAgICAgICAgaWYo
cmVzdWx0ICYmIHJlc3VsdCAhPSBkb2N1bWVudCl7DQotICAgICAgICAgICAgICAgICAgICByZXN1
bHRzID0gcmVzdWx0cy5jb25jYXQocmVzdWx0KTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAg
ICAgICAgIH0NCi0gICAgICAgICAgICBpZihwYXRocy5sZW5ndGggPiAxKXsNCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIG5vZHVwKHJlc3VsdHMpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAg
ICByZXR1cm4gcmVzdWx0czsNCi0gICAgICAgIH0sDQotDQotICAgICAgICAvKioNCi0gICAgICAg
ICAqIFNlbGVjdHMgYSBzaW5nbGUgZWxlbWVudC4NCi0gICAgICAgICAqIEBwYXJhbSB7U3RyaW5n
fSBzZWxlY3RvciBUaGUgc2VsZWN0b3IveHBhdGggcXVlcnkNCi0gICAgICAgICAqIEBwYXJhbSB7
Tm9kZX0gcm9vdCAob3B0aW9uYWwpIFRoZSBzdGFydCBvZiB0aGUgcXVlcnkgKGRlZmF1bHRzIHRv
IGRvY3VtZW50KS4NCi0gICAgICAgICAqIEByZXR1cm4ge0VsZW1lbnR9DQotICAgICAgICAgKi8N
Ci0gICAgICAgIHNlbGVjdE5vZGUgOiBmdW5jdGlvbihwYXRoLCByb290KXsNCi0gICAgICAgICAg
ICByZXR1cm4gRXh0LkRvbVF1ZXJ5LnNlbGVjdChwYXRoLCByb290KVswXTsNCi0gICAgICAgIH0s
DQotDQotICAgICAgICAvKioNCi0gICAgICAgICAqIFNlbGVjdHMgdGhlIHZhbHVlIG9mIGEgbm9k
ZSwgb3B0aW9uYWxseSByZXBsYWNpbmcgbnVsbCB3aXRoIHRoZSBkZWZhdWx0VmFsdWUuDQotICAg
ICAgICAgKiBAcGFyYW0ge1N0cmluZ30gc2VsZWN0b3IgVGhlIHNlbGVjdG9yL3hwYXRoIHF1ZXJ5
DQotICAgICAgICAgKiBAcGFyYW0ge05vZGV9IHJvb3QgKG9wdGlvbmFsKSBUaGUgc3RhcnQgb2Yg
dGhlIHF1ZXJ5IChkZWZhdWx0cyB0byBkb2N1bWVudCkuDQotICAgICAgICAgKiBAcGFyYW0ge1N0
cmluZ30gZGVmYXVsdFZhbHVlDQotICAgICAgICAgKi8NCi0gICAgICAgIHNlbGVjdFZhbHVlIDog
ZnVuY3Rpb24ocGF0aCwgcm9vdCwgZGVmYXVsdFZhbHVlKXsNCi0gICAgICAgICAgICBwYXRoID0g
cGF0aC5yZXBsYWNlKHRyaW1SZSwgIiIpOw0KLSAgICAgICAgICAgIGlmKCF2YWx1ZUNhY2hlW3Bh
dGhdKXsNCi0gICAgICAgICAgICAgICAgdmFsdWVDYWNoZVtwYXRoXSA9IEV4dC5Eb21RdWVyeS5j
b21waWxlKHBhdGgsICJzZWxlY3QiKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgdmFy
IG4gPSB2YWx1ZUNhY2hlW3BhdGhdKHJvb3QpOw0KLSAgICAgICAgICAgIG4gPSBuWzBdID8gblsw
XSA6IG47DQotICAgICAgICAgICAgdmFyIHYgPSAobiAmJiBuLmZpcnN0Q2hpbGQgPyBuLmZpcnN0
Q2hpbGQubm9kZVZhbHVlIDogbnVsbCk7DQotICAgICAgICAgICAgcmV0dXJuICgodiA9PT0gbnVs
bHx8diA9PT0gdW5kZWZpbmVkfHx2PT09JycpID8gZGVmYXVsdFZhbHVlIDogdik7DQotICAgICAg
ICB9LA0KLQ0KLSAgICAgICAgLyoqDQotICAgICAgICAgKiBTZWxlY3RzIHRoZSB2YWx1ZSBvZiBh
IG5vZGUsIHBhcnNpbmcgaW50ZWdlcnMgYW5kIGZsb2F0cy4NCi0gICAgICAgICAqIEBwYXJhbSB7
U3RyaW5nfSBzZWxlY3RvciBUaGUgc2VsZWN0b3IveHBhdGggcXVlcnkNCi0gICAgICAgICAqIEBw
YXJhbSB7Tm9kZX0gcm9vdCAob3B0aW9uYWwpIFRoZSBzdGFydCBvZiB0aGUgcXVlcnkgKGRlZmF1
bHRzIHRvIGRvY3VtZW50KS4NCi0gICAgICAgICAqIEBwYXJhbSB7TnVtYmVyfSBkZWZhdWx0VmFs
dWUNCi0gICAgICAgICAqIEByZXR1cm4ge051bWJlcn0NCi0gICAgICAgICAqLw0KLSAgICAgICAg
c2VsZWN0TnVtYmVyIDogZnVuY3Rpb24ocGF0aCwgcm9vdCwgZGVmYXVsdFZhbHVlKXsNCi0gICAg
ICAgICAgICB2YXIgdiA9IEV4dC5Eb21RdWVyeS5zZWxlY3RWYWx1ZShwYXRoLCByb290LCBkZWZh
dWx0VmFsdWUgfHwgMCk7DQotICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQodik7DQotICAg
ICAgICB9LA0KLQ0KLSAgICAgICAgLyoqDQotICAgICAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhl
IHBhc3NlZCBlbGVtZW50KHMpIG1hdGNoIHRoZSBwYXNzZWQgc2ltcGxlIHNlbGVjdG9yIChlLmcu
IGRpdi5zb21lLWNsYXNzIG9yIHNwYW46Zmlyc3QtY2hpbGQpDQotICAgICAgICAgKiBAcGFyYW0g
e1N0cmluZy9IVE1MRWxlbWVudC9BcnJheX0gZWwgQW4gZWxlbWVudCBpZCwgZWxlbWVudCBvciBh
cnJheSBvZiBlbGVtZW50cw0KLSAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHNlbGVjdG9yIFRo
ZSBzaW1wbGUgc2VsZWN0b3IgdG8gdGVzdA0KLSAgICAgICAgICogQHJldHVybiB7Qm9vbGVhbn0N
Ci0gICAgICAgICAqLw0KLSAgICAgICAgaXMgOiBmdW5jdGlvbihlbCwgc3Mpew0KLSAgICAgICAg
ICAgIGlmKHR5cGVvZiBlbCA9PSAic3RyaW5nIil7DQotICAgICAgICAgICAgICAgIGVsID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWwpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB2
YXIgaXNBcnJheSA9IChlbCBpbnN0YW5jZW9mIEFycmF5KTsNCi0gICAgICAgICAgICB2YXIgcmVz
dWx0ID0gRXh0LkRvbVF1ZXJ5LmZpbHRlcihpc0FycmF5ID8gZWwgOiBbZWxdLCBzcyk7DQotICAg
ICAgICAgICAgcmV0dXJuIGlzQXJyYXkgPyAocmVzdWx0Lmxlbmd0aCA9PSBlbC5sZW5ndGgpIDog
KHJlc3VsdC5sZW5ndGggPiAwKTsNCi0gICAgICAgIH0sDQotDQotICAgICAgICAvKioNCi0gICAg
ICAgICAqIEZpbHRlcnMgYW4gYXJyYXkgb2YgZWxlbWVudHMgdG8gb25seSBpbmNsdWRlIG1hdGNo
ZXMgb2YgYSBzaW1wbGUgc2VsZWN0b3IgKGUuZy4gZGl2LnNvbWUtY2xhc3Mgb3Igc3BhbjpmaXJz
dC1jaGlsZCkNCi0gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGVsIEFuIGFycmF5IG9mIGVsZW1l
bnRzIHRvIGZpbHRlcg0KLSAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHNlbGVjdG9yIFRoZSBz
aW1wbGUgc2VsZWN0b3IgdG8gdGVzdA0KLSAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSBub25N
YXRjaGVzIElmIHRydWUsIGl0IHJldHVybnMgdGhlIGVsZW1lbnRzIHRoYXQgRE9OJ1QgbWF0Y2gN
Ci0gICAgICAgICAqIHRoZSBzZWxlY3RvciBpbnN0ZWFkIG9mIHRoZSBvbmVzIHRoYXQgbWF0Y2gN
Ci0gICAgICAgICAqIEByZXR1cm4ge0FycmF5fQ0KLSAgICAgICAgICovDQotICAgICAgICBmaWx0
ZXIgOiBmdW5jdGlvbihlbHMsIHNzLCBub25NYXRjaGVzKXsNCi0gICAgICAgICAgICBzcyA9IHNz
LnJlcGxhY2UodHJpbVJlLCAiIik7DQotICAgICAgICAgICAgaWYoIXNpbXBsZUNhY2hlW3NzXSl7
DQotICAgICAgICAgICAgICAgIHNpbXBsZUNhY2hlW3NzXSA9IEV4dC5Eb21RdWVyeS5jb21waWxl
KHNzLCAic2ltcGxlIik7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHZhciByZXN1bHQg
PSBzaW1wbGVDYWNoZVtzc10oZWxzKTsNCi0gICAgICAgICAgICByZXR1cm4gbm9uTWF0Y2hlcyA/
IHF1aWNrRGlmZihyZXN1bHQsIGVscykgOiByZXN1bHQ7DQotICAgICAgICB9LA0KLQ0KLSAgICAg
ICAgLyoqDQotICAgICAgICAgKiBDb2xsZWN0aW9uIG9mIG1hdGNoaW5nIHJlZ3VsYXIgZXhwcmVz
c2lvbnMgYW5kIGNvZGUgc25pcHBldHMuDQotICAgICAgICAgKi8NCi0gICAgICAgIG1hdGNoZXJz
IDogW3sNCi0gICAgICAgICAgICAgICAgcmU6IC9eXC4oW1x3LV0rKS8sDQotICAgICAgICAgICAg
ICAgIHNlbGVjdDogJ24gPSBieUNsYXNzTmFtZShuLCBudWxsLCAiIHsxfSAiKTsnDQotICAgICAg
ICAgICAgfSwgew0KLSAgICAgICAgICAgICAgICByZTogL15cOihbXHctXSspKD86XCgoKD86W15c
cz5cL10qfC4qPykpXCkpPy8sDQotICAgICAgICAgICAgICAgIHNlbGVjdDogJ24gPSBieVBzZXVk
byhuLCAiezF9IiwgInsyfSIpOycNCi0gICAgICAgICAgICB9LHsNCi0gICAgICAgICAgICAgICAg
cmU6IC9eKD86KFtcW1x7XSkoPzpAKT8oW1x3LV0rKVxzPyg/Oig9fC49KVxzP1snIl0/KC4qPylb
IiddPyk/W1xdXH1dKS8sDQotICAgICAgICAgICAgICAgIHNlbGVjdDogJ24gPSBieUF0dHJpYnV0
ZShuLCAiezJ9IiwgIns0fSIsICJ7M30iLCAiezF9Iik7Jw0KLSAgICAgICAgICAgIH0sIHsNCi0g
ICAgICAgICAgICAgICAgcmU6IC9eIyhbXHctXSspLywNCi0gICAgICAgICAgICAgICAgc2VsZWN0
OiAnbiA9IGJ5SWQobiwgbnVsbCwgInsxfSIpOycNCi0gICAgICAgICAgICB9LHsNCi0gICAgICAg
ICAgICAgICAgcmU6IC9eQChbXHctXSspLywNCi0gICAgICAgICAgICAgICAgc2VsZWN0OiAncmV0
dXJuIHtmaXJzdENoaWxkOntub2RlVmFsdWU6YXR0clZhbHVlKG4sICJ7MX0iKX19OycNCi0gICAg
ICAgICAgICB9DQotICAgICAgICBdLA0KLQ0KLSAgICAgICAgLyoqDQotICAgICAgICAgKiBDb2xs
ZWN0aW9uIG9mIG9wZXJhdG9yIGNvbXBhcmlzb24gZnVuY3Rpb25zLiBUaGUgZGVmYXVsdCBvcGVy
YXRvcnMgYXJlID0sICE9LCBePSwgJD0sICo9LCAlPSwgfD0gYW5kIH49Lg0KLSAgICAgICAgICog
TmV3IG9wZXJhdG9ycyBjYW4gYmUgYWRkZWQgYXMgbG9uZyBhcyB0aGUgbWF0Y2ggdGhlIGZvcm1h
dCA8aT5jPC9pPj0gd2hlcmUgPGk+YzwvaT4gaXMgYW55IGNoYXJhY3RlciBvdGhlciB0aGFuIHNw
YWNlLCAmZ3Q7ICZsdDsuDQotICAgICAgICAgKi8NCi0gICAgICAgIG9wZXJhdG9ycyA6IHsNCi0g
ICAgICAgICAgICAiPSIgOiBmdW5jdGlvbihhLCB2KXsNCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGEgPT0gdjsNCi0gICAgICAgICAgICB9LA0KLSAgICAgICAgICAgICIhPSIgOiBmdW5jdGlvbihh
LCB2KXsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIGEgIT0gdjsNCi0gICAgICAgICAgICB9LA0K
LSAgICAgICAgICAgICJePSIgOiBmdW5jdGlvbihhLCB2KXsNCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGEgJiYgYS5zdWJzdHIoMCwgdi5sZW5ndGgpID09IHY7DQotICAgICAgICAgICAgfSwNCi0g
ICAgICAgICAgICAiJD0iIDogZnVuY3Rpb24oYSwgdil7DQotICAgICAgICAgICAgICAgIHJldHVy
biBhICYmIGEuc3Vic3RyKGEubGVuZ3RoLXYubGVuZ3RoKSA9PSB2Ow0KLSAgICAgICAgICAgIH0s
DQotICAgICAgICAgICAgIio9IiA6IGZ1bmN0aW9uKGEsIHYpew0KLSAgICAgICAgICAgICAgICBy
ZXR1cm4gYSAmJiBhLmluZGV4T2YodikgIT09IC0xOw0KLSAgICAgICAgICAgIH0sDQotICAgICAg
ICAgICAgIiU9IiA6IGZ1bmN0aW9uKGEsIHYpew0KLSAgICAgICAgICAgICAgICByZXR1cm4gKGEg
JSB2KSA9PSAwOw0KLSAgICAgICAgICAgIH0sDQotICAgICAgICAgICAgInw9IiA6IGZ1bmN0aW9u
KGEsIHYpew0KLSAgICAgICAgICAgICAgICByZXR1cm4gYSAmJiAoYSA9PSB2IHx8IGEuc3Vic3Ry
KDAsIHYubGVuZ3RoKzEpID09IHYrJy0nKTsNCi0gICAgICAgICAgICB9LA0KLSAgICAgICAgICAg
ICJ+PSIgOiBmdW5jdGlvbihhLCB2KXsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIGEgJiYgKCcg
JythKycgJykuaW5kZXhPZignICcrdisnICcpICE9IC0xOw0KLSAgICAgICAgICAgIH0NCi0gICAg
ICAgIH0sDQotDQotICAgICAgICAvKioNCi0gICAgICAgICAqIENvbGxlY3Rpb24gb2YgInBzZXVk
byBjbGFzcyIgcHJvY2Vzc29ycy4gRWFjaCBwcm9jZXNzb3IgaXMgcGFzc2VkIHRoZSBjdXJyZW50
IG5vZGVzZXQgKGFycmF5KQ0KLSAgICAgICAgICogYW5kIHRoZSBhcmd1bWVudCAoaWYgYW55KSBz
dXBwbGllZCBpbiB0aGUgc2VsZWN0b3IuDQotICAgICAgICAgKi8NCi0gICAgICAgIHBzZXVkb3Mg
OiB7DQotICAgICAgICAgICAgImZpcnN0LWNoaWxkIiA6IGZ1bmN0aW9uKGMpew0KLSAgICAgICAg
ICAgICAgICB2YXIgciA9IFtdLCByaSA9IC0xLCBuOw0KLSAgICAgICAgICAgICAgICBmb3IodmFy
IGkgPSAwLCBjaTsgY2kgPSBuID0gY1tpXTsgaSsrKXsNCi0gICAgICAgICAgICAgICAgICAgIHdo
aWxlKChuID0gbi5wcmV2aW91c1NpYmxpbmcpICYmIG4ubm9kZVR5cGUgIT0gMSk7DQotICAgICAg
ICAgICAgICAgICAgICBpZighbil7DQotICAgICAgICAgICAgICAgICAgICAgICAgclsrK3JpXSA9
IGNpOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAg
ICAgICAgICAgIHJldHVybiByOw0KLSAgICAgICAgICAgIH0sDQotDQotICAgICAgICAgICAgImxh
c3QtY2hpbGQiIDogZnVuY3Rpb24oYyl7DQotICAgICAgICAgICAgICAgIHZhciByID0gW10sIHJp
ID0gLTEsIG47DQotICAgICAgICAgICAgICAgIGZvcih2YXIgaSA9IDAsIGNpOyBjaSA9IG4gPSBj
W2ldOyBpKyspew0KLSAgICAgICAgICAgICAgICAgICAgd2hpbGUoKG4gPSBuLm5leHRTaWJsaW5n
KSAmJiBuLm5vZGVUeXBlICE9IDEpOw0KLSAgICAgICAgICAgICAgICAgICAgaWYoIW4pew0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJbKytyaV0gPSBjaTsNCi0gICAgICAgICAgICAgICAgICAg
IH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICByZXR1cm4gcjsNCi0gICAg
ICAgICAgICB9LA0KLQ0KLSAgICAgICAgICAgICJudGgtY2hpbGQiIDogZnVuY3Rpb24oYywgYSkg
ew0KLSAgICAgICAgICAgICAgICB2YXIgciA9IFtdLCByaSA9IC0xOw0KLSAgICAgICAgICAgICAg
ICB2YXIgbSA9IG50aFJlLmV4ZWMoYSA9PSAiZXZlbiIgJiYgIjJuIiB8fCBhID09ICJvZGQiICYm
ICIybisxIiB8fCAhbnRoUmUyLnRlc3QoYSkgJiYgIm4rIiArIGEgfHwgYSk7DQotICAgICAgICAg
ICAgICAgIHZhciBmID0gKG1bMV0gfHwgMSkgLSAwLCBsID0gbVsyXSAtIDA7DQotICAgICAgICAg
ICAgICAgIGZvcih2YXIgaSA9IDAsIG47IG4gPSBjW2ldOyBpKyspew0KLSAgICAgICAgICAgICAg
ICAgICAgdmFyIHBuID0gbi5wYXJlbnROb2RlOw0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGJh
dGNoICE9IHBuLl9iYXRjaCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBqID0gMDsN
Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IodmFyIGNuID0gcG4uZmlyc3RDaGlsZDsgY247
IGNuID0gY24ubmV4dFNpYmxpbmcpew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihj
bi5ub2RlVHlwZSA9PSAxKXsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY24ubm9k
ZUluZGV4ID0gKytqOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAg
ICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIHBuLl9iYXRjaCA9IGJh
dGNoOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGYg
PT0gMSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID09IDAgfHwgbi5ub2RlSW5k
ZXggPT0gbCl7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJbKytyaV0gPSBuOw0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
KG4ubm9kZUluZGV4ICsgbCkgJSBmID09IDApew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJb
KytyaV0gPSBuOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQot
DQotICAgICAgICAgICAgICAgIHJldHVybiByOw0KLSAgICAgICAgICAgIH0sDQotDQotICAgICAg
ICAgICAgIm9ubHktY2hpbGQiIDogZnVuY3Rpb24oYyl7DQotICAgICAgICAgICAgICAgIHZhciBy
ID0gW10sIHJpID0gLTE7Ow0KLSAgICAgICAgICAgICAgICBmb3IodmFyIGkgPSAwLCBjaTsgY2kg
PSBjW2ldOyBpKyspew0KLSAgICAgICAgICAgICAgICAgICAgaWYoIXByZXYoY2kpICYmICFuZXh0
KGNpKSl7DQotICAgICAgICAgICAgICAgICAgICAgICAgclsrK3JpXSA9IGNpOw0KLSAgICAgICAg
ICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIHJldHVy
biByOw0KLSAgICAgICAgICAgIH0sDQotDQotICAgICAgICAgICAgImVtcHR5IiA6IGZ1bmN0aW9u
KGMpew0KLSAgICAgICAgICAgICAgICB2YXIgciA9IFtdLCByaSA9IC0xOw0KLSAgICAgICAgICAg
ICAgICBmb3IodmFyIGkgPSAwLCBjaTsgY2kgPSBjW2ldOyBpKyspew0KLSAgICAgICAgICAgICAg
ICAgICAgdmFyIGNucyA9IGNpLmNoaWxkTm9kZXMsIGogPSAwLCBjbiwgZW1wdHkgPSB0cnVlOw0K
LSAgICAgICAgICAgICAgICAgICAgd2hpbGUoY24gPSBjbnNbal0pew0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICsrajsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpZihjbi5ub2RlVHlwZSA9
PSAxIHx8IGNuLm5vZGVUeXBlID09IDMpew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
bXB0eSA9IGZhbHNlOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAg
ICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAg
ICAgICAgICAgICBpZihlbXB0eSl7DQotICAgICAgICAgICAgICAgICAgICAgICAgclsrK3JpXSA9
IGNpOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAg
ICAgICAgICAgIHJldHVybiByOw0KLSAgICAgICAgICAgIH0sDQotDQotICAgICAgICAgICAgImNv
bnRhaW5zIiA6IGZ1bmN0aW9uKGMsIHYpew0KLSAgICAgICAgICAgICAgICB2YXIgciA9IFtdLCBy
aSA9IC0xOw0KLSAgICAgICAgICAgICAgICBmb3IodmFyIGkgPSAwLCBjaTsgY2kgPSBjW2ldOyBp
Kyspew0KLSAgICAgICAgICAgICAgICAgICAgaWYoKGNpLnRleHRDb250ZW50fHxjaS5pbm5lclRl
eHR8fCcnKS5pbmRleE9mKHYpICE9IC0xKXsNCi0gICAgICAgICAgICAgICAgICAgICAgICByWysr
cmldID0gY2k7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHI7DQotICAgICAgICAgICAgfSwNCi0NCi0gICAgICAgICAg
ICAibm9kZVZhbHVlIiA6IGZ1bmN0aW9uKGMsIHYpew0KLSAgICAgICAgICAgICAgICB2YXIgciA9
IFtdLCByaSA9IC0xOw0KLSAgICAgICAgICAgICAgICBmb3IodmFyIGkgPSAwLCBjaTsgY2kgPSBj
W2ldOyBpKyspew0KLSAgICAgICAgICAgICAgICAgICAgaWYoY2kuZmlyc3RDaGlsZCAmJiBjaS5m
aXJzdENoaWxkLm5vZGVWYWx1ZSA9PSB2KXsNCi0gICAgICAgICAgICAgICAgICAgICAgICByWysr
cmldID0gY2k7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHI7DQotICAgICAgICAgICAgfSwNCi0NCi0gICAgICAgICAg
ICAiY2hlY2tlZCIgOiBmdW5jdGlvbihjKXsNCi0gICAgICAgICAgICAgICAgdmFyIHIgPSBbXSwg
cmkgPSAtMTsNCi0gICAgICAgICAgICAgICAgZm9yKHZhciBpID0gMCwgY2k7IGNpID0gY1tpXTsg
aSsrKXsNCi0gICAgICAgICAgICAgICAgICAgIGlmKGNpLmNoZWNrZWQgPT0gdHJ1ZSl7DQotICAg
ICAgICAgICAgICAgICAgICAgICAgclsrK3JpXSA9IGNpOw0KLSAgICAgICAgICAgICAgICAgICAg
fQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIHJldHVybiByOw0KLSAgICAg
ICAgICAgIH0sDQotDQotICAgICAgICAgICAgIm5vdCIgOiBmdW5jdGlvbihjLCBzcyl7DQotICAg
ICAgICAgICAgICAgIHJldHVybiBFeHQuRG9tUXVlcnkuZmlsdGVyKGMsIHNzLCB0cnVlKTsNCi0g
ICAgICAgICAgICB9LA0KLQ0KLSAgICAgICAgICAgICJhbnkiIDogZnVuY3Rpb24oYywgc2VsZWN0
b3JzKXsNCi0gICAgICAgICAgICAgICAgdmFyIHNzID0gc2VsZWN0b3JzLnNwbGl0KCd8Jyk7DQot
ICAgICAgICAgICAgICAgIHZhciByID0gW10sIHJpID0gLTEsIHM7DQotICAgICAgICAgICAgICAg
IGZvcih2YXIgaSA9IDAsIGNpOyBjaSA9IGNbaV07IGkrKyl7DQotICAgICAgICAgICAgICAgICAg
ICBmb3IodmFyIGogPSAwOyBzID0gc3Nbal07IGorKyl7DQotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYoRXh0LkRvbVF1ZXJ5LmlzKGNpLCBzKSl7DQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJbKytyaV0gPSBjaTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQot
ICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAg
ICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIHJldHVybiByOw0KLSAgICAgICAgICAgIH0s
DQotDQotICAgICAgICAgICAgIm9kZCIgOiBmdW5jdGlvbihjKXsNCi0gICAgICAgICAgICAgICAg
cmV0dXJuIHRoaXNbIm50aC1jaGlsZCJdKGMsICJvZGQiKTsNCi0gICAgICAgICAgICB9LA0KLQ0K
LSAgICAgICAgICAgICJldmVuIiA6IGZ1bmN0aW9uKGMpew0KLSAgICAgICAgICAgICAgICByZXR1
cm4gdGhpc1sibnRoLWNoaWxkIl0oYywgImV2ZW4iKTsNCi0gICAgICAgICAgICB9LA0KLQ0KLSAg
ICAgICAgICAgICJudGgiIDogZnVuY3Rpb24oYywgYSl7DQotICAgICAgICAgICAgICAgIHJldHVy
biBjW2EtMV0gfHwgW107DQotICAgICAgICAgICAgfSwNCi0NCi0gICAgICAgICAgICAiZmlyc3Qi
IDogZnVuY3Rpb24oYyl7DQotICAgICAgICAgICAgICAgIHJldHVybiBjWzBdIHx8IFtdOw0KLSAg
ICAgICAgICAgIH0sDQotDQotICAgICAgICAgICAgImxhc3QiIDogZnVuY3Rpb24oYyl7DQotICAg
ICAgICAgICAgICAgIHJldHVybiBjW2MubGVuZ3RoLTFdIHx8IFtdOw0KLSAgICAgICAgICAgIH0s
DQotDQotICAgICAgICAgICAgImhhcyIgOiBmdW5jdGlvbihjLCBzcyl7DQotICAgICAgICAgICAg
ICAgIHZhciBzID0gRXh0LkRvbVF1ZXJ5LnNlbGVjdDsNCi0gICAgICAgICAgICAgICAgdmFyIHIg
PSBbXSwgcmkgPSAtMTsNCi0gICAgICAgICAgICAgICAgZm9yKHZhciBpID0gMCwgY2k7IGNpID0g
Y1tpXTsgaSsrKXsNCi0gICAgICAgICAgICAgICAgICAgIGlmKHMoc3MsIGNpKS5sZW5ndGggPiAw
KXsNCi0gICAgICAgICAgICAgICAgICAgICAgICByWysrcmldID0gY2k7DQotICAgICAgICAgICAg
ICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgcmV0dXJuIHI7
DQotICAgICAgICAgICAgfSwNCi0NCi0gICAgICAgICAgICAibmV4dCIgOiBmdW5jdGlvbihjLCBz
cyl7DQotICAgICAgICAgICAgICAgIHZhciBpcyA9IEV4dC5Eb21RdWVyeS5pczsNCi0gICAgICAg
ICAgICAgICAgdmFyIHIgPSBbXSwgcmkgPSAtMTsNCi0gICAgICAgICAgICAgICAgZm9yKHZhciBp
ID0gMCwgY2k7IGNpID0gY1tpXTsgaSsrKXsNCi0gICAgICAgICAgICAgICAgICAgIHZhciBuID0g
bmV4dChjaSk7DQotICAgICAgICAgICAgICAgICAgICBpZihuICYmIGlzKG4sIHNzKSl7DQotICAg
ICAgICAgICAgICAgICAgICAgICAgclsrK3JpXSA9IGNpOw0KLSAgICAgICAgICAgICAgICAgICAg
fQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIHJldHVybiByOw0KLSAgICAg
ICAgICAgIH0sDQotDQotICAgICAgICAgICAgInByZXYiIDogZnVuY3Rpb24oYywgc3Mpew0KLSAg
ICAgICAgICAgICAgICB2YXIgaXMgPSBFeHQuRG9tUXVlcnkuaXM7DQotICAgICAgICAgICAgICAg
IHZhciByID0gW10sIHJpID0gLTE7DQotICAgICAgICAgICAgICAgIGZvcih2YXIgaSA9IDAsIGNp
OyBjaSA9IGNbaV07IGkrKyl7DQotICAgICAgICAgICAgICAgICAgICB2YXIgbiA9IHByZXYoY2kp
Ow0KLSAgICAgICAgICAgICAgICAgICAgaWYobiAmJiBpcyhuLCBzcykpew0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJbKytyaV0gPSBjaTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAg
ICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICByZXR1cm4gcjsNCi0gICAgICAgICAgICB9
DQotICAgICAgICB9DQotICAgIH07DQotfSgpOw0KLQ0KLS8qKg0KLSAqIFNlbGVjdHMgYW4gYXJy
YXkgb2YgRE9NIG5vZGVzIGJ5IENTUy9YUGF0aCBzZWxlY3Rvci4gU2hvcnRoYW5kIG9mIHtAbGlu
ayBFeHQuRG9tUXVlcnkjc2VsZWN0fQ0KLSAqIEBwYXJhbSB7U3RyaW5nfSBwYXRoIFRoZSBzZWxl
Y3Rvci94cGF0aCBxdWVyeQ0KLSAqIEBwYXJhbSB7Tm9kZX0gcm9vdCAob3B0aW9uYWwpIFRoZSBz
dGFydCBvZiB0aGUgcXVlcnkgKGRlZmF1bHRzIHRvIGRvY3VtZW50KS4NCi0gKiBAcmV0dXJuIHtB
cnJheX0NCi0gKiBAbWVtYmVyIEV4dA0KLSAqIEBtZXRob2QgcXVlcnkNCi0gKi8NCi1FeHQucXVl
cnkgPSBFeHQuRG9tUXVlcnkuc2VsZWN0Ow0KZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3dlYmtpdC5v
cmcvcGVyZi9zbGlja3NwZWVkL2ZyYW1ld29ya3MvZHVtbXkuanMgYi9XZWJzaXRlcy93ZWJraXQu
b3JnL3BlcmYvc2xpY2tzcGVlZC9mcmFtZXdvcmtzL2R1bW15LmpzCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCmRpZmYgLS1naXQgYS9XZWJz
aXRlcy93ZWJraXQub3JnL3BlcmYvc2xpY2tzcGVlZC9mcmFtZXdvcmtzL2pxdWVyeS0xLjIuMy5q
cyBiL1dlYnNpdGVzL3dlYmtpdC5vcmcvcGVyZi9zbGlja3NwZWVkL2ZyYW1ld29ya3MvanF1ZXJ5
LTEuMi4zLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTQzYTgyMzU4MWQ3ZWZk
MDc2ZGVhN2Q3MzRjZjAyYWQzYjkxZTQyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1dlYnNpdGVzL3dlYmtpdC5vcmcvcGVyZi9zbGlja3NwZWVkL2ZyYW1l
d29ya3MvanF1ZXJ5LTEuMi4zLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMzQwOCArMCwwIEBACi0o
ZnVuY3Rpb24oKXsKLS8qCi0gKiBqUXVlcnkgMS4yLjMgLSBOZXcgV2F2ZSBKYXZhc2NyaXB0Ci0g
KgotICogQ29weXJpZ2h0IChjKSAyMDA4IEpvaG4gUmVzaWcgKGpxdWVyeS5jb20pCi0gKiBEdWFs
IGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgKE1JVC1MSUNFTlNFLnR4dCkKLSAqIGFuZCBHUEwgKEdQ
TC1MSUNFTlNFLnR4dCkgbGljZW5zZXMuCi0gKgotICogJERhdGU6IDIwMDgtMDItMDYgMDA6MjE6
MjUgLTA1MDAgKFdlZCwgMDYgRmViIDIwMDgpICQKLSAqICRSZXY6IDQ2NjMgJAotICovCi0KLS8v
IE1hcCBvdmVyIGpRdWVyeSBpbiBjYXNlIG9mIG92ZXJ3cml0ZQotaWYgKCB3aW5kb3cualF1ZXJ5
ICkKLQl2YXIgX2pRdWVyeSA9IHdpbmRvdy5qUXVlcnk7Ci0KLXZhciBqUXVlcnkgPSB3aW5kb3cu
alF1ZXJ5ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0ICkgewotCS8vIFRoZSBqUXVlcnkg
b2JqZWN0IGlzIGFjdHVhbGx5IGp1c3QgdGhlIGluaXQgY29uc3RydWN0b3IgJ2VuaGFuY2VkJwot
CXJldHVybiBuZXcgalF1ZXJ5LnByb3RvdHlwZS5pbml0KCBzZWxlY3RvciwgY29udGV4dCApOwot
fTsKLQotLy8gTWFwIG92ZXIgdGhlICQgaW4gY2FzZSBvZiBvdmVyd3JpdGUKLWlmICggd2luZG93
LiQgKQotCXZhciBfJCA9IHdpbmRvdy4kOwotCQotLy8gTWFwIHRoZSBqUXVlcnkgbmFtZXNwYWNl
IHRvIHRoZSAnJCcgb25lCi13aW5kb3cuJCA9IGpRdWVyeTsKLQotLy8gQSBzaW1wbGUgd2F5IHRv
IGNoZWNrIGZvciBIVE1MIHN0cmluZ3Mgb3IgSUQgc3RyaW5ncwotLy8gKGJvdGggb2Ygd2hpY2gg
d2Ugb3B0aW1pemUgZm9yKQotdmFyIHF1aWNrRXhwciA9IC9eW148XSooPCgufFxzKSs+KVtePl0q
JHxeIyhcdyspJC87Ci0KLS8vIElzIGl0IGEgc2ltcGxlIHNlbGVjdG9yCi12YXIgaXNTaW1wbGUg
PSAvXi5bXjojXFtcLl0qJC87Ci0KLWpRdWVyeS5mbiA9IGpRdWVyeS5wcm90b3R5cGUgPSB7Ci0J
aW5pdDogZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0ICkgewotCQkvLyBNYWtlIHN1cmUgdGhh
dCBhIHNlbGVjdGlvbiB3YXMgcHJvdmlkZWQKLQkJc2VsZWN0b3IgPSBzZWxlY3RvciB8fCBkb2N1
bWVudDsKLQotCQkvLyBIYW5kbGUgJChET01FbGVtZW50KQotCQlpZiAoIHNlbGVjdG9yLm5vZGVU
eXBlICkgewotCQkJdGhpc1swXSA9IHNlbGVjdG9yOwotCQkJdGhpcy5sZW5ndGggPSAxOwotCQkJ
cmV0dXJuIHRoaXM7Ci0KLQkJLy8gSGFuZGxlIEhUTUwgc3RyaW5ncwotCQl9IGVsc2UgaWYgKCB0
eXBlb2Ygc2VsZWN0b3IgPT0gInN0cmluZyIgKSB7Ci0JCQkvLyBBcmUgd2UgZGVhbGluZyB3aXRo
IEhUTUwgc3RyaW5nIG9yIGFuIElEPwotCQkJdmFyIG1hdGNoID0gcXVpY2tFeHByLmV4ZWMoIHNl
bGVjdG9yICk7Ci0KLQkJCS8vIFZlcmlmeSBhIG1hdGNoLCBhbmQgdGhhdCBubyBjb250ZXh0IHdh
cyBzcGVjaWZpZWQgZm9yICNpZAotCQkJaWYgKCBtYXRjaCAmJiAobWF0Y2hbMV0gfHwgIWNvbnRl
eHQpICkgewotCi0JCQkJLy8gSEFORExFOiAkKGh0bWwpIC0+ICQoYXJyYXkpCi0JCQkJaWYgKCBt
YXRjaFsxXSApCi0JCQkJCXNlbGVjdG9yID0galF1ZXJ5LmNsZWFuKCBbIG1hdGNoWzFdIF0sIGNv
bnRleHQgKTsKLQotCQkJCS8vIEhBTkRMRTogJCgiI2lkIikKLQkJCQllbHNlIHsKLQkJCQkJdmFy
IGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggbWF0Y2hbM10gKTsKLQotCQkJCQkvLyBN
YWtlIHN1cmUgYW4gZWxlbWVudCB3YXMgbG9jYXRlZAotCQkJCQlpZiAoIGVsZW0gKQotCQkJCQkJ
Ly8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIElFIGFuZCBPcGVyYSByZXR1cm4gaXRlbXMKLQkJCQkJ
CS8vIGJ5IG5hbWUgaW5zdGVhZCBvZiBJRAotCQkJCQkJaWYgKCBlbGVtLmlkICE9IG1hdGNoWzNd
ICkKLQkJCQkJCQlyZXR1cm4galF1ZXJ5KCkuZmluZCggc2VsZWN0b3IgKTsKLQotCQkJCQkJLy8g
T3RoZXJ3aXNlLCB3ZSBpbmplY3QgdGhlIGVsZW1lbnQgZGlyZWN0bHkgaW50byB0aGUgalF1ZXJ5
IG9iamVjdAotCQkJCQkJZWxzZSB7Ci0JCQkJCQkJdGhpc1swXSA9IGVsZW07Ci0JCQkJCQkJdGhp
cy5sZW5ndGggPSAxOwotCQkJCQkJCXJldHVybiB0aGlzOwotCQkJCQkJfQotCi0JCQkJCWVsc2UK
LQkJCQkJCXNlbGVjdG9yID0gW107Ci0JCQkJfQotCi0JCQkvLyBIQU5ETEU6ICQoZXhwciwgW2Nv
bnRleHRdKQotCQkJLy8gKHdoaWNoIGlzIGp1c3QgZXF1aXZhbGVudCB0bzogJChjb250ZW50KS5m
aW5kKGV4cHIpCi0JCQl9IGVsc2UKLQkJCQlyZXR1cm4gbmV3IGpRdWVyeSggY29udGV4dCApLmZp
bmQoIHNlbGVjdG9yICk7Ci0KLQkJLy8gSEFORExFOiAkKGZ1bmN0aW9uKQotCQkvLyBTaG9ydGN1
dCBmb3IgZG9jdW1lbnQgcmVhZHkKLQkJfSBlbHNlIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHNl
bGVjdG9yICkgKQotCQkJcmV0dXJuIG5ldyBqUXVlcnkoIGRvY3VtZW50IClbIGpRdWVyeS5mbi5y
ZWFkeSA/ICJyZWFkeSIgOiAibG9hZCIgXSggc2VsZWN0b3IgKTsKLQotCQlyZXR1cm4gdGhpcy5z
ZXRBcnJheSgKLQkJCS8vIEhBTkRMRTogJChhcnJheSkKLQkJCXNlbGVjdG9yLmNvbnN0cnVjdG9y
ID09IEFycmF5ICYmIHNlbGVjdG9yIHx8Ci0KLQkJCS8vIEhBTkRMRTogJChhcnJheWxpa2UpCi0J
CQkvLyBXYXRjaCBmb3Igd2hlbiBhbiBhcnJheS1saWtlIG9iamVjdCwgY29udGFpbnMgRE9NIG5v
ZGVzLCBpcyBwYXNzZWQgaW4gYXMgdGhlIHNlbGVjdG9yCi0JCQkoc2VsZWN0b3IuanF1ZXJ5IHx8
IHNlbGVjdG9yLmxlbmd0aCAmJiBzZWxlY3RvciAhPSB3aW5kb3cgJiYgIXNlbGVjdG9yLm5vZGVU
eXBlICYmIHNlbGVjdG9yWzBdICE9IHVuZGVmaW5lZCAmJiBzZWxlY3RvclswXS5ub2RlVHlwZSkg
JiYgalF1ZXJ5Lm1ha2VBcnJheSggc2VsZWN0b3IgKSB8fAotCi0JCQkvLyBIQU5ETEU6ICQoKikK
LQkJCVsgc2VsZWN0b3IgXSApOwotCX0sCi0JCi0JLy8gVGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBq
UXVlcnkgYmVpbmcgdXNlZAotCWpxdWVyeTogIjEuMi4zIiwKLQotCS8vIFRoZSBudW1iZXIgb2Yg
ZWxlbWVudHMgY29udGFpbmVkIGluIHRoZSBtYXRjaGVkIGVsZW1lbnQgc2V0Ci0Jc2l6ZTogZnVu
Y3Rpb24oKSB7Ci0JCXJldHVybiB0aGlzLmxlbmd0aDsKLQl9LAotCQotCS8vIFRoZSBudW1iZXIg
b2YgZWxlbWVudHMgY29udGFpbmVkIGluIHRoZSBtYXRjaGVkIGVsZW1lbnQgc2V0Ci0JbGVuZ3Ro
OiAwLAotCi0JLy8gR2V0IHRoZSBOdGggZWxlbWVudCBpbiB0aGUgbWF0Y2hlZCBlbGVtZW50IHNl
dCBPUgotCS8vIEdldCB0aGUgd2hvbGUgbWF0Y2hlZCBlbGVtZW50IHNldCBhcyBhIGNsZWFuIGFy
cmF5Ci0JZ2V0OiBmdW5jdGlvbiggbnVtICkgewotCQlyZXR1cm4gbnVtID09IHVuZGVmaW5lZCA/
Ci0KLQkJCS8vIFJldHVybiBhICdjbGVhbicgYXJyYXkKLQkJCWpRdWVyeS5tYWtlQXJyYXkoIHRo
aXMgKSA6Ci0KLQkJCS8vIFJldHVybiBqdXN0IHRoZSBvYmplY3QKLQkJCXRoaXNbIG51bSBdOwot
CX0sCi0JCi0JLy8gVGFrZSBhbiBhcnJheSBvZiBlbGVtZW50cyBhbmQgcHVzaCBpdCBvbnRvIHRo
ZSBzdGFjawotCS8vIChyZXR1cm5pbmcgdGhlIG5ldyBtYXRjaGVkIGVsZW1lbnQgc2V0KQotCXB1
c2hTdGFjazogZnVuY3Rpb24oIGVsZW1zICkgewotCQkvLyBCdWlsZCBhIG5ldyBqUXVlcnkgbWF0
Y2hlZCBlbGVtZW50IHNldAotCQl2YXIgcmV0ID0galF1ZXJ5KCBlbGVtcyApOwotCi0JCS8vIEFk
ZCB0aGUgb2xkIG9iamVjdCBvbnRvIHRoZSBzdGFjayAoYXMgYSByZWZlcmVuY2UpCi0JCXJldC5w
cmV2T2JqZWN0ID0gdGhpczsKLQotCQkvLyBSZXR1cm4gdGhlIG5ld2x5LWZvcm1lZCBlbGVtZW50
IHNldAotCQlyZXR1cm4gcmV0OwotCX0sCi0JCi0JLy8gRm9yY2UgdGhlIGN1cnJlbnQgbWF0Y2hl
ZCBzZXQgb2YgZWxlbWVudHMgdG8gYmVjb21lCi0JLy8gdGhlIHNwZWNpZmllZCBhcnJheSBvZiBl
bGVtZW50cyAoZGVzdHJveWluZyB0aGUgc3RhY2sgaW4gdGhlIHByb2Nlc3MpCi0JLy8gWW91IHNo
b3VsZCB1c2UgcHVzaFN0YWNrKCkgaW4gb3JkZXIgdG8gZG8gdGhpcywgYnV0IG1haW50YWluIHRo
ZSBzdGFjawotCXNldEFycmF5OiBmdW5jdGlvbiggZWxlbXMgKSB7Ci0JCS8vIFJlc2V0dGluZyB0
aGUgbGVuZ3RoIHRvIDAsIHRoZW4gdXNpbmcgdGhlIG5hdGl2ZSBBcnJheSBwdXNoCi0JCS8vIGlz
IGEgc3VwZXItZmFzdCB3YXkgdG8gcG9wdWxhdGUgYW4gb2JqZWN0IHdpdGggYXJyYXktbGlrZSBw
cm9wZXJ0aWVzCi0JCXRoaXMubGVuZ3RoID0gMDsKLQkJQXJyYXkucHJvdG90eXBlLnB1c2guYXBw
bHkoIHRoaXMsIGVsZW1zICk7Ci0JCQotCQlyZXR1cm4gdGhpczsKLQl9LAotCi0JLy8gRXhlY3V0
ZSBhIGNhbGxiYWNrIGZvciBldmVyeSBlbGVtZW50IGluIHRoZSBtYXRjaGVkIHNldC4KLQkvLyAo
WW91IGNhbiBzZWVkIHRoZSBhcmd1bWVudHMgd2l0aCBhbiBhcnJheSBvZiBhcmdzLCBidXQgdGhp
cyBpcwotCS8vIG9ubHkgdXNlZCBpbnRlcm5hbGx5LikKLQllYWNoOiBmdW5jdGlvbiggY2FsbGJh
Y2ssIGFyZ3MgKSB7Ci0JCXJldHVybiBqUXVlcnkuZWFjaCggdGhpcywgY2FsbGJhY2ssIGFyZ3Mg
KTsKLQl9LAotCi0JLy8gRGV0ZXJtaW5lIHRoZSBwb3NpdGlvbiBvZiBhbiBlbGVtZW50IHdpdGhp
biAKLQkvLyB0aGUgbWF0Y2hlZCBzZXQgb2YgZWxlbWVudHMKLQlpbmRleDogZnVuY3Rpb24oIGVs
ZW0gKSB7Ci0JCXZhciByZXQgPSAtMTsKLQotCQkvLyBMb2NhdGUgdGhlIHBvc2l0aW9uIG9mIHRo
ZSBkZXNpcmVkIGVsZW1lbnQKLQkJdGhpcy5lYWNoKGZ1bmN0aW9uKGkpewotCQkJaWYgKCB0aGlz
ID09IGVsZW0gKQotCQkJCXJldCA9IGk7Ci0JCX0pOwotCi0JCXJldHVybiByZXQ7Ci0JfSwKLQot
CWF0dHI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSwgdHlwZSApIHsKLQkJdmFyIG9wdGlvbnMgPSBu
YW1lOwotCQkKLQkJLy8gTG9vayBmb3IgdGhlIGNhc2Ugd2hlcmUgd2UncmUgYWNjZXNzaW5nIGEg
c3R5bGUgdmFsdWUKLQkJaWYgKCBuYW1lLmNvbnN0cnVjdG9yID09IFN0cmluZyApCi0JCQlpZiAo
IHZhbHVlID09IHVuZGVmaW5lZCApCi0JCQkJcmV0dXJuIHRoaXMubGVuZ3RoICYmIGpRdWVyeVsg
dHlwZSB8fCAiYXR0ciIgXSggdGhpc1swXSwgbmFtZSApIHx8IHVuZGVmaW5lZDsKLQotCQkJZWxz
ZSB7Ci0JCQkJb3B0aW9ucyA9IHt9OwotCQkJCW9wdGlvbnNbIG5hbWUgXSA9IHZhbHVlOwotCQkJ
fQotCQkKLQkJLy8gQ2hlY2sgdG8gc2VlIGlmIHdlJ3JlIHNldHRpbmcgc3R5bGUgdmFsdWVzCi0J
CXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oaSl7Ci0JCQkvLyBTZXQgYWxsIHRoZSBzdHlsZXMK
LQkJCWZvciAoIG5hbWUgaW4gb3B0aW9ucyApCi0JCQkJalF1ZXJ5LmF0dHIoCi0JCQkJCXR5cGUg
PwotCQkJCQkJdGhpcy5zdHlsZSA6Ci0JCQkJCQl0aGlzLAotCQkJCQluYW1lLCBqUXVlcnkucHJv
cCggdGhpcywgb3B0aW9uc1sgbmFtZSBdLCB0eXBlLCBpLCBuYW1lICkKLQkJCQkpOwotCQl9KTsK
LQl9LAotCi0JY3NzOiBmdW5jdGlvbigga2V5LCB2YWx1ZSApIHsKLQkJLy8gaWdub3JlIG5lZ2F0
aXZlIHdpZHRoIGFuZCBoZWlnaHQgdmFsdWVzCi0JCWlmICggKGtleSA9PSAnd2lkdGgnIHx8IGtl
eSA9PSAnaGVpZ2h0JykgJiYgcGFyc2VGbG9hdCh2YWx1ZSkgPCAwICkKLQkJCXZhbHVlID0gdW5k
ZWZpbmVkOwotCQlyZXR1cm4gdGhpcy5hdHRyKCBrZXksIHZhbHVlLCAiY3VyQ1NTIiApOwotCX0s
Ci0KLQl0ZXh0OiBmdW5jdGlvbiggdGV4dCApIHsKLQkJaWYgKCB0eXBlb2YgdGV4dCAhPSAib2Jq
ZWN0IiAmJiB0ZXh0ICE9IG51bGwgKQotCQkJcmV0dXJuIHRoaXMuZW1wdHkoKS5hcHBlbmQoICh0
aGlzWzBdICYmIHRoaXNbMF0ub3duZXJEb2N1bWVudCB8fCBkb2N1bWVudCkuY3JlYXRlVGV4dE5v
ZGUoIHRleHQgKSApOwotCi0JCXZhciByZXQgPSAiIjsKLQotCQlqUXVlcnkuZWFjaCggdGV4dCB8
fCB0aGlzLCBmdW5jdGlvbigpewotCQkJalF1ZXJ5LmVhY2goIHRoaXMuY2hpbGROb2RlcywgZnVu
Y3Rpb24oKXsKLQkJCQlpZiAoIHRoaXMubm9kZVR5cGUgIT0gOCApCi0JCQkJCXJldCArPSB0aGlz
Lm5vZGVUeXBlICE9IDEgPwotCQkJCQkJdGhpcy5ub2RlVmFsdWUgOgotCQkJCQkJalF1ZXJ5LmZu
LnRleHQoIFsgdGhpcyBdICk7Ci0JCQl9KTsKLQkJfSk7Ci0KLQkJcmV0dXJuIHJldDsKLQl9LAot
Ci0Jd3JhcEFsbDogZnVuY3Rpb24oIGh0bWwgKSB7Ci0JCWlmICggdGhpc1swXSApCi0JCQkvLyBU
aGUgZWxlbWVudHMgdG8gd3JhcCB0aGUgdGFyZ2V0IGFyb3VuZAotCQkJalF1ZXJ5KCBodG1sLCB0
aGlzWzBdLm93bmVyRG9jdW1lbnQgKQotCQkJCS5jbG9uZSgpCi0JCQkJLmluc2VydEJlZm9yZSgg
dGhpc1swXSApCi0JCQkJLm1hcChmdW5jdGlvbigpewotCQkJCQl2YXIgZWxlbSA9IHRoaXM7Ci0K
LQkJCQkJd2hpbGUgKCBlbGVtLmZpcnN0Q2hpbGQgKQotCQkJCQkJZWxlbSA9IGVsZW0uZmlyc3RD
aGlsZDsKLQotCQkJCQlyZXR1cm4gZWxlbTsKLQkJCQl9KQotCQkJCS5hcHBlbmQodGhpcyk7Ci0K
LQkJcmV0dXJuIHRoaXM7Ci0JfSwKLQotCXdyYXBJbm5lcjogZnVuY3Rpb24oIGh0bWwgKSB7Ci0J
CXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXsKLQkJCWpRdWVyeSggdGhpcyApLmNvbnRlbnRz
KCkud3JhcEFsbCggaHRtbCApOwotCQl9KTsKLQl9LAotCi0Jd3JhcDogZnVuY3Rpb24oIGh0bWwg
KSB7Ci0JCXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXsKLQkJCWpRdWVyeSggdGhpcyApLndy
YXBBbGwoIGh0bWwgKTsKLQkJfSk7Ci0JfSwKLQotCWFwcGVuZDogZnVuY3Rpb24oKSB7Ci0JCXJl
dHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywgdHJ1ZSwgZmFsc2UsIGZ1bmN0aW9uKGVsZW0p
ewotCQkJaWYgKHRoaXMubm9kZVR5cGUgPT0gMSkKLQkJCQl0aGlzLmFwcGVuZENoaWxkKCBlbGVt
ICk7Ci0JCX0pOwotCX0sCi0KLQlwcmVwZW5kOiBmdW5jdGlvbigpIHsKLQkJcmV0dXJuIHRoaXMu
ZG9tTWFuaXAoYXJndW1lbnRzLCB0cnVlLCB0cnVlLCBmdW5jdGlvbihlbGVtKXsKLQkJCWlmICh0
aGlzLm5vZGVUeXBlID09IDEpCi0JCQkJdGhpcy5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMuZmly
c3RDaGlsZCApOwotCQl9KTsKLQl9LAotCQotCWJlZm9yZTogZnVuY3Rpb24oKSB7Ci0JCXJldHVy
biB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywgZmFsc2UsIGZhbHNlLCBmdW5jdGlvbihlbGVtKXsK
LQkJCXRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMgKTsKLQkJfSk7Ci0J
fSwKLQotCWFmdGVyOiBmdW5jdGlvbigpIHsKLQkJcmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1l
bnRzLCBmYWxzZSwgdHJ1ZSwgZnVuY3Rpb24oZWxlbSl7Ci0JCQl0aGlzLnBhcmVudE5vZGUuaW5z
ZXJ0QmVmb3JlKCBlbGVtLCB0aGlzLm5leHRTaWJsaW5nICk7Ci0JCX0pOwotCX0sCi0KLQllbmQ6
IGZ1bmN0aW9uKCkgewotCQlyZXR1cm4gdGhpcy5wcmV2T2JqZWN0IHx8IGpRdWVyeSggW10gKTsK
LQl9LAotCi0JZmluZDogZnVuY3Rpb24oIHNlbGVjdG9yICkgewotCQl2YXIgZWxlbXMgPSBqUXVl
cnkubWFwKHRoaXMsIGZ1bmN0aW9uKGVsZW0pewotCQkJcmV0dXJuIGpRdWVyeS5maW5kKCBzZWxl
Y3RvciwgZWxlbSApOwotCQl9KTsKLQotCQlyZXR1cm4gdGhpcy5wdXNoU3RhY2soIC9bXis+XSBb
Xis+XS8udGVzdCggc2VsZWN0b3IgKSB8fCBzZWxlY3Rvci5pbmRleE9mKCIuLiIpID4gLTEgPwot
CQkJalF1ZXJ5LnVuaXF1ZSggZWxlbXMgKSA6Ci0JCQllbGVtcyApOwotCX0sCi0KLQljbG9uZTog
ZnVuY3Rpb24oIGV2ZW50cyApIHsKLQkJLy8gRG8gdGhlIGNsb25lCi0JCXZhciByZXQgPSB0aGlz
Lm1hcChmdW5jdGlvbigpewotCQkJaWYgKCBqUXVlcnkuYnJvd3Nlci5tc2llICYmICFqUXVlcnku
aXNYTUxEb2ModGhpcykgKSB7Ci0JCQkJLy8gSUUgY29waWVzIGV2ZW50cyBib3VuZCB2aWEgYXR0
YWNoRXZlbnQgd2hlbgotCQkJCS8vIHVzaW5nIGNsb25lTm9kZS4gQ2FsbGluZyBkZXRhY2hFdmVu
dCBvbiB0aGUKLQkJCQkvLyBjbG9uZSB3aWxsIGFsc28gcmVtb3ZlIHRoZSBldmVudHMgZnJvbSB0
aGUgb3JpZ25hbAotCQkJCS8vIEluIG9yZGVyIHRvIGdldCBhcm91bmQgdGhpcywgd2UgdXNlIGlu
bmVySFRNTC4KLQkJCQkvLyBVbmZvcnR1bmF0ZWx5LCB0aGlzIG1lYW5zIHNvbWUgbW9kaWZpY2F0
aW9ucyB0byAKLQkJCQkvLyBhdHRyaWJ1dGVzIGluIElFIHRoYXQgYXJlIGFjdHVhbGx5IG9ubHkg
c3RvcmVkIAotCQkJCS8vIGFzIHByb3BlcnRpZXMgd2lsbCBub3QgYmUgY29waWVkIChzdWNoIGFz
IHRoZQotCQkJCS8vIHRoZSBuYW1lIGF0dHJpYnV0ZSBvbiBhbiBpbnB1dCkuCi0JCQkJdmFyIGNs
b25lID0gdGhpcy5jbG9uZU5vZGUodHJ1ZSksCi0JCQkJCWNvbnRhaW5lciA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoImRpdiIpOwotCQkJCWNvbnRhaW5lci5hcHBlbmRDaGlsZChjbG9uZSk7Ci0J
CQkJcmV0dXJuIGpRdWVyeS5jbGVhbihbY29udGFpbmVyLmlubmVySFRNTF0pWzBdOwotCQkJfSBl
bHNlCi0JCQkJcmV0dXJuIHRoaXMuY2xvbmVOb2RlKHRydWUpOwotCQl9KTsKLQotCQkvLyBOZWVk
IHRvIHNldCB0aGUgZXhwYW5kbyB0byBudWxsIG9uIHRoZSBjbG9uZWQgc2V0IGlmIGl0IGV4aXN0
cwotCQkvLyByZW1vdmVEYXRhIGRvZXNuJ3Qgd29yayBoZXJlLCBJRSByZW1vdmVzIGl0IGZyb20g
dGhlIG9yaWdpbmFsIGFzIHdlbGwKLQkJLy8gdGhpcyBpcyBwcmltYXJpbHkgZm9yIElFIGJ1dCB0
aGUgZGF0YSBleHBhbmRvIHNob3VsZG4ndCBiZSBjb3BpZWQgb3ZlciBpbiBhbnkgYnJvd3Nlcgot
CQl2YXIgY2xvbmUgPSByZXQuZmluZCgiKiIpLmFuZFNlbGYoKS5lYWNoKGZ1bmN0aW9uKCl7Ci0J
CQlpZiAoIHRoaXNbIGV4cGFuZG8gXSAhPSB1bmRlZmluZWQgKQotCQkJCXRoaXNbIGV4cGFuZG8g
XSA9IG51bGw7Ci0JCX0pOwotCQkKLQkJLy8gQ29weSB0aGUgZXZlbnRzIGZyb20gdGhlIG9yaWdp
bmFsIHRvIHRoZSBjbG9uZQotCQlpZiAoIGV2ZW50cyA9PT0gdHJ1ZSApCi0JCQl0aGlzLmZpbmQo
IioiKS5hbmRTZWxmKCkuZWFjaChmdW5jdGlvbihpKXsKLQkJCQlpZiAodGhpcy5ub2RlVHlwZSA9
PSAzKQotCQkJCQlyZXR1cm47Ci0JCQkJdmFyIGV2ZW50cyA9IGpRdWVyeS5kYXRhKCB0aGlzLCAi
ZXZlbnRzIiApOwotCi0JCQkJZm9yICggdmFyIHR5cGUgaW4gZXZlbnRzICkKLQkJCQkJZm9yICgg
dmFyIGhhbmRsZXIgaW4gZXZlbnRzWyB0eXBlIF0gKQotCQkJCQkJalF1ZXJ5LmV2ZW50LmFkZCgg
Y2xvbmVbIGkgXSwgdHlwZSwgZXZlbnRzWyB0eXBlIF1bIGhhbmRsZXIgXSwgZXZlbnRzWyB0eXBl
IF1bIGhhbmRsZXIgXS5kYXRhICk7Ci0JCQl9KTsKLQotCQkvLyBSZXR1cm4gdGhlIGNsb25lZCBz
ZXQKLQkJcmV0dXJuIHJldDsKLQl9LAotCi0JZmlsdGVyOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7
Ci0JCXJldHVybiB0aGlzLnB1c2hTdGFjaygKLQkJCWpRdWVyeS5pc0Z1bmN0aW9uKCBzZWxlY3Rv
ciApICYmCi0JCQlqUXVlcnkuZ3JlcCh0aGlzLCBmdW5jdGlvbihlbGVtLCBpKXsKLQkJCQlyZXR1
cm4gc2VsZWN0b3IuY2FsbCggZWxlbSwgaSApOwotCQkJfSkgfHwKLQotCQkJalF1ZXJ5Lm11bHRp
RmlsdGVyKCBzZWxlY3RvciwgdGhpcyApICk7Ci0JfSwKLQotCW5vdDogZnVuY3Rpb24oIHNlbGVj
dG9yICkgewotCQlpZiAoIHNlbGVjdG9yLmNvbnN0cnVjdG9yID09IFN0cmluZyApCi0JCQkvLyB0
ZXN0IHNwZWNpYWwgY2FzZSB3aGVyZSBqdXN0IG9uZSBzZWxlY3RvciBpcyBwYXNzZWQgaW4KLQkJ
CWlmICggaXNTaW1wbGUudGVzdCggc2VsZWN0b3IgKSApCi0JCQkJcmV0dXJuIHRoaXMucHVzaFN0
YWNrKCBqUXVlcnkubXVsdGlGaWx0ZXIoIHNlbGVjdG9yLCB0aGlzLCB0cnVlICkgKTsKLQkJCWVs
c2UKLQkJCQlzZWxlY3RvciA9IGpRdWVyeS5tdWx0aUZpbHRlciggc2VsZWN0b3IsIHRoaXMgKTsK
LQotCQl2YXIgaXNBcnJheUxpa2UgPSBzZWxlY3Rvci5sZW5ndGggJiYgc2VsZWN0b3Jbc2VsZWN0
b3IubGVuZ3RoIC0gMV0gIT09IHVuZGVmaW5lZCAmJiAhc2VsZWN0b3Iubm9kZVR5cGU7Ci0JCXJl
dHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpIHsKLQkJCXJldHVybiBpc0FycmF5TGlrZSA/IGpR
dWVyeS5pbkFycmF5KCB0aGlzLCBzZWxlY3RvciApIDwgMCA6IHRoaXMgIT0gc2VsZWN0b3I7Ci0J
CX0pOwotCX0sCi0KLQlhZGQ6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKLQkJcmV0dXJuICFzZWxl
Y3RvciA/IHRoaXMgOiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5Lm1lcmdlKCAKLQkJCXRoaXMuZ2V0
KCksCi0JCQlzZWxlY3Rvci5jb25zdHJ1Y3RvciA9PSBTdHJpbmcgPyAKLQkJCQlqUXVlcnkoIHNl
bGVjdG9yICkuZ2V0KCkgOgotCQkJCXNlbGVjdG9yLmxlbmd0aCAhPSB1bmRlZmluZWQgJiYgKCFz
ZWxlY3Rvci5ub2RlTmFtZSB8fCBqUXVlcnkubm9kZU5hbWUoc2VsZWN0b3IsICJmb3JtIikpID8K
LQkJCQkJc2VsZWN0b3IgOiBbc2VsZWN0b3JdICkgKTsKLQl9LAotCi0JaXM6IGZ1bmN0aW9uKCBz
ZWxlY3RvciApIHsKLQkJcmV0dXJuIHNlbGVjdG9yID8KLQkJCWpRdWVyeS5tdWx0aUZpbHRlcigg
c2VsZWN0b3IsIHRoaXMgKS5sZW5ndGggPiAwIDoKLQkJCWZhbHNlOwotCX0sCi0KLQloYXNDbGFz
czogZnVuY3Rpb24oIHNlbGVjdG9yICkgewotCQlyZXR1cm4gdGhpcy5pcyggIi4iICsgc2VsZWN0
b3IgKTsKLQl9LAotCQotCXZhbDogZnVuY3Rpb24oIHZhbHVlICkgewotCQlpZiAoIHZhbHVlID09
IHVuZGVmaW5lZCApIHsKLQotCQkJaWYgKCB0aGlzLmxlbmd0aCApIHsKLQkJCQl2YXIgZWxlbSA9
IHRoaXNbMF07Ci0KLQkJCQkvLyBXZSBuZWVkIHRvIGhhbmRsZSBzZWxlY3QgYm94ZXMgc3BlY2lh
bAotCQkJCWlmICggalF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAic2VsZWN0IiApICkgewotCQkJCQl2
YXIgaW5kZXggPSBlbGVtLnNlbGVjdGVkSW5kZXgsCi0JCQkJCQl2YWx1ZXMgPSBbXSwKLQkJCQkJ
CW9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsCi0JCQkJCQlvbmUgPSBlbGVtLnR5cGUgPT0gInNlbGVj
dC1vbmUiOwotCQkJCQkKLQkJCQkJLy8gTm90aGluZyB3YXMgc2VsZWN0ZWQKLQkJCQkJaWYgKCBp
bmRleCA8IDAgKQotCQkJCQkJcmV0dXJuIG51bGw7Ci0KLQkJCQkJLy8gTG9vcCB0aHJvdWdoIGFs
bCB0aGUgc2VsZWN0ZWQgb3B0aW9ucwotCQkJCQlmb3IgKCB2YXIgaSA9IG9uZSA/IGluZGV4IDog
MCwgbWF4ID0gb25lID8gaW5kZXggKyAxIDogb3B0aW9ucy5sZW5ndGg7IGkgPCBtYXg7IGkrKyAp
IHsKLQkJCQkJCXZhciBvcHRpb24gPSBvcHRpb25zWyBpIF07Ci0KLQkJCQkJCWlmICggb3B0aW9u
LnNlbGVjdGVkICkgewotCQkJCQkJCS8vIEdldCB0aGUgc3BlY2lmYyB2YWx1ZSBmb3IgdGhlIG9w
dGlvbgotCQkJCQkJCXZhbHVlID0galF1ZXJ5LmJyb3dzZXIubXNpZSAmJiAhb3B0aW9uLmF0dHJp
YnV0ZXMudmFsdWUuc3BlY2lmaWVkID8gb3B0aW9uLnRleHQgOiBvcHRpb24udmFsdWU7Ci0JCQkJ
CQkJCi0JCQkJCQkJLy8gV2UgZG9uJ3QgbmVlZCBhbiBhcnJheSBmb3Igb25lIHNlbGVjdHMKLQkJ
CQkJCQlpZiAoIG9uZSApCi0JCQkJCQkJCXJldHVybiB2YWx1ZTsKLQkJCQkJCQkKLQkJCQkJCQkv
LyBNdWx0aS1TZWxlY3RzIHJldHVybiBhbiBhcnJheQotCQkJCQkJCXZhbHVlcy5wdXNoKCB2YWx1
ZSApOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJCQotCQkJCQlyZXR1cm4gdmFsdWVzOwotCQkJCQkK
LQkJCQkvLyBFdmVyeXRoaW5nIGVsc2UsIHdlIGp1c3QgZ3JhYiB0aGUgdmFsdWUKLQkJCQl9IGVs
c2UKLQkJCQkJcmV0dXJuICh0aGlzWzBdLnZhbHVlIHx8ICIiKS5yZXBsYWNlKC9cci9nLCAiIik7
Ci0KLQkJCX0KLQotCQkJcmV0dXJuIHVuZGVmaW5lZDsKLQkJfQotCi0JCXJldHVybiB0aGlzLmVh
Y2goZnVuY3Rpb24oKXsKLQkJCWlmICggdGhpcy5ub2RlVHlwZSAhPSAxICkKLQkJCQlyZXR1cm47
Ci0KLQkJCWlmICggdmFsdWUuY29uc3RydWN0b3IgPT0gQXJyYXkgJiYgL3JhZGlvfGNoZWNrYm94
Ly50ZXN0KCB0aGlzLnR5cGUgKSApCi0JCQkJdGhpcy5jaGVja2VkID0gKGpRdWVyeS5pbkFycmF5
KHRoaXMudmFsdWUsIHZhbHVlKSA+PSAwIHx8Ci0JCQkJCWpRdWVyeS5pbkFycmF5KHRoaXMubmFt
ZSwgdmFsdWUpID49IDApOwotCi0JCQllbHNlIGlmICggalF1ZXJ5Lm5vZGVOYW1lKCB0aGlzLCAi
c2VsZWN0IiApICkgewotCQkJCXZhciB2YWx1ZXMgPSB2YWx1ZS5jb25zdHJ1Y3RvciA9PSBBcnJh
eSA/Ci0JCQkJCXZhbHVlIDoKLQkJCQkJWyB2YWx1ZSBdOwotCi0JCQkJalF1ZXJ5KCAib3B0aW9u
IiwgdGhpcyApLmVhY2goZnVuY3Rpb24oKXsKLQkJCQkJdGhpcy5zZWxlY3RlZCA9IChqUXVlcnku
aW5BcnJheSggdGhpcy52YWx1ZSwgdmFsdWVzICkgPj0gMCB8fAotCQkJCQkJalF1ZXJ5LmluQXJy
YXkoIHRoaXMudGV4dCwgdmFsdWVzICkgPj0gMCk7Ci0JCQkJfSk7Ci0KLQkJCQlpZiAoICF2YWx1
ZXMubGVuZ3RoICkKLQkJCQkJdGhpcy5zZWxlY3RlZEluZGV4ID0gLTE7Ci0KLQkJCX0gZWxzZQot
CQkJCXRoaXMudmFsdWUgPSB2YWx1ZTsKLQkJfSk7Ci0JfSwKLQkKLQlodG1sOiBmdW5jdGlvbigg
dmFsdWUgKSB7Ci0JCXJldHVybiB2YWx1ZSA9PSB1bmRlZmluZWQgPwotCQkJKHRoaXMubGVuZ3Ro
ID8KLQkJCQl0aGlzWzBdLmlubmVySFRNTCA6Ci0JCQkJbnVsbCkgOgotCQkJdGhpcy5lbXB0eSgp
LmFwcGVuZCggdmFsdWUgKTsKLQl9LAotCi0JcmVwbGFjZVdpdGg6IGZ1bmN0aW9uKCB2YWx1ZSAp
IHsKLQkJcmV0dXJuIHRoaXMuYWZ0ZXIoIHZhbHVlICkucmVtb3ZlKCk7Ci0JfSwKLQotCWVxOiBm
dW5jdGlvbiggaSApIHsKLQkJcmV0dXJuIHRoaXMuc2xpY2UoIGksIGkgKyAxICk7Ci0JfSwKLQot
CXNsaWNlOiBmdW5jdGlvbigpIHsKLQkJcmV0dXJuIHRoaXMucHVzaFN0YWNrKCBBcnJheS5wcm90
b3R5cGUuc2xpY2UuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApICk7Ci0JfSwKLQotCW1hcDogZnVu
Y3Rpb24oIGNhbGxiYWNrICkgewotCQlyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeS5tYXAo
dGhpcywgZnVuY3Rpb24oZWxlbSwgaSl7Ci0JCQlyZXR1cm4gY2FsbGJhY2suY2FsbCggZWxlbSwg
aSwgZWxlbSApOwotCQl9KSk7Ci0JfSwKLQotCWFuZFNlbGY6IGZ1bmN0aW9uKCkgewotCQlyZXR1
cm4gdGhpcy5hZGQoIHRoaXMucHJldk9iamVjdCApOwotCX0sCi0KLQlkYXRhOiBmdW5jdGlvbigg
a2V5LCB2YWx1ZSApewotCQl2YXIgcGFydHMgPSBrZXkuc3BsaXQoIi4iKTsKLQkJcGFydHNbMV0g
PSBwYXJ0c1sxXSA/ICIuIiArIHBhcnRzWzFdIDogIiI7Ci0KLQkJaWYgKCB2YWx1ZSA9PSBudWxs
ICkgewotCQkJdmFyIGRhdGEgPSB0aGlzLnRyaWdnZXJIYW5kbGVyKCJnZXREYXRhIiArIHBhcnRz
WzFdICsgIiEiLCBbcGFydHNbMF1dKTsKLQkJCQotCQkJaWYgKCBkYXRhID09IHVuZGVmaW5lZCAm
JiB0aGlzLmxlbmd0aCApCi0JCQkJZGF0YSA9IGpRdWVyeS5kYXRhKCB0aGlzWzBdLCBrZXkgKTsK
LQotCQkJcmV0dXJuIGRhdGEgPT0gbnVsbCAmJiBwYXJ0c1sxXSA/Ci0JCQkJdGhpcy5kYXRhKCBw
YXJ0c1swXSApIDoKLQkJCQlkYXRhOwotCQl9IGVsc2UKLQkJCXJldHVybiB0aGlzLnRyaWdnZXIo
InNldERhdGEiICsgcGFydHNbMV0gKyAiISIsIFtwYXJ0c1swXSwgdmFsdWVdKS5lYWNoKGZ1bmN0
aW9uKCl7Ci0JCQkJalF1ZXJ5LmRhdGEoIHRoaXMsIGtleSwgdmFsdWUgKTsKLQkJCX0pOwotCX0s
Ci0KLQlyZW1vdmVEYXRhOiBmdW5jdGlvbigga2V5ICl7Ci0JCXJldHVybiB0aGlzLmVhY2goZnVu
Y3Rpb24oKXsKLQkJCWpRdWVyeS5yZW1vdmVEYXRhKCB0aGlzLCBrZXkgKTsKLQkJfSk7Ci0JfSwK
LQkKLQlkb21NYW5pcDogZnVuY3Rpb24oIGFyZ3MsIHRhYmxlLCByZXZlcnNlLCBjYWxsYmFjayAp
IHsKLQkJdmFyIGNsb25lID0gdGhpcy5sZW5ndGggPiAxLCBlbGVtczsgCi0KLQkJcmV0dXJuIHRo
aXMuZWFjaChmdW5jdGlvbigpewotCQkJaWYgKCAhZWxlbXMgKSB7Ci0JCQkJZWxlbXMgPSBqUXVl
cnkuY2xlYW4oIGFyZ3MsIHRoaXMub3duZXJEb2N1bWVudCApOwotCi0JCQkJaWYgKCByZXZlcnNl
ICkKLQkJCQkJZWxlbXMucmV2ZXJzZSgpOwotCQkJfQotCi0JCQl2YXIgb2JqID0gdGhpczsKLQot
CQkJaWYgKCB0YWJsZSAmJiBqUXVlcnkubm9kZU5hbWUoIHRoaXMsICJ0YWJsZSIgKSAmJiBqUXVl
cnkubm9kZU5hbWUoIGVsZW1zWzBdLCAidHIiICkgKQotCQkJCW9iaiA9IHRoaXMuZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoInRib2R5IilbMF0gfHwgdGhpcy5hcHBlbmRDaGlsZCggdGhpcy5vd25lckRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoInRib2R5IikgKTsKLQotCQkJdmFyIHNjcmlwdHMgPSBqUXVl
cnkoIFtdICk7Ci0KLQkJCWpRdWVyeS5lYWNoKGVsZW1zLCBmdW5jdGlvbigpewotCQkJCXZhciBl
bGVtID0gY2xvbmUgPwotCQkJCQlqUXVlcnkoIHRoaXMgKS5jbG9uZSggdHJ1ZSApWzBdIDoKLQkJ
CQkJdGhpczsKLQotCQkJCS8vIGV4ZWN1dGUgYWxsIHNjcmlwdHMgYWZ0ZXIgdGhlIGVsZW1lbnRz
IGhhdmUgYmVlbiBpbmplY3RlZAotCQkJCWlmICggalF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAic2Ny
aXB0IiApICkgewotCQkJCQlzY3JpcHRzID0gc2NyaXB0cy5hZGQoIGVsZW0gKTsKLQkJCQl9IGVs
c2UgewotCQkJCQkvLyBSZW1vdmUgYW55IGlubmVyIHNjcmlwdHMgZm9yIGxhdGVyIGV2YWx1YXRp
b24KLQkJCQkJaWYgKCBlbGVtLm5vZGVUeXBlID09IDEgKQotCQkJCQkJc2NyaXB0cyA9IHNjcmlw
dHMuYWRkKCBqUXVlcnkoICJzY3JpcHQiLCBlbGVtICkucmVtb3ZlKCkgKTsKLQotCQkJCQkvLyBJ
bmplY3QgdGhlIGVsZW1lbnRzIGludG8gdGhlIGRvY3VtZW50Ci0JCQkJCWNhbGxiYWNrLmNhbGwo
IG9iaiwgZWxlbSApOwotCQkJCX0KLQkJCX0pOwotCi0JCQlzY3JpcHRzLmVhY2goIGV2YWxTY3Jp
cHQgKTsKLQkJfSk7Ci0JfQotfTsKLQotLy8gR2l2ZSB0aGUgaW5pdCBmdW5jdGlvbiB0aGUgalF1
ZXJ5IHByb3RvdHlwZSBmb3IgbGF0ZXIgaW5zdGFudGlhdGlvbgotalF1ZXJ5LnByb3RvdHlwZS5p
bml0LnByb3RvdHlwZSA9IGpRdWVyeS5wcm90b3R5cGU7Ci0KLWZ1bmN0aW9uIGV2YWxTY3JpcHQo
IGksIGVsZW0gKSB7Ci0JaWYgKCBlbGVtLnNyYyApCi0JCWpRdWVyeS5hamF4KHsKLQkJCXVybDog
ZWxlbS5zcmMsCi0JCQlhc3luYzogZmFsc2UsCi0JCQlkYXRhVHlwZTogInNjcmlwdCIKLQkJfSk7
Ci0KLQllbHNlCi0JCWpRdWVyeS5nbG9iYWxFdmFsKCBlbGVtLnRleHQgfHwgZWxlbS50ZXh0Q29u
dGVudCB8fCBlbGVtLmlubmVySFRNTCB8fCAiIiApOwotCi0JaWYgKCBlbGVtLnBhcmVudE5vZGUg
KQotCQllbGVtLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIGVsZW0gKTsKLX0KLQotalF1ZXJ5LmV4
dGVuZCA9IGpRdWVyeS5mbi5leHRlbmQgPSBmdW5jdGlvbigpIHsKLQkvLyBjb3B5IHJlZmVyZW5j
ZSB0byB0YXJnZXQgb2JqZWN0Ci0JdmFyIHRhcmdldCA9IGFyZ3VtZW50c1swXSB8fCB7fSwgaSA9
IDEsIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsIGRlZXAgPSBmYWxzZSwgb3B0aW9uczsKLQot
CS8vIEhhbmRsZSBhIGRlZXAgY29weSBzaXR1YXRpb24KLQlpZiAoIHRhcmdldC5jb25zdHJ1Y3Rv
ciA9PSBCb29sZWFuICkgewotCQlkZWVwID0gdGFyZ2V0OwotCQl0YXJnZXQgPSBhcmd1bWVudHNb
MV0gfHwge307Ci0JCS8vIHNraXAgdGhlIGJvb2xlYW4gYW5kIHRoZSB0YXJnZXQKLQkJaSA9IDI7
Ci0JfQotCi0JLy8gSGFuZGxlIGNhc2Ugd2hlbiB0YXJnZXQgaXMgYSBzdHJpbmcgb3Igc29tZXRo
aW5nIChwb3NzaWJsZSBpbiBkZWVwIGNvcHkpCi0JaWYgKCB0eXBlb2YgdGFyZ2V0ICE9ICJvYmpl
Y3QiICYmIHR5cGVvZiB0YXJnZXQgIT0gImZ1bmN0aW9uIiApCi0JCXRhcmdldCA9IHt9OwotCi0J
Ly8gZXh0ZW5kIGpRdWVyeSBpdHNlbGYgaWYgb25seSBvbmUgYXJndW1lbnQgaXMgcGFzc2VkCi0J
aWYgKCBsZW5ndGggPT0gMSApIHsKLQkJdGFyZ2V0ID0gdGhpczsKLQkJaSA9IDA7Ci0JfQotCi0J
Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKQotCQkvLyBPbmx5IGRlYWwgd2l0aCBub24tbnVsbC91
bmRlZmluZWQgdmFsdWVzCi0JCWlmICggKG9wdGlvbnMgPSBhcmd1bWVudHNbIGkgXSkgIT0gbnVs
bCApCi0JCQkvLyBFeHRlbmQgdGhlIGJhc2Ugb2JqZWN0Ci0JCQlmb3IgKCB2YXIgbmFtZSBpbiBv
cHRpb25zICkgewotCQkJCS8vIFByZXZlbnQgbmV2ZXItZW5kaW5nIGxvb3AKLQkJCQlpZiAoIHRh
cmdldCA9PT0gb3B0aW9uc1sgbmFtZSBdICkKLQkJCQkJY29udGludWU7Ci0KLQkJCQkvLyBSZWN1
cnNlIGlmIHdlJ3JlIG1lcmdpbmcgb2JqZWN0IHZhbHVlcwotCQkJCWlmICggZGVlcCAmJiBvcHRp
b25zWyBuYW1lIF0gJiYgdHlwZW9mIG9wdGlvbnNbIG5hbWUgXSA9PSAib2JqZWN0IiAmJiB0YXJn
ZXRbIG5hbWUgXSAmJiAhb3B0aW9uc1sgbmFtZSBdLm5vZGVUeXBlICkKLQkJCQkJdGFyZ2V0WyBu
YW1lIF0gPSBqUXVlcnkuZXh0ZW5kKCB0YXJnZXRbIG5hbWUgXSwgb3B0aW9uc1sgbmFtZSBdICk7
Ci0KLQkJCQkvLyBEb24ndCBicmluZyBpbiB1bmRlZmluZWQgdmFsdWVzCi0JCQkJZWxzZSBpZiAo
IG9wdGlvbnNbIG5hbWUgXSAhPSB1bmRlZmluZWQgKQotCQkJCQl0YXJnZXRbIG5hbWUgXSA9IG9w
dGlvbnNbIG5hbWUgXTsKLQotCQkJfQotCi0JLy8gUmV0dXJuIHRoZSBtb2RpZmllZCBvYmplY3QK
LQlyZXR1cm4gdGFyZ2V0OwotfTsKLQotdmFyIGV4cGFuZG8gPSAialF1ZXJ5IiArIChuZXcgRGF0
ZSgpKS5nZXRUaW1lKCksIHV1aWQgPSAwLCB3aW5kb3dEYXRhID0ge307Ci0KLS8vIGV4Y2x1ZGUg
dGhlIGZvbGxvd2luZyBjc3MgcHJvcGVydGllcyB0byBhZGQgcHgKLXZhciBleGNsdWRlID0gL3ot
P2luZGV4fGZvbnQtP3dlaWdodHxvcGFjaXR5fHpvb218bGluZS0/aGVpZ2h0L2k7Ci0KLWpRdWVy
eS5leHRlbmQoewotCW5vQ29uZmxpY3Q6IGZ1bmN0aW9uKCBkZWVwICkgewotCQl3aW5kb3cuJCA9
IF8kOwotCi0JCWlmICggZGVlcCApCi0JCQl3aW5kb3cualF1ZXJ5ID0gX2pRdWVyeTsKLQotCQly
ZXR1cm4galF1ZXJ5OwotCX0sCi0KLQkvLyBTZWUgdGVzdC91bml0L2NvcmUuanMgZm9yIGRldGFp
bHMgY29uY2VybmluZyB0aGlzIGZ1bmN0aW9uLgotCWlzRnVuY3Rpb246IGZ1bmN0aW9uKCBmbiAp
IHsKLQkJcmV0dXJuICEhZm4gJiYgdHlwZW9mIGZuICE9ICJzdHJpbmciICYmICFmbi5ub2RlTmFt
ZSAmJiAKLQkJCWZuLmNvbnN0cnVjdG9yICE9IEFycmF5ICYmIC9mdW5jdGlvbi9pLnRlc3QoIGZu
ICsgIiIgKTsKLQl9LAotCQotCS8vIGNoZWNrIGlmIGFuIGVsZW1lbnQgaXMgaW4gYSAob3IgaXMg
YW4pIFhNTCBkb2N1bWVudAotCWlzWE1MRG9jOiBmdW5jdGlvbiggZWxlbSApIHsKLQkJcmV0dXJu
IGVsZW0uZG9jdW1lbnRFbGVtZW50ICYmICFlbGVtLmJvZHkgfHwKLQkJCWVsZW0udGFnTmFtZSAm
JiBlbGVtLm93bmVyRG9jdW1lbnQgJiYgIWVsZW0ub3duZXJEb2N1bWVudC5ib2R5OwotCX0sCi0K
LQkvLyBFdmFsdWxhdGVzIGEgc2NyaXB0IGluIGEgZ2xvYmFsIGNvbnRleHQKLQlnbG9iYWxFdmFs
OiBmdW5jdGlvbiggZGF0YSApIHsKLQkJZGF0YSA9IGpRdWVyeS50cmltKCBkYXRhICk7Ci0KLQkJ
aWYgKCBkYXRhICkgewotCQkJLy8gSW5zcGlyZWQgYnkgY29kZSBieSBBbmRyZWEgR2lhbW1hcmNo
aQotCQkJLy8gaHR0cDovL3dlYnJlZmxlY3Rpb24uYmxvZ3Nwb3QuY29tLzIwMDcvMDgvZ2xvYmFs
LXNjb3BlLWV2YWx1YXRpb24tYW5kLWRvbS5odG1sCi0JCQl2YXIgaGVhZCA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF0gfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50
LAotCQkJCXNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpOwotCi0JCQlz
Y3JpcHQudHlwZSA9ICJ0ZXh0L2phdmFzY3JpcHQiOwotCQkJaWYgKCBqUXVlcnkuYnJvd3Nlci5t
c2llICkKLQkJCQlzY3JpcHQudGV4dCA9IGRhdGE7Ci0JCQllbHNlCi0JCQkJc2NyaXB0LmFwcGVu
ZENoaWxkKCBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSggZGF0YSApICk7Ci0KLQkJCWhlYWQuYXBw
ZW5kQ2hpbGQoIHNjcmlwdCApOwotCQkJaGVhZC5yZW1vdmVDaGlsZCggc2NyaXB0ICk7Ci0JCX0K
LQl9LAotCi0Jbm9kZU5hbWU6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgewotCQlyZXR1cm4gZWxl
bS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCkgPT0gbmFtZS50b1VwcGVy
Q2FzZSgpOwotCX0sCi0JCi0JY2FjaGU6IHt9LAotCQotCWRhdGE6IGZ1bmN0aW9uKCBlbGVtLCBu
YW1lLCBkYXRhICkgewotCQllbGVtID0gZWxlbSA9PSB3aW5kb3cgPwotCQkJd2luZG93RGF0YSA6
Ci0JCQllbGVtOwotCi0JCXZhciBpZCA9IGVsZW1bIGV4cGFuZG8gXTsKLQotCQkvLyBDb21wdXRl
IGEgdW5pcXVlIElEIGZvciB0aGUgZWxlbWVudAotCQlpZiAoICFpZCApIAotCQkJaWQgPSBlbGVt
WyBleHBhbmRvIF0gPSArK3V1aWQ7Ci0KLQkJLy8gT25seSBnZW5lcmF0ZSB0aGUgZGF0YSBjYWNo
ZSBpZiB3ZSdyZQotCQkvLyB0cnlpbmcgdG8gYWNjZXNzIG9yIG1hbmlwdWxhdGUgaXQKLQkJaWYg
KCBuYW1lICYmICFqUXVlcnkuY2FjaGVbIGlkIF0gKQotCQkJalF1ZXJ5LmNhY2hlWyBpZCBdID0g
e307Ci0JCQotCQkvLyBQcmV2ZW50IG92ZXJyaWRpbmcgdGhlIG5hbWVkIGNhY2hlIHdpdGggdW5k
ZWZpbmVkIHZhbHVlcwotCQlpZiAoIGRhdGEgIT0gdW5kZWZpbmVkICkKLQkJCWpRdWVyeS5jYWNo
ZVsgaWQgXVsgbmFtZSBdID0gZGF0YTsKLQkJCi0JCS8vIFJldHVybiB0aGUgbmFtZWQgY2FjaGUg
ZGF0YSwgb3IgdGhlIElEIGZvciB0aGUgZWxlbWVudAkKLQkJcmV0dXJuIG5hbWUgPwotCQkJalF1
ZXJ5LmNhY2hlWyBpZCBdWyBuYW1lIF0gOgotCQkJaWQ7Ci0JfSwKLQkKLQlyZW1vdmVEYXRhOiBm
dW5jdGlvbiggZWxlbSwgbmFtZSApIHsKLQkJZWxlbSA9IGVsZW0gPT0gd2luZG93ID8KLQkJCXdp
bmRvd0RhdGEgOgotCQkJZWxlbTsKLQotCQl2YXIgaWQgPSBlbGVtWyBleHBhbmRvIF07Ci0KLQkJ
Ly8gSWYgd2Ugd2FudCB0byByZW1vdmUgYSBzcGVjaWZpYyBzZWN0aW9uIG9mIHRoZSBlbGVtZW50
J3MgZGF0YQotCQlpZiAoIG5hbWUgKSB7Ci0JCQlpZiAoIGpRdWVyeS5jYWNoZVsgaWQgXSApIHsK
LQkJCQkvLyBSZW1vdmUgdGhlIHNlY3Rpb24gb2YgY2FjaGUgZGF0YQotCQkJCWRlbGV0ZSBqUXVl
cnkuY2FjaGVbIGlkIF1bIG5hbWUgXTsKLQotCQkJCS8vIElmIHdlJ3ZlIHJlbW92ZWQgYWxsIHRo
ZSBkYXRhLCByZW1vdmUgdGhlIGVsZW1lbnQncyBjYWNoZQotCQkJCW5hbWUgPSAiIjsKLQotCQkJ
CWZvciAoIG5hbWUgaW4galF1ZXJ5LmNhY2hlWyBpZCBdICkKLQkJCQkJYnJlYWs7Ci0KLQkJCQlp
ZiAoICFuYW1lICkKLQkJCQkJalF1ZXJ5LnJlbW92ZURhdGEoIGVsZW0gKTsKLQkJCX0KLQotCQkv
LyBPdGhlcndpc2UsIHdlIHdhbnQgdG8gcmVtb3ZlIGFsbCBvZiB0aGUgZWxlbWVudCdzIGRhdGEK
LQkJfSBlbHNlIHsKLQkJCS8vIENsZWFuIHVwIHRoZSBlbGVtZW50IGV4cGFuZG8KLQkJCXRyeSB7
Ci0JCQkJZGVsZXRlIGVsZW1bIGV4cGFuZG8gXTsKLQkJCX0gY2F0Y2goZSl7Ci0JCQkJLy8gSUUg
aGFzIHRyb3VibGUgZGlyZWN0bHkgcmVtb3ZpbmcgdGhlIGV4cGFuZG8KLQkJCQkvLyBidXQgaXQn
cyBvayB3aXRoIHVzaW5nIHJlbW92ZUF0dHJpYnV0ZQotCQkJCWlmICggZWxlbS5yZW1vdmVBdHRy
aWJ1dGUgKQotCQkJCQllbGVtLnJlbW92ZUF0dHJpYnV0ZSggZXhwYW5kbyApOwotCQkJfQotCi0J
CQkvLyBDb21wbGV0ZWx5IHJlbW92ZSB0aGUgZGF0YSBjYWNoZQotCQkJZGVsZXRlIGpRdWVyeS5j
YWNoZVsgaWQgXTsKLQkJfQotCX0sCi0KLQkvLyBhcmdzIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBv
bmx5Ci0JZWFjaDogZnVuY3Rpb24oIG9iamVjdCwgY2FsbGJhY2ssIGFyZ3MgKSB7Ci0JCWlmICgg
YXJncyApIHsKLQkJCWlmICggb2JqZWN0Lmxlbmd0aCA9PSB1bmRlZmluZWQgKSB7Ci0JCQkJZm9y
ICggdmFyIG5hbWUgaW4gb2JqZWN0ICkKLQkJCQkJaWYgKCBjYWxsYmFjay5hcHBseSggb2JqZWN0
WyBuYW1lIF0sIGFyZ3MgKSA9PT0gZmFsc2UgKQotCQkJCQkJYnJlYWs7Ci0JCQl9IGVsc2UKLQkJ
CQlmb3IgKCB2YXIgaSA9IDAsIGxlbmd0aCA9IG9iamVjdC5sZW5ndGg7IGkgPCBsZW5ndGg7IGkr
KyApCi0JCQkJCWlmICggY2FsbGJhY2suYXBwbHkoIG9iamVjdFsgaSBdLCBhcmdzICkgPT09IGZh
bHNlICkKLQkJCQkJCWJyZWFrOwotCi0JCS8vIEEgc3BlY2lhbCwgZmFzdCwgY2FzZSBmb3IgdGhl
IG1vc3QgY29tbW9uIHVzZSBvZiBlYWNoCi0JCX0gZWxzZSB7Ci0JCQlpZiAoIG9iamVjdC5sZW5n
dGggPT0gdW5kZWZpbmVkICkgewotCQkJCWZvciAoIHZhciBuYW1lIGluIG9iamVjdCApCi0JCQkJ
CWlmICggY2FsbGJhY2suY2FsbCggb2JqZWN0WyBuYW1lIF0sIG5hbWUsIG9iamVjdFsgbmFtZSBd
ICkgPT09IGZhbHNlICkKLQkJCQkJCWJyZWFrOwotCQkJfSBlbHNlCi0JCQkJZm9yICggdmFyIGkg
PSAwLCBsZW5ndGggPSBvYmplY3QubGVuZ3RoLCB2YWx1ZSA9IG9iamVjdFswXTsgCi0JCQkJCWkg
PCBsZW5ndGggJiYgY2FsbGJhY2suY2FsbCggdmFsdWUsIGksIHZhbHVlICkgIT09IGZhbHNlOyB2
YWx1ZSA9IG9iamVjdFsrK2ldICl7fQotCQl9Ci0KLQkJcmV0dXJuIG9iamVjdDsKLQl9LAotCQot
CXByb3A6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgdHlwZSwgaSwgbmFtZSApIHsKLQkJCS8vIEhh
bmRsZSBleGVjdXRhYmxlIGZ1bmN0aW9ucwotCQkJaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggdmFs
dWUgKSApCi0JCQkJdmFsdWUgPSB2YWx1ZS5jYWxsKCBlbGVtLCBpICk7Ci0JCQkJCi0JCQkvLyBI
YW5kbGUgcGFzc2luZyBpbiBhIG51bWJlciB0byBhIENTUyBwcm9wZXJ0eQotCQkJcmV0dXJuIHZh
bHVlICYmIHZhbHVlLmNvbnN0cnVjdG9yID09IE51bWJlciAmJiB0eXBlID09ICJjdXJDU1MiICYm
ICFleGNsdWRlLnRlc3QoIG5hbWUgKSA/Ci0JCQkJdmFsdWUgKyAicHgiIDoKLQkJCQl2YWx1ZTsK
LQl9LAotCi0JY2xhc3NOYW1lOiB7Ci0JCS8vIGludGVybmFsIG9ubHksIHVzZSBhZGRDbGFzcygi
Y2xhc3MiKQotCQlhZGQ6IGZ1bmN0aW9uKCBlbGVtLCBjbGFzc05hbWVzICkgewotCQkJalF1ZXJ5
LmVhY2goKGNsYXNzTmFtZXMgfHwgIiIpLnNwbGl0KC9ccysvKSwgZnVuY3Rpb24oaSwgY2xhc3NO
YW1lKXsKLQkJCQlpZiAoIGVsZW0ubm9kZVR5cGUgPT0gMSAmJiAhalF1ZXJ5LmNsYXNzTmFtZS5o
YXMoIGVsZW0uY2xhc3NOYW1lLCBjbGFzc05hbWUgKSApCi0JCQkJCWVsZW0uY2xhc3NOYW1lICs9
IChlbGVtLmNsYXNzTmFtZSA/ICIgIiA6ICIiKSArIGNsYXNzTmFtZTsKLQkJCX0pOwotCQl9LAot
Ci0JCS8vIGludGVybmFsIG9ubHksIHVzZSByZW1vdmVDbGFzcygiY2xhc3MiKQotCQlyZW1vdmU6
IGZ1bmN0aW9uKCBlbGVtLCBjbGFzc05hbWVzICkgewotCQkJaWYgKGVsZW0ubm9kZVR5cGUgPT0g
MSkKLQkJCQllbGVtLmNsYXNzTmFtZSA9IGNsYXNzTmFtZXMgIT0gdW5kZWZpbmVkID8KLQkJCQkJ
alF1ZXJ5LmdyZXAoZWxlbS5jbGFzc05hbWUuc3BsaXQoL1xzKy8pLCBmdW5jdGlvbihjbGFzc05h
bWUpewotCQkJCQkJcmV0dXJuICFqUXVlcnkuY2xhc3NOYW1lLmhhcyggY2xhc3NOYW1lcywgY2xh
c3NOYW1lICk7CQotCQkJCQl9KS5qb2luKCIgIikgOgotCQkJCQkiIjsKLQkJfSwKLQotCQkvLyBp
bnRlcm5hbCBvbmx5LCB1c2UgaXMoIi5jbGFzcyIpCi0JCWhhczogZnVuY3Rpb24oIGVsZW0sIGNs
YXNzTmFtZSApIHsKLQkJCXJldHVybiBqUXVlcnkuaW5BcnJheSggY2xhc3NOYW1lLCAoZWxlbS5j
bGFzc05hbWUgfHwgZWxlbSkudG9TdHJpbmcoKS5zcGxpdCgvXHMrLykgKSA+IC0xOwotCQl9Ci0J
fSwKLQotCS8vIEEgbWV0aG9kIGZvciBxdWlja2x5IHN3YXBwaW5nIGluL291dCBDU1MgcHJvcGVy
dGllcyB0byBnZXQgY29ycmVjdCBjYWxjdWxhdGlvbnMKLQlzd2FwOiBmdW5jdGlvbiggZWxlbSwg
b3B0aW9ucywgY2FsbGJhY2sgKSB7Ci0JCXZhciBvbGQgPSB7fTsKLQkJLy8gUmVtZW1iZXIgdGhl
IG9sZCB2YWx1ZXMsIGFuZCBpbnNlcnQgdGhlIG5ldyBvbmVzCi0JCWZvciAoIHZhciBuYW1lIGlu
IG9wdGlvbnMgKSB7Ci0JCQlvbGRbIG5hbWUgXSA9IGVsZW0uc3R5bGVbIG5hbWUgXTsKLQkJCWVs
ZW0uc3R5bGVbIG5hbWUgXSA9IG9wdGlvbnNbIG5hbWUgXTsKLQkJfQotCi0JCWNhbGxiYWNrLmNh
bGwoIGVsZW0gKTsKLQotCQkvLyBSZXZlcnQgdGhlIG9sZCB2YWx1ZXMKLQkJZm9yICggdmFyIG5h
bWUgaW4gb3B0aW9ucyApCi0JCQllbGVtLnN0eWxlWyBuYW1lIF0gPSBvbGRbIG5hbWUgXTsKLQl9
LAotCi0JY3NzOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZm9yY2UgKSB7Ci0JCWlmICggbmFtZSA9
PSAid2lkdGgiIHx8IG5hbWUgPT0gImhlaWdodCIgKSB7Ci0JCQl2YXIgdmFsLCBwcm9wcyA9IHsg
cG9zaXRpb246ICJhYnNvbHV0ZSIsIHZpc2liaWxpdHk6ICJoaWRkZW4iLCBkaXNwbGF5OiJibG9j
ayIgfSwgd2hpY2ggPSBuYW1lID09ICJ3aWR0aCIgPyBbICJMZWZ0IiwgIlJpZ2h0IiBdIDogWyAi
VG9wIiwgIkJvdHRvbSIgXTsKLQkJCi0JCQlmdW5jdGlvbiBnZXRXSCgpIHsKLQkJCQl2YWwgPSBu
YW1lID09ICJ3aWR0aCIgPyBlbGVtLm9mZnNldFdpZHRoIDogZWxlbS5vZmZzZXRIZWlnaHQ7Ci0J
CQkJdmFyIHBhZGRpbmcgPSAwLCBib3JkZXIgPSAwOwotCQkJCWpRdWVyeS5lYWNoKCB3aGljaCwg
ZnVuY3Rpb24oKSB7Ci0JCQkJCXBhZGRpbmcgKz0gcGFyc2VGbG9hdChqUXVlcnkuY3VyQ1NTKCBl
bGVtLCAicGFkZGluZyIgKyB0aGlzLCB0cnVlKSkgfHwgMDsKLQkJCQkJYm9yZGVyICs9IHBhcnNl
RmxvYXQoalF1ZXJ5LmN1ckNTUyggZWxlbSwgImJvcmRlciIgKyB0aGlzICsgIldpZHRoIiwgdHJ1
ZSkpIHx8IDA7Ci0JCQkJfSk7Ci0JCQkJdmFsIC09IE1hdGgucm91bmQocGFkZGluZyArIGJvcmRl
cik7Ci0JCQl9Ci0JCQotCQkJaWYgKCBqUXVlcnkoZWxlbSkuaXMoIjp2aXNpYmxlIikgKQotCQkJ
CWdldFdIKCk7Ci0JCQllbHNlCi0JCQkJalF1ZXJ5LnN3YXAoIGVsZW0sIHByb3BzLCBnZXRXSCAp
OwotCQkJCi0JCQlyZXR1cm4gTWF0aC5tYXgoMCwgdmFsKTsKLQkJfQotCQkKLQkJcmV0dXJuIGpR
dWVyeS5jdXJDU1MoIGVsZW0sIG5hbWUsIGZvcmNlICk7Ci0JfSwKLQotCWN1ckNTUzogZnVuY3Rp
b24oIGVsZW0sIG5hbWUsIGZvcmNlICkgewotCQl2YXIgcmV0OwotCi0JCS8vIEEgaGVscGVyIG1l
dGhvZCBmb3IgZGV0ZXJtaW5pbmcgaWYgYW4gZWxlbWVudCdzIHZhbHVlcyBhcmUgYnJva2VuCi0J
CWZ1bmN0aW9uIGNvbG9yKCBlbGVtICkgewotCQkJaWYgKCAhalF1ZXJ5LmJyb3dzZXIuc2FmYXJp
ICkKLQkJCQlyZXR1cm4gZmFsc2U7Ci0KLQkJCXZhciByZXQgPSBkb2N1bWVudC5kZWZhdWx0Vmll
dy5nZXRDb21wdXRlZFN0eWxlKCBlbGVtLCBudWxsICk7Ci0JCQlyZXR1cm4gIXJldCB8fCByZXQu
Z2V0UHJvcGVydHlWYWx1ZSgiY29sb3IiKSA9PSAiIjsKLQkJfQotCi0JCS8vIFdlIG5lZWQgdG8g
aGFuZGxlIG9wYWNpdHkgc3BlY2lhbCBpbiBJRQotCQlpZiAoIG5hbWUgPT0gIm9wYWNpdHkiICYm
IGpRdWVyeS5icm93c2VyLm1zaWUgKSB7Ci0JCQlyZXQgPSBqUXVlcnkuYXR0ciggZWxlbS5zdHls
ZSwgIm9wYWNpdHkiICk7Ci0KLQkJCXJldHVybiByZXQgPT0gIiIgPwotCQkJCSIxIiA6Ci0JCQkJ
cmV0OwotCQl9Ci0JCS8vIE9wZXJhIHNvbWV0aW1lcyB3aWxsIGdpdmUgdGhlIHdyb25nIGRpc3Bs
YXkgYW5zd2VyLCB0aGlzIGZpeGVzIGl0LCBzZWUgIzIwMzcKLQkJaWYgKCBqUXVlcnkuYnJvd3Nl
ci5vcGVyYSAmJiBuYW1lID09ICJkaXNwbGF5IiApIHsKLQkJCXZhciBzYXZlID0gZWxlbS5zdHls
ZS5vdXRsaW5lOwotCQkJZWxlbS5zdHlsZS5vdXRsaW5lID0gIjAgc29saWQgYmxhY2siOwotCQkJ
ZWxlbS5zdHlsZS5vdXRsaW5lID0gc2F2ZTsKLQkJfQotCQkKLQkJLy8gTWFrZSBzdXJlIHdlJ3Jl
IHVzaW5nIHRoZSByaWdodCBuYW1lIGZvciBnZXR0aW5nIHRoZSBmbG9hdCB2YWx1ZQotCQlpZiAo
IG5hbWUubWF0Y2goIC9mbG9hdC9pICkgKQotCQkJbmFtZSA9IHN0eWxlRmxvYXQ7Ci0KLQkJaWYg
KCAhZm9yY2UgJiYgZWxlbS5zdHlsZSAmJiBlbGVtLnN0eWxlWyBuYW1lIF0gKQotCQkJcmV0ID0g
ZWxlbS5zdHlsZVsgbmFtZSBdOwotCi0JCWVsc2UgaWYgKCBkb2N1bWVudC5kZWZhdWx0VmlldyAm
JiBkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlICkgewotCi0JCQkvLyBPbmx5
ICJmbG9hdCIgaXMgbmVlZGVkIGhlcmUKLQkJCWlmICggbmFtZS5tYXRjaCggL2Zsb2F0L2kgKSAp
Ci0JCQkJbmFtZSA9ICJmbG9hdCI7Ci0KLQkJCW5hbWUgPSBuYW1lLnJlcGxhY2UoIC8oW0EtWl0p
L2csICItJDEiICkudG9Mb3dlckNhc2UoKTsKLQotCQkJdmFyIGdldENvbXB1dGVkU3R5bGUgPSBk
b2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKCBlbGVtLCBudWxsICk7Ci0KLQkJ
CWlmICggZ2V0Q29tcHV0ZWRTdHlsZSAmJiAhY29sb3IoIGVsZW0gKSApCi0JCQkJcmV0ID0gZ2V0
Q29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCBuYW1lICk7Ci0KLQkJCS8vIElmIHRoZSBl
bGVtZW50IGlzbid0IHJlcG9ydGluZyBpdHMgdmFsdWVzIHByb3Blcmx5IGluIFNhZmFyaQotCQkJ
Ly8gdGhlbiBzb21lIGRpc3BsYXk6IG5vbmUgZWxlbWVudHMgYXJlIGludm9sdmVkCi0JCQllbHNl
IHsKLQkJCQl2YXIgc3dhcCA9IFtdLCBzdGFjayA9IFtdOwotCi0JCQkJLy8gTG9jYXRlIGFsbCBv
ZiB0aGUgcGFyZW50IGRpc3BsYXk6IG5vbmUgZWxlbWVudHMKLQkJCQlmb3IgKCB2YXIgYSA9IGVs
ZW07IGEgJiYgY29sb3IoYSk7IGEgPSBhLnBhcmVudE5vZGUgKQotCQkJCQlzdGFjay51bnNoaWZ0
KGEpOwotCi0JCQkJLy8gR28gdGhyb3VnaCBhbmQgbWFrZSB0aGVtIHZpc2libGUsIGJ1dCBpbiBy
ZXZlcnNlCi0JCQkJLy8gKEl0IHdvdWxkIGJlIGJldHRlciBpZiB3ZSBrbmV3IHRoZSBleGFjdCBk
aXNwbGF5IHR5cGUgdGhhdCB0aGV5IGhhZCkKLQkJCQlmb3IgKCB2YXIgaSA9IDA7IGkgPCBzdGFj
ay5sZW5ndGg7IGkrKyApCi0JCQkJCWlmICggY29sb3IoIHN0YWNrWyBpIF0gKSApIHsKLQkJCQkJ
CXN3YXBbIGkgXSA9IHN0YWNrWyBpIF0uc3R5bGUuZGlzcGxheTsKLQkJCQkJCXN0YWNrWyBpIF0u
c3R5bGUuZGlzcGxheSA9ICJibG9jayI7Ci0JCQkJCX0KLQotCQkJCS8vIFNpbmNlIHdlIGZsaXAg
dGhlIGRpc3BsYXkgc3R5bGUsIHdlIGhhdmUgdG8gaGFuZGxlIHRoYXQKLQkJCQkvLyBvbmUgc3Bl
Y2lhbCwgb3RoZXJ3aXNlIGdldCB0aGUgdmFsdWUKLQkJCQlyZXQgPSBuYW1lID09ICJkaXNwbGF5
IiAmJiBzd2FwWyBzdGFjay5sZW5ndGggLSAxIF0gIT0gbnVsbCA/Ci0JCQkJCSJub25lIiA6Ci0J
CQkJCSggZ2V0Q29tcHV0ZWRTdHlsZSAmJiBnZXRDb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFs
dWUoIG5hbWUgKSApIHx8ICIiOwotCi0JCQkJLy8gRmluYWxseSwgcmV2ZXJ0IHRoZSBkaXNwbGF5
IHN0eWxlcyBiYWNrCi0JCQkJZm9yICggdmFyIGkgPSAwOyBpIDwgc3dhcC5sZW5ndGg7IGkrKyAp
Ci0JCQkJCWlmICggc3dhcFsgaSBdICE9IG51bGwgKQotCQkJCQkJc3RhY2tbIGkgXS5zdHlsZS5k
aXNwbGF5ID0gc3dhcFsgaSBdOwotCQkJfQotCi0JCQkvLyBXZSBzaG91bGQgYWx3YXlzIGdldCBh
IG51bWJlciBiYWNrIGZyb20gb3BhY2l0eQotCQkJaWYgKCBuYW1lID09ICJvcGFjaXR5IiAmJiBy
ZXQgPT0gIiIgKQotCQkJCXJldCA9ICIxIjsKLQotCQl9IGVsc2UgaWYgKCBlbGVtLmN1cnJlbnRT
dHlsZSApIHsKLQkJCXZhciBjYW1lbENhc2UgPSBuYW1lLnJlcGxhY2UoL1wtKFx3KS9nLCBmdW5j
dGlvbihhbGwsIGxldHRlcil7Ci0JCQkJcmV0dXJuIGxldHRlci50b1VwcGVyQ2FzZSgpOwotCQkJ
fSk7Ci0KLQkJCXJldCA9IGVsZW0uY3VycmVudFN0eWxlWyBuYW1lIF0gfHwgZWxlbS5jdXJyZW50
U3R5bGVbIGNhbWVsQ2FzZSBdOwotCi0JCQkvLyBGcm9tIHRoZSBhd2Vzb21lIGhhY2sgYnkgRGVh
biBFZHdhcmRzCi0JCQkvLyBodHRwOi8vZXJpay5lYWUubmV0L2FyY2hpdmVzLzIwMDcvMDcvMjcv
MTguNTQuMTUvI2NvbW1lbnQtMTAyMjkxCi0KLQkJCS8vIElmIHdlJ3JlIG5vdCBkZWFsaW5nIHdp
dGggYSByZWd1bGFyIHBpeGVsIG51bWJlcgotCQkJLy8gYnV0IGEgbnVtYmVyIHRoYXQgaGFzIGEg
d2VpcmQgZW5kaW5nLCB3ZSBuZWVkIHRvIGNvbnZlcnQgaXQgdG8gcGl4ZWxzCi0JCQlpZiAoICEv
XlxkKyhweCk/JC9pLnRlc3QoIHJldCApICYmIC9eXGQvLnRlc3QoIHJldCApICkgewotCQkJCS8v
IFJlbWVtYmVyIHRoZSBvcmlnaW5hbCB2YWx1ZXMKLQkJCQl2YXIgc3R5bGUgPSBlbGVtLnN0eWxl
LmxlZnQsIHJ1bnRpbWVTdHlsZSA9IGVsZW0ucnVudGltZVN0eWxlLmxlZnQ7Ci0KLQkJCQkvLyBQ
dXQgaW4gdGhlIG5ldyB2YWx1ZXMgdG8gZ2V0IGEgY29tcHV0ZWQgdmFsdWUgb3V0Ci0JCQkJZWxl
bS5ydW50aW1lU3R5bGUubGVmdCA9IGVsZW0uY3VycmVudFN0eWxlLmxlZnQ7Ci0JCQkJZWxlbS5z
dHlsZS5sZWZ0ID0gcmV0IHx8IDA7Ci0JCQkJcmV0ID0gZWxlbS5zdHlsZS5waXhlbExlZnQgKyAi
cHgiOwotCi0JCQkJLy8gUmV2ZXJ0IHRoZSBjaGFuZ2VkIHZhbHVlcwotCQkJCWVsZW0uc3R5bGUu
bGVmdCA9IHN0eWxlOwotCQkJCWVsZW0ucnVudGltZVN0eWxlLmxlZnQgPSBydW50aW1lU3R5bGU7
Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gcmV0OwotCX0sCi0JCi0JY2xlYW46IGZ1bmN0aW9uKCBl
bGVtcywgY29udGV4dCApIHsKLQkJdmFyIHJldCA9IFtdOwotCQljb250ZXh0ID0gY29udGV4dCB8
fCBkb2N1bWVudDsKLQkJLy8gIWNvbnRleHQuY3JlYXRlRWxlbWVudCBmYWlscyBpbiBJRSB3aXRo
IGFuIGVycm9yIGJ1dCByZXR1cm5zIHR5cGVvZiAnb2JqZWN0JwotCQlpZiAodHlwZW9mIGNvbnRl
eHQuY3JlYXRlRWxlbWVudCA9PSAndW5kZWZpbmVkJykgCi0JCQljb250ZXh0ID0gY29udGV4dC5v
d25lckRvY3VtZW50IHx8IGNvbnRleHRbMF0gJiYgY29udGV4dFswXS5vd25lckRvY3VtZW50IHx8
IGRvY3VtZW50OwotCi0JCWpRdWVyeS5lYWNoKGVsZW1zLCBmdW5jdGlvbihpLCBlbGVtKXsKLQkJ
CWlmICggIWVsZW0gKQotCQkJCXJldHVybjsKLQotCQkJaWYgKCBlbGVtLmNvbnN0cnVjdG9yID09
IE51bWJlciApCi0JCQkJZWxlbSA9IGVsZW0udG9TdHJpbmcoKTsKLQkJCQotCQkJLy8gQ29udmVy
dCBodG1sIHN0cmluZyBpbnRvIERPTSBub2RlcwotCQkJaWYgKCB0eXBlb2YgZWxlbSA9PSAic3Ry
aW5nIiApIHsKLQkJCQkvLyBGaXggIlhIVE1MIi1zdHlsZSB0YWdzIGluIGFsbCBicm93c2Vycwot
CQkJCWVsZW0gPSBlbGVtLnJlcGxhY2UoLyg8KFx3KylbXj5dKj8pXC8+L2csIGZ1bmN0aW9uKGFs
bCwgZnJvbnQsIHRhZyl7Ci0JCQkJCXJldHVybiB0YWcubWF0Y2goL14oYWJicnxicnxjb2x8aW1n
fGlucHV0fGxpbmt8bWV0YXxwYXJhbXxocnxhcmVhfGVtYmVkKSQvaSkgPwotCQkJCQkJYWxsIDoK
LQkJCQkJCWZyb250ICsgIj48LyIgKyB0YWcgKyAiPiI7Ci0JCQkJfSk7Ci0KLQkJCQkvLyBUcmlt
IHdoaXRlc3BhY2UsIG90aGVyd2lzZSBpbmRleE9mIHdvbid0IHdvcmsgYXMgZXhwZWN0ZWQKLQkJ
CQl2YXIgdGFncyA9IGpRdWVyeS50cmltKCBlbGVtICkudG9Mb3dlckNhc2UoKSwgZGl2ID0gY29u
dGV4dC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLQotCQkJCXZhciB3cmFwID0KLQkJCQkJLy8gb3B0
aW9uIG9yIG9wdGdyb3VwCi0JCQkJCSF0YWdzLmluZGV4T2YoIjxvcHQiKSAmJgotCQkJCQlbIDEs
ICI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+IiwgIjwvc2VsZWN0PiIgXSB8fAotCQkJCQkK
LQkJCQkJIXRhZ3MuaW5kZXhPZigiPGxlZyIpICYmCi0JCQkJCVsgMSwgIjxmaWVsZHNldD4iLCAi
PC9maWVsZHNldD4iIF0gfHwKLQkJCQkJCi0JCQkJCXRhZ3MubWF0Y2goL148KHRoZWFkfHRib2R5
fHRmb290fGNvbGd8Y2FwKS8pICYmCi0JCQkJCVsgMSwgIjx0YWJsZT4iLCAiPC90YWJsZT4iIF0g
fHwKLQkJCQkJCi0JCQkJCSF0YWdzLmluZGV4T2YoIjx0ciIpICYmCi0JCQkJCVsgMiwgIjx0YWJs
ZT48dGJvZHk+IiwgIjwvdGJvZHk+PC90YWJsZT4iIF0gfHwKLQkJCQkJCi0JCQkJIAkvLyA8dGhl
YWQ+IG1hdGNoZWQgYWJvdmUKLQkJCQkJKCF0YWdzLmluZGV4T2YoIjx0ZCIpIHx8ICF0YWdzLmlu
ZGV4T2YoIjx0aCIpKSAmJgotCQkJCQlbIDMsICI8dGFibGU+PHRib2R5Pjx0cj4iLCAiPC90cj48
L3Rib2R5PjwvdGFibGU+IiBdIHx8Ci0JCQkJCQotCQkJCQkhdGFncy5pbmRleE9mKCI8Y29sIikg
JiYKLQkJCQkJWyAyLCAiPHRhYmxlPjx0Ym9keT48L3Rib2R5Pjxjb2xncm91cD4iLCAiPC9jb2xn
cm91cD48L3RhYmxlPiIgXSB8fAotCi0JCQkJCS8vIElFIGNhbid0IHNlcmlhbGl6ZSA8bGluaz4g
YW5kIDxzY3JpcHQ+IHRhZ3Mgbm9ybWFsbHkKLQkJCQkJalF1ZXJ5LmJyb3dzZXIubXNpZSAmJgot
CQkJCQlbIDEsICJkaXY8ZGl2PiIsICI8L2Rpdj4iIF0gfHwKLQkJCQkJCi0JCQkJCVsgMCwgIiIs
ICIiIF07Ci0KLQkJCQkvLyBHbyB0byBodG1sIGFuZCBiYWNrLCB0aGVuIHBlZWwgb2ZmIGV4dHJh
IHdyYXBwZXJzCi0JCQkJZGl2LmlubmVySFRNTCA9IHdyYXBbMV0gKyBlbGVtICsgd3JhcFsyXTsK
LQkJCQkKLQkJCQkvLyBNb3ZlIHRvIHRoZSByaWdodCBkZXB0aAotCQkJCXdoaWxlICggd3JhcFsw
XS0tICkKLQkJCQkJZGl2ID0gZGl2Lmxhc3RDaGlsZDsKLQkJCQkKLQkJCQkvLyBSZW1vdmUgSUUn
cyBhdXRvaW5zZXJ0ZWQgPHRib2R5PiBmcm9tIHRhYmxlIGZyYWdtZW50cwotCQkJCWlmICggalF1
ZXJ5LmJyb3dzZXIubXNpZSApIHsKLQkJCQkJCi0JCQkJCS8vIFN0cmluZyB3YXMgYSA8dGFibGU+
LCAqbWF5KiBoYXZlIHNwdXJpb3VzIDx0Ym9keT4KLQkJCQkJdmFyIHRib2R5ID0gIXRhZ3MuaW5k
ZXhPZigiPHRhYmxlIikgJiYgdGFncy5pbmRleE9mKCI8dGJvZHkiKSA8IDAgPwotCQkJCQkJZGl2
LmZpcnN0Q2hpbGQgJiYgZGl2LmZpcnN0Q2hpbGQuY2hpbGROb2RlcyA6Ci0JCQkJCQkKLQkJCQkJ
CS8vIFN0cmluZyB3YXMgYSBiYXJlIDx0aGVhZD4gb3IgPHRmb290PgotCQkJCQkJd3JhcFsxXSA9
PSAiPHRhYmxlPiIgJiYgdGFncy5pbmRleE9mKCI8dGJvZHkiKSA8IDAgPwotCQkJCQkJCWRpdi5j
aGlsZE5vZGVzIDoKLQkJCQkJCQlbXTsKLQkJCQkKLQkJCQkJZm9yICggdmFyIGogPSB0Ym9keS5s
ZW5ndGggLSAxOyBqID49IDAgOyAtLWogKQotCQkJCQkJaWYgKCBqUXVlcnkubm9kZU5hbWUoIHRi
b2R5WyBqIF0sICJ0Ym9keSIgKSAmJiAhdGJvZHlbIGogXS5jaGlsZE5vZGVzLmxlbmd0aCApCi0J
CQkJCQkJdGJvZHlbIGogXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCB0Ym9keVsgaiBdICk7Ci0J
CQkJCQotCQkJCQkvLyBJRSBjb21wbGV0ZWx5IGtpbGxzIGxlYWRpbmcgd2hpdGVzcGFjZSB3aGVu
IGlubmVySFRNTCBpcyB1c2VkCQotCQkJCQlpZiAoIC9eXHMvLnRlc3QoIGVsZW0gKSApCQotCQkJ
CQkJZGl2Lmluc2VydEJlZm9yZSggY29udGV4dC5jcmVhdGVUZXh0Tm9kZSggZWxlbS5tYXRjaCgv
XlxzKi8pWzBdICksIGRpdi5maXJzdENoaWxkICk7Ci0JCQkJCi0JCQkJfQotCQkJCQotCQkJCWVs
ZW0gPSBqUXVlcnkubWFrZUFycmF5KCBkaXYuY2hpbGROb2RlcyApOwotCQkJfQotCi0JCQlpZiAo
IGVsZW0ubGVuZ3RoID09PSAwICYmICghalF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiZm9ybSIgKSAm
JiAhalF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAic2VsZWN0IiApKSApCi0JCQkJcmV0dXJuOwotCi0J
CQlpZiAoIGVsZW1bMF0gPT0gdW5kZWZpbmVkIHx8IGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgImZv
cm0iICkgfHwgZWxlbS5vcHRpb25zICkKLQkJCQlyZXQucHVzaCggZWxlbSApOwotCi0JCQllbHNl
Ci0JCQkJcmV0ID0galF1ZXJ5Lm1lcmdlKCByZXQsIGVsZW0gKTsKLQotCQl9KTsKLQotCQlyZXR1
cm4gcmV0OwotCX0sCi0JCi0JYXR0cjogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkgewot
CQkvLyBkb24ndCBzZXQgYXR0cmlidXRlcyBvbiB0ZXh0IGFuZCBjb21tZW50IG5vZGVzCi0JCWlm
ICghZWxlbSB8fCBlbGVtLm5vZGVUeXBlID09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PSA4KQotCQkJ
cmV0dXJuIHVuZGVmaW5lZDsKLQotCQl2YXIgZml4ID0galF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkg
PwotCQkJe30gOgotCQkJalF1ZXJ5LnByb3BzOwotCi0JCS8vIFNhZmFyaSBtaXMtcmVwb3J0cyB0
aGUgZGVmYXVsdCBzZWxlY3RlZCBwcm9wZXJ0eSBvZiBhIGhpZGRlbiBvcHRpb24KLQkJLy8gQWNj
ZXNzaW5nIHRoZSBwYXJlbnQncyBzZWxlY3RlZEluZGV4IHByb3BlcnR5IGZpeGVzIGl0Ci0JCWlm
ICggbmFtZSA9PSAic2VsZWN0ZWQiICYmIGpRdWVyeS5icm93c2VyLnNhZmFyaSApCi0JCQllbGVt
LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDsKLQkJCi0JCS8vIENlcnRhaW4gYXR0cmlidXRlcyBv
bmx5IHdvcmsgd2hlbiBhY2Nlc3NlZCB2aWEgdGhlIG9sZCBET00gMCB3YXkKLQkJaWYgKCBmaXhb
IG5hbWUgXSApIHsKLQkJCWlmICggdmFsdWUgIT0gdW5kZWZpbmVkICkKLQkJCQllbGVtWyBmaXhb
IG5hbWUgXSBdID0gdmFsdWU7Ci0KLQkJCXJldHVybiBlbGVtWyBmaXhbIG5hbWUgXSBdOwotCi0J
CX0gZWxzZSBpZiAoIGpRdWVyeS5icm93c2VyLm1zaWUgJiYgbmFtZSA9PSAic3R5bGUiICkKLQkJ
CXJldHVybiBqUXVlcnkuYXR0ciggZWxlbS5zdHlsZSwgImNzc1RleHQiLCB2YWx1ZSApOwotCi0J
CWVsc2UgaWYgKCB2YWx1ZSA9PSB1bmRlZmluZWQgJiYgalF1ZXJ5LmJyb3dzZXIubXNpZSAmJiBq
UXVlcnkubm9kZU5hbWUoIGVsZW0sICJmb3JtIiApICYmIChuYW1lID09ICJhY3Rpb24iIHx8IG5h
bWUgPT0gIm1ldGhvZCIpICkKLQkJCXJldHVybiBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIG5hbWUg
KS5ub2RlVmFsdWU7Ci0KLQkJLy8gSUUgZWxlbS5nZXRBdHRyaWJ1dGUgcGFzc2VzIGV2ZW4gZm9y
IHN0eWxlCi0JCWVsc2UgaWYgKCBlbGVtLnRhZ05hbWUgKSB7Ci0KLQkJCWlmICggdmFsdWUgIT0g
dW5kZWZpbmVkICkgewotCQkJCS8vIFdlIGNhbid0IGFsbG93IHRoZSB0eXBlIHByb3BlcnR5IHRv
IGJlIGNoYW5nZWQgKHNpbmNlIGl0IGNhdXNlcyBwcm9ibGVtcyBpbiBJRSkKLQkJCQlpZiAoIG5h
bWUgPT0gInR5cGUiICYmIGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgImlucHV0IiApICYmIGVsZW0u
cGFyZW50Tm9kZSApCi0JCQkJCXRocm93ICJ0eXBlIHByb3BlcnR5IGNhbid0IGJlIGNoYW5nZWQi
OwotCi0JCQkJLy8gY29udmVydCB0aGUgdmFsdWUgdG8gYSBzdHJpbmcgKGFsbCBicm93c2VycyBk
byB0aGlzIGJ1dCBJRSkgc2VlICMxMDcwCi0JCQkJZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsICIi
ICsgdmFsdWUgKTsKLQkJCX0KLQotCQkJaWYgKCBqUXVlcnkuYnJvd3Nlci5tc2llICYmIC9ocmVm
fHNyYy8udGVzdCggbmFtZSApICYmICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIAotCQkJCXJl
dHVybiBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSwgMiApOwotCi0JCQlyZXR1cm4gZWxlbS5nZXRB
dHRyaWJ1dGUoIG5hbWUgKTsKLQotCQkvLyBlbGVtIGlzIGFjdHVhbGx5IGVsZW0uc3R5bGUgLi4u
IHNldCB0aGUgc3R5bGUKLQkJfSBlbHNlIHsKLQkJCS8vIElFIGFjdHVhbGx5IHVzZXMgZmlsdGVy
cyBmb3Igb3BhY2l0eQotCQkJaWYgKCBuYW1lID09ICJvcGFjaXR5IiAmJiBqUXVlcnkuYnJvd3Nl
ci5tc2llICkgewotCQkJCWlmICggdmFsdWUgIT0gdW5kZWZpbmVkICkgewotCQkJCQkvLyBJRSBo
YXMgdHJvdWJsZSB3aXRoIG9wYWNpdHkgaWYgaXQgZG9lcyBub3QgaGF2ZSBsYXlvdXQKLQkJCQkJ
Ly8gRm9yY2UgaXQgYnkgc2V0dGluZyB0aGUgem9vbSBsZXZlbAotCQkJCQllbGVtLnpvb20gPSAx
OyAKLQkKLQkJCQkJLy8gU2V0IHRoZSBhbHBoYSBmaWx0ZXIgdG8gc2V0IHRoZSBvcGFjaXR5Ci0J
CQkJCWVsZW0uZmlsdGVyID0gKGVsZW0uZmlsdGVyIHx8ICIiKS5yZXBsYWNlKCAvYWxwaGFcKFte
KV0qXCkvLCAiIiApICsKLQkJCQkJCShwYXJzZUZsb2F0KCB2YWx1ZSApLnRvU3RyaW5nKCkgPT0g
Ik5hTiIgPyAiIiA6ICJhbHBoYShvcGFjaXR5PSIgKyB2YWx1ZSAqIDEwMCArICIpIik7Ci0JCQkJ
fQotCQotCQkJCXJldHVybiBlbGVtLmZpbHRlciAmJiBlbGVtLmZpbHRlci5pbmRleE9mKCJvcGFj
aXR5PSIpID49IDAgPwotCQkJCQkocGFyc2VGbG9hdCggZWxlbS5maWx0ZXIubWF0Y2goL29wYWNp
dHk9KFteKV0qKS8pWzFdICkgLyAxMDApLnRvU3RyaW5nKCkgOgotCQkJCQkiIjsKLQkJCX0KLQot
CQkJbmFtZSA9IG5hbWUucmVwbGFjZSgvLShbYS16XSkvaWcsIGZ1bmN0aW9uKGFsbCwgbGV0dGVy
KXsKLQkJCQlyZXR1cm4gbGV0dGVyLnRvVXBwZXJDYXNlKCk7Ci0JCQl9KTsKLQotCQkJaWYgKCB2
YWx1ZSAhPSB1bmRlZmluZWQgKQotCQkJCWVsZW1bIG5hbWUgXSA9IHZhbHVlOwotCi0JCQlyZXR1
cm4gZWxlbVsgbmFtZSBdOwotCQl9Ci0JfSwKLQkKLQl0cmltOiBmdW5jdGlvbiggdGV4dCApIHsK
LQkJcmV0dXJuICh0ZXh0IHx8ICIiKS5yZXBsYWNlKCAvXlxzK3xccyskL2csICIiICk7Ci0JfSwK
LQotCW1ha2VBcnJheTogZnVuY3Rpb24oIGFycmF5ICkgewotCQl2YXIgcmV0ID0gW107Ci0KLQkJ
Ly8gTmVlZCB0byB1c2UgdHlwZW9mIHRvIGZpZ2h0IFNhZmFyaSBjaGlsZE5vZGVzIGNyYXNoZXMK
LQkJaWYgKCB0eXBlb2YgYXJyYXkgIT0gImFycmF5IiApCi0JCQlmb3IgKCB2YXIgaSA9IDAsIGxl
bmd0aCA9IGFycmF5Lmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrICkKLQkJCQlyZXQucHVzaCggYXJy
YXlbIGkgXSApOwotCQllbHNlCi0JCQlyZXQgPSBhcnJheS5zbGljZSggMCApOwotCi0JCXJldHVy
biByZXQ7Ci0JfSwKLQotCWluQXJyYXk6IGZ1bmN0aW9uKCBlbGVtLCBhcnJheSApIHsKLQkJZm9y
ICggdmFyIGkgPSAwLCBsZW5ndGggPSBhcnJheS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKyApCi0J
CQlpZiAoIGFycmF5WyBpIF0gPT0gZWxlbSApCi0JCQkJcmV0dXJuIGk7Ci0KLQkJcmV0dXJuIC0x
OwotCX0sCi0KLQltZXJnZTogZnVuY3Rpb24oIGZpcnN0LCBzZWNvbmQgKSB7Ci0JCS8vIFdlIGhh
dmUgdG8gbG9vcCB0aGlzIHdheSBiZWNhdXNlIElFICYgT3BlcmEgb3ZlcndyaXRlIHRoZSBsZW5n
dGgKLQkJLy8gZXhwYW5kbyBvZiBnZXRFbGVtZW50c0J5VGFnTmFtZQotCi0JCS8vIEFsc28sIHdl
IG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGNvcnJlY3QgZWxlbWVudHMgYXJlIGJlaW5nIHJl
dHVybmVkCi0JCS8vIChJRSByZXR1cm5zIGNvbW1lbnQgbm9kZXMgaW4gYSAnKicgcXVlcnkpCi0J
CWlmICggalF1ZXJ5LmJyb3dzZXIubXNpZSApIHsKLQkJCWZvciAoIHZhciBpID0gMDsgc2Vjb25k
WyBpIF07IGkrKyApCi0JCQkJaWYgKCBzZWNvbmRbIGkgXS5ub2RlVHlwZSAhPSA4ICkKLQkJCQkJ
Zmlyc3QucHVzaCggc2Vjb25kWyBpIF0gKTsKLQotCQl9IGVsc2UKLQkJCWZvciAoIHZhciBpID0g
MDsgc2Vjb25kWyBpIF07IGkrKyApCi0JCQkJZmlyc3QucHVzaCggc2Vjb25kWyBpIF0gKTsKLQot
CQlyZXR1cm4gZmlyc3Q7Ci0JfSwKLQotCXVuaXF1ZTogZnVuY3Rpb24oIGFycmF5ICkgewotCQl2
YXIgcmV0ID0gW10sIGRvbmUgPSB7fTsKLQotCQl0cnkgewotCi0JCQlmb3IgKCB2YXIgaSA9IDAs
IGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrICkgewotCQkJCXZhciBpZCA9
IGpRdWVyeS5kYXRhKCBhcnJheVsgaSBdICk7Ci0KLQkJCQlpZiAoICFkb25lWyBpZCBdICkgewot
CQkJCQlkb25lWyBpZCBdID0gdHJ1ZTsKLQkJCQkJcmV0LnB1c2goIGFycmF5WyBpIF0gKTsKLQkJ
CQl9Ci0JCQl9Ci0KLQkJfSBjYXRjaCggZSApIHsKLQkJCXJldCA9IGFycmF5OwotCQl9Ci0KLQkJ
cmV0dXJuIHJldDsKLQl9LAotCi0JZ3JlcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxsYmFjaywgaW52
ICkgewotCQl2YXIgcmV0ID0gW107Ci0KLQkJLy8gR28gdGhyb3VnaCB0aGUgYXJyYXksIG9ubHkg
c2F2aW5nIHRoZSBpdGVtcwotCQkvLyB0aGF0IHBhc3MgdGhlIHZhbGlkYXRvciBmdW5jdGlvbgot
CQlmb3IgKCB2YXIgaSA9IDAsIGxlbmd0aCA9IGVsZW1zLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsr
ICkKLQkJCWlmICggIWludiAmJiBjYWxsYmFjayggZWxlbXNbIGkgXSwgaSApIHx8IGludiAmJiAh
Y2FsbGJhY2soIGVsZW1zWyBpIF0sIGkgKSApCi0JCQkJcmV0LnB1c2goIGVsZW1zWyBpIF0gKTsK
LQotCQlyZXR1cm4gcmV0OwotCX0sCi0KLQltYXA6IGZ1bmN0aW9uKCBlbGVtcywgY2FsbGJhY2sg
KSB7Ci0JCXZhciByZXQgPSBbXTsKLQotCQkvLyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgdHJhbnNs
YXRpbmcgZWFjaCBvZiB0aGUgaXRlbXMgdG8gdGhlaXIKLQkJLy8gbmV3IHZhbHVlIChvciB2YWx1
ZXMpLgotCQlmb3IgKCB2YXIgaSA9IDAsIGxlbmd0aCA9IGVsZW1zLmxlbmd0aDsgaSA8IGxlbmd0
aDsgaSsrICkgewotCQkJdmFyIHZhbHVlID0gY2FsbGJhY2soIGVsZW1zWyBpIF0sIGkgKTsKLQot
CQkJaWYgKCB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPSB1bmRlZmluZWQgKSB7Ci0JCQkJaWYg
KCB2YWx1ZS5jb25zdHJ1Y3RvciAhPSBBcnJheSApCi0JCQkJCXZhbHVlID0gWyB2YWx1ZSBdOwot
Ci0JCQkJcmV0ID0gcmV0LmNvbmNhdCggdmFsdWUgKTsKLQkJCX0KLQkJfQotCi0JCXJldHVybiBy
ZXQ7Ci0JfQotfSk7Ci0KLXZhciB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93
ZXJDYXNlKCk7Ci0KLS8vIEZpZ3VyZSBvdXQgd2hhdCBicm93c2VyIGlzIGJlaW5nIHVzZWQKLWpR
dWVyeS5icm93c2VyID0gewotCXZlcnNpb246ICh1c2VyQWdlbnQubWF0Y2goIC8uKyg/OnJ2fGl0
fHJhfGllKVtcLzogXShbXGQuXSspLyApIHx8IFtdKVsxXSwKLQlzYWZhcmk6IC93ZWJraXQvLnRl
c3QoIHVzZXJBZ2VudCApLAotCW9wZXJhOiAvb3BlcmEvLnRlc3QoIHVzZXJBZ2VudCApLAotCW1z
aWU6IC9tc2llLy50ZXN0KCB1c2VyQWdlbnQgKSAmJiAhL29wZXJhLy50ZXN0KCB1c2VyQWdlbnQg
KSwKLQltb3ppbGxhOiAvbW96aWxsYS8udGVzdCggdXNlckFnZW50ICkgJiYgIS8oY29tcGF0aWJs
ZXx3ZWJraXQpLy50ZXN0KCB1c2VyQWdlbnQgKQotfTsKLQotdmFyIHN0eWxlRmxvYXQgPSBqUXVl
cnkuYnJvd3Nlci5tc2llID8KLQkic3R5bGVGbG9hdCIgOgotCSJjc3NGbG9hdCI7Ci0JCi1qUXVl
cnkuZXh0ZW5kKHsKLQkvLyBDaGVjayB0byBzZWUgaWYgdGhlIFczQyBib3ggbW9kZWwgaXMgYmVp
bmcgdXNlZAotCWJveE1vZGVsOiAhalF1ZXJ5LmJyb3dzZXIubXNpZSB8fCBkb2N1bWVudC5jb21w
YXRNb2RlID09ICJDU1MxQ29tcGF0IiwKLQkKLQlwcm9wczogewotCQkiZm9yIjogImh0bWxGb3Ii
LAotCQkiY2xhc3MiOiAiY2xhc3NOYW1lIiwKLQkJImZsb2F0Ijogc3R5bGVGbG9hdCwKLQkJY3Nz
RmxvYXQ6IHN0eWxlRmxvYXQsCi0JCXN0eWxlRmxvYXQ6IHN0eWxlRmxvYXQsCi0JCWlubmVySFRN
TDogImlubmVySFRNTCIsCi0JCWNsYXNzTmFtZTogImNsYXNzTmFtZSIsCi0JCXZhbHVlOiAidmFs
dWUiLAotCQlkaXNhYmxlZDogImRpc2FibGVkIiwKLQkJY2hlY2tlZDogImNoZWNrZWQiLAotCQly
ZWFkb25seTogInJlYWRPbmx5IiwKLQkJc2VsZWN0ZWQ6ICJzZWxlY3RlZCIsCi0JCW1heGxlbmd0
aDogIm1heExlbmd0aCIsCi0JCXNlbGVjdGVkSW5kZXg6ICJzZWxlY3RlZEluZGV4IiwKLQkJZGVm
YXVsdFZhbHVlOiAiZGVmYXVsdFZhbHVlIiwKLQkJdGFnTmFtZTogInRhZ05hbWUiLAotCQlub2Rl
TmFtZTogIm5vZGVOYW1lIgotCX0KLX0pOwotCi1qUXVlcnkuZWFjaCh7Ci0JcGFyZW50OiBmdW5j
dGlvbihlbGVtKXtyZXR1cm4gZWxlbS5wYXJlbnROb2RlO30sCi0JcGFyZW50czogZnVuY3Rpb24o
ZWxlbSl7cmV0dXJuIGpRdWVyeS5kaXIoZWxlbSwicGFyZW50Tm9kZSIpO30sCi0JbmV4dDogZnVu
Y3Rpb24oZWxlbSl7cmV0dXJuIGpRdWVyeS5udGgoZWxlbSwyLCJuZXh0U2libGluZyIpO30sCi0J
cHJldjogZnVuY3Rpb24oZWxlbSl7cmV0dXJuIGpRdWVyeS5udGgoZWxlbSwyLCJwcmV2aW91c1Np
YmxpbmciKTt9LAotCW5leHRBbGw6IGZ1bmN0aW9uKGVsZW0pe3JldHVybiBqUXVlcnkuZGlyKGVs
ZW0sIm5leHRTaWJsaW5nIik7fSwKLQlwcmV2QWxsOiBmdW5jdGlvbihlbGVtKXtyZXR1cm4galF1
ZXJ5LmRpcihlbGVtLCJwcmV2aW91c1NpYmxpbmciKTt9LAotCXNpYmxpbmdzOiBmdW5jdGlvbihl
bGVtKXtyZXR1cm4galF1ZXJ5LnNpYmxpbmcoZWxlbS5wYXJlbnROb2RlLmZpcnN0Q2hpbGQsZWxl
bSk7fSwKLQljaGlsZHJlbjogZnVuY3Rpb24oZWxlbSl7cmV0dXJuIGpRdWVyeS5zaWJsaW5nKGVs
ZW0uZmlyc3RDaGlsZCk7fSwKLQljb250ZW50czogZnVuY3Rpb24oZWxlbSl7cmV0dXJuIGpRdWVy
eS5ub2RlTmFtZShlbGVtLCJpZnJhbWUiKT9lbGVtLmNvbnRlbnREb2N1bWVudHx8ZWxlbS5jb250
ZW50V2luZG93LmRvY3VtZW50OmpRdWVyeS5tYWtlQXJyYXkoZWxlbS5jaGlsZE5vZGVzKTt9Ci19
LCBmdW5jdGlvbihuYW1lLCBmbil7Ci0JalF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc2Vs
ZWN0b3IgKSB7Ci0JCXZhciByZXQgPSBqUXVlcnkubWFwKCB0aGlzLCBmbiApOwotCi0JCWlmICgg
c2VsZWN0b3IgJiYgdHlwZW9mIHNlbGVjdG9yID09ICJzdHJpbmciICkKLQkJCXJldCA9IGpRdWVy
eS5tdWx0aUZpbHRlciggc2VsZWN0b3IsIHJldCApOwotCi0JCXJldHVybiB0aGlzLnB1c2hTdGFj
ayggalF1ZXJ5LnVuaXF1ZSggcmV0ICkgKTsKLQl9OwotfSk7Ci0KLWpRdWVyeS5lYWNoKHsKLQlh
cHBlbmRUbzogImFwcGVuZCIsCi0JcHJlcGVuZFRvOiAicHJlcGVuZCIsCi0JaW5zZXJ0QmVmb3Jl
OiAiYmVmb3JlIiwKLQlpbnNlcnRBZnRlcjogImFmdGVyIiwKLQlyZXBsYWNlQWxsOiAicmVwbGFj
ZVdpdGgiCi19LCBmdW5jdGlvbihuYW1lLCBvcmlnaW5hbCl7Ci0JalF1ZXJ5LmZuWyBuYW1lIF0g
PSBmdW5jdGlvbigpIHsKLQkJdmFyIGFyZ3MgPSBhcmd1bWVudHM7Ci0KLQkJcmV0dXJuIHRoaXMu
ZWFjaChmdW5jdGlvbigpewotCQkJZm9yICggdmFyIGkgPSAwLCBsZW5ndGggPSBhcmdzLmxlbmd0
aDsgaSA8IGxlbmd0aDsgaSsrICkKLQkJCQlqUXVlcnkoIGFyZ3NbIGkgXSApWyBvcmlnaW5hbCBd
KCB0aGlzICk7Ci0JCX0pOwotCX07Ci19KTsKLQotalF1ZXJ5LmVhY2goewotCXJlbW92ZUF0dHI6
IGZ1bmN0aW9uKCBuYW1lICkgewotCQlqUXVlcnkuYXR0ciggdGhpcywgbmFtZSwgIiIgKTsKLQkJ
aWYgKHRoaXMubm9kZVR5cGUgPT0gMSkgCi0JCQl0aGlzLnJlbW92ZUF0dHJpYnV0ZSggbmFtZSAp
OwotCX0sCi0KLQlhZGRDbGFzczogZnVuY3Rpb24oIGNsYXNzTmFtZXMgKSB7Ci0JCWpRdWVyeS5j
bGFzc05hbWUuYWRkKCB0aGlzLCBjbGFzc05hbWVzICk7Ci0JfSwKLQotCXJlbW92ZUNsYXNzOiBm
dW5jdGlvbiggY2xhc3NOYW1lcyApIHsKLQkJalF1ZXJ5LmNsYXNzTmFtZS5yZW1vdmUoIHRoaXMs
IGNsYXNzTmFtZXMgKTsKLQl9LAotCi0JdG9nZ2xlQ2xhc3M6IGZ1bmN0aW9uKCBjbGFzc05hbWVz
ICkgewotCQlqUXVlcnkuY2xhc3NOYW1lWyBqUXVlcnkuY2xhc3NOYW1lLmhhcyggdGhpcywgY2xh
c3NOYW1lcyApID8gInJlbW92ZSIgOiAiYWRkIiBdKCB0aGlzLCBjbGFzc05hbWVzICk7Ci0JfSwK
LQotCXJlbW92ZTogZnVuY3Rpb24oIHNlbGVjdG9yICkgewotCQlpZiAoICFzZWxlY3RvciB8fCBq
UXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgWyB0aGlzIF0gKS5yLmxlbmd0aCApIHsKLQkJCS8vIFBy
ZXZlbnQgbWVtb3J5IGxlYWtzCi0JCQlqUXVlcnkoICIqIiwgdGhpcyApLmFkZCh0aGlzKS5lYWNo
KGZ1bmN0aW9uKCl7Ci0JCQkJalF1ZXJ5LmV2ZW50LnJlbW92ZSh0aGlzKTsKLQkJCQlqUXVlcnku
cmVtb3ZlRGF0YSh0aGlzKTsKLQkJCX0pOwotCQkJaWYgKHRoaXMucGFyZW50Tm9kZSkKLQkJCQl0
aGlzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIHRoaXMgKTsKLQkJfQotCX0sCi0KLQllbXB0eTog
ZnVuY3Rpb24oKSB7Ci0JCS8vIFJlbW92ZSBlbGVtZW50IG5vZGVzIGFuZCBwcmV2ZW50IG1lbW9y
eSBsZWFrcwotCQlqUXVlcnkoICI+KiIsIHRoaXMgKS5yZW1vdmUoKTsKLQkJCi0JCS8vIFJlbW92
ZSBhbnkgcmVtYWluaW5nIG5vZGVzCi0JCXdoaWxlICggdGhpcy5maXJzdENoaWxkICkKLQkJCXRo
aXMucmVtb3ZlQ2hpbGQoIHRoaXMuZmlyc3RDaGlsZCApOwotCX0KLX0sIGZ1bmN0aW9uKG5hbWUs
IGZuKXsKLQlqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCl7Ci0JCXJldHVybiB0aGlzLmVh
Y2goIGZuLCBhcmd1bWVudHMgKTsKLQl9OwotfSk7Ci0KLWpRdWVyeS5lYWNoKFsgIkhlaWdodCIs
ICJXaWR0aCIgXSwgZnVuY3Rpb24oaSwgbmFtZSl7Ci0JdmFyIHR5cGUgPSBuYW1lLnRvTG93ZXJD
YXNlKCk7Ci0JCi0JalF1ZXJ5LmZuWyB0eXBlIF0gPSBmdW5jdGlvbiggc2l6ZSApIHsKLQkJLy8g
R2V0IHdpbmRvdyB3aWR0aCBvciBoZWlnaHQKLQkJcmV0dXJuIHRoaXNbMF0gPT0gd2luZG93ID8K
LQkJCS8vIE9wZXJhIHJlcG9ydHMgZG9jdW1lbnQuYm9keS5jbGllbnRbV2lkdGgvSGVpZ2h0XSBw
cm9wZXJseSBpbiBib3RoIHF1aXJrcyBhbmQgc3RhbmRhcmRzCi0JCQlqUXVlcnkuYnJvd3Nlci5v
cGVyYSAmJiBkb2N1bWVudC5ib2R5WyAiY2xpZW50IiArIG5hbWUgXSB8fCAKLQkJCQotCQkJLy8g
U2FmYXJpIHJlcG9ydHMgaW5uZXJbV2lkdGgvSGVpZ2h0XSBqdXN0IGZpbmUgKE1vemlsbGEgYW5k
IE9wZXJhIGluY2x1ZGUgc2Nyb2xsIGJhciB3aWR0aHMpCi0JCQlqUXVlcnkuYnJvd3Nlci5zYWZh
cmkgJiYgd2luZG93WyAiaW5uZXIiICsgbmFtZSBdIHx8Ci0JCQkKLQkJCS8vIEV2ZXJ5b25lIGVs
c2UgdXNlIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCBvciBkb2N1bWVudC5ib2R5IGRlcGVuZGlu
ZyBvbiBRdWlya3MgdnMgU3RhbmRhcmRzIG1vZGUKLQkJCWRvY3VtZW50LmNvbXBhdE1vZGUgPT0g
IkNTUzFDb21wYXQiICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsgImNsaWVudCIgKyBuYW1l
IF0gfHwgZG9jdW1lbnQuYm9keVsgImNsaWVudCIgKyBuYW1lIF0gOgotCQkKLQkJCS8vIEdldCBk
b2N1bWVudCB3aWR0aCBvciBoZWlnaHQKLQkJCXRoaXNbMF0gPT0gZG9jdW1lbnQgPwotCQkJCS8v
IEVpdGhlciBzY3JvbGxbV2lkdGgvSGVpZ2h0XSBvciBvZmZzZXRbV2lkdGgvSGVpZ2h0XSwgd2hp
Y2hldmVyIGlzIGdyZWF0ZXIKLQkJCQlNYXRoLm1heCggCi0JCQkJCU1hdGgubWF4KGRvY3VtZW50
LmJvZHlbInNjcm9sbCIgKyBuYW1lXSwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyJzY3JvbGwi
ICsgbmFtZV0pLCAKLQkJCQkJTWF0aC5tYXgoZG9jdW1lbnQuYm9keVsib2Zmc2V0IiArIG5hbWVd
LCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbIm9mZnNldCIgKyBuYW1lXSkgCi0JCQkJKSA6Ci0K
LQkJCQkvLyBHZXQgb3Igc2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudAotCQkJCXNp
emUgPT0gdW5kZWZpbmVkID8KLQkJCQkJLy8gR2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxl
bWVudAotCQkJCQkodGhpcy5sZW5ndGggPyBqUXVlcnkuY3NzKCB0aGlzWzBdLCB0eXBlICkgOiBu
dWxsKSA6Ci0KLQkJCQkJLy8gU2V0IHRoZSB3aWR0aCBvciBoZWlnaHQgb24gdGhlIGVsZW1lbnQg
KGRlZmF1bHQgdG8gcGl4ZWxzIGlmIHZhbHVlIGlzIHVuaXRsZXNzKQotCQkJCQl0aGlzLmNzcygg
dHlwZSwgc2l6ZS5jb25zdHJ1Y3RvciA9PSBTdHJpbmcgPyBzaXplIDogc2l6ZSArICJweCIgKTsK
LQl9OwotfSk7Ci0KLXZhciBjaGFycyA9IGpRdWVyeS5icm93c2VyLnNhZmFyaSAmJiBwYXJzZUlu
dChqUXVlcnkuYnJvd3Nlci52ZXJzaW9uKSA8IDQxNyA/Ci0JCSIoPzpbXFx3Kl8tXXxcXFxcLiki
IDoKLQkJIig/OltcXHdcdTAxMjgtXHVGRkZGKl8tXXxcXFxcLikiLAotCXF1aWNrQ2hpbGQgPSBu
ZXcgUmVnRXhwKCJePlxccyooIiArIGNoYXJzICsgIispIiksCi0JcXVpY2tJRCA9IG5ldyBSZWdF
eHAoIl4oIiArIGNoYXJzICsgIispKCMpKCIgKyBjaGFycyArICIrKSIpLAotCXF1aWNrQ2xhc3Mg
PSBuZXcgUmVnRXhwKCJeKFsjLl0/KSgiICsgY2hhcnMgKyAiKikiKTsKLQotalF1ZXJ5LmV4dGVu
ZCh7Ci0JZXhwcjogewotCQkiIjogZnVuY3Rpb24oYSxpLG0pe3JldHVybiBtWzJdPT0iKiJ8fGpR
dWVyeS5ub2RlTmFtZShhLG1bMl0pO30sCi0JCSIjIjogZnVuY3Rpb24oYSxpLG0pe3JldHVybiBh
LmdldEF0dHJpYnV0ZSgiaWQiKT09bVsyXTt9LAotCQkiOiI6IHsKLQkJCS8vIFBvc2l0aW9uIENo
ZWNrcwotCQkJbHQ6IGZ1bmN0aW9uKGEsaSxtKXtyZXR1cm4gaTxtWzNdLTA7fSwKLQkJCWd0OiBm
dW5jdGlvbihhLGksbSl7cmV0dXJuIGk+bVszXS0wO30sCi0JCQludGg6IGZ1bmN0aW9uKGEsaSxt
KXtyZXR1cm4gbVszXS0wPT1pO30sCi0JCQllcTogZnVuY3Rpb24oYSxpLG0pe3JldHVybiBtWzNd
LTA9PWk7fSwKLQkJCWZpcnN0OiBmdW5jdGlvbihhLGkpe3JldHVybiBpPT0wO30sCi0JCQlsYXN0
OiBmdW5jdGlvbihhLGksbSxyKXtyZXR1cm4gaT09ci5sZW5ndGgtMTt9LAotCQkJZXZlbjogZnVu
Y3Rpb24oYSxpKXtyZXR1cm4gaSUyPT0wO30sCi0JCQlvZGQ6IGZ1bmN0aW9uKGEsaSl7cmV0dXJu
IGklMjt9LAotCi0JCQkvLyBDaGlsZCBDaGVja3MKLQkJCSJmaXJzdC1jaGlsZCI6IGZ1bmN0aW9u
KGEpe3JldHVybiBhLnBhcmVudE5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKVswXT09YTt9
LAotCQkJImxhc3QtY2hpbGQiOiBmdW5jdGlvbihhKXtyZXR1cm4galF1ZXJ5Lm50aChhLnBhcmVu
dE5vZGUubGFzdENoaWxkLDEsInByZXZpb3VzU2libGluZyIpPT1hO30sCi0JCQkib25seS1jaGls
ZCI6IGZ1bmN0aW9uKGEpe3JldHVybiAhalF1ZXJ5Lm50aChhLnBhcmVudE5vZGUubGFzdENoaWxk
LDIsInByZXZpb3VzU2libGluZyIpO30sCi0KLQkJCS8vIFBhcmVudCBDaGVja3MKLQkJCXBhcmVu
dDogZnVuY3Rpb24oYSl7cmV0dXJuIGEuZmlyc3RDaGlsZDt9LAotCQkJZW1wdHk6IGZ1bmN0aW9u
KGEpe3JldHVybiAhYS5maXJzdENoaWxkO30sCi0KLQkJCS8vIFRleHQgQ2hlY2sKLQkJCWNvbnRh
aW5zOiBmdW5jdGlvbihhLGksbSl7cmV0dXJuIChhLnRleHRDb250ZW50fHxhLmlubmVyVGV4dHx8
alF1ZXJ5KGEpLnRleHQoKXx8IiIpLmluZGV4T2YobVszXSk+PTA7fSwKLQotCQkJLy8gVmlzaWJp
bGl0eQotCQkJdmlzaWJsZTogZnVuY3Rpb24oYSl7cmV0dXJuICJoaWRkZW4iIT1hLnR5cGUmJmpR
dWVyeS5jc3MoYSwiZGlzcGxheSIpIT0ibm9uZSImJmpRdWVyeS5jc3MoYSwidmlzaWJpbGl0eSIp
IT0iaGlkZGVuIjt9LAotCQkJaGlkZGVuOiBmdW5jdGlvbihhKXtyZXR1cm4gImhpZGRlbiI9PWEu
dHlwZXx8alF1ZXJ5LmNzcyhhLCJkaXNwbGF5Iik9PSJub25lInx8alF1ZXJ5LmNzcyhhLCJ2aXNp
YmlsaXR5Iik9PSJoaWRkZW4iO30sCi0KLQkJCS8vIEZvcm0gYXR0cmlidXRlcwotCQkJZW5hYmxl
ZDogZnVuY3Rpb24oYSl7cmV0dXJuICFhLmRpc2FibGVkO30sCi0JCQlkaXNhYmxlZDogZnVuY3Rp
b24oYSl7cmV0dXJuIGEuZGlzYWJsZWQ7fSwKLQkJCWNoZWNrZWQ6IGZ1bmN0aW9uKGEpe3JldHVy
biBhLmNoZWNrZWQ7fSwKLQkJCXNlbGVjdGVkOiBmdW5jdGlvbihhKXtyZXR1cm4gYS5zZWxlY3Rl
ZHx8alF1ZXJ5LmF0dHIoYSwic2VsZWN0ZWQiKTt9LAotCi0JCQkvLyBGb3JtIGVsZW1lbnRzCi0J
CQl0ZXh0OiBmdW5jdGlvbihhKXtyZXR1cm4gInRleHQiPT1hLnR5cGU7fSwKLQkJCXJhZGlvOiBm
dW5jdGlvbihhKXtyZXR1cm4gInJhZGlvIj09YS50eXBlO30sCi0JCQljaGVja2JveDogZnVuY3Rp
b24oYSl7cmV0dXJuICJjaGVja2JveCI9PWEudHlwZTt9LAotCQkJZmlsZTogZnVuY3Rpb24oYSl7
cmV0dXJuICJmaWxlIj09YS50eXBlO30sCi0JCQlwYXNzd29yZDogZnVuY3Rpb24oYSl7cmV0dXJu
ICJwYXNzd29yZCI9PWEudHlwZTt9LAotCQkJc3VibWl0OiBmdW5jdGlvbihhKXtyZXR1cm4gInN1
Ym1pdCI9PWEudHlwZTt9LAotCQkJaW1hZ2U6IGZ1bmN0aW9uKGEpe3JldHVybiAiaW1hZ2UiPT1h
LnR5cGU7fSwKLQkJCXJlc2V0OiBmdW5jdGlvbihhKXtyZXR1cm4gInJlc2V0Ij09YS50eXBlO30s
Ci0JCQlidXR0b246IGZ1bmN0aW9uKGEpe3JldHVybiAiYnV0dG9uIj09YS50eXBlfHxqUXVlcnku
bm9kZU5hbWUoYSwiYnV0dG9uIik7fSwKLQkJCWlucHV0OiBmdW5jdGlvbihhKXtyZXR1cm4gL2lu
cHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24vaS50ZXN0KGEubm9kZU5hbWUpO30sCi0KLQkJCS8v
IDpoYXMoKQotCQkJaGFzOiBmdW5jdGlvbihhLGksbSl7cmV0dXJuIGpRdWVyeS5maW5kKG1bM10s
YSkubGVuZ3RoO30sCi0KLQkJCS8vIDpoZWFkZXIKLQkJCWhlYWRlcjogZnVuY3Rpb24oYSl7cmV0
dXJuIC9oXGQvaS50ZXN0KGEubm9kZU5hbWUpO30sCi0KLQkJCS8vIDphbmltYXRlZAotCQkJYW5p
bWF0ZWQ6IGZ1bmN0aW9uKGEpe3JldHVybiBqUXVlcnkuZ3JlcChqUXVlcnkudGltZXJzLGZ1bmN0
aW9uKGZuKXtyZXR1cm4gYT09Zm4uZWxlbTt9KS5sZW5ndGg7fQotCQl9Ci0JfSwKLQkKLQkvLyBU
aGUgcmVndWxhciBleHByZXNzaW9ucyB0aGF0IHBvd2VyIHRoZSBwYXJzaW5nIGVuZ2luZQotCXBh
cnNlOiBbCi0JCS8vIE1hdGNoOiBbQHZhbHVlPSd0ZXN0J10sIFtAZm9vXQotCQkvXihcWykgKkA/
KFtcdy1dKykgKihbISokXn49XSopICooJz8iPykoLio/KVw0ICpcXS8sCi0KLQkJLy8gTWF0Y2g6
IDpjb250YWlucygnZm9vJykKLQkJL14oOikoW1x3LV0rKVwoIj8nPyguKj8oXCguKj9cKSk/W14o
XSo/KSI/Jz9cKS8sCi0KLQkJLy8gTWF0Y2g6IDpldmVuLCA6bGFzdC1jaGxpZCwgI2lkLCAuY2xh
c3MKLQkJbmV3IFJlZ0V4cCgiXihbOi4jXSopKCIgKyBjaGFycyArICIrKSIpCi0JXSwKLQotCW11
bHRpRmlsdGVyOiBmdW5jdGlvbiggZXhwciwgZWxlbXMsIG5vdCApIHsKLQkJdmFyIG9sZCwgY3Vy
ID0gW107Ci0KLQkJd2hpbGUgKCBleHByICYmIGV4cHIgIT0gb2xkICkgewotCQkJb2xkID0gZXhw
cjsKLQkJCXZhciBmID0galF1ZXJ5LmZpbHRlciggZXhwciwgZWxlbXMsIG5vdCApOwotCQkJZXhw
ciA9IGYudC5yZXBsYWNlKC9eXHMqLFxzKi8sICIiICk7Ci0JCQljdXIgPSBub3QgPyBlbGVtcyA9
IGYuciA6IGpRdWVyeS5tZXJnZSggY3VyLCBmLnIgKTsKLQkJfQotCi0JCXJldHVybiBjdXI7Ci0J
fSwKLQotCWZpbmQ6IGZ1bmN0aW9uKCB0LCBjb250ZXh0ICkgewotCQkvLyBRdWlja2x5IGhhbmRs
ZSBub24tc3RyaW5nIGV4cHJlc3Npb25zCi0JCWlmICggdHlwZW9mIHQgIT0gInN0cmluZyIgKQot
CQkJcmV0dXJuIFsgdCBdOwotCi0JCS8vIGNoZWNrIHRvIG1ha2Ugc3VyZSBjb250ZXh0IGlzIGEg
RE9NIGVsZW1lbnQgb3IgYSBkb2N1bWVudAotCQlpZiAoIGNvbnRleHQgJiYgY29udGV4dC5ub2Rl
VHlwZSAhPSAxICYmIGNvbnRleHQubm9kZVR5cGUgIT0gOSkKLQkJCXJldHVybiBbIF07Ci0KLQkJ
Ly8gU2V0IHRoZSBjb3JyZWN0IGNvbnRleHQgKGlmIG5vbmUgaXMgcHJvdmlkZWQpCi0JCWNvbnRl
eHQgPSBjb250ZXh0IHx8IGRvY3VtZW50OwotCi0JCS8vIEluaXRpYWxpemUgdGhlIHNlYXJjaAot
CQl2YXIgcmV0ID0gW2NvbnRleHRdLCBkb25lID0gW10sIGxhc3QsIG5vZGVOYW1lOwotCi0JCS8v
IENvbnRpbnVlIHdoaWxlIGEgc2VsZWN0b3IgZXhwcmVzc2lvbiBleGlzdHMsIGFuZCB3aGlsZQot
CQkvLyB3ZSdyZSBubyBsb25nZXIgbG9vcGluZyB1cG9uIG91cnNlbHZlcwotCQl3aGlsZSAoIHQg
JiYgbGFzdCAhPSB0ICkgewotCQkJdmFyIHIgPSBbXTsKLQkJCWxhc3QgPSB0OwotCi0JCQl0ID0g
alF1ZXJ5LnRyaW0odCk7Ci0KLQkJCXZhciBmb3VuZFRva2VuID0gZmFsc2U7Ci0KLQkJCS8vIEFu
IGF0dGVtcHQgYXQgc3BlZWRpbmcgdXAgY2hpbGQgc2VsZWN0b3JzIHRoYXQKLQkJCS8vIHBvaW50
IHRvIGEgc3BlY2lmaWMgZWxlbWVudCB0YWcKLQkJCXZhciByZSA9IHF1aWNrQ2hpbGQ7Ci0JCQl2
YXIgbSA9IHJlLmV4ZWModCk7Ci0KLQkJCWlmICggbSApIHsKLQkJCQlub2RlTmFtZSA9IG1bMV0u
dG9VcHBlckNhc2UoKTsKLQotCQkJCS8vIFBlcmZvcm0gb3VyIG93biBpdGVyYXRpb24gYW5kIGZp
bHRlcgotCQkJCWZvciAoIHZhciBpID0gMDsgcmV0W2ldOyBpKysgKQotCQkJCQlmb3IgKCB2YXIg
YyA9IHJldFtpXS5maXJzdENoaWxkOyBjOyBjID0gYy5uZXh0U2libGluZyApCi0JCQkJCQlpZiAo
IGMubm9kZVR5cGUgPT0gMSAmJiAobm9kZU5hbWUgPT0gIioiIHx8IGMubm9kZU5hbWUudG9VcHBl
ckNhc2UoKSA9PSBub2RlTmFtZSkgKQotCQkJCQkJCXIucHVzaCggYyApOwotCi0JCQkJcmV0ID0g
cjsKLQkJCQl0ID0gdC5yZXBsYWNlKCByZSwgIiIgKTsKLQkJCQlpZiAoIHQuaW5kZXhPZigiICIp
ID09IDAgKSBjb250aW51ZTsKLQkJCQlmb3VuZFRva2VuID0gdHJ1ZTsKLQkJCX0gZWxzZSB7Ci0J
CQkJcmUgPSAvXihbPit+XSlccyooXHcqKS9pOwotCi0JCQkJaWYgKCAobSA9IHJlLmV4ZWModCkp
ICE9IG51bGwgKSB7Ci0JCQkJCXIgPSBbXTsKLQotCQkJCQl2YXIgbWVyZ2UgPSB7fTsKLQkJCQkJ
bm9kZU5hbWUgPSBtWzJdLnRvVXBwZXJDYXNlKCk7Ci0JCQkJCW0gPSBtWzFdOwotCi0JCQkJCWZv
ciAoIHZhciBqID0gMCwgcmwgPSByZXQubGVuZ3RoOyBqIDwgcmw7IGorKyApIHsKLQkJCQkJCXZh
ciBuID0gbSA9PSAifiIgfHwgbSA9PSAiKyIgPyByZXRbal0ubmV4dFNpYmxpbmcgOiByZXRbal0u
Zmlyc3RDaGlsZDsKLQkJCQkJCWZvciAoIDsgbjsgbiA9IG4ubmV4dFNpYmxpbmcgKQotCQkJCQkJ
CWlmICggbi5ub2RlVHlwZSA9PSAxICkgewotCQkJCQkJCQl2YXIgaWQgPSBqUXVlcnkuZGF0YShu
KTsKLQotCQkJCQkJCQlpZiAoIG0gPT0gIn4iICYmIG1lcmdlW2lkXSApIGJyZWFrOwotCQkJCQkJ
CQkKLQkJCQkJCQkJaWYgKCFub2RlTmFtZSB8fCBuLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCkgPT0g
bm9kZU5hbWUgKSB7Ci0JCQkJCQkJCQlpZiAoIG0gPT0gIn4iICkgbWVyZ2VbaWRdID0gdHJ1ZTsK
LQkJCQkJCQkJCXIucHVzaCggbiApOwotCQkJCQkJCQl9Ci0JCQkJCQkJCQotCQkJCQkJCQlpZiAo
IG0gPT0gIisiICkgYnJlYWs7Ci0JCQkJCQkJfQotCQkJCQl9Ci0KLQkJCQkJcmV0ID0gcjsKLQot
CQkJCQkvLyBBbmQgcmVtb3ZlIHRoZSB0b2tlbgotCQkJCQl0ID0galF1ZXJ5LnRyaW0oIHQucmVw
bGFjZSggcmUsICIiICkgKTsKLQkJCQkJZm91bmRUb2tlbiA9IHRydWU7Ci0JCQkJfQotCQkJfQot
Ci0JCQkvLyBTZWUgaWYgdGhlcmUncyBzdGlsbCBhbiBleHByZXNzaW9uLCBhbmQgdGhhdCB3ZSBo
YXZlbid0IGFscmVhZHkKLQkJCS8vIG1hdGNoZWQgYSB0b2tlbgotCQkJaWYgKCB0ICYmICFmb3Vu
ZFRva2VuICkgewotCQkJCS8vIEhhbmRsZSBtdWx0aXBsZSBleHByZXNzaW9ucwotCQkJCWlmICgg
IXQuaW5kZXhPZigiLCIpICkgewotCQkJCQkvLyBDbGVhbiB0aGUgcmVzdWx0IHNldAotCQkJCQlp
ZiAoIGNvbnRleHQgPT0gcmV0WzBdICkgcmV0LnNoaWZ0KCk7Ci0KLQkJCQkJLy8gTWVyZ2UgdGhl
IHJlc3VsdCBzZXRzCi0JCQkJCWRvbmUgPSBqUXVlcnkubWVyZ2UoIGRvbmUsIHJldCApOwotCi0J
CQkJCS8vIFJlc2V0IHRoZSBjb250ZXh0Ci0JCQkJCXIgPSByZXQgPSBbY29udGV4dF07Ci0KLQkJ
CQkJLy8gVG91Y2ggdXAgdGhlIHNlbGVjdG9yIHN0cmluZwotCQkJCQl0ID0gIiAiICsgdC5zdWJz
dHIoMSx0Lmxlbmd0aCk7Ci0KLQkJCQl9IGVsc2UgewotCQkJCQkvLyBPcHRpbWl6ZSBmb3IgdGhl
IGNhc2Ugbm9kZU5hbWUjaWROYW1lCi0JCQkJCXZhciByZTIgPSBxdWlja0lEOwotCQkJCQl2YXIg
bSA9IHJlMi5leGVjKHQpOwotCQkJCQkKLQkJCQkJLy8gUmUtb3JnYW5pemUgdGhlIHJlc3VsdHMs
IHNvIHRoYXQgdGhleSdyZSBjb25zaXN0ZW50Ci0JCQkJCWlmICggbSApIHsKLQkJCQkJCW0gPSBb
IDAsIG1bMl0sIG1bM10sIG1bMV0gXTsKLQotCQkJCQl9IGVsc2UgewotCQkJCQkJLy8gT3RoZXJ3
aXNlLCBkbyBhIHRyYWRpdGlvbmFsIGZpbHRlciBjaGVjayBmb3IKLQkJCQkJCS8vIElELCBjbGFz
cywgYW5kIGVsZW1lbnQgc2VsZWN0b3JzCi0JCQkJCQlyZTIgPSBxdWlja0NsYXNzOwotCQkJCQkJ
bSA9IHJlMi5leGVjKHQpOwotCQkJCQl9Ci0KLQkJCQkJbVsyXSA9IG1bMl0ucmVwbGFjZSgvXFwv
ZywgIiIpOwotCi0JCQkJCXZhciBlbGVtID0gcmV0W3JldC5sZW5ndGgtMV07Ci0KLQkJCQkJLy8g
VHJ5IHRvIGRvIGEgZ2xvYmFsIHNlYXJjaCBieSBJRCwgd2hlcmUgd2UgY2FuCi0JCQkJCWlmICgg
bVsxXSA9PSAiIyIgJiYgZWxlbSAmJiBlbGVtLmdldEVsZW1lbnRCeUlkICYmICFqUXVlcnkuaXNY
TUxEb2MoZWxlbSkgKSB7Ci0JCQkJCQkvLyBPcHRpbWl6YXRpb24gZm9yIEhUTUwgZG9jdW1lbnQg
Y2FzZQotCQkJCQkJdmFyIG9pZCA9IGVsZW0uZ2V0RWxlbWVudEJ5SWQobVsyXSk7Ci0JCQkJCQkK
LQkJCQkJCS8vIERvIGEgcXVpY2sgY2hlY2sgZm9yIHRoZSBleGlzdGVuY2Ugb2YgdGhlIGFjdHVh
bCBJRCBhdHRyaWJ1dGUKLQkJCQkJCS8vIHRvIGF2b2lkIHNlbGVjdGluZyBieSB0aGUgbmFtZSBh
dHRyaWJ1dGUgaW4gSUUKLQkJCQkJCS8vIGFsc28gY2hlY2sgdG8gaW5zdXJlIGlkIGlzIGEgc3Ry
aW5nIHRvIGF2b2lkIHNlbGVjdGluZyBhbiBlbGVtZW50IHdpdGggdGhlIG5hbWUgb2YgJ2lkJyBp
bnNpZGUgYSBmb3JtCi0JCQkJCQlpZiAoIChqUXVlcnkuYnJvd3Nlci5tc2llfHxqUXVlcnkuYnJv
d3Nlci5vcGVyYSkgJiYgb2lkICYmIHR5cGVvZiBvaWQuaWQgPT0gInN0cmluZyIgJiYgb2lkLmlk
ICE9IG1bMl0gKQotCQkJCQkJCW9pZCA9IGpRdWVyeSgnW0BpZD0iJyttWzJdKyciXScsIGVsZW0p
WzBdOwotCi0JCQkJCQkvLyBEbyBhIHF1aWNrIGNoZWNrIGZvciBub2RlIG5hbWUgKHdoZXJlIGFw
cGxpY2FibGUpIHNvCi0JCQkJCQkvLyB0aGF0IGRpdiNmb28gc2VhcmNoZXMgd2lsbCBiZSByZWFs
bHkgZmFzdAotCQkJCQkJcmV0ID0gciA9IG9pZCAmJiAoIW1bM10gfHwgalF1ZXJ5Lm5vZGVOYW1l
KG9pZCwgbVszXSkpID8gW29pZF0gOiBbXTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCS8vIFdlIG5l
ZWQgdG8gZmluZCBhbGwgZGVzY2VuZGFudCBlbGVtZW50cwotCQkJCQkJZm9yICggdmFyIGkgPSAw
OyByZXRbaV07IGkrKyApIHsKLQkJCQkJCQkvLyBHcmFiIHRoZSB0YWcgbmFtZSBiZWluZyBzZWFy
Y2hlZCBmb3IKLQkJCQkJCQl2YXIgdGFnID0gbVsxXSA9PSAiIyIgJiYgbVszXSA/IG1bM10gOiBt
WzFdICE9ICIiIHx8IG1bMF0gPT0gIiIgPyAiKiIgOiBtWzJdOwotCi0JCQkJCQkJLy8gSGFuZGxl
IElFNyBiZWluZyByZWFsbHkgZHVtYiBhYm91dCA8b2JqZWN0PnMKLQkJCQkJCQlpZiAoIHRhZyA9
PSAiKiIgJiYgcmV0W2ldLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT0gIm9iamVjdCIgKQotCQkJ
CQkJCQl0YWcgPSAicGFyYW0iOwotCi0JCQkJCQkJciA9IGpRdWVyeS5tZXJnZSggciwgcmV0W2ld
LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgKSk7Ci0JCQkJCQl9Ci0KLQkJCQkJCS8vIEl0J3Mg
ZmFzdGVyIHRvIGZpbHRlciBieSBjbGFzcyBhbmQgYmUgZG9uZSB3aXRoIGl0Ci0JCQkJCQlpZiAo
IG1bMV0gPT0gIi4iICkKLQkJCQkJCQlyID0galF1ZXJ5LmNsYXNzRmlsdGVyKCByLCBtWzJdICk7
Ci0KLQkJCQkJCS8vIFNhbWUgd2l0aCBJRCBmaWx0ZXJpbmcKLQkJCQkJCWlmICggbVsxXSA9PSAi
IyIgKSB7Ci0JCQkJCQkJdmFyIHRtcCA9IFtdOwotCi0JCQkJCQkJLy8gVHJ5IHRvIGZpbmQgdGhl
IGVsZW1lbnQgd2l0aCB0aGUgSUQKLQkJCQkJCQlmb3IgKCB2YXIgaSA9IDA7IHJbaV07IGkrKyAp
Ci0JCQkJCQkJCWlmICggcltpXS5nZXRBdHRyaWJ1dGUoImlkIikgPT0gbVsyXSApIHsKLQkJCQkJ
CQkJCXRtcCA9IFsgcltpXSBdOwotCQkJCQkJCQkJYnJlYWs7Ci0JCQkJCQkJCX0KLQotCQkJCQkJ
CXIgPSB0bXA7Ci0JCQkJCQl9Ci0KLQkJCQkJCXJldCA9IHI7Ci0JCQkJCX0KLQotCQkJCQl0ID0g
dC5yZXBsYWNlKCByZTIsICIiICk7Ci0JCQkJfQotCi0JCQl9Ci0KLQkJCS8vIElmIGEgc2VsZWN0
b3Igc3RyaW5nIHN0aWxsIGV4aXN0cwotCQkJaWYgKCB0ICkgewotCQkJCS8vIEF0dGVtcHQgdG8g
ZmlsdGVyIGl0Ci0JCQkJdmFyIHZhbCA9IGpRdWVyeS5maWx0ZXIodCxyKTsKLQkJCQlyZXQgPSBy
ID0gdmFsLnI7Ci0JCQkJdCA9IGpRdWVyeS50cmltKHZhbC50KTsKLQkJCX0KLQkJfQotCi0JCS8v
IEFuIGVycm9yIG9jY3VycmVkIHdpdGggdGhlIHNlbGVjdG9yOwotCQkvLyBqdXN0IHJldHVybiBh
biBlbXB0eSBzZXQgaW5zdGVhZAotCQlpZiAoIHQgKQotCQkJcmV0ID0gW107Ci0KLQkJLy8gUmVt
b3ZlIHRoZSByb290IGNvbnRleHQKLQkJaWYgKCByZXQgJiYgY29udGV4dCA9PSByZXRbMF0gKQot
CQkJcmV0LnNoaWZ0KCk7Ci0KLQkJLy8gQW5kIGNvbWJpbmUgdGhlIHJlc3VsdHMKLQkJZG9uZSA9
IGpRdWVyeS5tZXJnZSggZG9uZSwgcmV0ICk7Ci0KLQkJcmV0dXJuIGRvbmU7Ci0JfSwKLQotCWNs
YXNzRmlsdGVyOiBmdW5jdGlvbihyLG0sbm90KXsKLQkJbSA9ICIgIiArIG0gKyAiICI7Ci0JCXZh
ciB0bXAgPSBbXTsKLQkJZm9yICggdmFyIGkgPSAwOyByW2ldOyBpKysgKSB7Ci0JCQl2YXIgcGFz
cyA9ICgiICIgKyByW2ldLmNsYXNzTmFtZSArICIgIikuaW5kZXhPZiggbSApID49IDA7Ci0JCQlp
ZiAoICFub3QgJiYgcGFzcyB8fCBub3QgJiYgIXBhc3MgKQotCQkJCXRtcC5wdXNoKCByW2ldICk7
Ci0JCX0KLQkJcmV0dXJuIHRtcDsKLQl9LAotCi0JZmlsdGVyOiBmdW5jdGlvbih0LHIsbm90KSB7
Ci0JCXZhciBsYXN0OwotCi0JCS8vIExvb2sgZm9yIGNvbW1vbiBmaWx0ZXIgZXhwcmVzc2lvbnMK
LQkJd2hpbGUgKCB0ICYmIHQgIT0gbGFzdCApIHsKLQkJCWxhc3QgPSB0OwotCi0JCQl2YXIgcCA9
IGpRdWVyeS5wYXJzZSwgbTsKLQotCQkJZm9yICggdmFyIGkgPSAwOyBwW2ldOyBpKysgKSB7Ci0J
CQkJbSA9IHBbaV0uZXhlYyggdCApOwotCi0JCQkJaWYgKCBtICkgewotCQkJCQkvLyBSZW1vdmUg
d2hhdCB3ZSBqdXN0IG1hdGNoZWQKLQkJCQkJdCA9IHQuc3Vic3RyaW5nKCBtWzBdLmxlbmd0aCAp
OwotCi0JCQkJCW1bMl0gPSBtWzJdLnJlcGxhY2UoL1xcL2csICIiKTsKLQkJCQkJYnJlYWs7Ci0J
CQkJfQotCQkJfQotCi0JCQlpZiAoICFtICkKLQkJCQlicmVhazsKLQotCQkJLy8gOm5vdCgpIGlz
IGEgc3BlY2lhbCBjYXNlIHRoYXQgY2FuIGJlIG9wdGltaXplZCBieQotCQkJLy8ga2VlcGluZyBp
dCBvdXQgb2YgdGhlIGV4cHJlc3Npb24gbGlzdAotCQkJaWYgKCBtWzFdID09ICI6IiAmJiBtWzJd
ID09ICJub3QiICkKLQkJCQkvLyBvcHRpbWl6ZSBpZiBvbmx5IG9uZSBzZWxlY3RvciBmb3VuZCAo
bW9zdCBjb21tb24gY2FzZSkKLQkJCQlyID0gaXNTaW1wbGUudGVzdCggbVszXSApID8KLQkJCQkJ
alF1ZXJ5LmZpbHRlcihtWzNdLCByLCB0cnVlKS5yIDoKLQkJCQkJalF1ZXJ5KCByICkubm90KCBt
WzNdICk7Ci0KLQkJCS8vIFdlIGNhbiBnZXQgYSBiaWcgc3BlZWQgYm9vc3QgYnkgZmlsdGVyaW5n
IGJ5IGNsYXNzIGhlcmUKLQkJCWVsc2UgaWYgKCBtWzFdID09ICIuIiApCi0JCQkJciA9IGpRdWVy
eS5jbGFzc0ZpbHRlcihyLCBtWzJdLCBub3QpOwotCi0JCQllbHNlIGlmICggbVsxXSA9PSAiWyIg
KSB7Ci0JCQkJdmFyIHRtcCA9IFtdLCB0eXBlID0gbVszXTsKLQkJCQkKLQkJCQlmb3IgKCB2YXIg
aSA9IDAsIHJsID0gci5sZW5ndGg7IGkgPCBybDsgaSsrICkgewotCQkJCQl2YXIgYSA9IHJbaV0s
IHogPSBhWyBqUXVlcnkucHJvcHNbbVsyXV0gfHwgbVsyXSBdOwotCQkJCQkKLQkJCQkJaWYgKCB6
ID09IG51bGwgfHwgL2hyZWZ8c3JjfHNlbGVjdGVkLy50ZXN0KG1bMl0pICkKLQkJCQkJCXogPSBq
UXVlcnkuYXR0cihhLG1bMl0pIHx8ICcnOwotCi0JCQkJCWlmICggKHR5cGUgPT0gIiIgJiYgISF6
IHx8Ci0JCQkJCQkgdHlwZSA9PSAiPSIgJiYgeiA9PSBtWzVdIHx8Ci0JCQkJCQkgdHlwZSA9PSAi
IT0iICYmIHogIT0gbVs1XSB8fAotCQkJCQkJIHR5cGUgPT0gIl49IiAmJiB6ICYmICF6LmluZGV4
T2YobVs1XSkgfHwKLQkJCQkJCSB0eXBlID09ICIkPSIgJiYgei5zdWJzdHIoei5sZW5ndGggLSBt
WzVdLmxlbmd0aCkgPT0gbVs1XSB8fAotCQkJCQkJICh0eXBlID09ICIqPSIgfHwgdHlwZSA9PSAi
fj0iKSAmJiB6LmluZGV4T2YobVs1XSkgPj0gMCkgXiBub3QgKQotCQkJCQkJCXRtcC5wdXNoKCBh
ICk7Ci0JCQkJfQotCQkJCQotCQkJCXIgPSB0bXA7Ci0KLQkJCS8vIFdlIGNhbiBnZXQgYSBzcGVl
ZCBib29zdCBieSBoYW5kbGluZyBudGgtY2hpbGQgaGVyZQotCQkJfSBlbHNlIGlmICggbVsxXSA9
PSAiOiIgJiYgbVsyXSA9PSAibnRoLWNoaWxkIiApIHsKLQkJCQl2YXIgbWVyZ2UgPSB7fSwgdG1w
ID0gW10sCi0JCQkJCS8vIHBhcnNlIGVxdWF0aW9ucyBsaWtlICdldmVuJywgJ29kZCcsICc1Jywg
JzJuJywgJzNuKzInLCAnNG4tMScsICctbis2JwotCQkJCQl0ZXN0ID0gLygtPykoXGQqKW4oKD86
XCt8LSk/XGQqKS8uZXhlYygKLQkJCQkJCW1bM10gPT0gImV2ZW4iICYmICIybiIgfHwgbVszXSA9
PSAib2RkIiAmJiAiMm4rMSIgfHwKLQkJCQkJCSEvXEQvLnRlc3QobVszXSkgJiYgIjBuKyIgKyBt
WzNdIHx8IG1bM10pLAotCQkJCQkvLyBjYWxjdWxhdGUgdGhlIG51bWJlcnMgKGZpcnN0KW4rKGxh
c3QpIGluY2x1ZGluZyBpZiB0aGV5IGFyZSBuZWdhdGl2ZQotCQkJCQlmaXJzdCA9ICh0ZXN0WzFd
ICsgKHRlc3RbMl0gfHwgMSkpIC0gMCwgbGFzdCA9IHRlc3RbM10gLSAwOwotIAotCQkJCS8vIGxv
b3AgdGhyb3VnaCBhbGwgdGhlIGVsZW1lbnRzIGxlZnQgaW4gdGhlIGpRdWVyeSBvYmplY3QKLQkJ
CQlmb3IgKCB2YXIgaSA9IDAsIHJsID0gci5sZW5ndGg7IGkgPCBybDsgaSsrICkgewotCQkJCQl2
YXIgbm9kZSA9IHJbaV0sIHBhcmVudE5vZGUgPSBub2RlLnBhcmVudE5vZGUsIGlkID0galF1ZXJ5
LmRhdGEocGFyZW50Tm9kZSk7Ci0KLQkJCQkJaWYgKCAhbWVyZ2VbaWRdICkgewotCQkJCQkJdmFy
IGMgPSAxOwotCi0JCQkJCQlmb3IgKCB2YXIgbiA9IHBhcmVudE5vZGUuZmlyc3RDaGlsZDsgbjsg
biA9IG4ubmV4dFNpYmxpbmcgKQotCQkJCQkJCWlmICggbi5ub2RlVHlwZSA9PSAxICkKLQkJCQkJ
CQkJbi5ub2RlSW5kZXggPSBjKys7Ci0KLQkJCQkJCW1lcmdlW2lkXSA9IHRydWU7Ci0JCQkJCX0K
LQotCQkJCQl2YXIgYWRkID0gZmFsc2U7Ci0KLQkJCQkJaWYgKCBmaXJzdCA9PSAwICkgewotCQkJ
CQkJaWYgKCBub2RlLm5vZGVJbmRleCA9PSBsYXN0ICkKLQkJCQkJCQlhZGQgPSB0cnVlOwotCQkJ
CQl9IGVsc2UgaWYgKCAobm9kZS5ub2RlSW5kZXggLSBsYXN0KSAlIGZpcnN0ID09IDAgJiYgKG5v
ZGUubm9kZUluZGV4IC0gbGFzdCkgLyBmaXJzdCA+PSAwICkKLQkJCQkJCWFkZCA9IHRydWU7Ci0K
LQkJCQkJaWYgKCBhZGQgXiBub3QgKQotCQkJCQkJdG1wLnB1c2goIG5vZGUgKTsKLQkJCQl9Ci0K
LQkJCQlyID0gdG1wOwotCi0JCQkvLyBPdGhlcndpc2UsIGZpbmQgdGhlIGV4cHJlc3Npb24gdG8g
ZXhlY3V0ZQotCQkJfSBlbHNlIHsKLQkJCQl2YXIgZm4gPSBqUXVlcnkuZXhwclsgbVsxXSBdOwot
CQkJCWlmICggdHlwZW9mIGZuID09ICJvYmplY3QiICkKLQkJCQkJZm4gPSBmblsgbVsyXSBdOwot
Ci0JCQkJaWYgKCB0eXBlb2YgZm4gPT0gInN0cmluZyIgKQotCQkJCQlmbiA9IGV2YWwoImZhbHNl
fHxmdW5jdGlvbihhLGkpe3JldHVybiAiICsgZm4gKyAiO30iKTsKLQotCQkJCS8vIEV4ZWN1dGUg
aXQgYWdhaW5zdCB0aGUgY3VycmVudCBmaWx0ZXIKLQkJCQlyID0galF1ZXJ5LmdyZXAoIHIsIGZ1
bmN0aW9uKGVsZW0sIGkpewotCQkJCQlyZXR1cm4gZm4oZWxlbSwgaSwgbSwgcik7Ci0JCQkJfSwg
bm90ICk7Ci0JCQl9Ci0JCX0KLQotCQkvLyBSZXR1cm4gYW4gYXJyYXkgb2YgZmlsdGVyZWQgZWxl
bWVudHMgKHIpCi0JCS8vIGFuZCB0aGUgbW9kaWZpZWQgZXhwcmVzc2lvbiBzdHJpbmcgKHQpCi0J
CXJldHVybiB7IHI6IHIsIHQ6IHQgfTsKLQl9LAotCi0JZGlyOiBmdW5jdGlvbiggZWxlbSwgZGly
ICl7Ci0JCXZhciBtYXRjaGVkID0gW107Ci0JCXZhciBjdXIgPSBlbGVtW2Rpcl07Ci0JCXdoaWxl
ICggY3VyICYmIGN1ciAhPSBkb2N1bWVudCApIHsKLQkJCWlmICggY3VyLm5vZGVUeXBlID09IDEg
KQotCQkJCW1hdGNoZWQucHVzaCggY3VyICk7Ci0JCQljdXIgPSBjdXJbZGlyXTsKLQkJfQotCQly
ZXR1cm4gbWF0Y2hlZDsKLQl9LAotCQotCW50aDogZnVuY3Rpb24oY3VyLHJlc3VsdCxkaXIsZWxl
bSl7Ci0JCXJlc3VsdCA9IHJlc3VsdCB8fCAxOwotCQl2YXIgbnVtID0gMDsKLQotCQlmb3IgKCA7
IGN1cjsgY3VyID0gY3VyW2Rpcl0gKQotCQkJaWYgKCBjdXIubm9kZVR5cGUgPT0gMSAmJiArK251
bSA9PSByZXN1bHQgKQotCQkJCWJyZWFrOwotCi0JCXJldHVybiBjdXI7Ci0JfSwKLQkKLQlzaWJs
aW5nOiBmdW5jdGlvbiggbiwgZWxlbSApIHsKLQkJdmFyIHIgPSBbXTsKLQotCQlmb3IgKCA7IG47
IG4gPSBuLm5leHRTaWJsaW5nICkgewotCQkJaWYgKCBuLm5vZGVUeXBlID09IDEgJiYgKCFlbGVt
IHx8IG4gIT0gZWxlbSkgKQotCQkJCXIucHVzaCggbiApOwotCQl9Ci0KLQkJcmV0dXJuIHI7Ci0J
fQotfSk7Ci0KLS8qCi0gKiBBIG51bWJlciBvZiBoZWxwZXIgZnVuY3Rpb25zIHVzZWQgZm9yIG1h
bmFnaW5nIGV2ZW50cy4KLSAqIE1hbnkgb2YgdGhlIGlkZWFzIGJlaGluZCB0aGlzIGNvZGUgb3Jp
Z25hdGVkIGZyb20gCi0gKiBEZWFuIEVkd2FyZHMnIGFkZEV2ZW50IGxpYnJhcnkuCi0gKi8KLWpR
dWVyeS5ldmVudCA9IHsKLQotCS8vIEJpbmQgYW4gZXZlbnQgdG8gYW4gZWxlbWVudAotCS8vIE9y
aWdpbmFsIGJ5IERlYW4gRWR3YXJkcwotCWFkZDogZnVuY3Rpb24oZWxlbSwgdHlwZXMsIGhhbmRs
ZXIsIGRhdGEpIHsKLQkJaWYgKCBlbGVtLm5vZGVUeXBlID09IDMgfHwgZWxlbS5ub2RlVHlwZSA9
PSA4ICkKLQkJCXJldHVybjsKLQotCQkvLyBGb3Igd2hhdGV2ZXIgcmVhc29uLCBJRSBoYXMgdHJv
dWJsZSBwYXNzaW5nIHRoZSB3aW5kb3cgb2JqZWN0Ci0JCS8vIGFyb3VuZCwgY2F1c2luZyBpdCB0
byBiZSBjbG9uZWQgaW4gdGhlIHByb2Nlc3MKLQkJaWYgKCBqUXVlcnkuYnJvd3Nlci5tc2llICYm
IGVsZW0uc2V0SW50ZXJ2YWwgIT0gdW5kZWZpbmVkICkKLQkJCWVsZW0gPSB3aW5kb3c7Ci0KLQkJ
Ly8gTWFrZSBzdXJlIHRoYXQgdGhlIGZ1bmN0aW9uIGJlaW5nIGV4ZWN1dGVkIGhhcyBhIHVuaXF1
ZSBJRAotCQlpZiAoICFoYW5kbGVyLmd1aWQgKQotCQkJaGFuZGxlci5ndWlkID0gdGhpcy5ndWlk
Kys7Ci0JCQkKLQkJLy8gaWYgZGF0YSBpcyBwYXNzZWQsIGJpbmQgdG8gaGFuZGxlciAKLQkJaWYo
IGRhdGEgIT0gdW5kZWZpbmVkICkgeyAKLQkJCS8vIENyZWF0ZSB0ZW1wb3JhcnkgZnVuY3Rpb24g
cG9pbnRlciB0byBvcmlnaW5hbCBoYW5kbGVyIAotCQkJdmFyIGZuID0gaGFuZGxlcjsgCi0KLQkJ
CS8vIENyZWF0ZSB1bmlxdWUgaGFuZGxlciBmdW5jdGlvbiwgd3JhcHBlZCBhcm91bmQgb3JpZ2lu
YWwgaGFuZGxlciAKLQkJCWhhbmRsZXIgPSBmdW5jdGlvbigpIHsgCi0JCQkJLy8gUGFzcyBhcmd1
bWVudHMgYW5kIGNvbnRleHQgdG8gb3JpZ2luYWwgaGFuZGxlciAKLQkJCQlyZXR1cm4gZm4uYXBw
bHkodGhpcywgYXJndW1lbnRzKTsgCi0JCQl9OwotCi0JCQkvLyBTdG9yZSBkYXRhIGluIHVuaXF1
ZSBoYW5kbGVyIAotCQkJaGFuZGxlci5kYXRhID0gZGF0YTsKLQotCQkJLy8gU2V0IHRoZSBndWlk
IG9mIHVuaXF1ZSBoYW5kbGVyIHRvIHRoZSBzYW1lIG9mIG9yaWdpbmFsIGhhbmRsZXIsIHNvIGl0
IGNhbiBiZSByZW1vdmVkIAotCQkJaGFuZGxlci5ndWlkID0gZm4uZ3VpZDsKLQkJfQotCi0JCS8v
IEluaXQgdGhlIGVsZW1lbnQncyBldmVudCBzdHJ1Y3R1cmUKLQkJdmFyIGV2ZW50cyA9IGpRdWVy
eS5kYXRhKGVsZW0sICJldmVudHMiKSB8fCBqUXVlcnkuZGF0YShlbGVtLCAiZXZlbnRzIiwge30p
LAotCQkJaGFuZGxlID0galF1ZXJ5LmRhdGEoZWxlbSwgImhhbmRsZSIpIHx8IGpRdWVyeS5kYXRh
KGVsZW0sICJoYW5kbGUiLCBmdW5jdGlvbigpewotCQkJCS8vIHJldHVybmVkIHVuZGVmaW5lZCBv
ciBmYWxzZQotCQkJCXZhciB2YWw7Ci0KLQkJCQkvLyBIYW5kbGUgdGhlIHNlY29uZCBldmVudCBv
ZiBhIHRyaWdnZXIgYW5kIHdoZW4KLQkJCQkvLyBhbiBldmVudCBpcyBjYWxsZWQgYWZ0ZXIgYSBw
YWdlIGhhcyB1bmxvYWRlZAotCQkJCWlmICggdHlwZW9mIGpRdWVyeSA9PSAidW5kZWZpbmVkIiB8
fCBqUXVlcnkuZXZlbnQudHJpZ2dlcmVkICkKLQkJCQkJcmV0dXJuIHZhbDsKLQkJCi0JCQkJdmFs
ID0galF1ZXJ5LmV2ZW50LmhhbmRsZS5hcHBseShhcmd1bWVudHMuY2FsbGVlLmVsZW0sIGFyZ3Vt
ZW50cyk7Ci0JCQotCQkJCXJldHVybiB2YWw7Ci0JCQl9KTsKLQkJLy8gQWRkIGVsZW0gYXMgYSBw
cm9wZXJ0eSBvZiB0aGUgaGFuZGxlIGZ1bmN0aW9uCi0JCS8vIFRoaXMgaXMgdG8gcHJldmVudCBh
IG1lbW9yeSBsZWFrIHdpdGggbm9uLW5hdGl2ZQotCQkvLyBldmVudCBpbiBJRS4KLQkJaGFuZGxl
LmVsZW0gPSBlbGVtOwotCQkJCi0JCQkvLyBIYW5kbGUgbXVsdGlwbGUgZXZlbnRzIHNlcGVyYXRl
ZCBieSBhIHNwYWNlCi0JCQkvLyBqUXVlcnkoLi4uKS5iaW5kKCJtb3VzZW92ZXIgbW91c2VvdXQi
LCBmbik7Ci0JCQlqUXVlcnkuZWFjaCh0eXBlcy5zcGxpdCgvXHMrLyksIGZ1bmN0aW9uKGluZGV4
LCB0eXBlKSB7Ci0JCQkJLy8gTmFtZXNwYWNlZCBldmVudCBoYW5kbGVycwotCQkJCXZhciBwYXJ0
cyA9IHR5cGUuc3BsaXQoIi4iKTsKLQkJCQl0eXBlID0gcGFydHNbMF07Ci0JCQkJaGFuZGxlci50
eXBlID0gcGFydHNbMV07Ci0KLQkJCQkvLyBHZXQgdGhlIGN1cnJlbnQgbGlzdCBvZiBmdW5jdGlv
bnMgYm91bmQgdG8gdGhpcyBldmVudAotCQkJCXZhciBoYW5kbGVycyA9IGV2ZW50c1t0eXBlXTsK
LQotCQkJCS8vIEluaXQgdGhlIGV2ZW50IGhhbmRsZXIgcXVldWUKLQkJCQlpZiAoIWhhbmRsZXJz
KSB7Ci0JCQkJCWhhbmRsZXJzID0gZXZlbnRzW3R5cGVdID0ge307Ci0JCQotCQkJCQkvLyBDaGVj
ayBmb3IgYSBzcGVjaWFsIGV2ZW50IGhhbmRsZXIKLQkJCQkJLy8gT25seSB1c2UgYWRkRXZlbnRM
aXN0ZW5lci9hdHRhY2hFdmVudCBpZiB0aGUgc3BlY2lhbAotCQkJCQkvLyBldmVudHMgaGFuZGxl
ciByZXR1cm5zIGZhbHNlCi0JCQkJCWlmICggIWpRdWVyeS5ldmVudC5zcGVjaWFsW3R5cGVdIHx8
IGpRdWVyeS5ldmVudC5zcGVjaWFsW3R5cGVdLnNldHVwLmNhbGwoZWxlbSkgPT09IGZhbHNlICkg
ewotCQkJCQkJLy8gQmluZCB0aGUgZ2xvYmFsIGV2ZW50IGhhbmRsZXIgdG8gdGhlIGVsZW1lbnQK
LQkJCQkJCWlmIChlbGVtLmFkZEV2ZW50TGlzdGVuZXIpCi0JCQkJCQkJZWxlbS5hZGRFdmVudExp
c3RlbmVyKHR5cGUsIGhhbmRsZSwgZmFsc2UpOwotCQkJCQkJZWxzZSBpZiAoZWxlbS5hdHRhY2hF
dmVudCkKLQkJCQkJCQllbGVtLmF0dGFjaEV2ZW50KCJvbiIgKyB0eXBlLCBoYW5kbGUpOwotCQkJ
CQl9Ci0JCQkJfQotCi0JCQkJLy8gQWRkIHRoZSBmdW5jdGlvbiB0byB0aGUgZWxlbWVudCdzIGhh
bmRsZXIgbGlzdAotCQkJCWhhbmRsZXJzW2hhbmRsZXIuZ3VpZF0gPSBoYW5kbGVyOwotCi0JCQkJ
Ly8gS2VlcCB0cmFjayBvZiB3aGljaCBldmVudHMgaGF2ZSBiZWVuIHVzZWQsIGZvciBnbG9iYWwg
dHJpZ2dlcmluZwotCQkJCWpRdWVyeS5ldmVudC5nbG9iYWxbdHlwZV0gPSB0cnVlOwotCQkJfSk7
Ci0JCQotCQkvLyBOdWxsaWZ5IGVsZW0gdG8gcHJldmVudCBtZW1vcnkgbGVha3MgaW4gSUUKLQkJ
ZWxlbSA9IG51bGw7Ci0JfSwKLQotCWd1aWQ6IDEsCi0JZ2xvYmFsOiB7fSwKLQotCS8vIERldGFj
aCBhbiBldmVudCBvciBzZXQgb2YgZXZlbnRzIGZyb20gYW4gZWxlbWVudAotCXJlbW92ZTogZnVu
Y3Rpb24oZWxlbSwgdHlwZXMsIGhhbmRsZXIpIHsKLQkJLy8gZG9uJ3QgZG8gZXZlbnRzIG9uIHRl
eHQgYW5kIGNvbW1lbnQgbm9kZXMKLQkJaWYgKCBlbGVtLm5vZGVUeXBlID09IDMgfHwgZWxlbS5u
b2RlVHlwZSA9PSA4ICkKLQkJCXJldHVybjsKLQotCQl2YXIgZXZlbnRzID0galF1ZXJ5LmRhdGEo
ZWxlbSwgImV2ZW50cyIpLCByZXQsIGluZGV4OwotCi0JCWlmICggZXZlbnRzICkgewotCQkJLy8g
VW5iaW5kIGFsbCBldmVudHMgZm9yIHRoZSBlbGVtZW50Ci0JCQlpZiAoIHR5cGVzID09IHVuZGVm
aW5lZCB8fCAodHlwZW9mIHR5cGVzID09ICJzdHJpbmciICYmIHR5cGVzLmNoYXJBdCgwKSA9PSAi
LiIpICkKLQkJCQlmb3IgKCB2YXIgdHlwZSBpbiBldmVudHMgKQotCQkJCQl0aGlzLnJlbW92ZSgg
ZWxlbSwgdHlwZSArICh0eXBlcyB8fCAiIikgKTsKLQkJCWVsc2UgewotCQkJCS8vIHR5cGVzIGlz
IGFjdHVhbGx5IGFuIGV2ZW50IG9iamVjdCBoZXJlCi0JCQkJaWYgKCB0eXBlcy50eXBlICkgewot
CQkJCQloYW5kbGVyID0gdHlwZXMuaGFuZGxlcjsKLQkJCQkJdHlwZXMgPSB0eXBlcy50eXBlOwot
CQkJCX0KLQkJCQkKLQkJCQkvLyBIYW5kbGUgbXVsdGlwbGUgZXZlbnRzIHNlcGVyYXRlZCBieSBh
IHNwYWNlCi0JCQkJLy8galF1ZXJ5KC4uLikudW5iaW5kKCJtb3VzZW92ZXIgbW91c2VvdXQiLCBm
bik7Ci0JCQkJalF1ZXJ5LmVhY2godHlwZXMuc3BsaXQoL1xzKy8pLCBmdW5jdGlvbihpbmRleCwg
dHlwZSl7Ci0JCQkJCS8vIE5hbWVzcGFjZWQgZXZlbnQgaGFuZGxlcnMKLQkJCQkJdmFyIHBhcnRz
ID0gdHlwZS5zcGxpdCgiLiIpOwotCQkJCQl0eXBlID0gcGFydHNbMF07Ci0JCQkJCQotCQkJCQlp
ZiAoIGV2ZW50c1t0eXBlXSApIHsKLQkJCQkJCS8vIHJlbW92ZSB0aGUgZ2l2ZW4gaGFuZGxlciBm
b3IgdGhlIGdpdmVuIHR5cGUKLQkJCQkJCWlmICggaGFuZGxlciApCi0JCQkJCQkJZGVsZXRlIGV2
ZW50c1t0eXBlXVtoYW5kbGVyLmd1aWRdOwotCQkJCi0JCQkJCQkvLyByZW1vdmUgYWxsIGhhbmRs
ZXJzIGZvciB0aGUgZ2l2ZW4gdHlwZQotCQkJCQkJZWxzZQotCQkJCQkJCWZvciAoIGhhbmRsZXIg
aW4gZXZlbnRzW3R5cGVdICkKLQkJCQkJCQkJLy8gSGFuZGxlIHRoZSByZW1vdmFsIG9mIG5hbWVz
cGFjZWQgZXZlbnRzCi0JCQkJCQkJCWlmICggIXBhcnRzWzFdIHx8IGV2ZW50c1t0eXBlXVtoYW5k
bGVyXS50eXBlID09IHBhcnRzWzFdICkKLQkJCQkJCQkJCWRlbGV0ZSBldmVudHNbdHlwZV1baGFu
ZGxlcl07Ci0KLQkJCQkJCS8vIHJlbW92ZSBnZW5lcmljIGV2ZW50IGhhbmRsZXIgaWYgbm8gbW9y
ZSBoYW5kbGVycyBleGlzdAotCQkJCQkJZm9yICggcmV0IGluIGV2ZW50c1t0eXBlXSApIGJyZWFr
OwotCQkJCQkJaWYgKCAhcmV0ICkgewotCQkJCQkJCWlmICggIWpRdWVyeS5ldmVudC5zcGVjaWFs
W3R5cGVdIHx8IGpRdWVyeS5ldmVudC5zcGVjaWFsW3R5cGVdLnRlYXJkb3duLmNhbGwoZWxlbSkg
PT09IGZhbHNlICkgewotCQkJCQkJCQlpZiAoZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyKQotCQkJ
CQkJCQkJZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGpRdWVyeS5kYXRhKGVsZW0sICJo
YW5kbGUiKSwgZmFsc2UpOwotCQkJCQkJCQllbHNlIGlmIChlbGVtLmRldGFjaEV2ZW50KQotCQkJ
CQkJCQkJZWxlbS5kZXRhY2hFdmVudCgib24iICsgdHlwZSwgalF1ZXJ5LmRhdGEoZWxlbSwgImhh
bmRsZSIpKTsKLQkJCQkJCQl9Ci0JCQkJCQkJcmV0ID0gbnVsbDsKLQkJCQkJCQlkZWxldGUgZXZl
bnRzW3R5cGVdOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfSk7Ci0JCQl9Ci0KLQkJCS8vIFJlbW92
ZSB0aGUgZXhwYW5kbyBpZiBpdCdzIG5vIGxvbmdlciB1c2VkCi0JCQlmb3IgKCByZXQgaW4gZXZl
bnRzICkgYnJlYWs7Ci0JCQlpZiAoICFyZXQgKSB7Ci0JCQkJdmFyIGhhbmRsZSA9IGpRdWVyeS5k
YXRhKCBlbGVtLCAiaGFuZGxlIiApOwotCQkJCWlmICggaGFuZGxlICkgaGFuZGxlLmVsZW0gPSBu
dWxsOwotCQkJCWpRdWVyeS5yZW1vdmVEYXRhKCBlbGVtLCAiZXZlbnRzIiApOwotCQkJCWpRdWVy
eS5yZW1vdmVEYXRhKCBlbGVtLCAiaGFuZGxlIiApOwotCQkJfQotCQl9Ci0JfSwKLQotCXRyaWdn
ZXI6IGZ1bmN0aW9uKHR5cGUsIGRhdGEsIGVsZW0sIGRvbmF0aXZlLCBleHRyYSkgewotCQkvLyBD
bG9uZSB0aGUgaW5jb21pbmcgZGF0YSwgaWYgYW55Ci0JCWRhdGEgPSBqUXVlcnkubWFrZUFycmF5
KGRhdGEgfHwgW10pOwotCi0JCWlmICggdHlwZS5pbmRleE9mKCIhIikgPj0gMCApIHsKLQkJCXR5
cGUgPSB0eXBlLnNsaWNlKDAsIC0xKTsKLQkJCXZhciBleGNsdXNpdmUgPSB0cnVlOwotCQl9Ci0K
LQkJLy8gSGFuZGxlIGEgZ2xvYmFsIHRyaWdnZXIKLQkJaWYgKCAhZWxlbSApIHsKLQkJCS8vIE9u
bHkgdHJpZ2dlciBpZiB3ZSd2ZSBldmVyIGJvdW5kIGFuIGV2ZW50IGZvciBpdAotCQkJaWYgKCB0
aGlzLmdsb2JhbFt0eXBlXSApCi0JCQkJalF1ZXJ5KCIqIikuYWRkKFt3aW5kb3csIGRvY3VtZW50
XSkudHJpZ2dlcih0eXBlLCBkYXRhKTsKLQotCQkvLyBIYW5kbGUgdHJpZ2dlcmluZyBhIHNpbmds
ZSBlbGVtZW50Ci0JCX0gZWxzZSB7Ci0JCQkvLyBkb24ndCBkbyBldmVudHMgb24gdGV4dCBhbmQg
Y29tbWVudCBub2RlcwotCQkJaWYgKCBlbGVtLm5vZGVUeXBlID09IDMgfHwgZWxlbS5ub2RlVHlw
ZSA9PSA4ICkKLQkJCQlyZXR1cm4gdW5kZWZpbmVkOwotCi0JCQl2YXIgdmFsLCByZXQsIGZuID0g
alF1ZXJ5LmlzRnVuY3Rpb24oIGVsZW1bIHR5cGUgXSB8fCBudWxsICksCi0JCQkJLy8gQ2hlY2sg
dG8gc2VlIGlmIHdlIG5lZWQgdG8gcHJvdmlkZSBhIGZha2UgZXZlbnQsIG9yIG5vdAotCQkJCWV2
ZW50ID0gIWRhdGFbMF0gfHwgIWRhdGFbMF0ucHJldmVudERlZmF1bHQ7Ci0JCQkKLQkJCS8vIFBh
c3MgYWxvbmcgYSBmYWtlIGV2ZW50Ci0JCQlpZiAoIGV2ZW50ICkKLQkJCQlkYXRhLnVuc2hpZnQo
IHRoaXMuZml4KHsgdHlwZTogdHlwZSwgdGFyZ2V0OiBlbGVtIH0pICk7Ci0KLQkJCS8vIEVuZm9y
Y2UgdGhlIHJpZ2h0IHRyaWdnZXIgdHlwZQotCQkJZGF0YVswXS50eXBlID0gdHlwZTsKLQkJCWlm
ICggZXhjbHVzaXZlICkKLQkJCQlkYXRhWzBdLmV4Y2x1c2l2ZSA9IHRydWU7Ci0KLQkJCS8vIFRy
aWdnZXIgdGhlIGV2ZW50Ci0JCQlpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBqUXVlcnkuZGF0YShl
bGVtLCAiaGFuZGxlIikgKSApCi0JCQkJdmFsID0galF1ZXJ5LmRhdGEoZWxlbSwgImhhbmRsZSIp
LmFwcGx5KCBlbGVtLCBkYXRhICk7Ci0KLQkJCS8vIEhhbmRsZSB0cmlnZ2VyaW5nIG5hdGl2ZSAu
b25mb28gaGFuZGxlcnMKLQkJCWlmICggIWZuICYmIGVsZW1bIm9uIit0eXBlXSAmJiBlbGVtWyJv
biIrdHlwZV0uYXBwbHkoIGVsZW0sIGRhdGEgKSA9PT0gZmFsc2UgKQotCQkJCXZhbCA9IGZhbHNl
OwotCi0JCQkvLyBFeHRyYSBmdW5jdGlvbnMgZG9uJ3QgZ2V0IHRoZSBjdXN0b20gZXZlbnQgb2Jq
ZWN0Ci0JCQlpZiAoIGV2ZW50ICkKLQkJCQlkYXRhLnNoaWZ0KCk7Ci0KLQkJCS8vIEhhbmRsZSB0
cmlnZ2VyaW5nIG9mIGV4dHJhIGZ1bmN0aW9uCi0JCQlpZiAoIGV4dHJhICYmIGpRdWVyeS5pc0Z1
bmN0aW9uKCBleHRyYSApICkgewotCQkJCS8vIGNhbGwgdGhlIGV4dHJhIGZ1bmN0aW9uIGFuZCB0
YWNrIHRoZSBjdXJyZW50IHJldHVybiB2YWx1ZSBvbiB0aGUgZW5kIGZvciBwb3NzaWJsZSBpbnNw
ZWN0aW9uCi0JCQkJcmV0ID0gZXh0cmEuYXBwbHkoIGVsZW0sIHZhbCA9PSBudWxsID8gZGF0YSA6
IGRhdGEuY29uY2F0KCB2YWwgKSApOwotCQkJCS8vIGlmIGFueXRoaW5nIGlzIHJldHVybmVkLCBn
aXZlIGl0IHByZWNlZGVuY2UgYW5kIGhhdmUgaXQgb3ZlcndyaXRlIHRoZSBwcmV2aW91cyB2YWx1
ZQotCQkJCWlmIChyZXQgIT09IHVuZGVmaW5lZCkKLQkJCQkJdmFsID0gcmV0OwotCQkJfQotCi0J
CQkvLyBUcmlnZ2VyIHRoZSBuYXRpdmUgZXZlbnRzIChleGNlcHQgZm9yIGNsaWNrcyBvbiBsaW5r
cykKLQkJCWlmICggZm4gJiYgZG9uYXRpdmUgIT09IGZhbHNlICYmIHZhbCAhPT0gZmFsc2UgJiYg
IShqUXVlcnkubm9kZU5hbWUoZWxlbSwgJ2EnKSAmJiB0eXBlID09ICJjbGljayIpICkgewotCQkJ
CXRoaXMudHJpZ2dlcmVkID0gdHJ1ZTsKLQkJCQl0cnkgewotCQkJCQllbGVtWyB0eXBlIF0oKTsK
LQkJCQkvLyBwcmV2ZW50IElFIGZyb20gdGhyb3dpbmcgYW4gZXJyb3IgZm9yIHNvbWUgaGlkZGVu
IGVsZW1lbnRzCi0JCQkJfSBjYXRjaCAoZSkge30KLQkJCX0KLQotCQkJdGhpcy50cmlnZ2VyZWQg
PSBmYWxzZTsKLQkJfQotCi0JCXJldHVybiB2YWw7Ci0JfSwKLQotCWhhbmRsZTogZnVuY3Rpb24o
ZXZlbnQpIHsKLQkJLy8gcmV0dXJuZWQgdW5kZWZpbmVkIG9yIGZhbHNlCi0JCXZhciB2YWw7Ci0K
LQkJLy8gRW1wdHkgb2JqZWN0IGlzIGZvciB0cmlnZ2VyZWQgZXZlbnRzIHdpdGggbm8gZGF0YQot
CQlldmVudCA9IGpRdWVyeS5ldmVudC5maXgoIGV2ZW50IHx8IHdpbmRvdy5ldmVudCB8fCB7fSAp
OyAKLQotCQkvLyBOYW1lc3BhY2VkIGV2ZW50IGhhbmRsZXJzCi0JCXZhciBwYXJ0cyA9IGV2ZW50
LnR5cGUuc3BsaXQoIi4iKTsKLQkJZXZlbnQudHlwZSA9IHBhcnRzWzBdOwotCi0JCXZhciBoYW5k
bGVycyA9IGpRdWVyeS5kYXRhKHRoaXMsICJldmVudHMiKSAmJiBqUXVlcnkuZGF0YSh0aGlzLCAi
ZXZlbnRzIilbZXZlbnQudHlwZV0sIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCgg
YXJndW1lbnRzLCAxICk7Ci0JCWFyZ3MudW5zaGlmdCggZXZlbnQgKTsKLQotCQlmb3IgKCB2YXIg
aiBpbiBoYW5kbGVycyApIHsKLQkJCXZhciBoYW5kbGVyID0gaGFuZGxlcnNbal07Ci0JCQkvLyBQ
YXNzIGluIGEgcmVmZXJlbmNlIHRvIHRoZSBoYW5kbGVyIGZ1bmN0aW9uIGl0c2VsZgotCQkJLy8g
U28gdGhhdCB3ZSBjYW4gbGF0ZXIgcmVtb3ZlIGl0Ci0JCQlhcmdzWzBdLmhhbmRsZXIgPSBoYW5k
bGVyOwotCQkJYXJnc1swXS5kYXRhID0gaGFuZGxlci5kYXRhOwotCi0JCQkvLyBGaWx0ZXIgdGhl
IGZ1bmN0aW9ucyBieSBjbGFzcwotCQkJaWYgKCAhcGFydHNbMV0gJiYgIWV2ZW50LmV4Y2x1c2l2
ZSB8fCBoYW5kbGVyLnR5cGUgPT0gcGFydHNbMV0gKSB7Ci0JCQkJdmFyIHJldCA9IGhhbmRsZXIu
YXBwbHkoIHRoaXMsIGFyZ3MgKTsKLQotCQkJCWlmICggdmFsICE9PSBmYWxzZSApCi0JCQkJCXZh
bCA9IHJldDsKLQotCQkJCWlmICggcmV0ID09PSBmYWxzZSApIHsKLQkJCQkJZXZlbnQucHJldmVu
dERlZmF1bHQoKTsKLQkJCQkJZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7Ci0JCQkJfQotCQkJfQot
CQl9Ci0KLQkJLy8gQ2xlYW4gdXAgYWRkZWQgcHJvcGVydGllcyBpbiBJRSB0byBwcmV2ZW50IG1l
bW9yeSBsZWFrCi0JCWlmIChqUXVlcnkuYnJvd3Nlci5tc2llKQotCQkJZXZlbnQudGFyZ2V0ID0g
ZXZlbnQucHJldmVudERlZmF1bHQgPSBldmVudC5zdG9wUHJvcGFnYXRpb24gPQotCQkJCWV2ZW50
LmhhbmRsZXIgPSBldmVudC5kYXRhID0gbnVsbDsKLQotCQlyZXR1cm4gdmFsOwotCX0sCi0KLQlm
aXg6IGZ1bmN0aW9uKGV2ZW50KSB7Ci0JCS8vIHN0b3JlIGEgY29weSBvZiB0aGUgb3JpZ2luYWwg
ZXZlbnQgb2JqZWN0IAotCQkvLyBhbmQgY2xvbmUgdG8gc2V0IHJlYWQtb25seSBwcm9wZXJ0aWVz
Ci0JCXZhciBvcmlnaW5hbEV2ZW50ID0gZXZlbnQ7Ci0JCWV2ZW50ID0galF1ZXJ5LmV4dGVuZCh7
fSwgb3JpZ2luYWxFdmVudCk7Ci0JCQotCQkvLyBhZGQgcHJldmVudERlZmF1bHQgYW5kIHN0b3BQ
cm9wYWdhdGlvbiBzaW5jZSAKLQkJLy8gdGhleSB3aWxsIG5vdCB3b3JrIG9uIHRoZSBjbG9uZQot
CQlldmVudC5wcmV2ZW50RGVmYXVsdCA9IGZ1bmN0aW9uKCkgewotCQkJLy8gaWYgcHJldmVudERl
ZmF1bHQgZXhpc3RzIHJ1biBpdCBvbiB0aGUgb3JpZ2luYWwgZXZlbnQKLQkJCWlmIChvcmlnaW5h
bEV2ZW50LnByZXZlbnREZWZhdWx0KQotCQkJCW9yaWdpbmFsRXZlbnQucHJldmVudERlZmF1bHQo
KTsKLQkJCS8vIG90aGVyd2lzZSBzZXQgdGhlIHJldHVyblZhbHVlIHByb3BlcnR5IG9mIHRoZSBv
cmlnaW5hbCBldmVudCB0byBmYWxzZSAoSUUpCi0JCQlvcmlnaW5hbEV2ZW50LnJldHVyblZhbHVl
ID0gZmFsc2U7Ci0JCX07Ci0JCWV2ZW50LnN0b3BQcm9wYWdhdGlvbiA9IGZ1bmN0aW9uKCkgewot
CQkJLy8gaWYgc3RvcFByb3BhZ2F0aW9uIGV4aXN0cyBydW4gaXQgb24gdGhlIG9yaWdpbmFsIGV2
ZW50Ci0JCQlpZiAob3JpZ2luYWxFdmVudC5zdG9wUHJvcGFnYXRpb24pCi0JCQkJb3JpZ2luYWxF
dmVudC5zdG9wUHJvcGFnYXRpb24oKTsKLQkJCS8vIG90aGVyd2lzZSBzZXQgdGhlIGNhbmNlbEJ1
YmJsZSBwcm9wZXJ0eSBvZiB0aGUgb3JpZ2luYWwgZXZlbnQgdG8gdHJ1ZSAoSUUpCi0JCQlvcmln
aW5hbEV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7Ci0JCX07Ci0JCQotCQkvLyBGaXggdGFyZ2V0
IHByb3BlcnR5LCBpZiBuZWNlc3NhcnkKLQkJaWYgKCAhZXZlbnQudGFyZ2V0ICkKLQkJCWV2ZW50
LnRhcmdldCA9IGV2ZW50LnNyY0VsZW1lbnQgfHwgZG9jdW1lbnQ7IC8vIEZpeGVzICMxOTI1IHdo
ZXJlIHNyY0VsZW1lbnQgbWlnaHQgbm90IGJlIGRlZmluZWQgZWl0aGVyCi0JCQkJCi0JCS8vIGNo
ZWNrIGlmIHRhcmdldCBpcyBhIHRleHRub2RlIChzYWZhcmkpCi0JCWlmICggZXZlbnQudGFyZ2V0
Lm5vZGVUeXBlID09IDMgKQotCQkJZXZlbnQudGFyZ2V0ID0gb3JpZ2luYWxFdmVudC50YXJnZXQu
cGFyZW50Tm9kZTsKLQotCQkvLyBBZGQgcmVsYXRlZFRhcmdldCwgaWYgbmVjZXNzYXJ5Ci0JCWlm
ICggIWV2ZW50LnJlbGF0ZWRUYXJnZXQgJiYgZXZlbnQuZnJvbUVsZW1lbnQgKQotCQkJZXZlbnQu
cmVsYXRlZFRhcmdldCA9IGV2ZW50LmZyb21FbGVtZW50ID09IGV2ZW50LnRhcmdldCA/IGV2ZW50
LnRvRWxlbWVudCA6IGV2ZW50LmZyb21FbGVtZW50OwotCi0JCS8vIENhbGN1bGF0ZSBwYWdlWC9Z
IGlmIG1pc3NpbmcgYW5kIGNsaWVudFgvWSBhdmFpbGFibGUKLQkJaWYgKCBldmVudC5wYWdlWCA9
PSBudWxsICYmIGV2ZW50LmNsaWVudFggIT0gbnVsbCApIHsKLQkJCXZhciBkb2MgPSBkb2N1bWVu
dC5kb2N1bWVudEVsZW1lbnQsIGJvZHkgPSBkb2N1bWVudC5ib2R5OwotCQkJZXZlbnQucGFnZVgg
PSBldmVudC5jbGllbnRYICsgKGRvYyAmJiBkb2Muc2Nyb2xsTGVmdCB8fCBib2R5ICYmIGJvZHku
c2Nyb2xsTGVmdCB8fCAwKSAtIChkb2MuY2xpZW50TGVmdCB8fCAwKTsKLQkJCWV2ZW50LnBhZ2VZ
ID0gZXZlbnQuY2xpZW50WSArIChkb2MgJiYgZG9jLnNjcm9sbFRvcCB8fCBib2R5ICYmIGJvZHku
c2Nyb2xsVG9wIHx8IDApIC0gKGRvYy5jbGllbnRUb3AgfHwgMCk7Ci0JCX0KLQkJCQotCQkvLyBB
ZGQgd2hpY2ggZm9yIGtleSBldmVudHMKLQkJaWYgKCAhZXZlbnQud2hpY2ggJiYgKChldmVudC5j
aGFyQ29kZSB8fCBldmVudC5jaGFyQ29kZSA9PT0gMCkgPyBldmVudC5jaGFyQ29kZSA6IGV2ZW50
LmtleUNvZGUpICkKLQkJCWV2ZW50LndoaWNoID0gZXZlbnQuY2hhckNvZGUgfHwgZXZlbnQua2V5
Q29kZTsKLQkJCi0JCS8vIEFkZCBtZXRhS2V5IHRvIG5vbi1NYWMgYnJvd3NlcnMgKHVzZSBjdHJs
IGZvciBQQydzIGFuZCBNZXRhIGZvciBNYWNzKQotCQlpZiAoICFldmVudC5tZXRhS2V5ICYmIGV2
ZW50LmN0cmxLZXkgKQotCQkJZXZlbnQubWV0YUtleSA9IGV2ZW50LmN0cmxLZXk7Ci0KLQkJLy8g
QWRkIHdoaWNoIGZvciBjbGljazogMSA9PSBsZWZ0OyAyID09IG1pZGRsZTsgMyA9PSByaWdodAot
CQkvLyBOb3RlOiBidXR0b24gaXMgbm90IG5vcm1hbGl6ZWQsIHNvIGRvbid0IHVzZSBpdAotCQlp
ZiAoICFldmVudC53aGljaCAmJiBldmVudC5idXR0b24gKQotCQkJZXZlbnQud2hpY2ggPSAoZXZl
bnQuYnV0dG9uICYgMSA/IDEgOiAoIGV2ZW50LmJ1dHRvbiAmIDIgPyAzIDogKCBldmVudC5idXR0
b24gJiA0ID8gMiA6IDAgKSApKTsKLQkJCQotCQlyZXR1cm4gZXZlbnQ7Ci0JfSwKLQkKLQlzcGVj
aWFsOiB7Ci0JCXJlYWR5OiB7Ci0JCQlzZXR1cDogZnVuY3Rpb24oKSB7Ci0JCQkJLy8gTWFrZSBz
dXJlIHRoZSByZWFkeSBldmVudCBpcyBzZXR1cAotCQkJCWJpbmRSZWFkeSgpOwotCQkJCXJldHVy
bjsKLQkJCX0sCi0JCQkKLQkJCXRlYXJkb3duOiBmdW5jdGlvbigpIHsgcmV0dXJuOyB9Ci0JCX0s
Ci0JCQotCQltb3VzZWVudGVyOiB7Ci0JCQlzZXR1cDogZnVuY3Rpb24oKSB7Ci0JCQkJaWYgKCBq
UXVlcnkuYnJvd3Nlci5tc2llICkgcmV0dXJuIGZhbHNlOwotCQkJCWpRdWVyeSh0aGlzKS5iaW5k
KCJtb3VzZW92ZXIiLCBqUXVlcnkuZXZlbnQuc3BlY2lhbC5tb3VzZWVudGVyLmhhbmRsZXIpOwot
CQkJCXJldHVybiB0cnVlOwotCQkJfSwKLQkJCi0JCQl0ZWFyZG93bjogZnVuY3Rpb24oKSB7Ci0J
CQkJaWYgKCBqUXVlcnkuYnJvd3Nlci5tc2llICkgcmV0dXJuIGZhbHNlOwotCQkJCWpRdWVyeSh0
aGlzKS51bmJpbmQoIm1vdXNlb3ZlciIsIGpRdWVyeS5ldmVudC5zcGVjaWFsLm1vdXNlZW50ZXIu
aGFuZGxlcik7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9LAotCQkJCi0JCQloYW5kbGVyOiBmdW5j
dGlvbihldmVudCkgewotCQkJCS8vIElmIHdlIGFjdHVhbGx5IGp1c3QgbW91c2VkIG9uIHRvIGEg
c3ViLWVsZW1lbnQsIGlnbm9yZSBpdAotCQkJCWlmICggd2l0aGluRWxlbWVudChldmVudCwgdGhp
cykgKSByZXR1cm4gdHJ1ZTsKLQkJCQkvLyBFeGVjdXRlIHRoZSByaWdodCBoYW5kbGVycyBieSBz
ZXR0aW5nIHRoZSBldmVudCB0eXBlIHRvIG1vdXNlZW50ZXIKLQkJCQlhcmd1bWVudHNbMF0udHlw
ZSA9ICJtb3VzZWVudGVyIjsKLQkJCQlyZXR1cm4galF1ZXJ5LmV2ZW50LmhhbmRsZS5hcHBseSh0
aGlzLCBhcmd1bWVudHMpOwotCQkJfQotCQl9LAotCQotCQltb3VzZWxlYXZlOiB7Ci0JCQlzZXR1
cDogZnVuY3Rpb24oKSB7Ci0JCQkJaWYgKCBqUXVlcnkuYnJvd3Nlci5tc2llICkgcmV0dXJuIGZh
bHNlOwotCQkJCWpRdWVyeSh0aGlzKS5iaW5kKCJtb3VzZW91dCIsIGpRdWVyeS5ldmVudC5zcGVj
aWFsLm1vdXNlbGVhdmUuaGFuZGxlcik7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9LAotCQkKLQkJ
CXRlYXJkb3duOiBmdW5jdGlvbigpIHsKLQkJCQlpZiAoIGpRdWVyeS5icm93c2VyLm1zaWUgKSBy
ZXR1cm4gZmFsc2U7Ci0JCQkJalF1ZXJ5KHRoaXMpLnVuYmluZCgibW91c2VvdXQiLCBqUXVlcnku
ZXZlbnQuc3BlY2lhbC5tb3VzZWxlYXZlLmhhbmRsZXIpOwotCQkJCXJldHVybiB0cnVlOwotCQkJ
fSwKLQkJCQotCQkJaGFuZGxlcjogZnVuY3Rpb24oZXZlbnQpIHsKLQkJCQkvLyBJZiB3ZSBhY3R1
YWxseSBqdXN0IG1vdXNlZCBvbiB0byBhIHN1Yi1lbGVtZW50LCBpZ25vcmUgaXQKLQkJCQlpZiAo
IHdpdGhpbkVsZW1lbnQoZXZlbnQsIHRoaXMpICkgcmV0dXJuIHRydWU7Ci0JCQkJLy8gRXhlY3V0
ZSB0aGUgcmlnaHQgaGFuZGxlcnMgYnkgc2V0dGluZyB0aGUgZXZlbnQgdHlwZSB0byBtb3VzZWxl
YXZlCi0JCQkJYXJndW1lbnRzWzBdLnR5cGUgPSAibW91c2VsZWF2ZSI7Ci0JCQkJcmV0dXJuIGpR
dWVyeS5ldmVudC5oYW5kbGUuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKLQkJCX0KLQkJfQotCX0K
LX07Ci0KLWpRdWVyeS5mbi5leHRlbmQoewotCWJpbmQ6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhLCBm
biApIHsKLQkJcmV0dXJuIHR5cGUgPT0gInVubG9hZCIgPyB0aGlzLm9uZSh0eXBlLCBkYXRhLCBm
bikgOiB0aGlzLmVhY2goZnVuY3Rpb24oKXsKLQkJCWpRdWVyeS5ldmVudC5hZGQoIHRoaXMsIHR5
cGUsIGZuIHx8IGRhdGEsIGZuICYmIGRhdGEgKTsKLQkJfSk7Ci0JfSwKLQkKLQlvbmU6IGZ1bmN0
aW9uKCB0eXBlLCBkYXRhLCBmbiApIHsKLQkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpewot
CQkJalF1ZXJ5LmV2ZW50LmFkZCggdGhpcywgdHlwZSwgZnVuY3Rpb24oZXZlbnQpIHsKLQkJCQlq
UXVlcnkodGhpcykudW5iaW5kKGV2ZW50KTsKLQkJCQlyZXR1cm4gKGZuIHx8IGRhdGEpLmFwcGx5
KCB0aGlzLCBhcmd1bWVudHMpOwotCQkJfSwgZm4gJiYgZGF0YSk7Ci0JCX0pOwotCX0sCi0KLQl1
bmJpbmQ6IGZ1bmN0aW9uKCB0eXBlLCBmbiApIHsKLQkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlv
bigpewotCQkJalF1ZXJ5LmV2ZW50LnJlbW92ZSggdGhpcywgdHlwZSwgZm4gKTsKLQkJfSk7Ci0J
fSwKLQotCXRyaWdnZXI6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhLCBmbiApIHsKLQkJcmV0dXJuIHRo
aXMuZWFjaChmdW5jdGlvbigpewotCQkJalF1ZXJ5LmV2ZW50LnRyaWdnZXIoIHR5cGUsIGRhdGEs
IHRoaXMsIHRydWUsIGZuICk7Ci0JCX0pOwotCX0sCi0KLQl0cmlnZ2VySGFuZGxlcjogZnVuY3Rp
b24oIHR5cGUsIGRhdGEsIGZuICkgewotCQlpZiAoIHRoaXNbMF0gKQotCQkJcmV0dXJuIGpRdWVy
eS5ldmVudC50cmlnZ2VyKCB0eXBlLCBkYXRhLCB0aGlzWzBdLCBmYWxzZSwgZm4gKTsKLQkJcmV0
dXJuIHVuZGVmaW5lZDsKLQl9LAotCi0JdG9nZ2xlOiBmdW5jdGlvbigpIHsKLQkJLy8gU2F2ZSBy
ZWZlcmVuY2UgdG8gYXJndW1lbnRzIGZvciBhY2Nlc3MgaW4gY2xvc3VyZQotCQl2YXIgYXJncyA9
IGFyZ3VtZW50czsKLQotCQlyZXR1cm4gdGhpcy5jbGljayhmdW5jdGlvbihldmVudCkgewotCQkJ
Ly8gRmlndXJlIG91dCB3aGljaCBmdW5jdGlvbiB0byBleGVjdXRlCi0JCQl0aGlzLmxhc3RUb2dn
bGUgPSAwID09IHRoaXMubGFzdFRvZ2dsZSA/IDEgOiAwOwotCQkJCi0JCQkvLyBNYWtlIHN1cmUg
dGhhdCBjbGlja3Mgc3RvcAotCQkJZXZlbnQucHJldmVudERlZmF1bHQoKTsKLQkJCQotCQkJLy8g
YW5kIGV4ZWN1dGUgdGhlIGZ1bmN0aW9uCi0JCQlyZXR1cm4gYXJnc1t0aGlzLmxhc3RUb2dnbGVd
LmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSB8fCBmYWxzZTsKLQkJfSk7Ci0JfSwKLQotCWhvdmVy
OiBmdW5jdGlvbihmbk92ZXIsIGZuT3V0KSB7Ci0JCXJldHVybiB0aGlzLmJpbmQoJ21vdXNlZW50
ZXInLCBmbk92ZXIpLmJpbmQoJ21vdXNlbGVhdmUnLCBmbk91dCk7Ci0JfSwKLQkKLQlyZWFkeTog
ZnVuY3Rpb24oZm4pIHsKLQkJLy8gQXR0YWNoIHRoZSBsaXN0ZW5lcnMKLQkJYmluZFJlYWR5KCk7
Ci0KLQkJLy8gSWYgdGhlIERPTSBpcyBhbHJlYWR5IHJlYWR5Ci0JCWlmICggalF1ZXJ5LmlzUmVh
ZHkgKQotCQkJLy8gRXhlY3V0ZSB0aGUgZnVuY3Rpb24gaW1tZWRpYXRlbHkKLQkJCWZuLmNhbGwo
IGRvY3VtZW50LCBqUXVlcnkgKTsKLQkJCQotCQkvLyBPdGhlcndpc2UsIHJlbWVtYmVyIHRoZSBm
dW5jdGlvbiBmb3IgbGF0ZXIKLQkJZWxzZQotCQkJLy8gQWRkIHRoZSBmdW5jdGlvbiB0byB0aGUg
d2FpdCBsaXN0Ci0JCQlqUXVlcnkucmVhZHlMaXN0LnB1c2goIGZ1bmN0aW9uKCkgeyByZXR1cm4g
Zm4uY2FsbCh0aGlzLCBqUXVlcnkpOyB9ICk7Ci0JCi0JCXJldHVybiB0aGlzOwotCX0KLX0pOwot
Ci1qUXVlcnkuZXh0ZW5kKHsKLQlpc1JlYWR5OiBmYWxzZSwKLQlyZWFkeUxpc3Q6IFtdLAotCS8v
IEhhbmRsZSB3aGVuIHRoZSBET00gaXMgcmVhZHkKLQlyZWFkeTogZnVuY3Rpb24oKSB7Ci0JCS8v
IE1ha2Ugc3VyZSB0aGF0IHRoZSBET00gaXMgbm90IGFscmVhZHkgbG9hZGVkCi0JCWlmICggIWpR
dWVyeS5pc1JlYWR5ICkgewotCQkJLy8gUmVtZW1iZXIgdGhhdCB0aGUgRE9NIGlzIHJlYWR5Ci0J
CQlqUXVlcnkuaXNSZWFkeSA9IHRydWU7Ci0JCQkKLQkJCS8vIElmIHRoZXJlIGFyZSBmdW5jdGlv
bnMgYm91bmQsIHRvIGV4ZWN1dGUKLQkJCWlmICggalF1ZXJ5LnJlYWR5TGlzdCApIHsKLQkJCQkv
LyBFeGVjdXRlIGFsbCBvZiB0aGVtCi0JCQkJalF1ZXJ5LmVhY2goIGpRdWVyeS5yZWFkeUxpc3Qs
IGZ1bmN0aW9uKCl7Ci0JCQkJCXRoaXMuYXBwbHkoIGRvY3VtZW50ICk7Ci0JCQkJfSk7Ci0JCQkJ
Ci0JCQkJLy8gUmVzZXQgdGhlIGxpc3Qgb2YgZnVuY3Rpb25zCi0JCQkJalF1ZXJ5LnJlYWR5TGlz
dCA9IG51bGw7Ci0JCQl9Ci0JCQotCQkJLy8gVHJpZ2dlciBhbnkgYm91bmQgcmVhZHkgZXZlbnRz
Ci0JCQlqUXVlcnkoZG9jdW1lbnQpLnRyaWdnZXJIYW5kbGVyKCJyZWFkeSIpOwotCQl9Ci0JfQot
fSk7Ci0KLXZhciByZWFkeUJvdW5kID0gZmFsc2U7Ci0KLWZ1bmN0aW9uIGJpbmRSZWFkeSgpewot
CWlmICggcmVhZHlCb3VuZCApIHJldHVybjsKLQlyZWFkeUJvdW5kID0gdHJ1ZTsKLQotCS8vIE1v
emlsbGEsIE9wZXJhIChzZWUgZnVydGhlciBiZWxvdyBmb3IgaXQpIGFuZCB3ZWJraXQgbmlnaHRs
aWVzIGN1cnJlbnRseSBzdXBwb3J0IHRoaXMgZXZlbnQKLQlpZiAoIGRvY3VtZW50LmFkZEV2ZW50
TGlzdGVuZXIgJiYgIWpRdWVyeS5icm93c2VyLm9wZXJhKQotCQkvLyBVc2UgdGhlIGhhbmR5IGV2
ZW50IGNhbGxiYWNrCi0JCWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoICJET01Db250ZW50TG9h
ZGVkIiwgalF1ZXJ5LnJlYWR5LCBmYWxzZSApOwotCQotCS8vIElmIElFIGlzIHVzZWQgYW5kIGlz
IG5vdCBpbiBhIGZyYW1lCi0JLy8gQ29udGludWFsbHkgY2hlY2sgdG8gc2VlIGlmIHRoZSBkb2N1
bWVudCBpcyByZWFkeQotCWlmICggalF1ZXJ5LmJyb3dzZXIubXNpZSAmJiB3aW5kb3cgPT0gdG9w
ICkgKGZ1bmN0aW9uKCl7Ci0JCWlmIChqUXVlcnkuaXNSZWFkeSkgcmV0dXJuOwotCQl0cnkgewot
CQkJLy8gSWYgSUUgaXMgdXNlZCwgdXNlIHRoZSB0cmljayBieSBEaWVnbyBQZXJpbmkKLQkJCS8v
IGh0dHA6Ly9qYXZhc2NyaXB0Lm53Ym94LmNvbS9JRUNvbnRlbnRMb2FkZWQvCi0JCQlkb2N1bWVu
dC5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwoImxlZnQiKTsKLQkJfSBjYXRjaCggZXJyb3IgKSB7
Ci0JCQlzZXRUaW1lb3V0KCBhcmd1bWVudHMuY2FsbGVlLCAwICk7Ci0JCQlyZXR1cm47Ci0JCX0K
LQkJLy8gYW5kIGV4ZWN1dGUgYW55IHdhaXRpbmcgZnVuY3Rpb25zCi0JCWpRdWVyeS5yZWFkeSgp
OwotCX0pKCk7Ci0KLQlpZiAoIGpRdWVyeS5icm93c2VyLm9wZXJhICkKLQkJZG9jdW1lbnQuYWRk
RXZlbnRMaXN0ZW5lciggIkRPTUNvbnRlbnRMb2FkZWQiLCBmdW5jdGlvbiAoKSB7Ci0JCQlpZiAo
alF1ZXJ5LmlzUmVhZHkpIHJldHVybjsKLQkJCWZvciAodmFyIGkgPSAwOyBpIDwgZG9jdW1lbnQu
c3R5bGVTaGVldHMubGVuZ3RoOyBpKyspCi0JCQkJaWYgKGRvY3VtZW50LnN0eWxlU2hlZXRzW2ld
LmRpc2FibGVkKSB7Ci0JCQkJCXNldFRpbWVvdXQoIGFyZ3VtZW50cy5jYWxsZWUsIDAgKTsKLQkJ
CQkJcmV0dXJuOwotCQkJCX0KLQkJCS8vIGFuZCBleGVjdXRlIGFueSB3YWl0aW5nIGZ1bmN0aW9u
cwotCQkJalF1ZXJ5LnJlYWR5KCk7Ci0JCX0sIGZhbHNlKTsKLQotCWlmICggalF1ZXJ5LmJyb3dz
ZXIuc2FmYXJpICkgewotCQl2YXIgbnVtU3R5bGVzOwotCQkoZnVuY3Rpb24oKXsKLQkJCWlmIChq
UXVlcnkuaXNSZWFkeSkgcmV0dXJuOwotCQkJaWYgKCBkb2N1bWVudC5yZWFkeVN0YXRlICE9ICJs
b2FkZWQiICYmIGRvY3VtZW50LnJlYWR5U3RhdGUgIT0gImNvbXBsZXRlIiApIHsKLQkJCQlzZXRU
aW1lb3V0KCBhcmd1bWVudHMuY2FsbGVlLCAwICk7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQkJaWYg
KCBudW1TdHlsZXMgPT09IHVuZGVmaW5lZCApCi0JCQkJbnVtU3R5bGVzID0galF1ZXJ5KCJzdHls
ZSwgbGlua1tyZWw9c3R5bGVzaGVldF0iKS5sZW5ndGg7Ci0JCQlpZiAoIGRvY3VtZW50LnN0eWxl
U2hlZXRzLmxlbmd0aCAhPSBudW1TdHlsZXMgKSB7Ci0JCQkJc2V0VGltZW91dCggYXJndW1lbnRz
LmNhbGxlZSwgMCApOwotCQkJCXJldHVybjsKLQkJCX0KLQkJCS8vIGFuZCBleGVjdXRlIGFueSB3
YWl0aW5nIGZ1bmN0aW9ucwotCQkJalF1ZXJ5LnJlYWR5KCk7Ci0JCX0pKCk7Ci0JfQotCi0JLy8g
QSBmYWxsYmFjayB0byB3aW5kb3cub25sb2FkLCB0aGF0IHdpbGwgYWx3YXlzIHdvcmsKLQlqUXVl
cnkuZXZlbnQuYWRkKCB3aW5kb3csICJsb2FkIiwgalF1ZXJ5LnJlYWR5ICk7Ci19Ci0KLWpRdWVy
eS5lYWNoKCAoImJsdXIsZm9jdXMsbG9hZCxyZXNpemUsc2Nyb2xsLHVubG9hZCxjbGljayxkYmxj
bGljaywiICsKLQkibW91c2Vkb3duLG1vdXNldXAsbW91c2Vtb3ZlLG1vdXNlb3Zlcixtb3VzZW91
dCxjaGFuZ2Usc2VsZWN0LCIgKyAKLQkic3VibWl0LGtleWRvd24sa2V5cHJlc3Msa2V5dXAsZXJy
b3IiKS5zcGxpdCgiLCIpLCBmdW5jdGlvbihpLCBuYW1lKXsKLQkKLQkvLyBIYW5kbGUgZXZlbnQg
YmluZGluZwotCWpRdWVyeS5mbltuYW1lXSA9IGZ1bmN0aW9uKGZuKXsKLQkJcmV0dXJuIGZuID8g
dGhpcy5iaW5kKG5hbWUsIGZuKSA6IHRoaXMudHJpZ2dlcihuYW1lKTsKLQl9OwotfSk7Ci0KLS8v
IENoZWNrcyBpZiBhbiBldmVudCBoYXBwZW5lZCBvbiBhbiBlbGVtZW50IHdpdGhpbiBhbm90aGVy
IGVsZW1lbnQKLS8vIFVzZWQgaW4galF1ZXJ5LmV2ZW50LnNwZWNpYWwubW91c2VlbnRlciBhbmQg
bW91c2VsZWF2ZSBoYW5kbGVycwotdmFyIHdpdGhpbkVsZW1lbnQgPSBmdW5jdGlvbihldmVudCwg
ZWxlbSkgewotCS8vIENoZWNrIGlmIG1vdXNlKG92ZXJ8b3V0KSBhcmUgc3RpbGwgd2l0aGluIHRo
ZSBzYW1lIHBhcmVudCBlbGVtZW50Ci0JdmFyIHBhcmVudCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQ7
Ci0JLy8gVHJhdmVyc2UgdXAgdGhlIHRyZWUKLQl3aGlsZSAoIHBhcmVudCAmJiBwYXJlbnQgIT0g
ZWxlbSApIHRyeSB7IHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlOyB9IGNhdGNoKGVycm9yKSB7
IHBhcmVudCA9IGVsZW07IH0KLQkvLyBSZXR1cm4gdHJ1ZSBpZiB3ZSBhY3R1YWxseSBqdXN0IG1v
dXNlZCBvbiB0byBhIHN1Yi1lbGVtZW50Ci0JcmV0dXJuIHBhcmVudCA9PSBlbGVtOwotfTsKLQot
Ly8gUHJldmVudCBtZW1vcnkgbGVha3MgaW4gSUUKLS8vIEFuZCBwcmV2ZW50IGVycm9ycyBvbiBy
ZWZyZXNoIHdpdGggZXZlbnRzIGxpa2UgbW91c2VvdmVyIGluIG90aGVyIGJyb3dzZXJzCi0vLyBX
aW5kb3cgaXNuJ3QgaW5jbHVkZWQgc28gYXMgbm90IHRvIHVuYmluZCBleGlzdGluZyB1bmxvYWQg
ZXZlbnRzCi1qUXVlcnkod2luZG93KS5iaW5kKCJ1bmxvYWQiLCBmdW5jdGlvbigpIHsKLQlqUXVl
cnkoIioiKS5hZGQoZG9jdW1lbnQpLnVuYmluZCgpOwotfSk7Ci1qUXVlcnkuZm4uZXh0ZW5kKHsK
LQlsb2FkOiBmdW5jdGlvbiggdXJsLCBwYXJhbXMsIGNhbGxiYWNrICkgewotCQlpZiAoIGpRdWVy
eS5pc0Z1bmN0aW9uKCB1cmwgKSApCi0JCQlyZXR1cm4gdGhpcy5iaW5kKCJsb2FkIiwgdXJsKTsK
LQotCQl2YXIgb2ZmID0gdXJsLmluZGV4T2YoIiAiKTsKLQkJaWYgKCBvZmYgPj0gMCApIHsKLQkJ
CXZhciBzZWxlY3RvciA9IHVybC5zbGljZShvZmYsIHVybC5sZW5ndGgpOwotCQkJdXJsID0gdXJs
LnNsaWNlKDAsIG9mZik7Ci0JCX0KLQotCQljYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9u
KCl7fTsKLQotCQkvLyBEZWZhdWx0IHRvIGEgR0VUIHJlcXVlc3QKLQkJdmFyIHR5cGUgPSAiR0VU
IjsKLQotCQkvLyBJZiB0aGUgc2Vjb25kIHBhcmFtZXRlciB3YXMgcHJvdmlkZWQKLQkJaWYgKCBw
YXJhbXMgKQotCQkJLy8gSWYgaXQncyBhIGZ1bmN0aW9uCi0JCQlpZiAoIGpRdWVyeS5pc0Z1bmN0
aW9uKCBwYXJhbXMgKSApIHsKLQkJCQkvLyBXZSBhc3N1bWUgdGhhdCBpdCdzIHRoZSBjYWxsYmFj
awotCQkJCWNhbGxiYWNrID0gcGFyYW1zOwotCQkJCXBhcmFtcyA9IG51bGw7Ci0KLQkJCS8vIE90
aGVyd2lzZSwgYnVpbGQgYSBwYXJhbSBzdHJpbmcKLQkJCX0gZWxzZSB7Ci0JCQkJcGFyYW1zID0g
alF1ZXJ5LnBhcmFtKCBwYXJhbXMgKTsKLQkJCQl0eXBlID0gIlBPU1QiOwotCQkJfQotCi0JCXZh
ciBzZWxmID0gdGhpczsKLQotCQkvLyBSZXF1ZXN0IHRoZSByZW1vdGUgZG9jdW1lbnQKLQkJalF1
ZXJ5LmFqYXgoewotCQkJdXJsOiB1cmwsCi0JCQl0eXBlOiB0eXBlLAotCQkJZGF0YVR5cGU6ICJo
dG1sIiwKLQkJCWRhdGE6IHBhcmFtcywKLQkJCWNvbXBsZXRlOiBmdW5jdGlvbihyZXMsIHN0YXR1
cyl7Ci0JCQkJLy8gSWYgc3VjY2Vzc2Z1bCwgaW5qZWN0IHRoZSBIVE1MIGludG8gYWxsIHRoZSBt
YXRjaGVkIGVsZW1lbnRzCi0JCQkJaWYgKCBzdGF0dXMgPT0gInN1Y2Nlc3MiIHx8IHN0YXR1cyA9
PSAibm90bW9kaWZpZWQiICkKLQkJCQkJLy8gU2VlIGlmIGEgc2VsZWN0b3Igd2FzIHNwZWNpZmll
ZAotCQkJCQlzZWxmLmh0bWwoIHNlbGVjdG9yID8KLQkJCQkJCS8vIENyZWF0ZSBhIGR1bW15IGRp
diB0byBob2xkIHRoZSByZXN1bHRzCi0JCQkJCQlqUXVlcnkoIjxkaXYvPiIpCi0JCQkJCQkJLy8g
aW5qZWN0IHRoZSBjb250ZW50cyBvZiB0aGUgZG9jdW1lbnQgaW4sIHJlbW92aW5nIHRoZSBzY3Jp
cHRzCi0JCQkJCQkJLy8gdG8gYXZvaWQgYW55ICdQZXJtaXNzaW9uIERlbmllZCcgZXJyb3JzIGlu
IElFCi0JCQkJCQkJLmFwcGVuZChyZXMucmVzcG9uc2VUZXh0LnJlcGxhY2UoLzxzY3JpcHQoLnxc
cykqP1wvc2NyaXB0Pi9nLCAiIikpCi0KLQkJCQkJCQkvLyBMb2NhdGUgdGhlIHNwZWNpZmllZCBl
bGVtZW50cwotCQkJCQkJCS5maW5kKHNlbGVjdG9yKSA6Ci0KLQkJCQkJCS8vIElmIG5vdCwganVz
dCBpbmplY3QgdGhlIGZ1bGwgcmVzdWx0Ci0JCQkJCQlyZXMucmVzcG9uc2VUZXh0ICk7Ci0KLQkJ
CQlzZWxmLmVhY2goIGNhbGxiYWNrLCBbcmVzLnJlc3BvbnNlVGV4dCwgc3RhdHVzLCByZXNdICk7
Ci0JCQl9Ci0JCX0pOwotCQlyZXR1cm4gdGhpczsKLQl9LAotCi0Jc2VyaWFsaXplOiBmdW5jdGlv
bigpIHsKLQkJcmV0dXJuIGpRdWVyeS5wYXJhbSh0aGlzLnNlcmlhbGl6ZUFycmF5KCkpOwotCX0s
Ci0Jc2VyaWFsaXplQXJyYXk6IGZ1bmN0aW9uKCkgewotCQlyZXR1cm4gdGhpcy5tYXAoZnVuY3Rp
b24oKXsKLQkJCXJldHVybiBqUXVlcnkubm9kZU5hbWUodGhpcywgImZvcm0iKSA/Ci0JCQkJalF1
ZXJ5Lm1ha2VBcnJheSh0aGlzLmVsZW1lbnRzKSA6IHRoaXM7Ci0JCX0pCi0JCS5maWx0ZXIoZnVu
Y3Rpb24oKXsKLQkJCXJldHVybiB0aGlzLm5hbWUgJiYgIXRoaXMuZGlzYWJsZWQgJiYgCi0JCQkJ
KHRoaXMuY2hlY2tlZCB8fCAvc2VsZWN0fHRleHRhcmVhL2kudGVzdCh0aGlzLm5vZGVOYW1lKSB8
fCAKLQkJCQkJL3RleHR8aGlkZGVufHBhc3N3b3JkL2kudGVzdCh0aGlzLnR5cGUpKTsKLQkJfSkK
LQkJLm1hcChmdW5jdGlvbihpLCBlbGVtKXsKLQkJCXZhciB2YWwgPSBqUXVlcnkodGhpcykudmFs
KCk7Ci0JCQlyZXR1cm4gdmFsID09IG51bGwgPyBudWxsIDoKLQkJCQl2YWwuY29uc3RydWN0b3Ig
PT0gQXJyYXkgPwotCQkJCQlqUXVlcnkubWFwKCB2YWwsIGZ1bmN0aW9uKHZhbCwgaSl7Ci0JCQkJ
CQlyZXR1cm4ge25hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbH07Ci0JCQkJCX0pIDoKLQkJCQkJ
e25hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbH07Ci0JCX0pLmdldCgpOwotCX0KLX0pOwotCi0v
LyBBdHRhY2ggYSBidW5jaCBvZiBmdW5jdGlvbnMgZm9yIGhhbmRsaW5nIGNvbW1vbiBBSkFYIGV2
ZW50cwotalF1ZXJ5LmVhY2goICJhamF4U3RhcnQsYWpheFN0b3AsYWpheENvbXBsZXRlLGFqYXhF
cnJvcixhamF4U3VjY2VzcyxhamF4U2VuZCIuc3BsaXQoIiwiKSwgZnVuY3Rpb24oaSxvKXsKLQlq
UXVlcnkuZm5bb10gPSBmdW5jdGlvbihmKXsKLQkJcmV0dXJuIHRoaXMuYmluZChvLCBmKTsKLQl9
OwotfSk7Ci0KLXZhciBqc2MgPSAobmV3IERhdGUpLmdldFRpbWUoKTsKLQotalF1ZXJ5LmV4dGVu
ZCh7Ci0JZ2V0OiBmdW5jdGlvbiggdXJsLCBkYXRhLCBjYWxsYmFjaywgdHlwZSApIHsKLQkJLy8g
c2hpZnQgYXJndW1lbnRzIGlmIGRhdGEgYXJndW1lbnQgd2FzIG9tbWl0ZWQKLQkJaWYgKCBqUXVl
cnkuaXNGdW5jdGlvbiggZGF0YSApICkgewotCQkJY2FsbGJhY2sgPSBkYXRhOwotCQkJZGF0YSA9
IG51bGw7Ci0JCX0KLQkJCi0JCXJldHVybiBqUXVlcnkuYWpheCh7Ci0JCQl0eXBlOiAiR0VUIiwK
LQkJCXVybDogdXJsLAotCQkJZGF0YTogZGF0YSwKLQkJCXN1Y2Nlc3M6IGNhbGxiYWNrLAotCQkJ
ZGF0YVR5cGU6IHR5cGUKLQkJfSk7Ci0JfSwKLQotCWdldFNjcmlwdDogZnVuY3Rpb24oIHVybCwg
Y2FsbGJhY2sgKSB7Ci0JCXJldHVybiBqUXVlcnkuZ2V0KHVybCwgbnVsbCwgY2FsbGJhY2ssICJz
Y3JpcHQiKTsKLQl9LAotCi0JZ2V0SlNPTjogZnVuY3Rpb24oIHVybCwgZGF0YSwgY2FsbGJhY2sg
KSB7Ci0JCXJldHVybiBqUXVlcnkuZ2V0KHVybCwgZGF0YSwgY2FsbGJhY2ssICJqc29uIik7Ci0J
fSwKLQotCXBvc3Q6IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrLCB0eXBlICkgewotCQlp
ZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBkYXRhICkgKSB7Ci0JCQljYWxsYmFjayA9IGRhdGE7Ci0J
CQlkYXRhID0ge307Ci0JCX0KLQotCQlyZXR1cm4galF1ZXJ5LmFqYXgoewotCQkJdHlwZTogIlBP
U1QiLAotCQkJdXJsOiB1cmwsCi0JCQlkYXRhOiBkYXRhLAotCQkJc3VjY2VzczogY2FsbGJhY2ss
Ci0JCQlkYXRhVHlwZTogdHlwZQotCQl9KTsKLQl9LAotCi0JYWpheFNldHVwOiBmdW5jdGlvbigg
c2V0dGluZ3MgKSB7Ci0JCWpRdWVyeS5leHRlbmQoIGpRdWVyeS5hamF4U2V0dGluZ3MsIHNldHRp
bmdzICk7Ci0JfSwKLQotCWFqYXhTZXR0aW5nczogewotCQlnbG9iYWw6IHRydWUsCi0JCXR5cGU6
ICJHRVQiLAotCQl0aW1lb3V0OiAwLAotCQljb250ZW50VHlwZTogImFwcGxpY2F0aW9uL3gtd3d3
LWZvcm0tdXJsZW5jb2RlZCIsCi0JCXByb2Nlc3NEYXRhOiB0cnVlLAotCQlhc3luYzogdHJ1ZSwK
LQkJZGF0YTogbnVsbCwKLQkJdXNlcm5hbWU6IG51bGwsCi0JCXBhc3N3b3JkOiBudWxsLAotCQlh
Y2NlcHRzOiB7Ci0JCQl4bWw6ICJhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sIiwKLQkJCWh0bWw6
ICJ0ZXh0L2h0bWwiLAotCQkJc2NyaXB0OiAidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9q
YXZhc2NyaXB0IiwKLQkJCWpzb246ICJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2phdmFzY3JpcHQi
LAotCQkJdGV4dDogInRleHQvcGxhaW4iLAotCQkJX2RlZmF1bHQ6ICIqLyoiCi0JCX0KLQl9LAot
CQotCS8vIExhc3QtTW9kaWZpZWQgaGVhZGVyIGNhY2hlIGZvciBuZXh0IHJlcXVlc3QKLQlsYXN0
TW9kaWZpZWQ6IHt9LAotCi0JYWpheDogZnVuY3Rpb24oIHMgKSB7Ci0JCXZhciBqc29ucCwganNy
ZSA9IC89XD8oJnwkKS9nLCBzdGF0dXMsIGRhdGE7Ci0KLQkJLy8gRXh0ZW5kIHRoZSBzZXR0aW5n
cywgYnV0IHJlLWV4dGVuZCAncycgc28gdGhhdCBpdCBjYW4gYmUKLQkJLy8gY2hlY2tlZCBhZ2Fp
biBsYXRlciAoaW4gdGhlIHRlc3Qgc3VpdGUsIHNwZWNpZmljYWxseSkKLQkJcyA9IGpRdWVyeS5l
eHRlbmQodHJ1ZSwgcywgalF1ZXJ5LmV4dGVuZCh0cnVlLCB7fSwgalF1ZXJ5LmFqYXhTZXR0aW5n
cywgcykpOwotCi0JCS8vIGNvbnZlcnQgZGF0YSBpZiBub3QgYWxyZWFkeSBhIHN0cmluZwotCQlp
ZiAoIHMuZGF0YSAmJiBzLnByb2Nlc3NEYXRhICYmIHR5cGVvZiBzLmRhdGEgIT0gInN0cmluZyIg
KQotCQkJcy5kYXRhID0galF1ZXJ5LnBhcmFtKHMuZGF0YSk7Ci0KLQkJLy8gSGFuZGxlIEpTT05Q
IFBhcmFtZXRlciBDYWxsYmFja3MKLQkJaWYgKCBzLmRhdGFUeXBlID09ICJqc29ucCIgKSB7Ci0J
CQlpZiAoIHMudHlwZS50b0xvd2VyQ2FzZSgpID09ICJnZXQiICkgewotCQkJCWlmICggIXMudXJs
Lm1hdGNoKGpzcmUpICkKLQkJCQkJcy51cmwgKz0gKHMudXJsLm1hdGNoKC9cPy8pID8gIiYiIDog
Ij8iKSArIChzLmpzb25wIHx8ICJjYWxsYmFjayIpICsgIj0/IjsKLQkJCX0gZWxzZSBpZiAoICFz
LmRhdGEgfHwgIXMuZGF0YS5tYXRjaChqc3JlKSApCi0JCQkJcy5kYXRhID0gKHMuZGF0YSA/IHMu
ZGF0YSArICImIiA6ICIiKSArIChzLmpzb25wIHx8ICJjYWxsYmFjayIpICsgIj0/IjsKLQkJCXMu
ZGF0YVR5cGUgPSAianNvbiI7Ci0JCX0KLQotCQkvLyBCdWlsZCB0ZW1wb3JhcnkgSlNPTlAgZnVu
Y3Rpb24KLQkJaWYgKCBzLmRhdGFUeXBlID09ICJqc29uIiAmJiAocy5kYXRhICYmIHMuZGF0YS5t
YXRjaChqc3JlKSB8fCBzLnVybC5tYXRjaChqc3JlKSkgKSB7Ci0JCQlqc29ucCA9ICJqc29ucCIg
KyBqc2MrKzsKLQotCQkJLy8gUmVwbGFjZSB0aGUgPT8gc2VxdWVuY2UgYm90aCBpbiB0aGUgcXVl
cnkgc3RyaW5nIGFuZCB0aGUgZGF0YQotCQkJaWYgKCBzLmRhdGEgKQotCQkJCXMuZGF0YSA9IChz
LmRhdGEgKyAiIikucmVwbGFjZShqc3JlLCAiPSIgKyBqc29ucCArICIkMSIpOwotCQkJcy51cmwg
PSBzLnVybC5yZXBsYWNlKGpzcmUsICI9IiArIGpzb25wICsgIiQxIik7Ci0KLQkJCS8vIFdlIG5l
ZWQgdG8gbWFrZSBzdXJlCi0JCQkvLyB0aGF0IGEgSlNPTlAgc3R5bGUgcmVzcG9uc2UgaXMgZXhl
Y3V0ZWQgcHJvcGVybHkKLQkJCXMuZGF0YVR5cGUgPSAic2NyaXB0IjsKLQotCQkJLy8gSGFuZGxl
IEpTT05QLXN0eWxlIGxvYWRpbmcKLQkJCXdpbmRvd1sganNvbnAgXSA9IGZ1bmN0aW9uKHRtcCl7
Ci0JCQkJZGF0YSA9IHRtcDsKLQkJCQlzdWNjZXNzKCk7Ci0JCQkJY29tcGxldGUoKTsKLQkJCQkv
LyBHYXJiYWdlIGNvbGxlY3QKLQkJCQl3aW5kb3dbIGpzb25wIF0gPSB1bmRlZmluZWQ7Ci0JCQkJ
dHJ5eyBkZWxldGUgd2luZG93WyBqc29ucCBdOyB9IGNhdGNoKGUpe30KLQkJCQlpZiAoIGhlYWQg
KQotCQkJCQloZWFkLnJlbW92ZUNoaWxkKCBzY3JpcHQgKTsKLQkJCX07Ci0JCX0KLQotCQlpZiAo
IHMuZGF0YVR5cGUgPT0gInNjcmlwdCIgJiYgcy5jYWNoZSA9PSBudWxsICkKLQkJCXMuY2FjaGUg
PSBmYWxzZTsKLQotCQlpZiAoIHMuY2FjaGUgPT09IGZhbHNlICYmIHMudHlwZS50b0xvd2VyQ2Fz
ZSgpID09ICJnZXQiICkgewotCQkJdmFyIHRzID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKTsKLQkJ
CS8vIHRyeSByZXBsYWNpbmcgXz0gaWYgaXQgaXMgdGhlcmUKLQkJCXZhciByZXQgPSBzLnVybC5y
ZXBsYWNlKC8oXD98JilfPS4qPygmfCQpLywgIiQxXz0iICsgdHMgKyAiJDIiKTsKLQkJCS8vIGlm
IG5vdGhpbmcgd2FzIHJlcGxhY2VkLCBhZGQgdGltZXN0YW1wIHRvIHRoZSBlbmQKLQkJCXMudXJs
ID0gcmV0ICsgKChyZXQgPT0gcy51cmwpID8gKHMudXJsLm1hdGNoKC9cPy8pID8gIiYiIDogIj8i
KSArICJfPSIgKyB0cyA6ICIiKTsKLQkJfQotCi0JCS8vIElmIGRhdGEgaXMgYXZhaWxhYmxlLCBh
cHBlbmQgZGF0YSB0byB1cmwgZm9yIGdldCByZXF1ZXN0cwotCQlpZiAoIHMuZGF0YSAmJiBzLnR5
cGUudG9Mb3dlckNhc2UoKSA9PSAiZ2V0IiApIHsKLQkJCXMudXJsICs9IChzLnVybC5tYXRjaCgv
XD8vKSA/ICImIiA6ICI/IikgKyBzLmRhdGE7Ci0KLQkJCS8vIElFIGxpa2VzIHRvIHNlbmQgYm90
aCBnZXQgYW5kIHBvc3QgZGF0YSwgcHJldmVudCB0aGlzCi0JCQlzLmRhdGEgPSBudWxsOwotCQl9
Ci0KLQkJLy8gV2F0Y2ggZm9yIGEgbmV3IHNldCBvZiByZXF1ZXN0cwotCQlpZiAoIHMuZ2xvYmFs
ICYmICEgalF1ZXJ5LmFjdGl2ZSsrICkKLQkJCWpRdWVyeS5ldmVudC50cmlnZ2VyKCAiYWpheFN0
YXJ0IiApOwotCi0JCS8vIElmIHdlJ3JlIHJlcXVlc3RpbmcgYSByZW1vdGUgZG9jdW1lbnQKLQkJ
Ly8gYW5kIHRyeWluZyB0byBsb2FkIEpTT04gb3IgU2NyaXB0IHdpdGggYSBHRVQKLQkJaWYgKCAo
IXMudXJsLmluZGV4T2YoImh0dHAiKSB8fCAhcy51cmwuaW5kZXhPZigiLy8iKSkgJiYgcy5kYXRh
VHlwZSA9PSAic2NyaXB0IiAmJiBzLnR5cGUudG9Mb3dlckNhc2UoKSA9PSAiZ2V0IiApIHsKLQkJ
CXZhciBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXTsKLQkJ
CXZhciBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTsKLQkJCXNjcmlw
dC5zcmMgPSBzLnVybDsKLQkJCWlmIChzLnNjcmlwdENoYXJzZXQpCi0JCQkJc2NyaXB0LmNoYXJz
ZXQgPSBzLnNjcmlwdENoYXJzZXQ7Ci0KLQkJCS8vIEhhbmRsZSBTY3JpcHQgbG9hZGluZwotCQkJ
aWYgKCAhanNvbnAgKSB7Ci0JCQkJdmFyIGRvbmUgPSBmYWxzZTsKLQotCQkJCS8vIEF0dGFjaCBo
YW5kbGVycyBmb3IgYWxsIGJyb3dzZXJzCi0JCQkJc2NyaXB0Lm9ubG9hZCA9IHNjcmlwdC5vbnJl
YWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpewotCQkJCQlpZiAoICFkb25lICYmICghdGhpcy5y
ZWFkeVN0YXRlIHx8IAotCQkJCQkJCXRoaXMucmVhZHlTdGF0ZSA9PSAibG9hZGVkIiB8fCB0aGlz
LnJlYWR5U3RhdGUgPT0gImNvbXBsZXRlIikgKSB7Ci0JCQkJCQlkb25lID0gdHJ1ZTsKLQkJCQkJ
CXN1Y2Nlc3MoKTsKLQkJCQkJCWNvbXBsZXRlKCk7Ci0JCQkJCQloZWFkLnJlbW92ZUNoaWxkKCBz
Y3JpcHQgKTsKLQkJCQkJfQotCQkJCX07Ci0JCQl9Ci0KLQkJCWhlYWQuYXBwZW5kQ2hpbGQoc2Ny
aXB0KTsKLQotCQkJLy8gV2UgaGFuZGxlIGV2ZXJ5dGhpbmcgdXNpbmcgdGhlIHNjcmlwdCBlbGVt
ZW50IGluamVjdGlvbgotCQkJcmV0dXJuIHVuZGVmaW5lZDsKLQkJfQotCi0JCXZhciByZXF1ZXN0
RG9uZSA9IGZhbHNlOwotCi0JCS8vIENyZWF0ZSB0aGUgcmVxdWVzdCBvYmplY3Q7IE1pY3Jvc29m
dCBmYWlsZWQgdG8gcHJvcGVybHkKLQkJLy8gaW1wbGVtZW50IHRoZSBYTUxIdHRwUmVxdWVzdCBp
biBJRTcsIHNvIHdlIHVzZSB0aGUgQWN0aXZlWE9iamVjdCB3aGVuIGl0IGlzIGF2YWlsYWJsZQot
CQl2YXIgeG1sID0gd2luZG93LkFjdGl2ZVhPYmplY3QgPyBuZXcgQWN0aXZlWE9iamVjdCgiTWlj
cm9zb2Z0LlhNTEhUVFAiKSA6IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwotCi0JCS8vIE9wZW4gdGhl
IHNvY2tldAotCQl4bWwub3BlbihzLnR5cGUsIHMudXJsLCBzLmFzeW5jLCBzLnVzZXJuYW1lLCBz
LnBhc3N3b3JkKTsKLQotCQkvLyBOZWVkIGFuIGV4dHJhIHRyeS9jYXRjaCBmb3IgY3Jvc3MgZG9t
YWluIHJlcXVlc3RzIGluIEZpcmVmb3ggMwotCQl0cnkgewotCQkJLy8gU2V0IHRoZSBjb3JyZWN0
IGhlYWRlciwgaWYgZGF0YSBpcyBiZWluZyBzZW50Ci0JCQlpZiAoIHMuZGF0YSApCi0JCQkJeG1s
LnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsIHMuY29udGVudFR5cGUpOwotCi0JCQkv
LyBTZXQgdGhlIElmLU1vZGlmaWVkLVNpbmNlIGhlYWRlciwgaWYgaWZNb2RpZmllZCBtb2RlLgot
CQkJaWYgKCBzLmlmTW9kaWZpZWQgKQotCQkJCXhtbC5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Nb2Rp
ZmllZC1TaW5jZSIsCi0JCQkJCWpRdWVyeS5sYXN0TW9kaWZpZWRbcy51cmxdIHx8ICJUaHUsIDAx
IEphbiAxOTcwIDAwOjAwOjAwIEdNVCIgKTsKLQotCQkJLy8gU2V0IGhlYWRlciBzbyB0aGUgY2Fs
bGVkIHNjcmlwdCBrbm93cyB0aGF0IGl0J3MgYW4gWE1MSHR0cFJlcXVlc3QKLQkJCXhtbC5zZXRS
ZXF1ZXN0SGVhZGVyKCJYLVJlcXVlc3RlZC1XaXRoIiwgIlhNTEh0dHBSZXF1ZXN0Iik7Ci0KLQkJ
CS8vIFNldCB0aGUgQWNjZXB0cyBoZWFkZXIgZm9yIHRoZSBzZXJ2ZXIsIGRlcGVuZGluZyBvbiB0
aGUgZGF0YVR5cGUKLQkJCXhtbC5zZXRSZXF1ZXN0SGVhZGVyKCJBY2NlcHQiLCBzLmRhdGFUeXBl
ICYmIHMuYWNjZXB0c1sgcy5kYXRhVHlwZSBdID8KLQkJCQlzLmFjY2VwdHNbIHMuZGF0YVR5cGUg
XSArICIsICovKiIgOgotCQkJCXMuYWNjZXB0cy5fZGVmYXVsdCApOwotCQl9IGNhdGNoKGUpe30K
LQotCQkvLyBBbGxvdyBjdXN0b20gaGVhZGVycy9taW1ldHlwZXMKLQkJaWYgKCBzLmJlZm9yZVNl
bmQgKQotCQkJcy5iZWZvcmVTZW5kKHhtbCk7Ci0JCQkKLQkJaWYgKCBzLmdsb2JhbCApCi0JCQlq
UXVlcnkuZXZlbnQudHJpZ2dlcigiYWpheFNlbmQiLCBbeG1sLCBzXSk7Ci0KLQkJLy8gV2FpdCBm
b3IgYSByZXNwb25zZSB0byBjb21lIGJhY2sKLQkJdmFyIG9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1
bmN0aW9uKGlzVGltZW91dCl7Ci0JCQkvLyBUaGUgdHJhbnNmZXIgaXMgY29tcGxldGUgYW5kIHRo
ZSBkYXRhIGlzIGF2YWlsYWJsZSwgb3IgdGhlIHJlcXVlc3QgdGltZWQgb3V0Ci0JCQlpZiAoICFy
ZXF1ZXN0RG9uZSAmJiB4bWwgJiYgKHhtbC5yZWFkeVN0YXRlID09IDQgfHwgaXNUaW1lb3V0ID09
ICJ0aW1lb3V0IikgKSB7Ci0JCQkJcmVxdWVzdERvbmUgPSB0cnVlOwotCQkJCQotCQkJCS8vIGNs
ZWFyIHBvbGwgaW50ZXJ2YWwKLQkJCQlpZiAoaXZhbCkgewotCQkJCQljbGVhckludGVydmFsKGl2
YWwpOwotCQkJCQlpdmFsID0gbnVsbDsKLQkJCQl9Ci0JCQkJCi0JCQkJc3RhdHVzID0gaXNUaW1l
b3V0ID09ICJ0aW1lb3V0IiAmJiAidGltZW91dCIgfHwKLQkJCQkJIWpRdWVyeS5odHRwU3VjY2Vz
cyggeG1sICkgJiYgImVycm9yIiB8fAotCQkJCQlzLmlmTW9kaWZpZWQgJiYgalF1ZXJ5Lmh0dHBO
b3RNb2RpZmllZCggeG1sLCBzLnVybCApICYmICJub3Rtb2RpZmllZCIgfHwKLQkJCQkJInN1Y2Nl
c3MiOwotCi0JCQkJaWYgKCBzdGF0dXMgPT0gInN1Y2Nlc3MiICkgewotCQkJCQkvLyBXYXRjaCBm
b3IsIGFuZCBjYXRjaCwgWE1MIGRvY3VtZW50IHBhcnNlIGVycm9ycwotCQkJCQl0cnkgewotCQkJ
CQkJLy8gcHJvY2VzcyB0aGUgZGF0YSAocnVucyB0aGUgeG1sIHRocm91Z2ggaHR0cERhdGEgcmVn
YXJkbGVzcyBvZiBjYWxsYmFjaykKLQkJCQkJCWRhdGEgPSBqUXVlcnkuaHR0cERhdGEoIHhtbCwg
cy5kYXRhVHlwZSApOwotCQkJCQl9IGNhdGNoKGUpIHsKLQkJCQkJCXN0YXR1cyA9ICJwYXJzZXJl
cnJvciI7Ci0JCQkJCX0KLQkJCQl9Ci0KLQkJCQkvLyBNYWtlIHN1cmUgdGhhdCB0aGUgcmVxdWVz
dCB3YXMgc3VjY2Vzc2Z1bCBvciBub3Rtb2RpZmllZAotCQkJCWlmICggc3RhdHVzID09ICJzdWNj
ZXNzIiApIHsKLQkJCQkJLy8gQ2FjaGUgTGFzdC1Nb2RpZmllZCBoZWFkZXIsIGlmIGlmTW9kaWZp
ZWQgbW9kZS4KLQkJCQkJdmFyIG1vZFJlczsKLQkJCQkJdHJ5IHsKLQkJCQkJCW1vZFJlcyA9IHht
bC5nZXRSZXNwb25zZUhlYWRlcigiTGFzdC1Nb2RpZmllZCIpOwotCQkJCQl9IGNhdGNoKGUpIHt9
IC8vIHN3YWxsb3cgZXhjZXB0aW9uIHRocm93biBieSBGRiBpZiBoZWFkZXIgaXMgbm90IGF2YWls
YWJsZQotCQotCQkJCQlpZiAoIHMuaWZNb2RpZmllZCAmJiBtb2RSZXMgKQotCQkJCQkJalF1ZXJ5
Lmxhc3RNb2RpZmllZFtzLnVybF0gPSBtb2RSZXM7Ci0KLQkJCQkJLy8gSlNPTlAgaGFuZGxlcyBp
dHMgb3duIHN1Y2Nlc3MgY2FsbGJhY2sKLQkJCQkJaWYgKCAhanNvbnAgKQotCQkJCQkJc3VjY2Vz
cygpOwkKLQkJCQl9IGVsc2UKLQkJCQkJalF1ZXJ5LmhhbmRsZUVycm9yKHMsIHhtbCwgc3RhdHVz
KTsKLQotCQkJCS8vIEZpcmUgdGhlIGNvbXBsZXRlIGhhbmRsZXJzCi0JCQkJY29tcGxldGUoKTsK
LQotCQkJCS8vIFN0b3AgbWVtb3J5IGxlYWtzCi0JCQkJaWYgKCBzLmFzeW5jICkKLQkJCQkJeG1s
ID0gbnVsbDsKLQkJCX0KLQkJfTsKLQkJCi0JCWlmICggcy5hc3luYyApIHsKLQkJCS8vIGRvbid0
IGF0dGFjaCB0aGUgaGFuZGxlciB0byB0aGUgcmVxdWVzdCwganVzdCBwb2xsIGl0IGluc3RlYWQK
LQkJCXZhciBpdmFsID0gc2V0SW50ZXJ2YWwob25yZWFkeXN0YXRlY2hhbmdlLCAxMyk7IAotCi0J
CQkvLyBUaW1lb3V0IGNoZWNrZXIKLQkJCWlmICggcy50aW1lb3V0ID4gMCApCi0JCQkJc2V0VGlt
ZW91dChmdW5jdGlvbigpewotCQkJCQkvLyBDaGVjayB0byBzZWUgaWYgdGhlIHJlcXVlc3QgaXMg
c3RpbGwgaGFwcGVuaW5nCi0JCQkJCWlmICggeG1sICkgewotCQkJCQkJLy8gQ2FuY2VsIHRoZSBy
ZXF1ZXN0Ci0JCQkJCQl4bWwuYWJvcnQoKTsKLQkKLQkJCQkJCWlmKCAhcmVxdWVzdERvbmUgKQot
CQkJCQkJCW9ucmVhZHlzdGF0ZWNoYW5nZSggInRpbWVvdXQiICk7Ci0JCQkJCX0KLQkJCQl9LCBz
LnRpbWVvdXQpOwotCQl9Ci0JCQkKLQkJLy8gU2VuZCB0aGUgZGF0YQotCQl0cnkgewotCQkJeG1s
LnNlbmQocy5kYXRhKTsKLQkJfSBjYXRjaChlKSB7Ci0JCQlqUXVlcnkuaGFuZGxlRXJyb3Iocywg
eG1sLCBudWxsLCBlKTsKLQkJfQotCQkKLQkJLy8gZmlyZWZveCAxLjUgZG9lc24ndCBmaXJlIHN0
YXRlY2hhbmdlIGZvciBzeW5jIHJlcXVlc3RzCi0JCWlmICggIXMuYXN5bmMgKQotCQkJb25yZWFk
eXN0YXRlY2hhbmdlKCk7Ci0KLQkJZnVuY3Rpb24gc3VjY2VzcygpewotCQkJLy8gSWYgYSBsb2Nh
bCBjYWxsYmFjayB3YXMgc3BlY2lmaWVkLCBmaXJlIGl0IGFuZCBwYXNzIGl0IHRoZSBkYXRhCi0J
CQlpZiAoIHMuc3VjY2VzcyApCi0JCQkJcy5zdWNjZXNzKCBkYXRhLCBzdGF0dXMgKTsKLQotCQkJ
Ly8gRmlyZSB0aGUgZ2xvYmFsIGNhbGxiYWNrCi0JCQlpZiAoIHMuZ2xvYmFsICkKLQkJCQlqUXVl
cnkuZXZlbnQudHJpZ2dlciggImFqYXhTdWNjZXNzIiwgW3htbCwgc10gKTsKLQkJfQotCi0JCWZ1
bmN0aW9uIGNvbXBsZXRlKCl7Ci0JCQkvLyBQcm9jZXNzIHJlc3VsdAotCQkJaWYgKCBzLmNvbXBs
ZXRlICkKLQkJCQlzLmNvbXBsZXRlKHhtbCwgc3RhdHVzKTsKLQotCQkJLy8gVGhlIHJlcXVlc3Qg
d2FzIGNvbXBsZXRlZAotCQkJaWYgKCBzLmdsb2JhbCApCi0JCQkJalF1ZXJ5LmV2ZW50LnRyaWdn
ZXIoICJhamF4Q29tcGxldGUiLCBbeG1sLCBzXSApOwotCi0JCQkvLyBIYW5kbGUgdGhlIGdsb2Jh
bCBBSkFYIGNvdW50ZXIKLQkJCWlmICggcy5nbG9iYWwgJiYgISAtLWpRdWVyeS5hY3RpdmUgKQot
CQkJCWpRdWVyeS5ldmVudC50cmlnZ2VyKCAiYWpheFN0b3AiICk7Ci0JCX0KLQkJCi0JCS8vIHJl
dHVybiBYTUxIdHRwUmVxdWVzdCB0byBhbGxvdyBhYm9ydGluZyB0aGUgcmVxdWVzdCBldGMuCi0J
CXJldHVybiB4bWw7Ci0JfSwKLQotCWhhbmRsZUVycm9yOiBmdW5jdGlvbiggcywgeG1sLCBzdGF0
dXMsIGUgKSB7Ci0JCS8vIElmIGEgbG9jYWwgY2FsbGJhY2sgd2FzIHNwZWNpZmllZCwgZmlyZSBp
dAotCQlpZiAoIHMuZXJyb3IgKSBzLmVycm9yKCB4bWwsIHN0YXR1cywgZSApOwotCi0JCS8vIEZp
cmUgdGhlIGdsb2JhbCBjYWxsYmFjawotCQlpZiAoIHMuZ2xvYmFsICkKLQkJCWpRdWVyeS5ldmVu
dC50cmlnZ2VyKCAiYWpheEVycm9yIiwgW3htbCwgcywgZV0gKTsKLQl9LAotCi0JLy8gQ291bnRl
ciBmb3IgaG9sZGluZyB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBxdWVyaWVzCi0JYWN0aXZlOiAwLAot
Ci0JLy8gRGV0ZXJtaW5lcyBpZiBhbiBYTUxIdHRwUmVxdWVzdCB3YXMgc3VjY2Vzc2Z1bCBvciBu
b3QKLQlodHRwU3VjY2VzczogZnVuY3Rpb24oIHIgKSB7Ci0JCXRyeSB7Ci0JCQkvLyBJRSBlcnJv
ciBzb21ldGltZXMgcmV0dXJucyAxMjIzIHdoZW4gaXQgc2hvdWxkIGJlIDIwNCBzbyB0cmVhdCBp
dCBhcyBzdWNjZXNzLCBzZWUgIzE0NTAKLQkJCXJldHVybiAhci5zdGF0dXMgJiYgbG9jYXRpb24u
cHJvdG9jb2wgPT0gImZpbGU6IiB8fAotCQkJCSggci5zdGF0dXMgPj0gMjAwICYmIHIuc3RhdHVz
IDwgMzAwICkgfHwgci5zdGF0dXMgPT0gMzA0IHx8IHIuc3RhdHVzID09IDEyMjMgfHwKLQkJCQlq
UXVlcnkuYnJvd3Nlci5zYWZhcmkgJiYgci5zdGF0dXMgPT0gdW5kZWZpbmVkOwotCQl9IGNhdGNo
KGUpe30KLQkJcmV0dXJuIGZhbHNlOwotCX0sCi0KLQkvLyBEZXRlcm1pbmVzIGlmIGFuIFhNTEh0
dHBSZXF1ZXN0IHJldHVybnMgTm90TW9kaWZpZWQKLQlodHRwTm90TW9kaWZpZWQ6IGZ1bmN0aW9u
KCB4bWwsIHVybCApIHsKLQkJdHJ5IHsKLQkJCXZhciB4bWxSZXMgPSB4bWwuZ2V0UmVzcG9uc2VI
ZWFkZXIoIkxhc3QtTW9kaWZpZWQiKTsKLQotCQkJLy8gRmlyZWZveCBhbHdheXMgcmV0dXJucyAy
MDAuIGNoZWNrIExhc3QtTW9kaWZpZWQgZGF0ZQotCQkJcmV0dXJuIHhtbC5zdGF0dXMgPT0gMzA0
IHx8IHhtbFJlcyA9PSBqUXVlcnkubGFzdE1vZGlmaWVkW3VybF0gfHwKLQkJCQlqUXVlcnkuYnJv
d3Nlci5zYWZhcmkgJiYgeG1sLnN0YXR1cyA9PSB1bmRlZmluZWQ7Ci0JCX0gY2F0Y2goZSl7fQot
CQlyZXR1cm4gZmFsc2U7Ci0JfSwKLQotCWh0dHBEYXRhOiBmdW5jdGlvbiggciwgdHlwZSApIHsK
LQkJdmFyIGN0ID0gci5nZXRSZXNwb25zZUhlYWRlcigiY29udGVudC10eXBlIik7Ci0JCXZhciB4
bWwgPSB0eXBlID09ICJ4bWwiIHx8ICF0eXBlICYmIGN0ICYmIGN0LmluZGV4T2YoInhtbCIpID49
IDA7Ci0JCXZhciBkYXRhID0geG1sID8gci5yZXNwb25zZVhNTCA6IHIucmVzcG9uc2VUZXh0Owot
Ci0JCWlmICggeG1sICYmIGRhdGEuZG9jdW1lbnRFbGVtZW50LnRhZ05hbWUgPT0gInBhcnNlcmVy
cm9yIiApCi0JCQl0aHJvdyAicGFyc2VyZXJyb3IiOwotCi0JCS8vIElmIHRoZSB0eXBlIGlzICJz
Y3JpcHQiLCBldmFsIGl0IGluIGdsb2JhbCBjb250ZXh0Ci0JCWlmICggdHlwZSA9PSAic2NyaXB0
IiApCi0JCQlqUXVlcnkuZ2xvYmFsRXZhbCggZGF0YSApOwotCi0JCS8vIEdldCB0aGUgSmF2YVNj
cmlwdCBvYmplY3QsIGlmIEpTT04gaXMgdXNlZC4KLQkJaWYgKCB0eXBlID09ICJqc29uIiApCi0J
CQlkYXRhID0gZXZhbCgiKCIgKyBkYXRhICsgIikiKTsKLQotCQlyZXR1cm4gZGF0YTsKLQl9LAot
Ci0JLy8gU2VyaWFsaXplIGFuIGFycmF5IG9mIGZvcm0gZWxlbWVudHMgb3IgYSBzZXQgb2YKLQkv
LyBrZXkvdmFsdWVzIGludG8gYSBxdWVyeSBzdHJpbmcKLQlwYXJhbTogZnVuY3Rpb24oIGEgKSB7
Ci0JCXZhciBzID0gW107Ci0KLQkJLy8gSWYgYW4gYXJyYXkgd2FzIHBhc3NlZCBpbiwgYXNzdW1l
IHRoYXQgaXQgaXMgYW4gYXJyYXkKLQkJLy8gb2YgZm9ybSBlbGVtZW50cwotCQlpZiAoIGEuY29u
c3RydWN0b3IgPT0gQXJyYXkgfHwgYS5qcXVlcnkgKQotCQkJLy8gU2VyaWFsaXplIHRoZSBmb3Jt
IGVsZW1lbnRzCi0JCQlqUXVlcnkuZWFjaCggYSwgZnVuY3Rpb24oKXsKLQkJCQlzLnB1c2goIGVu
Y29kZVVSSUNvbXBvbmVudCh0aGlzLm5hbWUpICsgIj0iICsgZW5jb2RlVVJJQ29tcG9uZW50KCB0
aGlzLnZhbHVlICkgKTsKLQkJCX0pOwotCi0JCS8vIE90aGVyd2lzZSwgYXNzdW1lIHRoYXQgaXQn
cyBhbiBvYmplY3Qgb2Yga2V5L3ZhbHVlIHBhaXJzCi0JCWVsc2UKLQkJCS8vIFNlcmlhbGl6ZSB0
aGUga2V5L3ZhbHVlcwotCQkJZm9yICggdmFyIGogaW4gYSApCi0JCQkJLy8gSWYgdGhlIHZhbHVl
IGlzIGFuIGFycmF5IHRoZW4gdGhlIGtleSBuYW1lcyBuZWVkIHRvIGJlIHJlcGVhdGVkCi0JCQkJ
aWYgKCBhW2pdICYmIGFbal0uY29uc3RydWN0b3IgPT0gQXJyYXkgKQotCQkJCQlqUXVlcnkuZWFj
aCggYVtqXSwgZnVuY3Rpb24oKXsKLQkJCQkJCXMucHVzaCggZW5jb2RlVVJJQ29tcG9uZW50KGop
ICsgIj0iICsgZW5jb2RlVVJJQ29tcG9uZW50KCB0aGlzICkgKTsKLQkJCQkJfSk7Ci0JCQkJZWxz
ZQotCQkJCQlzLnB1c2goIGVuY29kZVVSSUNvbXBvbmVudChqKSArICI9IiArIGVuY29kZVVSSUNv
bXBvbmVudCggYVtqXSApICk7Ci0KLQkJLy8gUmV0dXJuIHRoZSByZXN1bHRpbmcgc2VyaWFsaXph
dGlvbgotCQlyZXR1cm4gcy5qb2luKCImIikucmVwbGFjZSgvJTIwL2csICIrIik7Ci0JfQotCi19
KTsKLWpRdWVyeS5mbi5leHRlbmQoewotCXNob3c6IGZ1bmN0aW9uKHNwZWVkLGNhbGxiYWNrKXsK
LQkJcmV0dXJuIHNwZWVkID8KLQkJCXRoaXMuYW5pbWF0ZSh7Ci0JCQkJaGVpZ2h0OiAic2hvdyIs
IHdpZHRoOiAic2hvdyIsIG9wYWNpdHk6ICJzaG93IgotCQkJfSwgc3BlZWQsIGNhbGxiYWNrKSA6
Ci0JCQkKLQkJCXRoaXMuZmlsdGVyKCI6aGlkZGVuIikuZWFjaChmdW5jdGlvbigpewotCQkJCXRo
aXMuc3R5bGUuZGlzcGxheSA9IHRoaXMub2xkYmxvY2sgfHwgIiI7Ci0JCQkJaWYgKCBqUXVlcnku
Y3NzKHRoaXMsImRpc3BsYXkiKSA9PSAibm9uZSIgKSB7Ci0JCQkJCXZhciBlbGVtID0galF1ZXJ5
KCI8IiArIHRoaXMudGFnTmFtZSArICIgLz4iKS5hcHBlbmRUbygiYm9keSIpOwotCQkJCQl0aGlz
LnN0eWxlLmRpc3BsYXkgPSBlbGVtLmNzcygiZGlzcGxheSIpOwotCQkJCQkvLyBoYW5kbGUgYW4g
ZWRnZSBjb25kaXRpb24gd2hlcmUgY3NzIGlzIC0gZGl2IHsgZGlzcGxheTpub25lOyB9IG9yIHNp
bWlsYXIKLQkJCQkJaWYgKHRoaXMuc3R5bGUuZGlzcGxheSA9PSAibm9uZSIpCi0JCQkJCQl0aGlz
LnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOwotCQkJCQllbGVtLnJlbW92ZSgpOwotCQkJCX0KLQkJ
CX0pLmVuZCgpOwotCX0sCi0JCi0JaGlkZTogZnVuY3Rpb24oc3BlZWQsY2FsbGJhY2spewotCQly
ZXR1cm4gc3BlZWQgPwotCQkJdGhpcy5hbmltYXRlKHsKLQkJCQloZWlnaHQ6ICJoaWRlIiwgd2lk
dGg6ICJoaWRlIiwgb3BhY2l0eTogImhpZGUiCi0JCQl9LCBzcGVlZCwgY2FsbGJhY2spIDoKLQkJ
CQotCQkJdGhpcy5maWx0ZXIoIjp2aXNpYmxlIikuZWFjaChmdW5jdGlvbigpewotCQkJCXRoaXMu
b2xkYmxvY2sgPSB0aGlzLm9sZGJsb2NrIHx8IGpRdWVyeS5jc3ModGhpcywiZGlzcGxheSIpOwot
CQkJCXRoaXMuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKLQkJCX0pLmVuZCgpOwotCX0sCi0KLQkv
LyBTYXZlIHRoZSBvbGQgdG9nZ2xlIGZ1bmN0aW9uCi0JX3RvZ2dsZTogalF1ZXJ5LmZuLnRvZ2ds
ZSwKLQkKLQl0b2dnbGU6IGZ1bmN0aW9uKCBmbiwgZm4yICl7Ci0JCXJldHVybiBqUXVlcnkuaXNG
dW5jdGlvbihmbikgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oZm4yKSA/Ci0JCQl0aGlzLl90b2dnbGUo
IGZuLCBmbjIgKSA6Ci0JCQlmbiA/Ci0JCQkJdGhpcy5hbmltYXRlKHsKLQkJCQkJaGVpZ2h0OiAi
dG9nZ2xlIiwgd2lkdGg6ICJ0b2dnbGUiLCBvcGFjaXR5OiAidG9nZ2xlIgotCQkJCX0sIGZuLCBm
bjIpIDoKLQkJCQl0aGlzLmVhY2goZnVuY3Rpb24oKXsKLQkJCQkJalF1ZXJ5KHRoaXMpWyBqUXVl
cnkodGhpcykuaXMoIjpoaWRkZW4iKSA/ICJzaG93IiA6ICJoaWRlIiBdKCk7Ci0JCQkJfSk7Ci0J
fSwKLQkKLQlzbGlkZURvd246IGZ1bmN0aW9uKHNwZWVkLGNhbGxiYWNrKXsKLQkJcmV0dXJuIHRo
aXMuYW5pbWF0ZSh7aGVpZ2h0OiAic2hvdyJ9LCBzcGVlZCwgY2FsbGJhY2spOwotCX0sCi0JCi0J
c2xpZGVVcDogZnVuY3Rpb24oc3BlZWQsY2FsbGJhY2spewotCQlyZXR1cm4gdGhpcy5hbmltYXRl
KHtoZWlnaHQ6ICJoaWRlIn0sIHNwZWVkLCBjYWxsYmFjayk7Ci0JfSwKLQotCXNsaWRlVG9nZ2xl
OiBmdW5jdGlvbihzcGVlZCwgY2FsbGJhY2spewotCQlyZXR1cm4gdGhpcy5hbmltYXRlKHtoZWln
aHQ6ICJ0b2dnbGUifSwgc3BlZWQsIGNhbGxiYWNrKTsKLQl9LAotCQotCWZhZGVJbjogZnVuY3Rp
b24oc3BlZWQsIGNhbGxiYWNrKXsKLQkJcmV0dXJuIHRoaXMuYW5pbWF0ZSh7b3BhY2l0eTogInNo
b3cifSwgc3BlZWQsIGNhbGxiYWNrKTsKLQl9LAotCQotCWZhZGVPdXQ6IGZ1bmN0aW9uKHNwZWVk
LCBjYWxsYmFjayl7Ci0JCXJldHVybiB0aGlzLmFuaW1hdGUoe29wYWNpdHk6ICJoaWRlIn0sIHNw
ZWVkLCBjYWxsYmFjayk7Ci0JfSwKLQkKLQlmYWRlVG86IGZ1bmN0aW9uKHNwZWVkLHRvLGNhbGxi
YWNrKXsKLQkJcmV0dXJuIHRoaXMuYW5pbWF0ZSh7b3BhY2l0eTogdG99LCBzcGVlZCwgY2FsbGJh
Y2spOwotCX0sCi0JCi0JYW5pbWF0ZTogZnVuY3Rpb24oIHByb3AsIHNwZWVkLCBlYXNpbmcsIGNh
bGxiYWNrICkgewotCQl2YXIgb3B0YWxsID0galF1ZXJ5LnNwZWVkKHNwZWVkLCBlYXNpbmcsIGNh
bGxiYWNrKTsKLQotCQlyZXR1cm4gdGhpc1sgb3B0YWxsLnF1ZXVlID09PSBmYWxzZSA/ICJlYWNo
IiA6ICJxdWV1ZSIgXShmdW5jdGlvbigpewotCQkJaWYgKCB0aGlzLm5vZGVUeXBlICE9IDEpCi0J
CQkJcmV0dXJuIGZhbHNlOwotCi0JCQl2YXIgb3B0ID0galF1ZXJ5LmV4dGVuZCh7fSwgb3B0YWxs
KTsKLQkJCXZhciBoaWRkZW4gPSBqUXVlcnkodGhpcykuaXMoIjpoaWRkZW4iKSwgc2VsZiA9IHRo
aXM7Ci0JCQkKLQkJCWZvciAoIHZhciBwIGluIHByb3AgKSB7Ci0JCQkJaWYgKCBwcm9wW3BdID09
ICJoaWRlIiAmJiBoaWRkZW4gfHwgcHJvcFtwXSA9PSAic2hvdyIgJiYgIWhpZGRlbiApCi0JCQkJ
CXJldHVybiBqUXVlcnkuaXNGdW5jdGlvbihvcHQuY29tcGxldGUpICYmIG9wdC5jb21wbGV0ZS5h
cHBseSh0aGlzKTsKLQotCQkJCWlmICggcCA9PSAiaGVpZ2h0IiB8fCBwID09ICJ3aWR0aCIgKSB7
Ci0JCQkJCS8vIFN0b3JlIGRpc3BsYXkgcHJvcGVydHkKLQkJCQkJb3B0LmRpc3BsYXkgPSBqUXVl
cnkuY3NzKHRoaXMsICJkaXNwbGF5Iik7Ci0KLQkJCQkJLy8gTWFrZSBzdXJlIHRoYXQgbm90aGlu
ZyBzbmVha3Mgb3V0Ci0JCQkJCW9wdC5vdmVyZmxvdyA9IHRoaXMuc3R5bGUub3ZlcmZsb3c7Ci0J
CQkJfQotCQkJfQotCi0JCQlpZiAoIG9wdC5vdmVyZmxvdyAhPSBudWxsICkKLQkJCQl0aGlzLnN0
eWxlLm92ZXJmbG93ID0gImhpZGRlbiI7Ci0KLQkJCW9wdC5jdXJBbmltID0galF1ZXJ5LmV4dGVu
ZCh7fSwgcHJvcCk7Ci0JCQkKLQkJCWpRdWVyeS5lYWNoKCBwcm9wLCBmdW5jdGlvbihuYW1lLCB2
YWwpewotCQkJCXZhciBlID0gbmV3IGpRdWVyeS5meCggc2VsZiwgb3B0LCBuYW1lICk7Ci0KLQkJ
CQlpZiAoIC90b2dnbGV8c2hvd3xoaWRlLy50ZXN0KHZhbCkgKQotCQkJCQllWyB2YWwgPT0gInRv
Z2dsZSIgPyBoaWRkZW4gPyAic2hvdyIgOiAiaGlkZSIgOiB2YWwgXSggcHJvcCApOwotCQkJCWVs
c2UgewotCQkJCQl2YXIgcGFydHMgPSB2YWwudG9TdHJpbmcoKS5tYXRjaCgvXihbKy1dPSk/KFtc
ZCstLl0rKSguKikkLyksCi0JCQkJCQlzdGFydCA9IGUuY3VyKHRydWUpIHx8IDA7Ci0KLQkJCQkJ
aWYgKCBwYXJ0cyApIHsKLQkJCQkJCXZhciBlbmQgPSBwYXJzZUZsb2F0KHBhcnRzWzJdKSwKLQkJ
CQkJCQl1bml0ID0gcGFydHNbM10gfHwgInB4IjsKLQotCQkJCQkJLy8gV2UgbmVlZCB0byBjb21w
dXRlIHN0YXJ0aW5nIHZhbHVlCi0JCQkJCQlpZiAoIHVuaXQgIT0gInB4IiApIHsKLQkJCQkJCQlz
ZWxmLnN0eWxlWyBuYW1lIF0gPSAoZW5kIHx8IDEpICsgdW5pdDsKLQkJCQkJCQlzdGFydCA9ICgo
ZW5kIHx8IDEpIC8gZS5jdXIodHJ1ZSkpICogc3RhcnQ7Ci0JCQkJCQkJc2VsZi5zdHlsZVsgbmFt
ZSBdID0gc3RhcnQgKyB1bml0OwotCQkJCQkJfQotCi0JCQkJCQkvLyBJZiBhICs9Ly09IHRva2Vu
IHdhcyBwcm92aWRlZCwgd2UncmUgZG9pbmcgYSByZWxhdGl2ZSBhbmltYXRpb24KLQkJCQkJCWlm
ICggcGFydHNbMV0gKQotCQkJCQkJCWVuZCA9ICgocGFydHNbMV0gPT0gIi09IiA/IC0xIDogMSkg
KiBlbmQpICsgc3RhcnQ7Ci0KLQkJCQkJCWUuY3VzdG9tKCBzdGFydCwgZW5kLCB1bml0ICk7Ci0J
CQkJCX0gZWxzZQotCQkJCQkJZS5jdXN0b20oIHN0YXJ0LCB2YWwsICIiICk7Ci0JCQkJfQotCQkJ
fSk7Ci0KLQkJCS8vIEZvciBKUyBzdHJpY3QgY29tcGxpYW5jZQotCQkJcmV0dXJuIHRydWU7Ci0J
CX0pOwotCX0sCi0JCi0JcXVldWU6IGZ1bmN0aW9uKHR5cGUsIGZuKXsKLQkJaWYgKCBqUXVlcnku
aXNGdW5jdGlvbih0eXBlKSB8fCAoIHR5cGUgJiYgdHlwZS5jb25zdHJ1Y3RvciA9PSBBcnJheSAp
KSB7Ci0JCQlmbiA9IHR5cGU7Ci0JCQl0eXBlID0gImZ4IjsKLQkJfQotCi0JCWlmICggIXR5cGUg
fHwgKHR5cGVvZiB0eXBlID09ICJzdHJpbmciICYmICFmbikgKQotCQkJcmV0dXJuIHF1ZXVlKCB0
aGlzWzBdLCB0eXBlICk7Ci0KLQkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpewotCQkJaWYg
KCBmbi5jb25zdHJ1Y3RvciA9PSBBcnJheSApCi0JCQkJcXVldWUodGhpcywgdHlwZSwgZm4pOwot
CQkJZWxzZSB7Ci0JCQkJcXVldWUodGhpcywgdHlwZSkucHVzaCggZm4gKTsKLQkJCQotCQkJCWlm
ICggcXVldWUodGhpcywgdHlwZSkubGVuZ3RoID09IDEgKQotCQkJCQlmbi5hcHBseSh0aGlzKTsK
LQkJCX0KLQkJfSk7Ci0JfSwKLQotCXN0b3A6IGZ1bmN0aW9uKGNsZWFyUXVldWUsIGdvdG9FbmQp
ewotCQl2YXIgdGltZXJzID0galF1ZXJ5LnRpbWVyczsKLQotCQlpZiAoY2xlYXJRdWV1ZSkKLQkJ
CXRoaXMucXVldWUoW10pOwotCi0JCXRoaXMuZWFjaChmdW5jdGlvbigpewotCQkJLy8gZ28gaW4g
cmV2ZXJzZSBvcmRlciBzbyBhbnl0aGluZyBhZGRlZCB0byB0aGUgcXVldWUgZHVyaW5nIHRoZSBs
b29wIGlzIGlnbm9yZWQKLQkJCWZvciAoIHZhciBpID0gdGltZXJzLmxlbmd0aCAtIDE7IGkgPj0g
MDsgaS0tICkKLQkJCQlpZiAoIHRpbWVyc1tpXS5lbGVtID09IHRoaXMgKSB7Ci0JCQkJCWlmIChn
b3RvRW5kKQotCQkJCQkJLy8gZm9yY2UgdGhlIG5leHQgc3RlcCB0byBiZSB0aGUgbGFzdAotCQkJ
CQkJdGltZXJzW2ldKHRydWUpOwotCQkJCQl0aW1lcnMuc3BsaWNlKGksIDEpOwotCQkJCX0KLQkJ
fSk7Ci0KLQkJLy8gc3RhcnQgdGhlIG5leHQgaW4gdGhlIHF1ZXVlIGlmIHRoZSBsYXN0IHN0ZXAg
d2Fzbid0IGZvcmNlZAotCQlpZiAoIWdvdG9FbmQpCi0JCQl0aGlzLmRlcXVldWUoKTsKLQotCQly
ZXR1cm4gdGhpczsKLQl9Ci0KLX0pOwotCi12YXIgcXVldWUgPSBmdW5jdGlvbiggZWxlbSwgdHlw
ZSwgYXJyYXkgKSB7Ci0JaWYgKCAhZWxlbSApCi0JCXJldHVybiB1bmRlZmluZWQ7Ci0KLQl0eXBl
ID0gdHlwZSB8fCAiZngiOwotCi0JdmFyIHEgPSBqUXVlcnkuZGF0YSggZWxlbSwgdHlwZSArICJx
dWV1ZSIgKTsKLQotCWlmICggIXEgfHwgYXJyYXkgKQotCQlxID0galF1ZXJ5LmRhdGEoIGVsZW0s
IHR5cGUgKyAicXVldWUiLCAKLQkJCWFycmF5ID8galF1ZXJ5Lm1ha2VBcnJheShhcnJheSkgOiBb
XSApOwotCi0JcmV0dXJuIHE7Ci19OwotCi1qUXVlcnkuZm4uZGVxdWV1ZSA9IGZ1bmN0aW9uKHR5
cGUpewotCXR5cGUgPSB0eXBlIHx8ICJmeCI7Ci0KLQlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9u
KCl7Ci0JCXZhciBxID0gcXVldWUodGhpcywgdHlwZSk7Ci0KLQkJcS5zaGlmdCgpOwotCi0JCWlm
ICggcS5sZW5ndGggKQotCQkJcVswXS5hcHBseSggdGhpcyApOwotCX0pOwotfTsKLQotalF1ZXJ5
LmV4dGVuZCh7Ci0JCi0Jc3BlZWQ6IGZ1bmN0aW9uKHNwZWVkLCBlYXNpbmcsIGZuKSB7Ci0JCXZh
ciBvcHQgPSBzcGVlZCAmJiBzcGVlZC5jb25zdHJ1Y3RvciA9PSBPYmplY3QgPyBzcGVlZCA6IHsK
LQkJCWNvbXBsZXRlOiBmbiB8fCAhZm4gJiYgZWFzaW5nIHx8IAotCQkJCWpRdWVyeS5pc0Z1bmN0
aW9uKCBzcGVlZCApICYmIHNwZWVkLAotCQkJZHVyYXRpb246IHNwZWVkLAotCQkJZWFzaW5nOiBm
biAmJiBlYXNpbmcgfHwgZWFzaW5nICYmIGVhc2luZy5jb25zdHJ1Y3RvciAhPSBGdW5jdGlvbiAm
JiBlYXNpbmcKLQkJfTsKLQotCQlvcHQuZHVyYXRpb24gPSAob3B0LmR1cmF0aW9uICYmIG9wdC5k
dXJhdGlvbi5jb25zdHJ1Y3RvciA9PSBOdW1iZXIgPyAKLQkJCW9wdC5kdXJhdGlvbiA6IAotCQkJ
eyBzbG93OiA2MDAsIGZhc3Q6IDIwMCB9W29wdC5kdXJhdGlvbl0pIHx8IDQwMDsKLQkKLQkJLy8g
UXVldWVpbmcKLQkJb3B0Lm9sZCA9IG9wdC5jb21wbGV0ZTsKLQkJb3B0LmNvbXBsZXRlID0gZnVu
Y3Rpb24oKXsKLQkJCWlmICggb3B0LnF1ZXVlICE9PSBmYWxzZSApCi0JCQkJalF1ZXJ5KHRoaXMp
LmRlcXVldWUoKTsKLQkJCWlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIG9wdC5vbGQgKSApCi0JCQkJ
b3B0Lm9sZC5hcHBseSggdGhpcyApOwotCQl9OwotCQotCQlyZXR1cm4gb3B0OwotCX0sCi0JCi0J
ZWFzaW5nOiB7Ci0JCWxpbmVhcjogZnVuY3Rpb24oIHAsIG4sIGZpcnN0TnVtLCBkaWZmICkgewot
CQkJcmV0dXJuIGZpcnN0TnVtICsgZGlmZiAqIHA7Ci0JCX0sCi0JCXN3aW5nOiBmdW5jdGlvbigg
cCwgbiwgZmlyc3ROdW0sIGRpZmYgKSB7Ci0JCQlyZXR1cm4gKCgtTWF0aC5jb3MocCpNYXRoLlBJ
KS8yKSArIDAuNSkgKiBkaWZmICsgZmlyc3ROdW07Ci0JCX0KLQl9LAotCQotCXRpbWVyczogW10s
Ci0JdGltZXJJZDogbnVsbCwKLQotCWZ4OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgcHJvcCAp
ewotCQl0aGlzLm9wdGlvbnMgPSBvcHRpb25zOwotCQl0aGlzLmVsZW0gPSBlbGVtOwotCQl0aGlz
LnByb3AgPSBwcm9wOwotCi0JCWlmICggIW9wdGlvbnMub3JpZyApCi0JCQlvcHRpb25zLm9yaWcg
PSB7fTsKLQl9Ci0KLX0pOwotCi1qUXVlcnkuZngucHJvdG90eXBlID0gewotCi0JLy8gU2ltcGxl
IGZ1bmN0aW9uIGZvciBzZXR0aW5nIGEgc3R5bGUgdmFsdWUKLQl1cGRhdGU6IGZ1bmN0aW9uKCl7
Ci0JCWlmICggdGhpcy5vcHRpb25zLnN0ZXAgKQotCQkJdGhpcy5vcHRpb25zLnN0ZXAuYXBwbHko
IHRoaXMuZWxlbSwgWyB0aGlzLm5vdywgdGhpcyBdICk7Ci0KLQkJKGpRdWVyeS5meC5zdGVwW3Ro
aXMucHJvcF0gfHwgalF1ZXJ5LmZ4LnN0ZXAuX2RlZmF1bHQpKCB0aGlzICk7Ci0KLQkJLy8gU2V0
IGRpc3BsYXkgcHJvcGVydHkgdG8gYmxvY2sgZm9yIGhlaWdodC93aWR0aCBhbmltYXRpb25zCi0J
CWlmICggdGhpcy5wcm9wID09ICJoZWlnaHQiIHx8IHRoaXMucHJvcCA9PSAid2lkdGgiICkKLQkJ
CXRoaXMuZWxlbS5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKLQl9LAotCi0JLy8gR2V0IHRoZSBj
dXJyZW50IHNpemUKLQljdXI6IGZ1bmN0aW9uKGZvcmNlKXsKLQkJaWYgKCB0aGlzLmVsZW1bdGhp
cy5wcm9wXSAhPSBudWxsICYmIHRoaXMuZWxlbS5zdHlsZVt0aGlzLnByb3BdID09IG51bGwgKQot
CQkJcmV0dXJuIHRoaXMuZWxlbVsgdGhpcy5wcm9wIF07Ci0KLQkJdmFyIHIgPSBwYXJzZUZsb2F0
KGpRdWVyeS5jc3ModGhpcy5lbGVtLCB0aGlzLnByb3AsIGZvcmNlKSk7Ci0JCXJldHVybiByICYm
IHIgPiAtMTAwMDAgPyByIDogcGFyc2VGbG9hdChqUXVlcnkuY3VyQ1NTKHRoaXMuZWxlbSwgdGhp
cy5wcm9wKSkgfHwgMDsKLQl9LAotCi0JLy8gU3RhcnQgYW4gYW5pbWF0aW9uIGZyb20gb25lIG51
bWJlciB0byBhbm90aGVyCi0JY3VzdG9tOiBmdW5jdGlvbihmcm9tLCB0bywgdW5pdCl7Ci0JCXRo
aXMuc3RhcnRUaW1lID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKTsKLQkJdGhpcy5zdGFydCA9IGZy
b207Ci0JCXRoaXMuZW5kID0gdG87Ci0JCXRoaXMudW5pdCA9IHVuaXQgfHwgdGhpcy51bml0IHx8
ICJweCI7Ci0JCXRoaXMubm93ID0gdGhpcy5zdGFydDsKLQkJdGhpcy5wb3MgPSB0aGlzLnN0YXRl
ID0gMDsKLQkJdGhpcy51cGRhdGUoKTsKLQotCQl2YXIgc2VsZiA9IHRoaXM7Ci0JCWZ1bmN0aW9u
IHQoZ290b0VuZCl7Ci0JCQlyZXR1cm4gc2VsZi5zdGVwKGdvdG9FbmQpOwotCQl9Ci0KLQkJdC5l
bGVtID0gdGhpcy5lbGVtOwotCi0JCWpRdWVyeS50aW1lcnMucHVzaCh0KTsKLQotCQlpZiAoIGpR
dWVyeS50aW1lcklkID09IG51bGwgKSB7Ci0JCQlqUXVlcnkudGltZXJJZCA9IHNldEludGVydmFs
KGZ1bmN0aW9uKCl7Ci0JCQkJdmFyIHRpbWVycyA9IGpRdWVyeS50aW1lcnM7Ci0JCQkJCi0JCQkJ
Zm9yICggdmFyIGkgPSAwOyBpIDwgdGltZXJzLmxlbmd0aDsgaSsrICkKLQkJCQkJaWYgKCAhdGlt
ZXJzW2ldKCkgKQotCQkJCQkJdGltZXJzLnNwbGljZShpLS0sIDEpOwotCi0JCQkJaWYgKCAhdGlt
ZXJzLmxlbmd0aCApIHsKLQkJCQkJY2xlYXJJbnRlcnZhbCggalF1ZXJ5LnRpbWVySWQgKTsKLQkJ
CQkJalF1ZXJ5LnRpbWVySWQgPSBudWxsOwotCQkJCX0KLQkJCX0sIDEzKTsKLQkJfQotCX0sCi0K
LQkvLyBTaW1wbGUgJ3Nob3cnIGZ1bmN0aW9uCi0Jc2hvdzogZnVuY3Rpb24oKXsKLQkJLy8gUmVt
ZW1iZXIgd2hlcmUgd2Ugc3RhcnRlZCwgc28gdGhhdCB3ZSBjYW4gZ28gYmFjayB0byBpdCBsYXRl
cgotCQl0aGlzLm9wdGlvbnMub3JpZ1t0aGlzLnByb3BdID0galF1ZXJ5LmF0dHIoIHRoaXMuZWxl
bS5zdHlsZSwgdGhpcy5wcm9wICk7Ci0JCXRoaXMub3B0aW9ucy5zaG93ID0gdHJ1ZTsKLQotCQkv
LyBCZWdpbiB0aGUgYW5pbWF0aW9uCi0JCXRoaXMuY3VzdG9tKDAsIHRoaXMuY3VyKCkpOwotCi0J
CS8vIE1ha2Ugc3VyZSB0aGF0IHdlIHN0YXJ0IGF0IGEgc21hbGwgd2lkdGgvaGVpZ2h0IHRvIGF2
b2lkIGFueQotCQkvLyBmbGFzaCBvZiBjb250ZW50Ci0JCWlmICggdGhpcy5wcm9wID09ICJ3aWR0
aCIgfHwgdGhpcy5wcm9wID09ICJoZWlnaHQiICkKLQkJCXRoaXMuZWxlbS5zdHlsZVt0aGlzLnBy
b3BdID0gIjFweCI7Ci0JCQotCQkvLyBTdGFydCBieSBzaG93aW5nIHRoZSBlbGVtZW50Ci0JCWpR
dWVyeSh0aGlzLmVsZW0pLnNob3coKTsKLQl9LAotCi0JLy8gU2ltcGxlICdoaWRlJyBmdW5jdGlv
bgotCWhpZGU6IGZ1bmN0aW9uKCl7Ci0JCS8vIFJlbWVtYmVyIHdoZXJlIHdlIHN0YXJ0ZWQsIHNv
IHRoYXQgd2UgY2FuIGdvIGJhY2sgdG8gaXQgbGF0ZXIKLQkJdGhpcy5vcHRpb25zLm9yaWdbdGhp
cy5wcm9wXSA9IGpRdWVyeS5hdHRyKCB0aGlzLmVsZW0uc3R5bGUsIHRoaXMucHJvcCApOwotCQl0
aGlzLm9wdGlvbnMuaGlkZSA9IHRydWU7Ci0KLQkJLy8gQmVnaW4gdGhlIGFuaW1hdGlvbgotCQl0
aGlzLmN1c3RvbSh0aGlzLmN1cigpLCAwKTsKLQl9LAotCi0JLy8gRWFjaCBzdGVwIG9mIGFuIGFu
aW1hdGlvbgotCXN0ZXA6IGZ1bmN0aW9uKGdvdG9FbmQpewotCQl2YXIgdCA9IChuZXcgRGF0ZSgp
KS5nZXRUaW1lKCk7Ci0KLQkJaWYgKCBnb3RvRW5kIHx8IHQgPiB0aGlzLm9wdGlvbnMuZHVyYXRp
b24gKyB0aGlzLnN0YXJ0VGltZSApIHsKLQkJCXRoaXMubm93ID0gdGhpcy5lbmQ7Ci0JCQl0aGlz
LnBvcyA9IHRoaXMuc3RhdGUgPSAxOwotCQkJdGhpcy51cGRhdGUoKTsKLQotCQkJdGhpcy5vcHRp
b25zLmN1ckFuaW1bIHRoaXMucHJvcCBdID0gdHJ1ZTsKLQotCQkJdmFyIGRvbmUgPSB0cnVlOwot
CQkJZm9yICggdmFyIGkgaW4gdGhpcy5vcHRpb25zLmN1ckFuaW0gKQotCQkJCWlmICggdGhpcy5v
cHRpb25zLmN1ckFuaW1baV0gIT09IHRydWUgKQotCQkJCQlkb25lID0gZmFsc2U7Ci0KLQkJCWlm
ICggZG9uZSApIHsKLQkJCQlpZiAoIHRoaXMub3B0aW9ucy5kaXNwbGF5ICE9IG51bGwgKSB7Ci0J
CQkJCS8vIFJlc2V0IHRoZSBvdmVyZmxvdwotCQkJCQl0aGlzLmVsZW0uc3R5bGUub3ZlcmZsb3cg
PSB0aGlzLm9wdGlvbnMub3ZlcmZsb3c7Ci0JCQkJCi0JCQkJCS8vIFJlc2V0IHRoZSBkaXNwbGF5
Ci0JCQkJCXRoaXMuZWxlbS5zdHlsZS5kaXNwbGF5ID0gdGhpcy5vcHRpb25zLmRpc3BsYXk7Ci0J
CQkJCWlmICggalF1ZXJ5LmNzcyh0aGlzLmVsZW0sICJkaXNwbGF5IikgPT0gIm5vbmUiICkKLQkJ
CQkJCXRoaXMuZWxlbS5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKLQkJCQl9Ci0KLQkJCQkvLyBI
aWRlIHRoZSBlbGVtZW50IGlmIHRoZSAiaGlkZSIgb3BlcmF0aW9uIHdhcyBkb25lCi0JCQkJaWYg
KCB0aGlzLm9wdGlvbnMuaGlkZSApCi0JCQkJCXRoaXMuZWxlbS5zdHlsZS5kaXNwbGF5ID0gIm5v
bmUiOwotCi0JCQkJLy8gUmVzZXQgdGhlIHByb3BlcnRpZXMsIGlmIHRoZSBpdGVtIGhhcyBiZWVu
IGhpZGRlbiBvciBzaG93bgotCQkJCWlmICggdGhpcy5vcHRpb25zLmhpZGUgfHwgdGhpcy5vcHRp
b25zLnNob3cgKQotCQkJCQlmb3IgKCB2YXIgcCBpbiB0aGlzLm9wdGlvbnMuY3VyQW5pbSApCi0J
CQkJCQlqUXVlcnkuYXR0cih0aGlzLmVsZW0uc3R5bGUsIHAsIHRoaXMub3B0aW9ucy5vcmlnW3Bd
KTsKLQkJCX0KLQotCQkJLy8gSWYgYSBjYWxsYmFjayB3YXMgcHJvdmlkZWQsIGV4ZWN1dGUgaXQK
LQkJCWlmICggZG9uZSAmJiBqUXVlcnkuaXNGdW5jdGlvbiggdGhpcy5vcHRpb25zLmNvbXBsZXRl
ICkgKQotCQkJCS8vIEV4ZWN1dGUgdGhlIGNvbXBsZXRlIGZ1bmN0aW9uCi0JCQkJdGhpcy5vcHRp
b25zLmNvbXBsZXRlLmFwcGx5KCB0aGlzLmVsZW0gKTsKLQotCQkJcmV0dXJuIGZhbHNlOwotCQl9
IGVsc2UgewotCQkJdmFyIG4gPSB0IC0gdGhpcy5zdGFydFRpbWU7Ci0JCQl0aGlzLnN0YXRlID0g
biAvIHRoaXMub3B0aW9ucy5kdXJhdGlvbjsKLQotCQkJLy8gUGVyZm9ybSB0aGUgZWFzaW5nIGZ1
bmN0aW9uLCBkZWZhdWx0cyB0byBzd2luZwotCQkJdGhpcy5wb3MgPSBqUXVlcnkuZWFzaW5nW3Ro
aXMub3B0aW9ucy5lYXNpbmcgfHwgKGpRdWVyeS5lYXNpbmcuc3dpbmcgPyAic3dpbmciIDogImxp
bmVhciIpXSh0aGlzLnN0YXRlLCBuLCAwLCAxLCB0aGlzLm9wdGlvbnMuZHVyYXRpb24pOwotCQkJ
dGhpcy5ub3cgPSB0aGlzLnN0YXJ0ICsgKCh0aGlzLmVuZCAtIHRoaXMuc3RhcnQpICogdGhpcy5w
b3MpOwotCi0JCQkvLyBQZXJmb3JtIHRoZSBuZXh0IHN0ZXAgb2YgdGhlIGFuaW1hdGlvbgotCQkJ
dGhpcy51cGRhdGUoKTsKLQkJfQotCi0JCXJldHVybiB0cnVlOwotCX0KLQotfTsKLQotalF1ZXJ5
LmZ4LnN0ZXAgPSB7Ci0Jc2Nyb2xsTGVmdDogZnVuY3Rpb24oZngpewotCQlmeC5lbGVtLnNjcm9s
bExlZnQgPSBmeC5ub3c7Ci0JfSwKLQotCXNjcm9sbFRvcDogZnVuY3Rpb24oZngpewotCQlmeC5l
bGVtLnNjcm9sbFRvcCA9IGZ4Lm5vdzsKLQl9LAotCi0Jb3BhY2l0eTogZnVuY3Rpb24oZngpewot
CQlqUXVlcnkuYXR0cihmeC5lbGVtLnN0eWxlLCAib3BhY2l0eSIsIGZ4Lm5vdyk7Ci0JfSwKLQot
CV9kZWZhdWx0OiBmdW5jdGlvbihmeCl7Ci0JCWZ4LmVsZW0uc3R5bGVbIGZ4LnByb3AgXSA9IGZ4
Lm5vdyArIGZ4LnVuaXQ7Ci0JfQotfTsKLS8vIFRoZSBPZmZzZXQgTWV0aG9kCi0vLyBPcmlnaW5h
bGx5IEJ5IEJyYW5kb24gQWFyb24sIHBhcnQgb2YgdGhlIERpbWVuc2lvbiBQbHVnaW4KLS8vIGh0
dHA6Ly9qcXVlcnkuY29tL3BsdWdpbnMvcHJvamVjdC9kaW1lbnNpb25zCi1qUXVlcnkuZm4ub2Zm
c2V0ID0gZnVuY3Rpb24oKSB7Ci0JdmFyIGxlZnQgPSAwLCB0b3AgPSAwLCBlbGVtID0gdGhpc1sw
XSwgcmVzdWx0czsKLQkKLQlpZiAoIGVsZW0gKSB3aXRoICggalF1ZXJ5LmJyb3dzZXIgKSB7Ci0J
CXZhciBwYXJlbnQgICAgICAgPSBlbGVtLnBhcmVudE5vZGUsIAotCQkgICAgb2Zmc2V0Q2hpbGQg
ID0gZWxlbSwKLQkJICAgIG9mZnNldFBhcmVudCA9IGVsZW0ub2Zmc2V0UGFyZW50LCAKLQkJICAg
IGRvYyAgICAgICAgICA9IGVsZW0ub3duZXJEb2N1bWVudCwKLQkJICAgIHNhZmFyaTIgICAgICA9
IHNhZmFyaSAmJiBwYXJzZUludCh2ZXJzaW9uKSA8IDUyMiAmJiAhL2Fkb2JlYWlyL2kudGVzdCh1
c2VyQWdlbnQpLAotCQkgICAgZml4ZWQgICAgICAgID0galF1ZXJ5LmNzcyhlbGVtLCAicG9zaXRp
b24iKSA9PSAiZml4ZWQiOwotCQotCQkvLyBVc2UgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGlmIGF2
YWlsYWJsZQotCQlpZiAoIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0ICkgewotCQkJdmFyIGJv
eCA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Ci0JCQotCQkJLy8gQWRkIHRoZSBkb2N1
bWVudCBzY3JvbGwgb2Zmc2V0cwotCQkJYWRkKGJveC5sZWZ0ICsgTWF0aC5tYXgoZG9jLmRvY3Vt
ZW50RWxlbWVudC5zY3JvbGxMZWZ0LCBkb2MuYm9keS5zY3JvbGxMZWZ0KSwKLQkJCQlib3gudG9w
ICArIE1hdGgubWF4KGRvYy5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wLCAgZG9jLmJvZHkuc2Ny
b2xsVG9wKSk7Ci0JCQotCQkJLy8gSUUgYWRkcyB0aGUgSFRNTCBlbGVtZW50J3MgYm9yZGVyLCBi
eSBkZWZhdWx0IGl0IGlzIG1lZGl1bSB3aGljaCBpcyAycHgKLQkJCS8vIElFIDYgYW5kIDcgcXVp
cmtzIG1vZGUgdGhlIGJvcmRlciB3aWR0aCBpcyBvdmVyd3JpdGFibGUgYnkgdGhlIGZvbGxvd2lu
ZyBjc3MgaHRtbCB7IGJvcmRlcjogMDsgfQotCQkJLy8gSUUgNyBzdGFuZGFyZHMgbW9kZSwgdGhl
IGJvcmRlciBpcyBhbHdheXMgMnB4Ci0JCQkvLyBUaGlzIGJvcmRlci9vZmZzZXQgaXMgdHlwaWNh
bGx5IHJlcHJlc2VudGVkIGJ5IHRoZSBjbGllbnRMZWZ0IGFuZCBjbGllbnRUb3AgcHJvcGVydGll
cwotCQkJLy8gSG93ZXZlciwgaW4gSUU2IGFuZCA3IHF1aXJrcyBtb2RlIHRoZSBjbGllbnRMZWZ0
IGFuZCBjbGllbnRUb3AgcHJvcGVydGllcyBhcmUgbm90IHVwZGF0ZWQgd2hlbiBvdmVyd3JpdGlu
ZyBpdCB2aWEgQ1NTCi0JCQkvLyBUaGVyZWZvcmUgdGhpcyBtZXRob2Qgd2lsbCBiZSBvZmYgYnkg
MnB4IGluIElFIHdoaWxlIGluIHF1aXJrc21vZGUKLQkJCWFkZCggLWRvYy5kb2N1bWVudEVsZW1l
bnQuY2xpZW50TGVmdCwgLWRvYy5kb2N1bWVudEVsZW1lbnQuY2xpZW50VG9wICk7Ci0JCi0JCS8v
IE90aGVyd2lzZSBsb29wIHRocm91Z2ggdGhlIG9mZnNldFBhcmVudHMgYW5kIHBhcmVudE5vZGVz
Ci0JCX0gZWxzZSB7Ci0JCQotCQkJLy8gSW5pdGlhbCBlbGVtZW50IG9mZnNldHMKLQkJCWFkZCgg
ZWxlbS5vZmZzZXRMZWZ0LCBlbGVtLm9mZnNldFRvcCApOwotCQkJCi0JCQkvLyBHZXQgcGFyZW50
IG9mZnNldHMKLQkJCXdoaWxlICggb2Zmc2V0UGFyZW50ICkgewotCQkJCS8vIEFkZCBvZmZzZXRQ
YXJlbnQgb2Zmc2V0cwotCQkJCWFkZCggb2Zmc2V0UGFyZW50Lm9mZnNldExlZnQsIG9mZnNldFBh
cmVudC5vZmZzZXRUb3AgKTsKLQkJCQotCQkJCS8vIE1vemlsbGEgYW5kIFNhZmFyaSA+IDIgZG9l
cyBub3QgaW5jbHVkZSB0aGUgYm9yZGVyIG9uIG9mZnNldCBwYXJlbnRzCi0JCQkJLy8gSG93ZXZl
ciBNb3ppbGxhIGFkZHMgdGhlIGJvcmRlciBmb3IgdGFibGUgb3IgdGFibGUgY2VsbHMKLQkJCQlp
ZiAoIG1vemlsbGEgJiYgIS9edChhYmxlfGR8aCkkL2kudGVzdChvZmZzZXRQYXJlbnQudGFnTmFt
ZSkgfHwgc2FmYXJpICYmICFzYWZhcmkyICkKLQkJCQkJYm9yZGVyKCBvZmZzZXRQYXJlbnQgKTsK
LQkJCQkJCi0JCQkJLy8gQWRkIHRoZSBkb2N1bWVudCBzY3JvbGwgb2Zmc2V0cyBpZiBwb3NpdGlv
biBpcyBmaXhlZCBvbiBhbnkgb2Zmc2V0UGFyZW50Ci0JCQkJaWYgKCAhZml4ZWQgJiYgalF1ZXJ5
LmNzcyhvZmZzZXRQYXJlbnQsICJwb3NpdGlvbiIpID09ICJmaXhlZCIgKQotCQkJCQlmaXhlZCA9
IHRydWU7Ci0JCQkKLQkJCQkvLyBTZXQgb2Zmc2V0Q2hpbGQgdG8gcHJldmlvdXMgb2Zmc2V0UGFy
ZW50IHVubGVzcyBpdCBpcyB0aGUgYm9keSBlbGVtZW50Ci0JCQkJb2Zmc2V0Q2hpbGQgID0gL15i
b2R5JC9pLnRlc3Qob2Zmc2V0UGFyZW50LnRhZ05hbWUpID8gb2Zmc2V0Q2hpbGQgOiBvZmZzZXRQ
YXJlbnQ7Ci0JCQkJLy8gR2V0IG5leHQgb2Zmc2V0UGFyZW50Ci0JCQkJb2Zmc2V0UGFyZW50ID0g
b2Zmc2V0UGFyZW50Lm9mZnNldFBhcmVudDsKLQkJCX0KLQkJCi0JCQkvLyBHZXQgcGFyZW50IHNj
cm9sbCBvZmZzZXRzCi0JCQl3aGlsZSAoIHBhcmVudCAmJiBwYXJlbnQudGFnTmFtZSAmJiAhL15i
b2R5fGh0bWwkL2kudGVzdChwYXJlbnQudGFnTmFtZSkgKSB7Ci0JCQkJLy8gUmVtb3ZlIHBhcmVu
dCBzY3JvbGwgVU5MRVNTIHRoYXQgcGFyZW50IGlzIGlubGluZSBvciBhIHRhYmxlIHRvIHdvcmsg
YXJvdW5kIE9wZXJhIGlubGluZS90YWJsZSBzY3JvbGxMZWZ0L1RvcCBidWcKLQkJCQlpZiAoICEv
XmlubGluZXx0YWJsZS4qJC9pLnRlc3QoalF1ZXJ5LmNzcyhwYXJlbnQsICJkaXNwbGF5IikpICkK
LQkJCQkJLy8gU3VidHJhY3QgcGFyZW50IHNjcm9sbCBvZmZzZXRzCi0JCQkJCWFkZCggLXBhcmVu
dC5zY3JvbGxMZWZ0LCAtcGFyZW50LnNjcm9sbFRvcCApOwotCQkJCi0JCQkJLy8gTW96aWxsYSBk
b2VzIG5vdCBhZGQgdGhlIGJvcmRlciBmb3IgYSBwYXJlbnQgdGhhdCBoYXMgb3ZlcmZsb3cgIT0g
dmlzaWJsZQotCQkJCWlmICggbW96aWxsYSAmJiBqUXVlcnkuY3NzKHBhcmVudCwgIm92ZXJmbG93
IikgIT0gInZpc2libGUiICkKLQkJCQkJYm9yZGVyKCBwYXJlbnQgKTsKLQkJCQotCQkJCS8vIEdl
dCBuZXh0IHBhcmVudAotCQkJCXBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlOwotCQkJfQotCQkK
LQkJCS8vIFNhZmFyaSA8PSAyIGRvdWJsZXMgYm9keSBvZmZzZXRzIHdpdGggYSBmaXhlZCBwb3Np
dGlvbiBlbGVtZW50L29mZnNldFBhcmVudCBvciBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQgb2Zmc2V0
Q2hpbGQKLQkJCS8vIE1vemlsbGEgZG91YmxlcyBib2R5IG9mZnNldHMgd2l0aCBhIG5vbi1hYnNv
bHV0ZWx5IHBvc2l0aW9uZWQgb2Zmc2V0Q2hpbGQKLQkJCWlmICggKHNhZmFyaTIgJiYgKGZpeGVk
IHx8IGpRdWVyeS5jc3Mob2Zmc2V0Q2hpbGQsICJwb3NpdGlvbiIpID09ICJhYnNvbHV0ZSIpKSB8
fCAKLQkJCQkobW96aWxsYSAmJiBqUXVlcnkuY3NzKG9mZnNldENoaWxkLCAicG9zaXRpb24iKSAh
PSAiYWJzb2x1dGUiKSApCi0JCQkJCWFkZCggLWRvYy5ib2R5Lm9mZnNldExlZnQsIC1kb2MuYm9k
eS5vZmZzZXRUb3AgKTsKLQkJCQotCQkJLy8gQWRkIHRoZSBkb2N1bWVudCBzY3JvbGwgb2Zmc2V0
cyBpZiBwb3NpdGlvbiBpcyBmaXhlZAotCQkJaWYgKCBmaXhlZCApCi0JCQkJYWRkKE1hdGgubWF4
KGRvYy5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCwgZG9jLmJvZHkuc2Nyb2xsTGVmdCksCi0J
CQkJCU1hdGgubWF4KGRvYy5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wLCAgZG9jLmJvZHkuc2Ny
b2xsVG9wKSk7Ci0JCX0KLQotCQkvLyBSZXR1cm4gYW4gb2JqZWN0IHdpdGggdG9wIGFuZCBsZWZ0
IHByb3BlcnRpZXMKLQkJcmVzdWx0cyA9IHsgdG9wOiB0b3AsIGxlZnQ6IGxlZnQgfTsKLQl9Ci0K
LQlmdW5jdGlvbiBib3JkZXIoZWxlbSkgewotCQlhZGQoIGpRdWVyeS5jdXJDU1MoZWxlbSwgImJv
cmRlckxlZnRXaWR0aCIsIHRydWUpLCBqUXVlcnkuY3VyQ1NTKGVsZW0sICJib3JkZXJUb3BXaWR0
aCIsIHRydWUpICk7Ci0JfQotCi0JZnVuY3Rpb24gYWRkKGwsIHQpIHsKLQkJbGVmdCArPSBwYXJz
ZUludChsKSB8fCAwOwotCQl0b3AgKz0gcGFyc2VJbnQodCkgfHwgMDsKLQl9Ci0KLQlyZXR1cm4g
cmVzdWx0czsKLX07Ci19KSgpOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvd2Via2l0Lm9yZy9wZXJm
L3NsaWNrc3BlZWQvZnJhbWV3b3Jrcy9wcm90b3R5cGUuanMgYi9XZWJzaXRlcy93ZWJraXQub3Jn
L3BlcmYvc2xpY2tzcGVlZC9mcmFtZXdvcmtzL3Byb3RvdHlwZS5qcwpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNjM4NTUwM2ExYzUyNmQ0ZDEzY2NjNzcwYmNlNzQyMDA4MjZlY2Q2YS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9XZWJzaXRlcy93
ZWJraXQub3JnL3BlcmYvc2xpY2tzcGVlZC9mcmFtZXdvcmtzL3Byb3RvdHlwZS5qcworKysgL2Rl
di9udWxsCkBAIC0xLDQyMjEgKzAsMCBAQAotLyogIFByb3RvdHlwZSBKYXZhU2NyaXB0IGZyYW1l
d29yaywgdmVyc2lvbiAxLjYuMC4yCi0gKiAgKGMpIDIwMDUtMjAwOCBTYW0gU3RlcGhlbnNvbgot
ICoKLSAqICBQcm90b3R5cGUgaXMgZnJlZWx5IGRpc3RyaWJ1dGFibGUgdW5kZXIgdGhlIHRlcm1z
IG9mIGFuIE1JVC1zdHlsZSBsaWNlbnNlLgotICogIEZvciBkZXRhaWxzLCBzZWUgdGhlIFByb3Rv
dHlwZSB3ZWIgc2l0ZTogaHR0cDovL3d3dy5wcm90b3R5cGVqcy5vcmcvCi0gKgotICotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSovCi0KLXZhciBQcm90b3R5cGUgPSB7Ci0gIFZlcnNpb246ICcxLjYuMC4yJywK
LQotICBCcm93c2VyOiB7Ci0gICAgSUU6ICAgICAhISh3aW5kb3cuYXR0YWNoRXZlbnQgJiYgIXdp
bmRvdy5vcGVyYSksCi0gICAgT3BlcmE6ICAhIXdpbmRvdy5vcGVyYSwKLSAgICBXZWJLaXQ6IG5h
dmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignQXBwbGVXZWJLaXQvJykgPiAtMSwKLSAgICBHZWNr
bzogIG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignR2Vja28nKSA+IC0xICYmIG5hdmlnYXRv
ci51c2VyQWdlbnQuaW5kZXhPZignS0hUTUwnKSA9PSAtMSwKLSAgICBNb2JpbGVTYWZhcmk6ICEh
bmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQXBwbGUuKk1vYmlsZS4qU2FmYXJpLykKLSAgfSwK
LQotICBCcm93c2VyRmVhdHVyZXM6IHsKLSAgICBYUGF0aDogISFkb2N1bWVudC5ldmFsdWF0ZSwK
LSAgICBFbGVtZW50RXh0ZW5zaW9uczogISF3aW5kb3cuSFRNTEVsZW1lbnQsCi0gICAgU3BlY2lm
aWNFbGVtZW50RXh0ZW5zaW9uczoKLSAgICAgIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rpdicp
Ll9fcHJvdG9fXyAmJgotICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykuX19wcm90
b19fICE9PQotICAgICAgICBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdmb3JtJykuX19wcm90b19f
Ci0gIH0sCi0KLSAgU2NyaXB0RnJhZ21lbnQ6ICc8c2NyaXB0W14+XSo+KFtcXFNcXHNdKj8pPFwv
c2NyaXB0PicsCi0gIEpTT05GaWx0ZXI6IC9eXC9cKi1zZWN1cmUtKFtcc1xTXSopXCpcL1xzKiQv
LAotCi0gIGVtcHR5RnVuY3Rpb246IGZ1bmN0aW9uKCkgeyB9LAotICBLOiBmdW5jdGlvbih4KSB7
IHJldHVybiB4IH0KLX07Ci0KLWlmIChQcm90b3R5cGUuQnJvd3Nlci5Nb2JpbGVTYWZhcmkpCi0g
IFByb3RvdHlwZS5Ccm93c2VyRmVhdHVyZXMuU3BlY2lmaWNFbGVtZW50RXh0ZW5zaW9ucyA9IGZh
bHNlOwotCi0KLS8qIEJhc2VkIG9uIEFsZXggQXJuZWxsJ3MgaW5oZXJpdGFuY2UgaW1wbGVtZW50
YXRpb24uICovCi12YXIgQ2xhc3MgPSB7Ci0gIGNyZWF0ZTogZnVuY3Rpb24oKSB7Ci0gICAgdmFy
IHBhcmVudCA9IG51bGwsIHByb3BlcnRpZXMgPSAkQShhcmd1bWVudHMpOwotICAgIGlmIChPYmpl
Y3QuaXNGdW5jdGlvbihwcm9wZXJ0aWVzWzBdKSkKLSAgICAgIHBhcmVudCA9IHByb3BlcnRpZXMu
c2hpZnQoKTsKLQotICAgIGZ1bmN0aW9uIGtsYXNzKCkgewotICAgICAgdGhpcy5pbml0aWFsaXpl
LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0gICAgfQotCi0gICAgT2JqZWN0LmV4dGVuZChrbGFz
cywgQ2xhc3MuTWV0aG9kcyk7Ci0gICAga2xhc3Muc3VwZXJjbGFzcyA9IHBhcmVudDsKLSAgICBr
bGFzcy5zdWJjbGFzc2VzID0gW107Ci0KLSAgICBpZiAocGFyZW50KSB7Ci0gICAgICB2YXIgc3Vi
Y2xhc3MgPSBmdW5jdGlvbigpIHsgfTsKLSAgICAgIHN1YmNsYXNzLnByb3RvdHlwZSA9IHBhcmVu
dC5wcm90b3R5cGU7Ci0gICAgICBrbGFzcy5wcm90b3R5cGUgPSBuZXcgc3ViY2xhc3M7Ci0gICAg
ICBwYXJlbnQuc3ViY2xhc3Nlcy5wdXNoKGtsYXNzKTsKLSAgICB9Ci0KLSAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspCi0gICAgICBrbGFzcy5hZGRNZXRob2Rz
KHByb3BlcnRpZXNbaV0pOwotCi0gICAgaWYgKCFrbGFzcy5wcm90b3R5cGUuaW5pdGlhbGl6ZSkK
LSAgICAgIGtsYXNzLnByb3RvdHlwZS5pbml0aWFsaXplID0gUHJvdG90eXBlLmVtcHR5RnVuY3Rp
b247Ci0KLSAgICBrbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBrbGFzczsKLQotICAgIHJl
dHVybiBrbGFzczsKLSAgfQotfTsKLQotQ2xhc3MuTWV0aG9kcyA9IHsKLSAgYWRkTWV0aG9kczog
ZnVuY3Rpb24oc291cmNlKSB7Ci0gICAgdmFyIGFuY2VzdG9yICAgPSB0aGlzLnN1cGVyY2xhc3Mg
JiYgdGhpcy5zdXBlcmNsYXNzLnByb3RvdHlwZTsKLSAgICB2YXIgcHJvcGVydGllcyA9IE9iamVj
dC5rZXlzKHNvdXJjZSk7Ci0KLSAgICBpZiAoIU9iamVjdC5rZXlzKHsgdG9TdHJpbmc6IHRydWUg
fSkubGVuZ3RoKQotICAgICAgcHJvcGVydGllcy5wdXNoKCJ0b1N0cmluZyIsICJ2YWx1ZU9mIik7
Ci0KLSAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gcHJvcGVydGllcy5sZW5ndGg7IGkgPCBs
ZW5ndGg7IGkrKykgewotICAgICAgdmFyIHByb3BlcnR5ID0gcHJvcGVydGllc1tpXSwgdmFsdWUg
PSBzb3VyY2VbcHJvcGVydHldOwotICAgICAgaWYgKGFuY2VzdG9yICYmIE9iamVjdC5pc0Z1bmN0
aW9uKHZhbHVlKSAmJgotICAgICAgICAgIHZhbHVlLmFyZ3VtZW50TmFtZXMoKS5maXJzdCgpID09
ICIkc3VwZXIiKSB7Ci0gICAgICAgIHZhciBtZXRob2QgPSB2YWx1ZSwgdmFsdWUgPSBPYmplY3Qu
ZXh0ZW5kKChmdW5jdGlvbihtKSB7Ci0gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeyByZXR1
cm4gYW5jZXN0b3JbbV0uYXBwbHkodGhpcywgYXJndW1lbnRzKSB9OwotICAgICAgICB9KShwcm9w
ZXJ0eSkud3JhcChtZXRob2QpLCB7Ci0gICAgICAgICAgdmFsdWVPZjogIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gbWV0aG9kIH0sCi0gICAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkgeyByZXR1cm4g
bWV0aG9kLnRvU3RyaW5nKCkgfQotICAgICAgICB9KTsKLSAgICAgIH0KLSAgICAgIHRoaXMucHJv
dG90eXBlW3Byb3BlcnR5XSA9IHZhbHVlOwotICAgIH0KLQotICAgIHJldHVybiB0aGlzOwotICB9
Ci19OwotCi12YXIgQWJzdHJhY3QgPSB7IH07Ci0KLU9iamVjdC5leHRlbmQgPSBmdW5jdGlvbihk
ZXN0aW5hdGlvbiwgc291cmNlKSB7Ci0gIGZvciAodmFyIHByb3BlcnR5IGluIHNvdXJjZSkKLSAg
ICBkZXN0aW5hdGlvbltwcm9wZXJ0eV0gPSBzb3VyY2VbcHJvcGVydHldOwotICByZXR1cm4gZGVz
dGluYXRpb247Ci19OwotCi1PYmplY3QuZXh0ZW5kKE9iamVjdCwgewotICBpbnNwZWN0OiBmdW5j
dGlvbihvYmplY3QpIHsKLSAgICB0cnkgewotICAgICAgaWYgKE9iamVjdC5pc1VuZGVmaW5lZChv
YmplY3QpKSByZXR1cm4gJ3VuZGVmaW5lZCc7Ci0gICAgICBpZiAob2JqZWN0ID09PSBudWxsKSBy
ZXR1cm4gJ251bGwnOwotICAgICAgcmV0dXJuIG9iamVjdC5pbnNwZWN0ID8gb2JqZWN0Lmluc3Bl
Y3QoKSA6IFN0cmluZyhvYmplY3QpOwotICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgIGlmIChlIGlu
c3RhbmNlb2YgUmFuZ2VFcnJvcikgcmV0dXJuICcuLi4nOwotICAgICAgdGhyb3cgZTsKLSAgICB9
Ci0gIH0sCi0KLSAgdG9KU09OOiBmdW5jdGlvbihvYmplY3QpIHsKLSAgICB2YXIgdHlwZSA9IHR5
cGVvZiBvYmplY3Q7Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICBjYXNlICd1bmRlZmluZWQn
OgotICAgICAgY2FzZSAnZnVuY3Rpb24nOgotICAgICAgY2FzZSAndW5rbm93bic6IHJldHVybjsK
LSAgICAgIGNhc2UgJ2Jvb2xlYW4nOiByZXR1cm4gb2JqZWN0LnRvU3RyaW5nKCk7Ci0gICAgfQot
Ci0gICAgaWYgKG9iamVjdCA9PT0gbnVsbCkgcmV0dXJuICdudWxsJzsKLSAgICBpZiAob2JqZWN0
LnRvSlNPTikgcmV0dXJuIG9iamVjdC50b0pTT04oKTsKLSAgICBpZiAoT2JqZWN0LmlzRWxlbWVu
dChvYmplY3QpKSByZXR1cm47Ci0KLSAgICB2YXIgcmVzdWx0cyA9IFtdOwotICAgIGZvciAodmFy
IHByb3BlcnR5IGluIG9iamVjdCkgewotICAgICAgdmFyIHZhbHVlID0gT2JqZWN0LnRvSlNPTihv
YmplY3RbcHJvcGVydHldKTsKLSAgICAgIGlmICghT2JqZWN0LmlzVW5kZWZpbmVkKHZhbHVlKSkK
LSAgICAgICAgcmVzdWx0cy5wdXNoKHByb3BlcnR5LnRvSlNPTigpICsgJzogJyArIHZhbHVlKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gJ3snICsgcmVzdWx0cy5qb2luKCcsICcpICsgJ30nOwotICB9
LAotCi0gIHRvUXVlcnlTdHJpbmc6IGZ1bmN0aW9uKG9iamVjdCkgewotICAgIHJldHVybiAkSChv
YmplY3QpLnRvUXVlcnlTdHJpbmcoKTsKLSAgfSwKLQotICB0b0hUTUw6IGZ1bmN0aW9uKG9iamVj
dCkgewotICAgIHJldHVybiBvYmplY3QgJiYgb2JqZWN0LnRvSFRNTCA/IG9iamVjdC50b0hUTUwo
KSA6IFN0cmluZy5pbnRlcnByZXQob2JqZWN0KTsKLSAgfSwKLQotICBrZXlzOiBmdW5jdGlvbihv
YmplY3QpIHsKLSAgICB2YXIga2V5cyA9IFtdOwotICAgIGZvciAodmFyIHByb3BlcnR5IGluIG9i
amVjdCkKLSAgICAgIGtleXMucHVzaChwcm9wZXJ0eSk7Ci0gICAgcmV0dXJuIGtleXM7Ci0gIH0s
Ci0KLSAgdmFsdWVzOiBmdW5jdGlvbihvYmplY3QpIHsKLSAgICB2YXIgdmFsdWVzID0gW107Ci0g
ICAgZm9yICh2YXIgcHJvcGVydHkgaW4gb2JqZWN0KQotICAgICAgdmFsdWVzLnB1c2gob2JqZWN0
W3Byb3BlcnR5XSk7Ci0gICAgcmV0dXJuIHZhbHVlczsKLSAgfSwKLQotICBjbG9uZTogZnVuY3Rp
b24ob2JqZWN0KSB7Ci0gICAgcmV0dXJuIE9iamVjdC5leHRlbmQoeyB9LCBvYmplY3QpOwotICB9
LAotCi0gIGlzRWxlbWVudDogZnVuY3Rpb24ob2JqZWN0KSB7Ci0gICAgcmV0dXJuIG9iamVjdCAm
JiBvYmplY3Qubm9kZVR5cGUgPT0gMTsKLSAgfSwKLQotICBpc0FycmF5OiBmdW5jdGlvbihvYmpl
Y3QpIHsKLSAgICByZXR1cm4gb2JqZWN0ICE9IG51bGwgJiYgdHlwZW9mIG9iamVjdCA9PSAib2Jq
ZWN0IiAmJgotICAgICAgJ3NwbGljZScgaW4gb2JqZWN0ICYmICdqb2luJyBpbiBvYmplY3Q7Ci0g
IH0sCi0KLSAgaXNIYXNoOiBmdW5jdGlvbihvYmplY3QpIHsKLSAgICByZXR1cm4gb2JqZWN0IGlu
c3RhbmNlb2YgSGFzaDsKLSAgfSwKLQotICBpc0Z1bmN0aW9uOiBmdW5jdGlvbihvYmplY3QpIHsK
LSAgICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PSAiZnVuY3Rpb24iOwotICB9LAotCi0gIGlzU3Ry
aW5nOiBmdW5jdGlvbihvYmplY3QpIHsKLSAgICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PSAic3Ry
aW5nIjsKLSAgfSwKLQotICBpc051bWJlcjogZnVuY3Rpb24ob2JqZWN0KSB7Ci0gICAgcmV0dXJu
IHR5cGVvZiBvYmplY3QgPT0gIm51bWJlciI7Ci0gIH0sCi0KLSAgaXNVbmRlZmluZWQ6IGZ1bmN0
aW9uKG9iamVjdCkgewotICAgIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09ICJ1bmRlZmluZWQiOwot
ICB9Ci19KTsKLQotT2JqZWN0LmV4dGVuZChGdW5jdGlvbi5wcm90b3R5cGUsIHsKLSAgYXJndW1l
bnROYW1lczogZnVuY3Rpb24oKSB7Ci0gICAgdmFyIG5hbWVzID0gdGhpcy50b1N0cmluZygpLm1h
dGNoKC9eW1xzXChdKmZ1bmN0aW9uW14oXSpcKCguKj8pXCkvKVsxXS5zcGxpdCgiLCIpLmludm9r
ZSgic3RyaXAiKTsKLSAgICByZXR1cm4gbmFtZXMubGVuZ3RoID09IDEgJiYgIW5hbWVzWzBdID8g
W10gOiBuYW1lczsKLSAgfSwKLQotICBiaW5kOiBmdW5jdGlvbigpIHsKLSAgICBpZiAoYXJndW1l
bnRzLmxlbmd0aCA8IDIgJiYgT2JqZWN0LmlzVW5kZWZpbmVkKGFyZ3VtZW50c1swXSkpIHJldHVy
biB0aGlzOwotICAgIHZhciBfX21ldGhvZCA9IHRoaXMsIGFyZ3MgPSAkQShhcmd1bWVudHMpLCBv
YmplY3QgPSBhcmdzLnNoaWZ0KCk7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKCkgewotICAgICAgcmV0
dXJuIF9fbWV0aG9kLmFwcGx5KG9iamVjdCwgYXJncy5jb25jYXQoJEEoYXJndW1lbnRzKSkpOwot
ICAgIH0KLSAgfSwKLQotICBiaW5kQXNFdmVudExpc3RlbmVyOiBmdW5jdGlvbigpIHsKLSAgICB2
YXIgX19tZXRob2QgPSB0aGlzLCBhcmdzID0gJEEoYXJndW1lbnRzKSwgb2JqZWN0ID0gYXJncy5z
aGlmdCgpOwotICAgIHJldHVybiBmdW5jdGlvbihldmVudCkgewotICAgICAgcmV0dXJuIF9fbWV0
aG9kLmFwcGx5KG9iamVjdCwgW2V2ZW50IHx8IHdpbmRvdy5ldmVudF0uY29uY2F0KGFyZ3MpKTsK
LSAgICB9Ci0gIH0sCi0KLSAgY3Vycnk6IGZ1bmN0aW9uKCkgewotICAgIGlmICghYXJndW1lbnRz
Lmxlbmd0aCkgcmV0dXJuIHRoaXM7Ci0gICAgdmFyIF9fbWV0aG9kID0gdGhpcywgYXJncyA9ICRB
KGFyZ3VtZW50cyk7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKCkgewotICAgICAgcmV0dXJuIF9fbWV0
aG9kLmFwcGx5KHRoaXMsIGFyZ3MuY29uY2F0KCRBKGFyZ3VtZW50cykpKTsKLSAgICB9Ci0gIH0s
Ci0KLSAgZGVsYXk6IGZ1bmN0aW9uKCkgewotICAgIHZhciBfX21ldGhvZCA9IHRoaXMsIGFyZ3Mg
PSAkQShhcmd1bWVudHMpLCB0aW1lb3V0ID0gYXJncy5zaGlmdCgpICogMTAwMDsKLSAgICByZXR1
cm4gd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1cm4gX19tZXRob2Qu
YXBwbHkoX19tZXRob2QsIGFyZ3MpOwotICAgIH0sIHRpbWVvdXQpOwotICB9LAotCi0gIHdyYXA6
IGZ1bmN0aW9uKHdyYXBwZXIpIHsKLSAgICB2YXIgX19tZXRob2QgPSB0aGlzOwotICAgIHJldHVy
biBmdW5jdGlvbigpIHsKLSAgICAgIHJldHVybiB3cmFwcGVyLmFwcGx5KHRoaXMsIFtfX21ldGhv
ZC5iaW5kKHRoaXMpXS5jb25jYXQoJEEoYXJndW1lbnRzKSkpOwotICAgIH0KLSAgfSwKLQotICBt
ZXRob2RpemU6IGZ1bmN0aW9uKCkgewotICAgIGlmICh0aGlzLl9tZXRob2RpemVkKSByZXR1cm4g
dGhpcy5fbWV0aG9kaXplZDsKLSAgICB2YXIgX19tZXRob2QgPSB0aGlzOwotICAgIHJldHVybiB0
aGlzLl9tZXRob2RpemVkID0gZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1cm4gX19tZXRob2QuYXBw
bHkobnVsbCwgW3RoaXNdLmNvbmNhdCgkQShhcmd1bWVudHMpKSk7Ci0gICAgfTsKLSAgfQotfSk7
Ci0KLUZ1bmN0aW9uLnByb3RvdHlwZS5kZWZlciA9IEZ1bmN0aW9uLnByb3RvdHlwZS5kZWxheS5j
dXJyeSgwLjAxKTsKLQotRGF0ZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24oKSB7Ci0gIHJl
dHVybiAnIicgKyB0aGlzLmdldFVUQ0Z1bGxZZWFyKCkgKyAnLScgKwotICAgICh0aGlzLmdldFVU
Q01vbnRoKCkgKyAxKS50b1BhZGRlZFN0cmluZygyKSArICctJyArCi0gICAgdGhpcy5nZXRVVENE
YXRlKCkudG9QYWRkZWRTdHJpbmcoMikgKyAnVCcgKwotICAgIHRoaXMuZ2V0VVRDSG91cnMoKS50
b1BhZGRlZFN0cmluZygyKSArICc6JyArCi0gICAgdGhpcy5nZXRVVENNaW51dGVzKCkudG9QYWRk
ZWRTdHJpbmcoMikgKyAnOicgKwotICAgIHRoaXMuZ2V0VVRDU2Vjb25kcygpLnRvUGFkZGVkU3Ry
aW5nKDIpICsgJ1oiJzsKLX07Ci0KLXZhciBUcnkgPSB7Ci0gIHRoZXNlOiBmdW5jdGlvbigpIHsK
LSAgICB2YXIgcmV0dXJuVmFsdWU7Ci0KLSAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gYXJn
dW1lbnRzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICB2YXIgbGFtYmRhID0gYXJn
dW1lbnRzW2ldOwotICAgICAgdHJ5IHsKLSAgICAgICAgcmV0dXJuVmFsdWUgPSBsYW1iZGEoKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgICB9IGNhdGNoIChlKSB7IH0KLSAgICB9Ci0KLSAgICByZXR1
cm4gcmV0dXJuVmFsdWU7Ci0gIH0KLX07Ci0KLVJlZ0V4cC5wcm90b3R5cGUubWF0Y2ggPSBSZWdF
eHAucHJvdG90eXBlLnRlc3Q7Ci0KLVJlZ0V4cC5lc2NhcGUgPSBmdW5jdGlvbihzdHIpIHsKLSAg
cmV0dXJuIFN0cmluZyhzdHIpLnJlcGxhY2UoLyhbLiorP149IToke30oKXxbXF1cL1xcXSkvZywg
J1xcJDEnKTsKLX07Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi12YXIgUGVyaW9kaWNhbEV4
ZWN1dGVyID0gQ2xhc3MuY3JlYXRlKHsKLSAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oY2FsbGJhY2ss
IGZyZXF1ZW5jeSkgewotICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjazsKLSAgICB0aGlzLmZy
ZXF1ZW5jeSA9IGZyZXF1ZW5jeTsKLSAgICB0aGlzLmN1cnJlbnRseUV4ZWN1dGluZyA9IGZhbHNl
OwotCi0gICAgdGhpcy5yZWdpc3RlckNhbGxiYWNrKCk7Ci0gIH0sCi0KLSAgcmVnaXN0ZXJDYWxs
YmFjazogZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy50aW1lciA9IHNldEludGVydmFsKHRoaXMub25U
aW1lckV2ZW50LmJpbmQodGhpcyksIHRoaXMuZnJlcXVlbmN5ICogMTAwMCk7Ci0gIH0sCi0KLSAg
ZXhlY3V0ZTogZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5jYWxsYmFjayh0aGlzKTsKLSAgfSwKLQot
ICBzdG9wOiBmdW5jdGlvbigpIHsKLSAgICBpZiAoIXRoaXMudGltZXIpIHJldHVybjsKLSAgICBj
bGVhckludGVydmFsKHRoaXMudGltZXIpOwotICAgIHRoaXMudGltZXIgPSBudWxsOwotICB9LAot
Ci0gIG9uVGltZXJFdmVudDogZnVuY3Rpb24oKSB7Ci0gICAgaWYgKCF0aGlzLmN1cnJlbnRseUV4
ZWN1dGluZykgewotICAgICAgdHJ5IHsKLSAgICAgICAgdGhpcy5jdXJyZW50bHlFeGVjdXRpbmcg
PSB0cnVlOwotICAgICAgICB0aGlzLmV4ZWN1dGUoKTsKLSAgICAgIH0gZmluYWxseSB7Ci0gICAg
ICAgIHRoaXMuY3VycmVudGx5RXhlY3V0aW5nID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotICB9
Ci19KTsKLU9iamVjdC5leHRlbmQoU3RyaW5nLCB7Ci0gIGludGVycHJldDogZnVuY3Rpb24odmFs
dWUpIHsKLSAgICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/ICcnIDogU3RyaW5nKHZhbHVlKTsKLSAg
fSwKLSAgc3BlY2lhbENoYXI6IHsKLSAgICAnXGInOiAnXFxiJywKLSAgICAnXHQnOiAnXFx0JywK
LSAgICAnXG4nOiAnXFxuJywKLSAgICAnXGYnOiAnXFxmJywKLSAgICAnXHInOiAnXFxyJywKLSAg
ICAnXFwnOiAnXFxcXCcKLSAgfQotfSk7Ci0KLU9iamVjdC5leHRlbmQoU3RyaW5nLnByb3RvdHlw
ZSwgewotICBnc3ViOiBmdW5jdGlvbihwYXR0ZXJuLCByZXBsYWNlbWVudCkgewotICAgIHZhciBy
ZXN1bHQgPSAnJywgc291cmNlID0gdGhpcywgbWF0Y2g7Ci0gICAgcmVwbGFjZW1lbnQgPSBhcmd1
bWVudHMuY2FsbGVlLnByZXBhcmVSZXBsYWNlbWVudChyZXBsYWNlbWVudCk7Ci0KLSAgICB3aGls
ZSAoc291cmNlLmxlbmd0aCA+IDApIHsKLSAgICAgIGlmIChtYXRjaCA9IHNvdXJjZS5tYXRjaChw
YXR0ZXJuKSkgewotICAgICAgICByZXN1bHQgKz0gc291cmNlLnNsaWNlKDAsIG1hdGNoLmluZGV4
KTsKLSAgICAgICAgcmVzdWx0ICs9IFN0cmluZy5pbnRlcnByZXQocmVwbGFjZW1lbnQobWF0Y2gp
KTsKLSAgICAgICAgc291cmNlICA9IHNvdXJjZS5zbGljZShtYXRjaC5pbmRleCArIG1hdGNoWzBd
Lmxlbmd0aCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZXN1bHQgKz0gc291cmNlLCBzb3Vy
Y2UgPSAnJzsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfSwKLQotICBz
dWI6IGZ1bmN0aW9uKHBhdHRlcm4sIHJlcGxhY2VtZW50LCBjb3VudCkgewotICAgIHJlcGxhY2Vt
ZW50ID0gdGhpcy5nc3ViLnByZXBhcmVSZXBsYWNlbWVudChyZXBsYWNlbWVudCk7Ci0gICAgY291
bnQgPSBPYmplY3QuaXNVbmRlZmluZWQoY291bnQpID8gMSA6IGNvdW50OwotCi0gICAgcmV0dXJu
IHRoaXMuZ3N1YihwYXR0ZXJuLCBmdW5jdGlvbihtYXRjaCkgewotICAgICAgaWYgKC0tY291bnQg
PCAwKSByZXR1cm4gbWF0Y2hbMF07Ci0gICAgICByZXR1cm4gcmVwbGFjZW1lbnQobWF0Y2gpOwot
ICAgIH0pOwotICB9LAotCi0gIHNjYW46IGZ1bmN0aW9uKHBhdHRlcm4sIGl0ZXJhdG9yKSB7Ci0g
ICAgdGhpcy5nc3ViKHBhdHRlcm4sIGl0ZXJhdG9yKTsKLSAgICByZXR1cm4gU3RyaW5nKHRoaXMp
OwotICB9LAotCi0gIHRydW5jYXRlOiBmdW5jdGlvbihsZW5ndGgsIHRydW5jYXRpb24pIHsKLSAg
ICBsZW5ndGggPSBsZW5ndGggfHwgMzA7Ci0gICAgdHJ1bmNhdGlvbiA9IE9iamVjdC5pc1VuZGVm
aW5lZCh0cnVuY2F0aW9uKSA/ICcuLi4nIDogdHJ1bmNhdGlvbjsKLSAgICByZXR1cm4gdGhpcy5s
ZW5ndGggPiBsZW5ndGggPwotICAgICAgdGhpcy5zbGljZSgwLCBsZW5ndGggLSB0cnVuY2F0aW9u
Lmxlbmd0aCkgKyB0cnVuY2F0aW9uIDogU3RyaW5nKHRoaXMpOwotICB9LAotCi0gIHN0cmlwOiBm
dW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhpcy5yZXBsYWNlKC9eXHMrLywgJycpLnJlcGxhY2Uo
L1xzKyQvLCAnJyk7Ci0gIH0sCi0KLSAgc3RyaXBUYWdzOiBmdW5jdGlvbigpIHsKLSAgICByZXR1
cm4gdGhpcy5yZXBsYWNlKC88XC8/W14+XSs+L2dpLCAnJyk7Ci0gIH0sCi0KLSAgc3RyaXBTY3Jp
cHRzOiBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhpcy5yZXBsYWNlKG5ldyBSZWdFeHAoUHJv
dG90eXBlLlNjcmlwdEZyYWdtZW50LCAnaW1nJyksICcnKTsKLSAgfSwKLQotICBleHRyYWN0U2Ny
aXB0czogZnVuY3Rpb24oKSB7Ci0gICAgdmFyIG1hdGNoQWxsID0gbmV3IFJlZ0V4cChQcm90b3R5
cGUuU2NyaXB0RnJhZ21lbnQsICdpbWcnKTsKLSAgICB2YXIgbWF0Y2hPbmUgPSBuZXcgUmVnRXhw
KFByb3RvdHlwZS5TY3JpcHRGcmFnbWVudCwgJ2ltJyk7Ci0gICAgcmV0dXJuICh0aGlzLm1hdGNo
KG1hdGNoQWxsKSB8fCBbXSkubWFwKGZ1bmN0aW9uKHNjcmlwdFRhZykgewotICAgICAgcmV0dXJu
IChzY3JpcHRUYWcubWF0Y2gobWF0Y2hPbmUpIHx8IFsnJywgJyddKVsxXTsKLSAgICB9KTsKLSAg
fSwKLQotICBldmFsU2NyaXB0czogZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMuZXh0cmFj
dFNjcmlwdHMoKS5tYXAoZnVuY3Rpb24oc2NyaXB0KSB7IHJldHVybiBldmFsKHNjcmlwdCkgfSk7
Ci0gIH0sCi0KLSAgZXNjYXBlSFRNTDogZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHNlbGYgPSBhcmd1
bWVudHMuY2FsbGVlOwotICAgIHNlbGYudGV4dC5kYXRhID0gdGhpczsKLSAgICByZXR1cm4gc2Vs
Zi5kaXYuaW5uZXJIVE1MOwotICB9LAotCi0gIHVuZXNjYXBlSFRNTDogZnVuY3Rpb24oKSB7Ci0g
ICAgdmFyIGRpdiA9IG5ldyBFbGVtZW50KCdkaXYnKTsKLSAgICBkaXYuaW5uZXJIVE1MID0gdGhp
cy5zdHJpcFRhZ3MoKTsKLSAgICByZXR1cm4gZGl2LmNoaWxkTm9kZXNbMF0gPyAoZGl2LmNoaWxk
Tm9kZXMubGVuZ3RoID4gMSA/Ci0gICAgICAkQShkaXYuY2hpbGROb2RlcykuaW5qZWN0KCcnLCBm
dW5jdGlvbihtZW1vLCBub2RlKSB7IHJldHVybiBtZW1vK25vZGUubm9kZVZhbHVlIH0pIDoKLSAg
ICAgIGRpdi5jaGlsZE5vZGVzWzBdLm5vZGVWYWx1ZSkgOiAnJzsKLSAgfSwKLQotICB0b1F1ZXJ5
UGFyYW1zOiBmdW5jdGlvbihzZXBhcmF0b3IpIHsKLSAgICB2YXIgbWF0Y2ggPSB0aGlzLnN0cmlw
KCkubWF0Y2goLyhbXj8jXSopKCMuKik/JC8pOwotICAgIGlmICghbWF0Y2gpIHJldHVybiB7IH07
Ci0KLSAgICByZXR1cm4gbWF0Y2hbMV0uc3BsaXQoc2VwYXJhdG9yIHx8ICcmJykuaW5qZWN0KHsg
fSwgZnVuY3Rpb24oaGFzaCwgcGFpcikgewotICAgICAgaWYgKChwYWlyID0gcGFpci5zcGxpdCgn
PScpKVswXSkgewotICAgICAgICB2YXIga2V5ID0gZGVjb2RlVVJJQ29tcG9uZW50KHBhaXIuc2hp
ZnQoKSk7Ci0gICAgICAgIHZhciB2YWx1ZSA9IHBhaXIubGVuZ3RoID4gMSA/IHBhaXIuam9pbign
PScpIDogcGFpclswXTsKLSAgICAgICAgaWYgKHZhbHVlICE9IHVuZGVmaW5lZCkgdmFsdWUgPSBk
ZWNvZGVVUklDb21wb25lbnQodmFsdWUpOwotCi0gICAgICAgIGlmIChrZXkgaW4gaGFzaCkgewot
ICAgICAgICAgIGlmICghT2JqZWN0LmlzQXJyYXkoaGFzaFtrZXldKSkgaGFzaFtrZXldID0gW2hh
c2hba2V5XV07Ci0gICAgICAgICAgaGFzaFtrZXldLnB1c2godmFsdWUpOwotICAgICAgICB9Ci0g
ICAgICAgIGVsc2UgaGFzaFtrZXldID0gdmFsdWU7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gaGFz
aDsKLSAgICB9KTsKLSAgfSwKLQotICB0b0FycmF5OiBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4g
dGhpcy5zcGxpdCgnJyk7Ci0gIH0sCi0KLSAgc3VjYzogZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJu
IHRoaXMuc2xpY2UoMCwgdGhpcy5sZW5ndGggLSAxKSArCi0gICAgICBTdHJpbmcuZnJvbUNoYXJD
b2RlKHRoaXMuY2hhckNvZGVBdCh0aGlzLmxlbmd0aCAtIDEpICsgMSk7Ci0gIH0sCi0KLSAgdGlt
ZXM6IGZ1bmN0aW9uKGNvdW50KSB7Ci0gICAgcmV0dXJuIGNvdW50IDwgMSA/ICcnIDogbmV3IEFy
cmF5KGNvdW50ICsgMSkuam9pbih0aGlzKTsKLSAgfSwKLQotICBjYW1lbGl6ZTogZnVuY3Rpb24o
KSB7Ci0gICAgdmFyIHBhcnRzID0gdGhpcy5zcGxpdCgnLScpLCBsZW4gPSBwYXJ0cy5sZW5ndGg7
Ci0gICAgaWYgKGxlbiA9PSAxKSByZXR1cm4gcGFydHNbMF07Ci0KLSAgICB2YXIgY2FtZWxpemVk
ID0gdGhpcy5jaGFyQXQoMCkgPT0gJy0nCi0gICAgICA/IHBhcnRzWzBdLmNoYXJBdCgwKS50b1Vw
cGVyQ2FzZSgpICsgcGFydHNbMF0uc3Vic3RyaW5nKDEpCi0gICAgICA6IHBhcnRzWzBdOwotCi0g
ICAgZm9yICh2YXIgaSA9IDE7IGkgPCBsZW47IGkrKykKLSAgICAgIGNhbWVsaXplZCArPSBwYXJ0
c1tpXS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHBhcnRzW2ldLnN1YnN0cmluZygxKTsKLQot
ICAgIHJldHVybiBjYW1lbGl6ZWQ7Ci0gIH0sCi0KLSAgY2FwaXRhbGl6ZTogZnVuY3Rpb24oKSB7
Ci0gICAgcmV0dXJuIHRoaXMuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0aGlzLnN1YnN0cmlu
ZygxKS50b0xvd2VyQ2FzZSgpOwotICB9LAotCi0gIHVuZGVyc2NvcmU6IGZ1bmN0aW9uKCkgewot
ICAgIHJldHVybiB0aGlzLmdzdWIoLzo6LywgJy8nKS5nc3ViKC8oW0EtWl0rKShbQS1aXVthLXpd
KS8sJyN7MX1fI3syfScpLmdzdWIoLyhbYS16XGRdKShbQS1aXSkvLCcjezF9XyN7Mn0nKS5nc3Vi
KC8tLywnXycpLnRvTG93ZXJDYXNlKCk7Ci0gIH0sCi0KLSAgZGFzaGVyaXplOiBmdW5jdGlvbigp
IHsKLSAgICByZXR1cm4gdGhpcy5nc3ViKC9fLywnLScpOwotICB9LAotCi0gIGluc3BlY3Q6IGZ1
bmN0aW9uKHVzZURvdWJsZVF1b3RlcykgewotICAgIHZhciBlc2NhcGVkU3RyaW5nID0gdGhpcy5n
c3ViKC9bXHgwMC1ceDFmXFxdLywgZnVuY3Rpb24obWF0Y2gpIHsKLSAgICAgIHZhciBjaGFyYWN0
ZXIgPSBTdHJpbmcuc3BlY2lhbENoYXJbbWF0Y2hbMF1dOwotICAgICAgcmV0dXJuIGNoYXJhY3Rl
ciA/IGNoYXJhY3RlciA6ICdcXHUwMCcgKyBtYXRjaFswXS5jaGFyQ29kZUF0KCkudG9QYWRkZWRT
dHJpbmcoMiwgMTYpOwotICAgIH0pOwotICAgIGlmICh1c2VEb3VibGVRdW90ZXMpIHJldHVybiAn
IicgKyBlc2NhcGVkU3RyaW5nLnJlcGxhY2UoLyIvZywgJ1xcIicpICsgJyInOwotICAgIHJldHVy
biAiJyIgKyBlc2NhcGVkU3RyaW5nLnJlcGxhY2UoLycvZywgJ1xcXCcnKSArICInIjsKLSAgfSwK
LQotICB0b0pTT046IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiB0aGlzLmluc3BlY3QodHJ1ZSk7
Ci0gIH0sCi0KLSAgdW5maWx0ZXJKU09OOiBmdW5jdGlvbihmaWx0ZXIpIHsKLSAgICByZXR1cm4g
dGhpcy5zdWIoZmlsdGVyIHx8IFByb3RvdHlwZS5KU09ORmlsdGVyLCAnI3sxfScpOwotICB9LAot
Ci0gIGlzSlNPTjogZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHN0ciA9IHRoaXM7Ci0gICAgaWYgKHN0
ci5ibGFuaygpKSByZXR1cm4gZmFsc2U7Ci0gICAgc3RyID0gdGhpcy5yZXBsYWNlKC9cXC4vZywg
J0AnKS5yZXBsYWNlKC8iW14iXFxcblxyXSoiL2csICcnKTsKLSAgICByZXR1cm4gKC9eWyw6e31c
W1xdMC05LlwtK0VhZWZsbnItdSBcblxyXHRdKiQvKS50ZXN0KHN0cik7Ci0gIH0sCi0KLSAgZXZh
bEpTT046IGZ1bmN0aW9uKHNhbml0aXplKSB7Ci0gICAgdmFyIGpzb24gPSB0aGlzLnVuZmlsdGVy
SlNPTigpOwotICAgIHRyeSB7Ci0gICAgICBpZiAoIXNhbml0aXplIHx8IGpzb24uaXNKU09OKCkp
IHJldHVybiBldmFsKCcoJyArIGpzb24gKyAnKScpOwotICAgIH0gY2F0Y2ggKGUpIHsgfQotICAg
IHRocm93IG5ldyBTeW50YXhFcnJvcignQmFkbHkgZm9ybWVkIEpTT04gc3RyaW5nOiAnICsgdGhp
cy5pbnNwZWN0KCkpOwotICB9LAotCi0gIGluY2x1ZGU6IGZ1bmN0aW9uKHBhdHRlcm4pIHsKLSAg
ICByZXR1cm4gdGhpcy5pbmRleE9mKHBhdHRlcm4pID4gLTE7Ci0gIH0sCi0KLSAgc3RhcnRzV2l0
aDogZnVuY3Rpb24ocGF0dGVybikgewotICAgIHJldHVybiB0aGlzLmluZGV4T2YocGF0dGVybikg
PT09IDA7Ci0gIH0sCi0KLSAgZW5kc1dpdGg6IGZ1bmN0aW9uKHBhdHRlcm4pIHsKLSAgICB2YXIg
ZCA9IHRoaXMubGVuZ3RoIC0gcGF0dGVybi5sZW5ndGg7Ci0gICAgcmV0dXJuIGQgPj0gMCAmJiB0
aGlzLmxhc3RJbmRleE9mKHBhdHRlcm4pID09PSBkOwotICB9LAotCi0gIGVtcHR5OiBmdW5jdGlv
bigpIHsKLSAgICByZXR1cm4gdGhpcyA9PSAnJzsKLSAgfSwKLQotICBibGFuazogZnVuY3Rpb24o
KSB7Ci0gICAgcmV0dXJuIC9eXHMqJC8udGVzdCh0aGlzKTsKLSAgfSwKLQotICBpbnRlcnBvbGF0
ZTogZnVuY3Rpb24ob2JqZWN0LCBwYXR0ZXJuKSB7Ci0gICAgcmV0dXJuIG5ldyBUZW1wbGF0ZSh0
aGlzLCBwYXR0ZXJuKS5ldmFsdWF0ZShvYmplY3QpOwotICB9Ci19KTsKLQotaWYgKFByb3RvdHlw
ZS5Ccm93c2VyLldlYktpdCB8fCBQcm90b3R5cGUuQnJvd3Nlci5JRSkgT2JqZWN0LmV4dGVuZChT
dHJpbmcucHJvdG90eXBlLCB7Ci0gIGVzY2FwZUhUTUw6IGZ1bmN0aW9uKCkgewotICAgIHJldHVy
biB0aGlzLnJlcGxhY2UoLyYvZywnJmFtcDsnKS5yZXBsYWNlKC88L2csJyZsdDsnKS5yZXBsYWNl
KC8+L2csJyZndDsnKTsKLSAgfSwKLSAgdW5lc2NhcGVIVE1MOiBmdW5jdGlvbigpIHsKLSAgICBy
ZXR1cm4gdGhpcy5yZXBsYWNlKC8mYW1wOy9nLCcmJykucmVwbGFjZSgvJmx0Oy9nLCc8JykucmVw
bGFjZSgvJmd0Oy9nLCc+Jyk7Ci0gIH0KLX0pOwotCi1TdHJpbmcucHJvdG90eXBlLmdzdWIucHJl
cGFyZVJlcGxhY2VtZW50ID0gZnVuY3Rpb24ocmVwbGFjZW1lbnQpIHsKLSAgaWYgKE9iamVjdC5p
c0Z1bmN0aW9uKHJlcGxhY2VtZW50KSkgcmV0dXJuIHJlcGxhY2VtZW50OwotICB2YXIgdGVtcGxh
dGUgPSBuZXcgVGVtcGxhdGUocmVwbGFjZW1lbnQpOwotICByZXR1cm4gZnVuY3Rpb24obWF0Y2gp
IHsgcmV0dXJuIHRlbXBsYXRlLmV2YWx1YXRlKG1hdGNoKSB9OwotfTsKLQotU3RyaW5nLnByb3Rv
dHlwZS5wYXJzZVF1ZXJ5ID0gU3RyaW5nLnByb3RvdHlwZS50b1F1ZXJ5UGFyYW1zOwotCi1PYmpl
Y3QuZXh0ZW5kKFN0cmluZy5wcm90b3R5cGUuZXNjYXBlSFRNTCwgewotICBkaXY6ICBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCdkaXYnKSwKLSAgdGV4dDogZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUo
JycpCi19KTsKLQotd2l0aCAoU3RyaW5nLnByb3RvdHlwZS5lc2NhcGVIVE1MKSBkaXYuYXBwZW5k
Q2hpbGQodGV4dCk7Ci0KLXZhciBUZW1wbGF0ZSA9IENsYXNzLmNyZWF0ZSh7Ci0gIGluaXRpYWxp
emU6IGZ1bmN0aW9uKHRlbXBsYXRlLCBwYXR0ZXJuKSB7Ci0gICAgdGhpcy50ZW1wbGF0ZSA9IHRl
bXBsYXRlLnRvU3RyaW5nKCk7Ci0gICAgdGhpcy5wYXR0ZXJuID0gcGF0dGVybiB8fCBUZW1wbGF0
ZS5QYXR0ZXJuOwotICB9LAotCi0gIGV2YWx1YXRlOiBmdW5jdGlvbihvYmplY3QpIHsKLSAgICBp
ZiAoT2JqZWN0LmlzRnVuY3Rpb24ob2JqZWN0LnRvVGVtcGxhdGVSZXBsYWNlbWVudHMpKQotICAg
ICAgb2JqZWN0ID0gb2JqZWN0LnRvVGVtcGxhdGVSZXBsYWNlbWVudHMoKTsKLQotICAgIHJldHVy
biB0aGlzLnRlbXBsYXRlLmdzdWIodGhpcy5wYXR0ZXJuLCBmdW5jdGlvbihtYXRjaCkgewotICAg
ICAgaWYgKG9iamVjdCA9PSBudWxsKSByZXR1cm4gJyc7Ci0KLSAgICAgIHZhciBiZWZvcmUgPSBt
YXRjaFsxXSB8fCAnJzsKLSAgICAgIGlmIChiZWZvcmUgPT0gJ1xcJykgcmV0dXJuIG1hdGNoWzJd
OwotCi0gICAgICB2YXIgY3R4ID0gb2JqZWN0LCBleHByID0gbWF0Y2hbM107Ci0gICAgICB2YXIg
cGF0dGVybiA9IC9eKFteLltdK3xcWygoPzouKj9bXlxcXSk/KVxdKShcLnxcW3wkKS87Ci0gICAg
ICBtYXRjaCA9IHBhdHRlcm4uZXhlYyhleHByKTsKLSAgICAgIGlmIChtYXRjaCA9PSBudWxsKSBy
ZXR1cm4gYmVmb3JlOwotCi0gICAgICB3aGlsZSAobWF0Y2ggIT0gbnVsbCkgewotICAgICAgICB2
YXIgY29tcCA9IG1hdGNoWzFdLnN0YXJ0c1dpdGgoJ1snKSA/IG1hdGNoWzJdLmdzdWIoJ1xcXFxd
JywgJ10nKSA6IG1hdGNoWzFdOwotICAgICAgICBjdHggPSBjdHhbY29tcF07Ci0gICAgICAgIGlm
IChudWxsID09IGN0eCB8fCAnJyA9PSBtYXRjaFszXSkgYnJlYWs7Ci0gICAgICAgIGV4cHIgPSBl
eHByLnN1YnN0cmluZygnWycgPT0gbWF0Y2hbM10gPyBtYXRjaFsxXS5sZW5ndGggOiBtYXRjaFsw
XS5sZW5ndGgpOwotICAgICAgICBtYXRjaCA9IHBhdHRlcm4uZXhlYyhleHByKTsKLSAgICAgIH0K
LQotICAgICAgcmV0dXJuIGJlZm9yZSArIFN0cmluZy5pbnRlcnByZXQoY3R4KTsKLSAgICB9KTsK
LSAgfQotfSk7Ci1UZW1wbGF0ZS5QYXR0ZXJuID0gLyhefC58XHJ8XG4pKCNceyguKj8pXH0pLzsK
LQotdmFyICRicmVhayA9IHsgfTsKLQotdmFyIEVudW1lcmFibGUgPSB7Ci0gIGVhY2g6IGZ1bmN0
aW9uKGl0ZXJhdG9yLCBjb250ZXh0KSB7Ci0gICAgdmFyIGluZGV4ID0gMDsKLSAgICBpdGVyYXRv
ciA9IGl0ZXJhdG9yLmJpbmQoY29udGV4dCk7Ci0gICAgdHJ5IHsKLSAgICAgIHRoaXMuX2VhY2go
ZnVuY3Rpb24odmFsdWUpIHsKLSAgICAgICAgaXRlcmF0b3IodmFsdWUsIGluZGV4KyspOwotICAg
ICAgfSk7Ci0gICAgfSBjYXRjaCAoZSkgewotICAgICAgaWYgKGUgIT0gJGJyZWFrKSB0aHJvdyBl
OwotICAgIH0KLSAgICByZXR1cm4gdGhpczsKLSAgfSwKLQotICBlYWNoU2xpY2U6IGZ1bmN0aW9u
KG51bWJlciwgaXRlcmF0b3IsIGNvbnRleHQpIHsKLSAgICBpdGVyYXRvciA9IGl0ZXJhdG9yID8g
aXRlcmF0b3IuYmluZChjb250ZXh0KSA6IFByb3RvdHlwZS5LOwotICAgIHZhciBpbmRleCA9IC1u
dW1iZXIsIHNsaWNlcyA9IFtdLCBhcnJheSA9IHRoaXMudG9BcnJheSgpOwotICAgIHdoaWxlICgo
aW5kZXggKz0gbnVtYmVyKSA8IGFycmF5Lmxlbmd0aCkKLSAgICAgIHNsaWNlcy5wdXNoKGFycmF5
LnNsaWNlKGluZGV4LCBpbmRleCtudW1iZXIpKTsKLSAgICByZXR1cm4gc2xpY2VzLmNvbGxlY3Qo
aXRlcmF0b3IsIGNvbnRleHQpOwotICB9LAotCi0gIGFsbDogZnVuY3Rpb24oaXRlcmF0b3IsIGNv
bnRleHQpIHsKLSAgICBpdGVyYXRvciA9IGl0ZXJhdG9yID8gaXRlcmF0b3IuYmluZChjb250ZXh0
KSA6IFByb3RvdHlwZS5LOwotICAgIHZhciByZXN1bHQgPSB0cnVlOwotICAgIHRoaXMuZWFjaChm
dW5jdGlvbih2YWx1ZSwgaW5kZXgpIHsKLSAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAhIWl0ZXJh
dG9yKHZhbHVlLCBpbmRleCk7Ci0gICAgICBpZiAoIXJlc3VsdCkgdGhyb3cgJGJyZWFrOwotICAg
IH0pOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0sCi0KLSAgYW55OiBmdW5jdGlvbihpdGVyYXRv
ciwgY29udGV4dCkgewotICAgIGl0ZXJhdG9yID0gaXRlcmF0b3IgPyBpdGVyYXRvci5iaW5kKGNv
bnRleHQpIDogUHJvdG90eXBlLks7Ci0gICAgdmFyIHJlc3VsdCA9IGZhbHNlOwotICAgIHRoaXMu
ZWFjaChmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHsKLSAgICAgIGlmIChyZXN1bHQgPSAhIWl0ZXJh
dG9yKHZhbHVlLCBpbmRleCkpCi0gICAgICAgIHRocm93ICRicmVhazsKLSAgICB9KTsKLSAgICBy
ZXR1cm4gcmVzdWx0OwotICB9LAotCi0gIGNvbGxlY3Q6IGZ1bmN0aW9uKGl0ZXJhdG9yLCBjb250
ZXh0KSB7Ci0gICAgaXRlcmF0b3IgPSBpdGVyYXRvciA/IGl0ZXJhdG9yLmJpbmQoY29udGV4dCkg
OiBQcm90b3R5cGUuSzsKLSAgICB2YXIgcmVzdWx0cyA9IFtdOwotICAgIHRoaXMuZWFjaChmdW5j
dGlvbih2YWx1ZSwgaW5kZXgpIHsKLSAgICAgIHJlc3VsdHMucHVzaChpdGVyYXRvcih2YWx1ZSwg
aW5kZXgpKTsKLSAgICB9KTsKLSAgICByZXR1cm4gcmVzdWx0czsKLSAgfSwKLQotICBkZXRlY3Q6
IGZ1bmN0aW9uKGl0ZXJhdG9yLCBjb250ZXh0KSB7Ci0gICAgaXRlcmF0b3IgPSBpdGVyYXRvci5i
aW5kKGNvbnRleHQpOwotICAgIHZhciByZXN1bHQ7Ci0gICAgdGhpcy5lYWNoKGZ1bmN0aW9uKHZh
bHVlLCBpbmRleCkgewotICAgICAgaWYgKGl0ZXJhdG9yKHZhbHVlLCBpbmRleCkpIHsKLSAgICAg
ICAgcmVzdWx0ID0gdmFsdWU7Ci0gICAgICAgIHRocm93ICRicmVhazsKLSAgICAgIH0KLSAgICB9
KTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9LAotCi0gIGZpbmRBbGw6IGZ1bmN0aW9uKGl0ZXJh
dG9yLCBjb250ZXh0KSB7Ci0gICAgaXRlcmF0b3IgPSBpdGVyYXRvci5iaW5kKGNvbnRleHQpOwot
ICAgIHZhciByZXN1bHRzID0gW107Ci0gICAgdGhpcy5lYWNoKGZ1bmN0aW9uKHZhbHVlLCBpbmRl
eCkgewotICAgICAgaWYgKGl0ZXJhdG9yKHZhbHVlLCBpbmRleCkpCi0gICAgICAgIHJlc3VsdHMu
cHVzaCh2YWx1ZSk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHJlc3VsdHM7Ci0gIH0sCi0KLSAgZ3Jl
cDogZnVuY3Rpb24oZmlsdGVyLCBpdGVyYXRvciwgY29udGV4dCkgewotICAgIGl0ZXJhdG9yID0g
aXRlcmF0b3IgPyBpdGVyYXRvci5iaW5kKGNvbnRleHQpIDogUHJvdG90eXBlLks7Ci0gICAgdmFy
IHJlc3VsdHMgPSBbXTsKLQotICAgIGlmIChPYmplY3QuaXNTdHJpbmcoZmlsdGVyKSkKLSAgICAg
IGZpbHRlciA9IG5ldyBSZWdFeHAoZmlsdGVyKTsKLQotICAgIHRoaXMuZWFjaChmdW5jdGlvbih2
YWx1ZSwgaW5kZXgpIHsKLSAgICAgIGlmIChmaWx0ZXIubWF0Y2godmFsdWUpKQotICAgICAgICBy
ZXN1bHRzLnB1c2goaXRlcmF0b3IodmFsdWUsIGluZGV4KSk7Ci0gICAgfSk7Ci0gICAgcmV0dXJu
IHJlc3VsdHM7Ci0gIH0sCi0KLSAgaW5jbHVkZTogZnVuY3Rpb24ob2JqZWN0KSB7Ci0gICAgaWYg
KE9iamVjdC5pc0Z1bmN0aW9uKHRoaXMuaW5kZXhPZikpCi0gICAgICBpZiAodGhpcy5pbmRleE9m
KG9iamVjdCkgIT0gLTEpIHJldHVybiB0cnVlOwotCi0gICAgdmFyIGZvdW5kID0gZmFsc2U7Ci0g
ICAgdGhpcy5lYWNoKGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgICBpZiAodmFsdWUgPT0gb2JqZWN0
KSB7Ci0gICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgdGhyb3cgJGJyZWFrOwotICAgICAg
fQotICAgIH0pOwotICAgIHJldHVybiBmb3VuZDsKLSAgfSwKLQotICBpbkdyb3Vwc09mOiBmdW5j
dGlvbihudW1iZXIsIGZpbGxXaXRoKSB7Ci0gICAgZmlsbFdpdGggPSBPYmplY3QuaXNVbmRlZmlu
ZWQoZmlsbFdpdGgpID8gbnVsbCA6IGZpbGxXaXRoOwotICAgIHJldHVybiB0aGlzLmVhY2hTbGlj
ZShudW1iZXIsIGZ1bmN0aW9uKHNsaWNlKSB7Ci0gICAgICB3aGlsZShzbGljZS5sZW5ndGggPCBu
dW1iZXIpIHNsaWNlLnB1c2goZmlsbFdpdGgpOwotICAgICAgcmV0dXJuIHNsaWNlOwotICAgIH0p
OwotICB9LAotCi0gIGluamVjdDogZnVuY3Rpb24obWVtbywgaXRlcmF0b3IsIGNvbnRleHQpIHsK
LSAgICBpdGVyYXRvciA9IGl0ZXJhdG9yLmJpbmQoY29udGV4dCk7Ci0gICAgdGhpcy5lYWNoKGZ1
bmN0aW9uKHZhbHVlLCBpbmRleCkgewotICAgICAgbWVtbyA9IGl0ZXJhdG9yKG1lbW8sIHZhbHVl
LCBpbmRleCk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIG1lbW87Ci0gIH0sCi0KLSAgaW52b2tlOiBm
dW5jdGlvbihtZXRob2QpIHsKLSAgICB2YXIgYXJncyA9ICRBKGFyZ3VtZW50cykuc2xpY2UoMSk7
Ci0gICAgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgICByZXR1cm4gdmFs
dWVbbWV0aG9kXS5hcHBseSh2YWx1ZSwgYXJncyk7Ci0gICAgfSk7Ci0gIH0sCi0KLSAgbWF4OiBm
dW5jdGlvbihpdGVyYXRvciwgY29udGV4dCkgewotICAgIGl0ZXJhdG9yID0gaXRlcmF0b3IgPyBp
dGVyYXRvci5iaW5kKGNvbnRleHQpIDogUHJvdG90eXBlLks7Ci0gICAgdmFyIHJlc3VsdDsKLSAg
ICB0aGlzLmVhY2goZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7Ci0gICAgICB2YWx1ZSA9IGl0ZXJh
dG9yKHZhbHVlLCBpbmRleCk7Ci0gICAgICBpZiAocmVzdWx0ID09IG51bGwgfHwgdmFsdWUgPj0g
cmVzdWx0KQotICAgICAgICByZXN1bHQgPSB2YWx1ZTsKLSAgICB9KTsKLSAgICByZXR1cm4gcmVz
dWx0OwotICB9LAotCi0gIG1pbjogZnVuY3Rpb24oaXRlcmF0b3IsIGNvbnRleHQpIHsKLSAgICBp
dGVyYXRvciA9IGl0ZXJhdG9yID8gaXRlcmF0b3IuYmluZChjb250ZXh0KSA6IFByb3RvdHlwZS5L
OwotICAgIHZhciByZXN1bHQ7Ci0gICAgdGhpcy5lYWNoKGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkg
ewotICAgICAgdmFsdWUgPSBpdGVyYXRvcih2YWx1ZSwgaW5kZXgpOwotICAgICAgaWYgKHJlc3Vs
dCA9PSBudWxsIHx8IHZhbHVlIDwgcmVzdWx0KQotICAgICAgICByZXN1bHQgPSB2YWx1ZTsKLSAg
ICB9KTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9LAotCi0gIHBhcnRpdGlvbjogZnVuY3Rpb24o
aXRlcmF0b3IsIGNvbnRleHQpIHsKLSAgICBpdGVyYXRvciA9IGl0ZXJhdG9yID8gaXRlcmF0b3Iu
YmluZChjb250ZXh0KSA6IFByb3RvdHlwZS5LOwotICAgIHZhciB0cnVlcyA9IFtdLCBmYWxzZXMg
PSBbXTsKLSAgICB0aGlzLmVhY2goZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7Ci0gICAgICAoaXRl
cmF0b3IodmFsdWUsIGluZGV4KSA/Ci0gICAgICAgIHRydWVzIDogZmFsc2VzKS5wdXNoKHZhbHVl
KTsKLSAgICB9KTsKLSAgICByZXR1cm4gW3RydWVzLCBmYWxzZXNdOwotICB9LAotCi0gIHBsdWNr
OiBmdW5jdGlvbihwcm9wZXJ0eSkgewotICAgIHZhciByZXN1bHRzID0gW107Ci0gICAgdGhpcy5l
YWNoKGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgICByZXN1bHRzLnB1c2godmFsdWVbcHJvcGVydHld
KTsKLSAgICB9KTsKLSAgICByZXR1cm4gcmVzdWx0czsKLSAgfSwKLQotICByZWplY3Q6IGZ1bmN0
aW9uKGl0ZXJhdG9yLCBjb250ZXh0KSB7Ci0gICAgaXRlcmF0b3IgPSBpdGVyYXRvci5iaW5kKGNv
bnRleHQpOwotICAgIHZhciByZXN1bHRzID0gW107Ci0gICAgdGhpcy5lYWNoKGZ1bmN0aW9uKHZh
bHVlLCBpbmRleCkgewotICAgICAgaWYgKCFpdGVyYXRvcih2YWx1ZSwgaW5kZXgpKQotICAgICAg
ICByZXN1bHRzLnB1c2godmFsdWUpOwotICAgIH0pOwotICAgIHJldHVybiByZXN1bHRzOwotICB9
LAotCi0gIHNvcnRCeTogZnVuY3Rpb24oaXRlcmF0b3IsIGNvbnRleHQpIHsKLSAgICBpdGVyYXRv
ciA9IGl0ZXJhdG9yLmJpbmQoY29udGV4dCk7Ci0gICAgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9u
KHZhbHVlLCBpbmRleCkgewotICAgICAgcmV0dXJuIHt2YWx1ZTogdmFsdWUsIGNyaXRlcmlhOiBp
dGVyYXRvcih2YWx1ZSwgaW5kZXgpfTsKLSAgICB9KS5zb3J0KGZ1bmN0aW9uKGxlZnQsIHJpZ2h0
KSB7Ci0gICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWEsIGIgPSByaWdodC5jcml0ZXJpYTsKLSAg
ICAgIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogMDsKLSAgICB9KS5wbHVjaygndmFs
dWUnKTsKLSAgfSwKLQotICB0b0FycmF5OiBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhpcy5t
YXAoKTsKLSAgfSwKLQotICB6aXA6IGZ1bmN0aW9uKCkgewotICAgIHZhciBpdGVyYXRvciA9IFBy
b3RvdHlwZS5LLCBhcmdzID0gJEEoYXJndW1lbnRzKTsKLSAgICBpZiAoT2JqZWN0LmlzRnVuY3Rp
b24oYXJncy5sYXN0KCkpKQotICAgICAgaXRlcmF0b3IgPSBhcmdzLnBvcCgpOwotCi0gICAgdmFy
IGNvbGxlY3Rpb25zID0gW3RoaXNdLmNvbmNhdChhcmdzKS5tYXAoJEEpOwotICAgIHJldHVybiB0
aGlzLm1hcChmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHsKLSAgICAgIHJldHVybiBpdGVyYXRvcihj
b2xsZWN0aW9ucy5wbHVjayhpbmRleCkpOwotICAgIH0pOwotICB9LAotCi0gIHNpemU6IGZ1bmN0
aW9uKCkgewotICAgIHJldHVybiB0aGlzLnRvQXJyYXkoKS5sZW5ndGg7Ci0gIH0sCi0KLSAgaW5z
cGVjdDogZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuICcjPEVudW1lcmFibGU6JyArIHRoaXMudG9B
cnJheSgpLmluc3BlY3QoKSArICc+JzsKLSAgfQotfTsKLQotT2JqZWN0LmV4dGVuZChFbnVtZXJh
YmxlLCB7Ci0gIG1hcDogICAgIEVudW1lcmFibGUuY29sbGVjdCwKLSAgZmluZDogICAgRW51bWVy
YWJsZS5kZXRlY3QsCi0gIHNlbGVjdDogIEVudW1lcmFibGUuZmluZEFsbCwKLSAgZmlsdGVyOiAg
RW51bWVyYWJsZS5maW5kQWxsLAotICBtZW1iZXI6ICBFbnVtZXJhYmxlLmluY2x1ZGUsCi0gIGVu
dHJpZXM6IEVudW1lcmFibGUudG9BcnJheSwKLSAgZXZlcnk6ICAgRW51bWVyYWJsZS5hbGwsCi0g
IHNvbWU6ICAgIEVudW1lcmFibGUuYW55Ci19KTsKLWZ1bmN0aW9uICRBKGl0ZXJhYmxlKSB7Ci0g
IGlmICghaXRlcmFibGUpIHJldHVybiBbXTsKLSAgaWYgKGl0ZXJhYmxlLnRvQXJyYXkpIHJldHVy
biBpdGVyYWJsZS50b0FycmF5KCk7Ci0gIHZhciBsZW5ndGggPSBpdGVyYWJsZS5sZW5ndGggfHwg
MCwgcmVzdWx0cyA9IG5ldyBBcnJheShsZW5ndGgpOwotICB3aGlsZSAobGVuZ3RoLS0pIHJlc3Vs
dHNbbGVuZ3RoXSA9IGl0ZXJhYmxlW2xlbmd0aF07Ci0gIHJldHVybiByZXN1bHRzOwotfQotCi1p
ZiAoUHJvdG90eXBlLkJyb3dzZXIuV2ViS2l0KSB7Ci0gICRBID0gZnVuY3Rpb24oaXRlcmFibGUp
IHsKLSAgICBpZiAoIWl0ZXJhYmxlKSByZXR1cm4gW107Ci0gICAgaWYgKCEoT2JqZWN0LmlzRnVu
Y3Rpb24oaXRlcmFibGUpICYmIGl0ZXJhYmxlID09ICdbb2JqZWN0IE5vZGVMaXN0XScpICYmCi0g
ICAgICAgIGl0ZXJhYmxlLnRvQXJyYXkpIHJldHVybiBpdGVyYWJsZS50b0FycmF5KCk7Ci0gICAg
dmFyIGxlbmd0aCA9IGl0ZXJhYmxlLmxlbmd0aCB8fCAwLCByZXN1bHRzID0gbmV3IEFycmF5KGxl
bmd0aCk7Ci0gICAgd2hpbGUgKGxlbmd0aC0tKSByZXN1bHRzW2xlbmd0aF0gPSBpdGVyYWJsZVts
ZW5ndGhdOwotICAgIHJldHVybiByZXN1bHRzOwotICB9OwotfQotCi1BcnJheS5mcm9tID0gJEE7
Ci0KLU9iamVjdC5leHRlbmQoQXJyYXkucHJvdG90eXBlLCBFbnVtZXJhYmxlKTsKLQotaWYgKCFB
cnJheS5wcm90b3R5cGUuX3JldmVyc2UpIEFycmF5LnByb3RvdHlwZS5fcmV2ZXJzZSA9IEFycmF5
LnByb3RvdHlwZS5yZXZlcnNlOwotCi1PYmplY3QuZXh0ZW5kKEFycmF5LnByb3RvdHlwZSwgewot
ICBfZWFjaDogZnVuY3Rpb24oaXRlcmF0b3IpIHsKLSAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3Ro
ID0gdGhpcy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykKLSAgICAgIGl0ZXJhdG9yKHRoaXNbaV0p
OwotICB9LAotCi0gIGNsZWFyOiBmdW5jdGlvbigpIHsKLSAgICB0aGlzLmxlbmd0aCA9IDA7Ci0g
ICAgcmV0dXJuIHRoaXM7Ci0gIH0sCi0KLSAgZmlyc3Q6IGZ1bmN0aW9uKCkgewotICAgIHJldHVy
biB0aGlzWzBdOwotICB9LAotCi0gIGxhc3Q6IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiB0aGlz
W3RoaXMubGVuZ3RoIC0gMV07Ci0gIH0sCi0KLSAgY29tcGFjdDogZnVuY3Rpb24oKSB7Ci0gICAg
cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgICByZXR1cm4gdmFsdWUg
IT0gbnVsbDsKLSAgICB9KTsKLSAgfSwKLQotICBmbGF0dGVuOiBmdW5jdGlvbigpIHsKLSAgICBy
ZXR1cm4gdGhpcy5pbmplY3QoW10sIGZ1bmN0aW9uKGFycmF5LCB2YWx1ZSkgewotICAgICAgcmV0
dXJuIGFycmF5LmNvbmNhdChPYmplY3QuaXNBcnJheSh2YWx1ZSkgPwotICAgICAgICB2YWx1ZS5m
bGF0dGVuKCkgOiBbdmFsdWVdKTsKLSAgICB9KTsKLSAgfSwKLQotICB3aXRob3V0OiBmdW5jdGlv
bigpIHsKLSAgICB2YXIgdmFsdWVzID0gJEEoYXJndW1lbnRzKTsKLSAgICByZXR1cm4gdGhpcy5z
ZWxlY3QoZnVuY3Rpb24odmFsdWUpIHsKLSAgICAgIHJldHVybiAhdmFsdWVzLmluY2x1ZGUodmFs
dWUpOwotICAgIH0pOwotICB9LAotCi0gIHJldmVyc2U6IGZ1bmN0aW9uKGlubGluZSkgewotICAg
IHJldHVybiAoaW5saW5lICE9PSBmYWxzZSA/IHRoaXMgOiB0aGlzLnRvQXJyYXkoKSkuX3JldmVy
c2UoKTsKLSAgfSwKLQotICByZWR1Y2U6IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiB0aGlzLmxl
bmd0aCA+IDEgPyB0aGlzIDogdGhpc1swXTsKLSAgfSwKLQotICB1bmlxOiBmdW5jdGlvbihzb3J0
ZWQpIHsKLSAgICByZXR1cm4gdGhpcy5pbmplY3QoW10sIGZ1bmN0aW9uKGFycmF5LCB2YWx1ZSwg
aW5kZXgpIHsKLSAgICAgIGlmICgwID09IGluZGV4IHx8IChzb3J0ZWQgPyBhcnJheS5sYXN0KCkg
IT0gdmFsdWUgOiAhYXJyYXkuaW5jbHVkZSh2YWx1ZSkpKQotICAgICAgICBhcnJheS5wdXNoKHZh
bHVlKTsKLSAgICAgIHJldHVybiBhcnJheTsKLSAgICB9KTsKLSAgfSwKLQotICBpbnRlcnNlY3Q6
IGZ1bmN0aW9uKGFycmF5KSB7Ci0gICAgcmV0dXJuIHRoaXMudW5pcSgpLmZpbmRBbGwoZnVuY3Rp
b24oaXRlbSkgewotICAgICAgcmV0dXJuIGFycmF5LmRldGVjdChmdW5jdGlvbih2YWx1ZSkgeyBy
ZXR1cm4gaXRlbSA9PT0gdmFsdWUgfSk7Ci0gICAgfSk7Ci0gIH0sCi0KLSAgY2xvbmU6IGZ1bmN0
aW9uKCkgewotICAgIHJldHVybiBbXS5jb25jYXQodGhpcyk7Ci0gIH0sCi0KLSAgc2l6ZTogZnVu
Y3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMubGVuZ3RoOwotICB9LAotCi0gIGluc3BlY3Q6IGZ1
bmN0aW9uKCkgewotICAgIHJldHVybiAnWycgKyB0aGlzLm1hcChPYmplY3QuaW5zcGVjdCkuam9p
bignLCAnKSArICddJzsKLSAgfSwKLQotICB0b0pTT046IGZ1bmN0aW9uKCkgewotICAgIHZhciBy
ZXN1bHRzID0gW107Ci0gICAgdGhpcy5lYWNoKGZ1bmN0aW9uKG9iamVjdCkgewotICAgICAgdmFy
IHZhbHVlID0gT2JqZWN0LnRvSlNPTihvYmplY3QpOwotICAgICAgaWYgKCFPYmplY3QuaXNVbmRl
ZmluZWQodmFsdWUpKSByZXN1bHRzLnB1c2godmFsdWUpOwotICAgIH0pOwotICAgIHJldHVybiAn
WycgKyByZXN1bHRzLmpvaW4oJywgJykgKyAnXSc7Ci0gIH0KLX0pOwotCi0vLyB1c2UgbmF0aXZl
IGJyb3dzZXIgSlMgMS42IGltcGxlbWVudGF0aW9uIGlmIGF2YWlsYWJsZQotaWYgKE9iamVjdC5p
c0Z1bmN0aW9uKEFycmF5LnByb3RvdHlwZS5mb3JFYWNoKSkKLSAgQXJyYXkucHJvdG90eXBlLl9l
YWNoID0gQXJyYXkucHJvdG90eXBlLmZvckVhY2g7Ci0KLWlmICghQXJyYXkucHJvdG90eXBlLmlu
ZGV4T2YpIEFycmF5LnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24oaXRlbSwgaSkgewotICBp
IHx8IChpID0gMCk7Ci0gIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDsKLSAgaWYgKGkgPCAwKSBp
ID0gbGVuZ3RoICsgaTsKLSAgZm9yICg7IGkgPCBsZW5ndGg7IGkrKykKLSAgICBpZiAodGhpc1tp
XSA9PT0gaXRlbSkgcmV0dXJuIGk7Ci0gIHJldHVybiAtMTsKLX07Ci0KLWlmICghQXJyYXkucHJv
dG90eXBlLmxhc3RJbmRleE9mKSBBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YgPSBmdW5jdGlv
bihpdGVtLCBpKSB7Ci0gIGkgPSBpc05hTihpKSA/IHRoaXMubGVuZ3RoIDogKGkgPCAwID8gdGhp
cy5sZW5ndGggKyBpIDogaSkgKyAxOwotICB2YXIgbiA9IHRoaXMuc2xpY2UoMCwgaSkucmV2ZXJz
ZSgpLmluZGV4T2YoaXRlbSk7Ci0gIHJldHVybiAobiA8IDApID8gbiA6IGkgLSBuIC0gMTsKLX07
Ci0KLUFycmF5LnByb3RvdHlwZS50b0FycmF5ID0gQXJyYXkucHJvdG90eXBlLmNsb25lOwotCi1m
dW5jdGlvbiAkdyhzdHJpbmcpIHsKLSAgaWYgKCFPYmplY3QuaXNTdHJpbmcoc3RyaW5nKSkgcmV0
dXJuIFtdOwotICBzdHJpbmcgPSBzdHJpbmcuc3RyaXAoKTsKLSAgcmV0dXJuIHN0cmluZyA/IHN0
cmluZy5zcGxpdCgvXHMrLykgOiBbXTsKLX0KLQotaWYgKFByb3RvdHlwZS5Ccm93c2VyLk9wZXJh
KXsKLSAgQXJyYXkucHJvdG90eXBlLmNvbmNhdCA9IGZ1bmN0aW9uKCkgewotICAgIHZhciBhcnJh
eSA9IFtdOwotICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSB0aGlzLmxlbmd0aDsgaSA8IGxl
bmd0aDsgaSsrKSBhcnJheS5wdXNoKHRoaXNbaV0pOwotICAgIGZvciAodmFyIGkgPSAwLCBsZW5n
dGggPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgIGlmIChPYmpl
Y3QuaXNBcnJheShhcmd1bWVudHNbaV0pKSB7Ci0gICAgICAgIGZvciAodmFyIGogPSAwLCBhcnJh
eUxlbmd0aCA9IGFyZ3VtZW50c1tpXS5sZW5ndGg7IGogPCBhcnJheUxlbmd0aDsgaisrKQotICAg
ICAgICAgIGFycmF5LnB1c2goYXJndW1lbnRzW2ldW2pdKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGFycmF5LnB1c2goYXJndW1lbnRzW2ldKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJu
IGFycmF5OwotICB9OwotfQotT2JqZWN0LmV4dGVuZChOdW1iZXIucHJvdG90eXBlLCB7Ci0gIHRv
Q29sb3JQYXJ0OiBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhpcy50b1BhZGRlZFN0cmluZygy
LCAxNik7Ci0gIH0sCi0KLSAgc3VjYzogZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMgKyAx
OwotICB9LAotCi0gIHRpbWVzOiBmdW5jdGlvbihpdGVyYXRvcikgewotICAgICRSKDAsIHRoaXMs
IHRydWUpLmVhY2goaXRlcmF0b3IpOwotICAgIHJldHVybiB0aGlzOwotICB9LAotCi0gIHRvUGFk
ZGVkU3RyaW5nOiBmdW5jdGlvbihsZW5ndGgsIHJhZGl4KSB7Ci0gICAgdmFyIHN0cmluZyA9IHRo
aXMudG9TdHJpbmcocmFkaXggfHwgMTApOwotICAgIHJldHVybiAnMCcudGltZXMobGVuZ3RoIC0g
c3RyaW5nLmxlbmd0aCkgKyBzdHJpbmc7Ci0gIH0sCi0KLSAgdG9KU09OOiBmdW5jdGlvbigpIHsK
LSAgICByZXR1cm4gaXNGaW5pdGUodGhpcykgPyB0aGlzLnRvU3RyaW5nKCkgOiAnbnVsbCc7Ci0g
IH0KLX0pOwotCi0kdygnYWJzIHJvdW5kIGNlaWwgZmxvb3InKS5lYWNoKGZ1bmN0aW9uKG1ldGhv
ZCl7Ci0gIE51bWJlci5wcm90b3R5cGVbbWV0aG9kXSA9IE1hdGhbbWV0aG9kXS5tZXRob2RpemUo
KTsKLX0pOwotZnVuY3Rpb24gJEgob2JqZWN0KSB7Ci0gIHJldHVybiBuZXcgSGFzaChvYmplY3Qp
OwotfTsKLQotdmFyIEhhc2ggPSBDbGFzcy5jcmVhdGUoRW51bWVyYWJsZSwgKGZ1bmN0aW9uKCkg
ewotCi0gIGZ1bmN0aW9uIHRvUXVlcnlQYWlyKGtleSwgdmFsdWUpIHsKLSAgICBpZiAoT2JqZWN0
LmlzVW5kZWZpbmVkKHZhbHVlKSkgcmV0dXJuIGtleTsKLSAgICByZXR1cm4ga2V5ICsgJz0nICsg
ZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZy5pbnRlcnByZXQodmFsdWUpKTsKLSAgfQotCi0gIHJl
dHVybiB7Ci0gICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24ob2JqZWN0KSB7Ci0gICAgICB0aGlzLl9v
YmplY3QgPSBPYmplY3QuaXNIYXNoKG9iamVjdCkgPyBvYmplY3QudG9PYmplY3QoKSA6IE9iamVj
dC5jbG9uZShvYmplY3QpOwotICAgIH0sCi0KLSAgICBfZWFjaDogZnVuY3Rpb24oaXRlcmF0b3Ip
IHsKLSAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLl9vYmplY3QpIHsKLSAgICAgICAgdmFyIHZh
bHVlID0gdGhpcy5fb2JqZWN0W2tleV0sIHBhaXIgPSBba2V5LCB2YWx1ZV07Ci0gICAgICAgIHBh
aXIua2V5ID0ga2V5OwotICAgICAgICBwYWlyLnZhbHVlID0gdmFsdWU7Ci0gICAgICAgIGl0ZXJh
dG9yKHBhaXIpOwotICAgICAgfQotICAgIH0sCi0KLSAgICBzZXQ6IGZ1bmN0aW9uKGtleSwgdmFs
dWUpIHsKLSAgICAgIHJldHVybiB0aGlzLl9vYmplY3Rba2V5XSA9IHZhbHVlOwotICAgIH0sCi0K
LSAgICBnZXQ6IGZ1bmN0aW9uKGtleSkgewotICAgICAgcmV0dXJuIHRoaXMuX29iamVjdFtrZXld
OwotICAgIH0sCi0KLSAgICB1bnNldDogZnVuY3Rpb24oa2V5KSB7Ci0gICAgICB2YXIgdmFsdWUg
PSB0aGlzLl9vYmplY3Rba2V5XTsKLSAgICAgIGRlbGV0ZSB0aGlzLl9vYmplY3Rba2V5XTsKLSAg
ICAgIHJldHVybiB2YWx1ZTsKLSAgICB9LAotCi0gICAgdG9PYmplY3Q6IGZ1bmN0aW9uKCkgewot
ICAgICAgcmV0dXJuIE9iamVjdC5jbG9uZSh0aGlzLl9vYmplY3QpOwotICAgIH0sCi0KLSAgICBr
ZXlzOiBmdW5jdGlvbigpIHsKLSAgICAgIHJldHVybiB0aGlzLnBsdWNrKCdrZXknKTsKLSAgICB9
LAotCi0gICAgdmFsdWVzOiBmdW5jdGlvbigpIHsKLSAgICAgIHJldHVybiB0aGlzLnBsdWNrKCd2
YWx1ZScpOwotICAgIH0sCi0KLSAgICBpbmRleDogZnVuY3Rpb24odmFsdWUpIHsKLSAgICAgIHZh
ciBtYXRjaCA9IHRoaXMuZGV0ZWN0KGZ1bmN0aW9uKHBhaXIpIHsKLSAgICAgICAgcmV0dXJuIHBh
aXIudmFsdWUgPT09IHZhbHVlOwotICAgICAgfSk7Ci0gICAgICByZXR1cm4gbWF0Y2ggJiYgbWF0
Y2gua2V5OwotICAgIH0sCi0KLSAgICBtZXJnZTogZnVuY3Rpb24ob2JqZWN0KSB7Ci0gICAgICBy
ZXR1cm4gdGhpcy5jbG9uZSgpLnVwZGF0ZShvYmplY3QpOwotICAgIH0sCi0KLSAgICB1cGRhdGU6
IGZ1bmN0aW9uKG9iamVjdCkgewotICAgICAgcmV0dXJuIG5ldyBIYXNoKG9iamVjdCkuaW5qZWN0
KHRoaXMsIGZ1bmN0aW9uKHJlc3VsdCwgcGFpcikgewotICAgICAgICByZXN1bHQuc2V0KHBhaXIu
a2V5LCBwYWlyLnZhbHVlKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0pOwotICAg
IH0sCi0KLSAgICB0b1F1ZXJ5U3RyaW5nOiBmdW5jdGlvbigpIHsKLSAgICAgIHJldHVybiB0aGlz
Lm1hcChmdW5jdGlvbihwYWlyKSB7Ci0gICAgICAgIHZhciBrZXkgPSBlbmNvZGVVUklDb21wb25l
bnQocGFpci5rZXkpLCB2YWx1ZXMgPSBwYWlyLnZhbHVlOwotCi0gICAgICAgIGlmICh2YWx1ZXMg
JiYgdHlwZW9mIHZhbHVlcyA9PSAnb2JqZWN0JykgewotICAgICAgICAgIGlmIChPYmplY3QuaXNB
cnJheSh2YWx1ZXMpKQotICAgICAgICAgICAgcmV0dXJuIHZhbHVlcy5tYXAodG9RdWVyeVBhaXIu
Y3Vycnkoa2V5KSkuam9pbignJicpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b1F1ZXJ5
UGFpcihrZXksIHZhbHVlcyk7Ci0gICAgICB9KS5qb2luKCcmJyk7Ci0gICAgfSwKLQotICAgIGlu
c3BlY3Q6IGZ1bmN0aW9uKCkgewotICAgICAgcmV0dXJuICcjPEhhc2g6eycgKyB0aGlzLm1hcChm
dW5jdGlvbihwYWlyKSB7Ci0gICAgICAgIHJldHVybiBwYWlyLm1hcChPYmplY3QuaW5zcGVjdCku
am9pbignOiAnKTsKLSAgICAgIH0pLmpvaW4oJywgJykgKyAnfT4nOwotICAgIH0sCi0KLSAgICB0
b0pTT046IGZ1bmN0aW9uKCkgewotICAgICAgcmV0dXJuIE9iamVjdC50b0pTT04odGhpcy50b09i
amVjdCgpKTsKLSAgICB9LAotCi0gICAgY2xvbmU6IGZ1bmN0aW9uKCkgewotICAgICAgcmV0dXJu
IG5ldyBIYXNoKHRoaXMpOwotICAgIH0KLSAgfQotfSkoKSk7Ci0KLUhhc2gucHJvdG90eXBlLnRv
VGVtcGxhdGVSZXBsYWNlbWVudHMgPSBIYXNoLnByb3RvdHlwZS50b09iamVjdDsKLUhhc2guZnJv
bSA9ICRIOwotdmFyIE9iamVjdFJhbmdlID0gQ2xhc3MuY3JlYXRlKEVudW1lcmFibGUsIHsKLSAg
aW5pdGlhbGl6ZTogZnVuY3Rpb24oc3RhcnQsIGVuZCwgZXhjbHVzaXZlKSB7Ci0gICAgdGhpcy5z
dGFydCA9IHN0YXJ0OwotICAgIHRoaXMuZW5kID0gZW5kOwotICAgIHRoaXMuZXhjbHVzaXZlID0g
ZXhjbHVzaXZlOwotICB9LAotCi0gIF9lYWNoOiBmdW5jdGlvbihpdGVyYXRvcikgewotICAgIHZh
ciB2YWx1ZSA9IHRoaXMuc3RhcnQ7Ci0gICAgd2hpbGUgKHRoaXMuaW5jbHVkZSh2YWx1ZSkpIHsK
LSAgICAgIGl0ZXJhdG9yKHZhbHVlKTsKLSAgICAgIHZhbHVlID0gdmFsdWUuc3VjYygpOwotICAg
IH0KLSAgfSwKLQotICBpbmNsdWRlOiBmdW5jdGlvbih2YWx1ZSkgewotICAgIGlmICh2YWx1ZSA8
IHRoaXMuc3RhcnQpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHRoaXMuZXhjbHVzaXZl
KQotICAgICAgcmV0dXJuIHZhbHVlIDwgdGhpcy5lbmQ7Ci0gICAgcmV0dXJuIHZhbHVlIDw9IHRo
aXMuZW5kOwotICB9Ci19KTsKLQotdmFyICRSID0gZnVuY3Rpb24oc3RhcnQsIGVuZCwgZXhjbHVz
aXZlKSB7Ci0gIHJldHVybiBuZXcgT2JqZWN0UmFuZ2Uoc3RhcnQsIGVuZCwgZXhjbHVzaXZlKTsK
LX07Ci0KLXZhciBBamF4ID0gewotICBnZXRUcmFuc3BvcnQ6IGZ1bmN0aW9uKCkgewotICAgIHJl
dHVybiBUcnkudGhlc2UoCi0gICAgICBmdW5jdGlvbigpIHtyZXR1cm4gbmV3IFhNTEh0dHBSZXF1
ZXN0KCl9LAotICAgICAgZnVuY3Rpb24oKSB7cmV0dXJuIG5ldyBBY3RpdmVYT2JqZWN0KCdNc3ht
bDIuWE1MSFRUUCcpfSwKLSAgICAgIGZ1bmN0aW9uKCkge3JldHVybiBuZXcgQWN0aXZlWE9iamVj
dCgnTWljcm9zb2Z0LlhNTEhUVFAnKX0KLSAgICApIHx8IGZhbHNlOwotICB9LAotCi0gIGFjdGl2
ZVJlcXVlc3RDb3VudDogMAotfTsKLQotQWpheC5SZXNwb25kZXJzID0gewotICByZXNwb25kZXJz
OiBbXSwKLQotICBfZWFjaDogZnVuY3Rpb24oaXRlcmF0b3IpIHsKLSAgICB0aGlzLnJlc3BvbmRl
cnMuX2VhY2goaXRlcmF0b3IpOwotICB9LAotCi0gIHJlZ2lzdGVyOiBmdW5jdGlvbihyZXNwb25k
ZXIpIHsKLSAgICBpZiAoIXRoaXMuaW5jbHVkZShyZXNwb25kZXIpKQotICAgICAgdGhpcy5yZXNw
b25kZXJzLnB1c2gocmVzcG9uZGVyKTsKLSAgfSwKLQotICB1bnJlZ2lzdGVyOiBmdW5jdGlvbihy
ZXNwb25kZXIpIHsKLSAgICB0aGlzLnJlc3BvbmRlcnMgPSB0aGlzLnJlc3BvbmRlcnMud2l0aG91
dChyZXNwb25kZXIpOwotICB9LAotCi0gIGRpc3BhdGNoOiBmdW5jdGlvbihjYWxsYmFjaywgcmVx
dWVzdCwgdHJhbnNwb3J0LCBqc29uKSB7Ci0gICAgdGhpcy5lYWNoKGZ1bmN0aW9uKHJlc3BvbmRl
cikgewotICAgICAgaWYgKE9iamVjdC5pc0Z1bmN0aW9uKHJlc3BvbmRlcltjYWxsYmFja10pKSB7
Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgcmVzcG9uZGVyW2NhbGxiYWNrXS5hcHBseShyZXNw
b25kZXIsIFtyZXF1ZXN0LCB0cmFuc3BvcnQsIGpzb25dKTsKLSAgICAgICAgfSBjYXRjaCAoZSkg
eyB9Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLX07Ci0KLU9iamVjdC5leHRlbmQoQWpheC5SZXNw
b25kZXJzLCBFbnVtZXJhYmxlKTsKLQotQWpheC5SZXNwb25kZXJzLnJlZ2lzdGVyKHsKLSAgb25D
cmVhdGU6ICAgZnVuY3Rpb24oKSB7IEFqYXguYWN0aXZlUmVxdWVzdENvdW50KysgfSwKLSAgb25D
b21wbGV0ZTogZnVuY3Rpb24oKSB7IEFqYXguYWN0aXZlUmVxdWVzdENvdW50LS0gfQotfSk7Ci0K
LUFqYXguQmFzZSA9IENsYXNzLmNyZWF0ZSh7Ci0gIGluaXRpYWxpemU6IGZ1bmN0aW9uKG9wdGlv
bnMpIHsKLSAgICB0aGlzLm9wdGlvbnMgPSB7Ci0gICAgICBtZXRob2Q6ICAgICAgICdwb3N0JywK
LSAgICAgIGFzeW5jaHJvbm91czogdHJ1ZSwKLSAgICAgIGNvbnRlbnRUeXBlOiAgJ2FwcGxpY2F0
aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsCi0gICAgICBlbmNvZGluZzogICAgICdVVEYtOCcs
Ci0gICAgICBwYXJhbWV0ZXJzOiAgICcnLAotICAgICAgZXZhbEpTT046ICAgICB0cnVlLAotICAg
ICAgZXZhbEpTOiAgICAgICB0cnVlCi0gICAgfTsKLSAgICBPYmplY3QuZXh0ZW5kKHRoaXMub3B0
aW9ucywgb3B0aW9ucyB8fCB7IH0pOwotCi0gICAgdGhpcy5vcHRpb25zLm1ldGhvZCA9IHRoaXMu
b3B0aW9ucy5tZXRob2QudG9Mb3dlckNhc2UoKTsKLQotICAgIGlmIChPYmplY3QuaXNTdHJpbmco
dGhpcy5vcHRpb25zLnBhcmFtZXRlcnMpKQotICAgICAgdGhpcy5vcHRpb25zLnBhcmFtZXRlcnMg
PSB0aGlzLm9wdGlvbnMucGFyYW1ldGVycy50b1F1ZXJ5UGFyYW1zKCk7Ci0gICAgZWxzZSBpZiAo
T2JqZWN0LmlzSGFzaCh0aGlzLm9wdGlvbnMucGFyYW1ldGVycykpCi0gICAgICB0aGlzLm9wdGlv
bnMucGFyYW1ldGVycyA9IHRoaXMub3B0aW9ucy5wYXJhbWV0ZXJzLnRvT2JqZWN0KCk7Ci0gIH0K
LX0pOwotCi1BamF4LlJlcXVlc3QgPSBDbGFzcy5jcmVhdGUoQWpheC5CYXNlLCB7Ci0gIF9jb21w
bGV0ZTogZmFsc2UsCi0KLSAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oJHN1cGVyLCB1cmwsIG9wdGlv
bnMpIHsKLSAgICAkc3VwZXIob3B0aW9ucyk7Ci0gICAgdGhpcy50cmFuc3BvcnQgPSBBamF4Lmdl
dFRyYW5zcG9ydCgpOwotICAgIHRoaXMucmVxdWVzdCh1cmwpOwotICB9LAotCi0gIHJlcXVlc3Q6
IGZ1bmN0aW9uKHVybCkgewotICAgIHRoaXMudXJsID0gdXJsOwotICAgIHRoaXMubWV0aG9kID0g
dGhpcy5vcHRpb25zLm1ldGhvZDsKLSAgICB2YXIgcGFyYW1zID0gT2JqZWN0LmNsb25lKHRoaXMu
b3B0aW9ucy5wYXJhbWV0ZXJzKTsKLQotICAgIGlmICghWydnZXQnLCAncG9zdCddLmluY2x1ZGUo
dGhpcy5tZXRob2QpKSB7Ci0gICAgICAvLyBzaW11bGF0ZSBvdGhlciB2ZXJicyBvdmVyIHBvc3QK
LSAgICAgIHBhcmFtc1snX21ldGhvZCddID0gdGhpcy5tZXRob2Q7Ci0gICAgICB0aGlzLm1ldGhv
ZCA9ICdwb3N0JzsKLSAgICB9Ci0KLSAgICB0aGlzLnBhcmFtZXRlcnMgPSBwYXJhbXM7Ci0KLSAg
ICBpZiAocGFyYW1zID0gT2JqZWN0LnRvUXVlcnlTdHJpbmcocGFyYW1zKSkgewotICAgICAgLy8g
d2hlbiBHRVQsIGFwcGVuZCBwYXJhbWV0ZXJzIHRvIFVSTAotICAgICAgaWYgKHRoaXMubWV0aG9k
ID09ICdnZXQnKQotICAgICAgICB0aGlzLnVybCArPSAodGhpcy51cmwuaW5jbHVkZSgnPycpID8g
JyYnIDogJz8nKSArIHBhcmFtczsKLSAgICAgIGVsc2UgaWYgKC9Lb25xdWVyb3J8U2FmYXJpfEtI
VE1MLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKQotICAgICAgICBwYXJhbXMgKz0gJyZfPSc7
Ci0gICAgfQotCi0gICAgdHJ5IHsKLSAgICAgIHZhciByZXNwb25zZSA9IG5ldyBBamF4LlJlc3Bv
bnNlKHRoaXMpOwotICAgICAgaWYgKHRoaXMub3B0aW9ucy5vbkNyZWF0ZSkgdGhpcy5vcHRpb25z
Lm9uQ3JlYXRlKHJlc3BvbnNlKTsKLSAgICAgIEFqYXguUmVzcG9uZGVycy5kaXNwYXRjaCgnb25D
cmVhdGUnLCB0aGlzLCByZXNwb25zZSk7Ci0KLSAgICAgIHRoaXMudHJhbnNwb3J0Lm9wZW4odGhp
cy5tZXRob2QudG9VcHBlckNhc2UoKSwgdGhpcy51cmwsCi0gICAgICAgIHRoaXMub3B0aW9ucy5h
c3luY2hyb25vdXMpOwotCi0gICAgICBpZiAodGhpcy5vcHRpb25zLmFzeW5jaHJvbm91cykgdGhp
cy5yZXNwb25kVG9SZWFkeVN0YXRlLmJpbmQodGhpcykuZGVmZXIoMSk7Ci0KLSAgICAgIHRoaXMu
dHJhbnNwb3J0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IHRoaXMub25TdGF0ZUNoYW5nZS5iaW5kKHRo
aXMpOwotICAgICAgdGhpcy5zZXRSZXF1ZXN0SGVhZGVycygpOwotCi0gICAgICB0aGlzLmJvZHkg
PSB0aGlzLm1ldGhvZCA9PSAncG9zdCcgPyAodGhpcy5vcHRpb25zLnBvc3RCb2R5IHx8IHBhcmFt
cykgOiBudWxsOwotICAgICAgdGhpcy50cmFuc3BvcnQuc2VuZCh0aGlzLmJvZHkpOwotCi0gICAg
ICAvKiBGb3JjZSBGaXJlZm94IHRvIGhhbmRsZSByZWFkeSBzdGF0ZSA0IGZvciBzeW5jaHJvbm91
cyByZXF1ZXN0cyAqLwotICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuYXN5bmNocm9ub3VzICYmIHRo
aXMudHJhbnNwb3J0Lm92ZXJyaWRlTWltZVR5cGUpCi0gICAgICAgIHRoaXMub25TdGF0ZUNoYW5n
ZSgpOwotCi0gICAgfQotICAgIGNhdGNoIChlKSB7Ci0gICAgICB0aGlzLmRpc3BhdGNoRXhjZXB0
aW9uKGUpOwotICAgIH0KLSAgfSwKLQotICBvblN0YXRlQ2hhbmdlOiBmdW5jdGlvbigpIHsKLSAg
ICB2YXIgcmVhZHlTdGF0ZSA9IHRoaXMudHJhbnNwb3J0LnJlYWR5U3RhdGU7Ci0gICAgaWYgKHJl
YWR5U3RhdGUgPiAxICYmICEoKHJlYWR5U3RhdGUgPT0gNCkgJiYgdGhpcy5fY29tcGxldGUpKQot
ICAgICAgdGhpcy5yZXNwb25kVG9SZWFkeVN0YXRlKHRoaXMudHJhbnNwb3J0LnJlYWR5U3RhdGUp
OwotICB9LAotCi0gIHNldFJlcXVlc3RIZWFkZXJzOiBmdW5jdGlvbigpIHsKLSAgICB2YXIgaGVh
ZGVycyA9IHsKLSAgICAgICdYLVJlcXVlc3RlZC1XaXRoJzogJ1hNTEh0dHBSZXF1ZXN0JywKLSAg
ICAgICdYLVByb3RvdHlwZS1WZXJzaW9uJzogUHJvdG90eXBlLlZlcnNpb24sCi0gICAgICAnQWNj
ZXB0JzogJ3RleHQvamF2YXNjcmlwdCwgdGV4dC9odG1sLCBhcHBsaWNhdGlvbi94bWwsIHRleHQv
eG1sLCAqLyonCi0gICAgfTsKLQotICAgIGlmICh0aGlzLm1ldGhvZCA9PSAncG9zdCcpIHsKLSAg
ICAgIGhlYWRlcnNbJ0NvbnRlbnQtdHlwZSddID0gdGhpcy5vcHRpb25zLmNvbnRlbnRUeXBlICsK
LSAgICAgICAgKHRoaXMub3B0aW9ucy5lbmNvZGluZyA/ICc7IGNoYXJzZXQ9JyArIHRoaXMub3B0
aW9ucy5lbmNvZGluZyA6ICcnKTsKLQotICAgICAgLyogRm9yY2UgIkNvbm5lY3Rpb246IGNsb3Nl
IiBmb3Igb2xkZXIgTW96aWxsYSBicm93c2VycyB0byB3b3JrCi0gICAgICAgKiBhcm91bmQgYSBi
dWcgd2hlcmUgWE1MSHR0cFJlcXVlc3Qgc2VuZHMgYW4gaW5jb3JyZWN0Ci0gICAgICAgKiBDb250
ZW50LWxlbmd0aCBoZWFkZXIuIFNlZSBNb3ppbGxhIEJ1Z3ppbGxhICMyNDY2NTEuCi0gICAgICAg
Ki8KLSAgICAgIGlmICh0aGlzLnRyYW5zcG9ydC5vdmVycmlkZU1pbWVUeXBlICYmCi0gICAgICAg
ICAgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0dlY2tvXC8oXGR7NH0pLykgfHwgWzAsMjAw
NV0pWzFdIDwgMjAwNSkKLSAgICAgICAgICAgIGhlYWRlcnNbJ0Nvbm5lY3Rpb24nXSA9ICdjbG9z
ZSc7Ci0gICAgfQotCi0gICAgLy8gdXNlci1kZWZpbmVkIGhlYWRlcnMKLSAgICBpZiAodHlwZW9m
IHRoaXMub3B0aW9ucy5yZXF1ZXN0SGVhZGVycyA9PSAnb2JqZWN0JykgewotICAgICAgdmFyIGV4
dHJhcyA9IHRoaXMub3B0aW9ucy5yZXF1ZXN0SGVhZGVyczsKLQotICAgICAgaWYgKE9iamVjdC5p
c0Z1bmN0aW9uKGV4dHJhcy5wdXNoKSkKLSAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9
IGV4dHJhcy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkgKz0gMikKLSAgICAgICAgICBoZWFkZXJzW2V4
dHJhc1tpXV0gPSBleHRyYXNbaSsxXTsKLSAgICAgIGVsc2UKLSAgICAgICAgJEgoZXh0cmFzKS5l
YWNoKGZ1bmN0aW9uKHBhaXIpIHsgaGVhZGVyc1twYWlyLmtleV0gPSBwYWlyLnZhbHVlIH0pOwot
ICAgIH0KLQotICAgIGZvciAodmFyIG5hbWUgaW4gaGVhZGVycykKLSAgICAgIHRoaXMudHJhbnNw
b3J0LnNldFJlcXVlc3RIZWFkZXIobmFtZSwgaGVhZGVyc1tuYW1lXSk7Ci0gIH0sCi0KLSAgc3Vj
Y2VzczogZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHN0YXR1cyA9IHRoaXMuZ2V0U3RhdHVzKCk7Ci0g
ICAgcmV0dXJuICFzdGF0dXMgfHwgKHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwKTsKLSAg
fSwKLQotICBnZXRTdGF0dXM6IGZ1bmN0aW9uKCkgewotICAgIHRyeSB7Ci0gICAgICByZXR1cm4g
dGhpcy50cmFuc3BvcnQuc3RhdHVzIHx8IDA7Ci0gICAgfSBjYXRjaCAoZSkgeyByZXR1cm4gMCB9
Ci0gIH0sCi0KLSAgcmVzcG9uZFRvUmVhZHlTdGF0ZTogZnVuY3Rpb24ocmVhZHlTdGF0ZSkgewot
ICAgIHZhciBzdGF0ZSA9IEFqYXguUmVxdWVzdC5FdmVudHNbcmVhZHlTdGF0ZV0sIHJlc3BvbnNl
ID0gbmV3IEFqYXguUmVzcG9uc2UodGhpcyk7Ci0KLSAgICBpZiAoc3RhdGUgPT0gJ0NvbXBsZXRl
JykgewotICAgICAgdHJ5IHsKLSAgICAgICAgdGhpcy5fY29tcGxldGUgPSB0cnVlOwotICAgICAg
ICAodGhpcy5vcHRpb25zWydvbicgKyByZXNwb25zZS5zdGF0dXNdCi0gICAgICAgICB8fCB0aGlz
Lm9wdGlvbnNbJ29uJyArICh0aGlzLnN1Y2Nlc3MoKSA/ICdTdWNjZXNzJyA6ICdGYWlsdXJlJyld
Ci0gICAgICAgICB8fCBQcm90b3R5cGUuZW1wdHlGdW5jdGlvbikocmVzcG9uc2UsIHJlc3BvbnNl
LmhlYWRlckpTT04pOwotICAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICB0aGlzLmRpc3BhdGNo
RXhjZXB0aW9uKGUpOwotICAgICAgfQotCi0gICAgICB2YXIgY29udGVudFR5cGUgPSByZXNwb25z
ZS5nZXRIZWFkZXIoJ0NvbnRlbnQtdHlwZScpOwotICAgICAgaWYgKHRoaXMub3B0aW9ucy5ldmFs
SlMgPT0gJ2ZvcmNlJwotICAgICAgICAgIHx8ICh0aGlzLm9wdGlvbnMuZXZhbEpTICYmIHRoaXMu
aXNTYW1lT3JpZ2luKCkgJiYgY29udGVudFR5cGUKLSAgICAgICAgICAmJiBjb250ZW50VHlwZS5t
YXRjaCgvXlxzKih0ZXh0fGFwcGxpY2F0aW9uKVwvKHgtKT8oamF2YXxlY21hKXNjcmlwdCg7Liop
P1xzKiQvaSkpKQotICAgICAgICB0aGlzLmV2YWxSZXNwb25zZSgpOwotICAgIH0KLQotICAgIHRy
eSB7Ci0gICAgICAodGhpcy5vcHRpb25zWydvbicgKyBzdGF0ZV0gfHwgUHJvdG90eXBlLmVtcHR5
RnVuY3Rpb24pKHJlc3BvbnNlLCByZXNwb25zZS5oZWFkZXJKU09OKTsKLSAgICAgIEFqYXguUmVz
cG9uZGVycy5kaXNwYXRjaCgnb24nICsgc3RhdGUsIHRoaXMsIHJlc3BvbnNlLCByZXNwb25zZS5o
ZWFkZXJKU09OKTsKLSAgICB9IGNhdGNoIChlKSB7Ci0gICAgICB0aGlzLmRpc3BhdGNoRXhjZXB0
aW9uKGUpOwotICAgIH0KLQotICAgIGlmIChzdGF0ZSA9PSAnQ29tcGxldGUnKSB7Ci0gICAgICAv
LyBhdm9pZCBtZW1vcnkgbGVhayBpbiBNU0lFOiBjbGVhbiB1cAotICAgICAgdGhpcy50cmFuc3Bv
cnQub25yZWFkeXN0YXRlY2hhbmdlID0gUHJvdG90eXBlLmVtcHR5RnVuY3Rpb247Ci0gICAgfQot
ICB9LAotCi0gIGlzU2FtZU9yaWdpbjogZnVuY3Rpb24oKSB7Ci0gICAgdmFyIG0gPSB0aGlzLnVy
bC5tYXRjaCgvXlxzKmh0dHBzPzpcL1wvW15cL10qLyk7Ci0gICAgcmV0dXJuICFtIHx8IChtWzBd
ID09ICcje3Byb3RvY29sfS8vI3tkb21haW59I3twb3J0fScuaW50ZXJwb2xhdGUoewotICAgICAg
cHJvdG9jb2w6IGxvY2F0aW9uLnByb3RvY29sLAotICAgICAgZG9tYWluOiBkb2N1bWVudC5kb21h
aW4sCi0gICAgICBwb3J0OiBsb2NhdGlvbi5wb3J0ID8gJzonICsgbG9jYXRpb24ucG9ydCA6ICcn
Ci0gICAgfSkpOwotICB9LAotCi0gIGdldEhlYWRlcjogZnVuY3Rpb24obmFtZSkgewotICAgIHRy
eSB7Ci0gICAgICByZXR1cm4gdGhpcy50cmFuc3BvcnQuZ2V0UmVzcG9uc2VIZWFkZXIobmFtZSkg
fHwgbnVsbDsKLSAgICB9IGNhdGNoIChlKSB7IHJldHVybiBudWxsIH0KLSAgfSwKLQotICBldmFs
UmVzcG9uc2U6IGZ1bmN0aW9uKCkgewotICAgIHRyeSB7Ci0gICAgICByZXR1cm4gZXZhbCgodGhp
cy50cmFuc3BvcnQucmVzcG9uc2VUZXh0IHx8ICcnKS51bmZpbHRlckpTT04oKSk7Ci0gICAgfSBj
YXRjaCAoZSkgewotICAgICAgdGhpcy5kaXNwYXRjaEV4Y2VwdGlvbihlKTsKLSAgICB9Ci0gIH0s
Ci0KLSAgZGlzcGF0Y2hFeGNlcHRpb246IGZ1bmN0aW9uKGV4Y2VwdGlvbikgewotICAgICh0aGlz
Lm9wdGlvbnMub25FeGNlcHRpb24gfHwgUHJvdG90eXBlLmVtcHR5RnVuY3Rpb24pKHRoaXMsIGV4
Y2VwdGlvbik7Ci0gICAgQWpheC5SZXNwb25kZXJzLmRpc3BhdGNoKCdvbkV4Y2VwdGlvbicsIHRo
aXMsIGV4Y2VwdGlvbik7Ci0gIH0KLX0pOwotCi1BamF4LlJlcXVlc3QuRXZlbnRzID0KLSAgWydV
bmluaXRpYWxpemVkJywgJ0xvYWRpbmcnLCAnTG9hZGVkJywgJ0ludGVyYWN0aXZlJywgJ0NvbXBs
ZXRlJ107Ci0KLUFqYXguUmVzcG9uc2UgPSBDbGFzcy5jcmVhdGUoewotICBpbml0aWFsaXplOiBm
dW5jdGlvbihyZXF1ZXN0KXsKLSAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0OwotICAgIHZhciB0
cmFuc3BvcnQgID0gdGhpcy50cmFuc3BvcnQgID0gcmVxdWVzdC50cmFuc3BvcnQsCi0gICAgICAg
IHJlYWR5U3RhdGUgPSB0aGlzLnJlYWR5U3RhdGUgPSB0cmFuc3BvcnQucmVhZHlTdGF0ZTsKLQot
ICAgIGlmKChyZWFkeVN0YXRlID4gMiAmJiAhUHJvdG90eXBlLkJyb3dzZXIuSUUpIHx8IHJlYWR5
U3RhdGUgPT0gNCkgewotICAgICAgdGhpcy5zdGF0dXMgICAgICAgPSB0aGlzLmdldFN0YXR1cygp
OwotICAgICAgdGhpcy5zdGF0dXNUZXh0ICAgPSB0aGlzLmdldFN0YXR1c1RleHQoKTsKLSAgICAg
IHRoaXMucmVzcG9uc2VUZXh0ID0gU3RyaW5nLmludGVycHJldCh0cmFuc3BvcnQucmVzcG9uc2VU
ZXh0KTsKLSAgICAgIHRoaXMuaGVhZGVySlNPTiAgID0gdGhpcy5fZ2V0SGVhZGVySlNPTigpOwot
ICAgIH0KLQotICAgIGlmKHJlYWR5U3RhdGUgPT0gNCkgewotICAgICAgdmFyIHhtbCA9IHRyYW5z
cG9ydC5yZXNwb25zZVhNTDsKLSAgICAgIHRoaXMucmVzcG9uc2VYTUwgID0gT2JqZWN0LmlzVW5k
ZWZpbmVkKHhtbCkgPyBudWxsIDogeG1sOwotICAgICAgdGhpcy5yZXNwb25zZUpTT04gPSB0aGlz
Ll9nZXRSZXNwb25zZUpTT04oKTsKLSAgICB9Ci0gIH0sCi0KLSAgc3RhdHVzOiAgICAgIDAsCi0g
IHN0YXR1c1RleHQ6ICcnLAotCi0gIGdldFN0YXR1czogQWpheC5SZXF1ZXN0LnByb3RvdHlwZS5n
ZXRTdGF0dXMsCi0KLSAgZ2V0U3RhdHVzVGV4dDogZnVuY3Rpb24oKSB7Ci0gICAgdHJ5IHsKLSAg
ICAgIHJldHVybiB0aGlzLnRyYW5zcG9ydC5zdGF0dXNUZXh0IHx8ICcnOwotICAgIH0gY2F0Y2gg
KGUpIHsgcmV0dXJuICcnIH0KLSAgfSwKLQotICBnZXRIZWFkZXI6IEFqYXguUmVxdWVzdC5wcm90
b3R5cGUuZ2V0SGVhZGVyLAotCi0gIGdldEFsbEhlYWRlcnM6IGZ1bmN0aW9uKCkgewotICAgIHRy
eSB7Ci0gICAgICByZXR1cm4gdGhpcy5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKTsKLSAgICB9IGNh
dGNoIChlKSB7IHJldHVybiBudWxsIH0KLSAgfSwKLQotICBnZXRSZXNwb25zZUhlYWRlcjogZnVu
Y3Rpb24obmFtZSkgewotICAgIHJldHVybiB0aGlzLnRyYW5zcG9ydC5nZXRSZXNwb25zZUhlYWRl
cihuYW1lKTsKLSAgfSwKLQotICBnZXRBbGxSZXNwb25zZUhlYWRlcnM6IGZ1bmN0aW9uKCkgewot
ICAgIHJldHVybiB0aGlzLnRyYW5zcG9ydC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKTsKLSAgfSwK
LQotICBfZ2V0SGVhZGVySlNPTjogZnVuY3Rpb24oKSB7Ci0gICAgdmFyIGpzb24gPSB0aGlzLmdl
dEhlYWRlcignWC1KU09OJyk7Ci0gICAgaWYgKCFqc29uKSByZXR1cm4gbnVsbDsKLSAgICBqc29u
ID0gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShqc29uKSk7Ci0gICAgdHJ5IHsKLSAgICAgIHJl
dHVybiBqc29uLmV2YWxKU09OKHRoaXMucmVxdWVzdC5vcHRpb25zLnNhbml0aXplSlNPTiB8fAot
ICAgICAgICAhdGhpcy5yZXF1ZXN0LmlzU2FtZU9yaWdpbigpKTsKLSAgICB9IGNhdGNoIChlKSB7
Ci0gICAgICB0aGlzLnJlcXVlc3QuZGlzcGF0Y2hFeGNlcHRpb24oZSk7Ci0gICAgfQotICB9LAot
Ci0gIF9nZXRSZXNwb25zZUpTT046IGZ1bmN0aW9uKCkgewotICAgIHZhciBvcHRpb25zID0gdGhp
cy5yZXF1ZXN0Lm9wdGlvbnM7Ci0gICAgaWYgKCFvcHRpb25zLmV2YWxKU09OIHx8IChvcHRpb25z
LmV2YWxKU09OICE9ICdmb3JjZScgJiYKLSAgICAgICEodGhpcy5nZXRIZWFkZXIoJ0NvbnRlbnQt
dHlwZScpIHx8ICcnKS5pbmNsdWRlKCdhcHBsaWNhdGlvbi9qc29uJykpIHx8Ci0gICAgICAgIHRo
aXMucmVzcG9uc2VUZXh0LmJsYW5rKCkpCi0gICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgdHJ5
IHsKLSAgICAgIHJldHVybiB0aGlzLnJlc3BvbnNlVGV4dC5ldmFsSlNPTihvcHRpb25zLnNhbml0
aXplSlNPTiB8fAotICAgICAgICAhdGhpcy5yZXF1ZXN0LmlzU2FtZU9yaWdpbigpKTsKLSAgICB9
IGNhdGNoIChlKSB7Ci0gICAgICB0aGlzLnJlcXVlc3QuZGlzcGF0Y2hFeGNlcHRpb24oZSk7Ci0g
ICAgfQotICB9Ci19KTsKLQotQWpheC5VcGRhdGVyID0gQ2xhc3MuY3JlYXRlKEFqYXguUmVxdWVz
dCwgewotICBpbml0aWFsaXplOiBmdW5jdGlvbigkc3VwZXIsIGNvbnRhaW5lciwgdXJsLCBvcHRp
b25zKSB7Ci0gICAgdGhpcy5jb250YWluZXIgPSB7Ci0gICAgICBzdWNjZXNzOiAoY29udGFpbmVy
LnN1Y2Nlc3MgfHwgY29udGFpbmVyKSwKLSAgICAgIGZhaWx1cmU6IChjb250YWluZXIuZmFpbHVy
ZSB8fCAoY29udGFpbmVyLnN1Y2Nlc3MgPyBudWxsIDogY29udGFpbmVyKSkKLSAgICB9OwotCi0g
ICAgb3B0aW9ucyA9IE9iamVjdC5jbG9uZShvcHRpb25zKTsKLSAgICB2YXIgb25Db21wbGV0ZSA9
IG9wdGlvbnMub25Db21wbGV0ZTsKLSAgICBvcHRpb25zLm9uQ29tcGxldGUgPSAoZnVuY3Rpb24o
cmVzcG9uc2UsIGpzb24pIHsKLSAgICAgIHRoaXMudXBkYXRlQ29udGVudChyZXNwb25zZS5yZXNw
b25zZVRleHQpOwotICAgICAgaWYgKE9iamVjdC5pc0Z1bmN0aW9uKG9uQ29tcGxldGUpKSBvbkNv
bXBsZXRlKHJlc3BvbnNlLCBqc29uKTsKLSAgICB9KS5iaW5kKHRoaXMpOwotCi0gICAgJHN1cGVy
KHVybCwgb3B0aW9ucyk7Ci0gIH0sCi0KLSAgdXBkYXRlQ29udGVudDogZnVuY3Rpb24ocmVzcG9u
c2VUZXh0KSB7Ci0gICAgdmFyIHJlY2VpdmVyID0gdGhpcy5jb250YWluZXJbdGhpcy5zdWNjZXNz
KCkgPyAnc3VjY2VzcycgOiAnZmFpbHVyZSddLAotICAgICAgICBvcHRpb25zID0gdGhpcy5vcHRp
b25zOwotCi0gICAgaWYgKCFvcHRpb25zLmV2YWxTY3JpcHRzKSByZXNwb25zZVRleHQgPSByZXNw
b25zZVRleHQuc3RyaXBTY3JpcHRzKCk7Ci0KLSAgICBpZiAocmVjZWl2ZXIgPSAkKHJlY2VpdmVy
KSkgewotICAgICAgaWYgKG9wdGlvbnMuaW5zZXJ0aW9uKSB7Ci0gICAgICAgIGlmIChPYmplY3Qu
aXNTdHJpbmcob3B0aW9ucy5pbnNlcnRpb24pKSB7Ci0gICAgICAgICAgdmFyIGluc2VydGlvbiA9
IHsgfTsgaW5zZXJ0aW9uW29wdGlvbnMuaW5zZXJ0aW9uXSA9IHJlc3BvbnNlVGV4dDsKLSAgICAg
ICAgICByZWNlaXZlci5pbnNlcnQoaW5zZXJ0aW9uKTsKLSAgICAgICAgfQotICAgICAgICBlbHNl
IG9wdGlvbnMuaW5zZXJ0aW9uKHJlY2VpdmVyLCByZXNwb25zZVRleHQpOwotICAgICAgfQotICAg
ICAgZWxzZSByZWNlaXZlci51cGRhdGUocmVzcG9uc2VUZXh0KTsKLSAgICB9Ci0gIH0KLX0pOwot
Ci1BamF4LlBlcmlvZGljYWxVcGRhdGVyID0gQ2xhc3MuY3JlYXRlKEFqYXguQmFzZSwgewotICBp
bml0aWFsaXplOiBmdW5jdGlvbigkc3VwZXIsIGNvbnRhaW5lciwgdXJsLCBvcHRpb25zKSB7Ci0g
ICAgJHN1cGVyKG9wdGlvbnMpOwotICAgIHRoaXMub25Db21wbGV0ZSA9IHRoaXMub3B0aW9ucy5v
bkNvbXBsZXRlOwotCi0gICAgdGhpcy5mcmVxdWVuY3kgPSAodGhpcy5vcHRpb25zLmZyZXF1ZW5j
eSB8fCAyKTsKLSAgICB0aGlzLmRlY2F5ID0gKHRoaXMub3B0aW9ucy5kZWNheSB8fCAxKTsKLQot
ICAgIHRoaXMudXBkYXRlciA9IHsgfTsKLSAgICB0aGlzLmNvbnRhaW5lciA9IGNvbnRhaW5lcjsK
LSAgICB0aGlzLnVybCA9IHVybDsKLQotICAgIHRoaXMuc3RhcnQoKTsKLSAgfSwKLQotICBzdGFy
dDogZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5vcHRpb25zLm9uQ29tcGxldGUgPSB0aGlzLnVwZGF0
ZUNvbXBsZXRlLmJpbmQodGhpcyk7Ci0gICAgdGhpcy5vblRpbWVyRXZlbnQoKTsKLSAgfSwKLQot
ICBzdG9wOiBmdW5jdGlvbigpIHsKLSAgICB0aGlzLnVwZGF0ZXIub3B0aW9ucy5vbkNvbXBsZXRl
ID0gdW5kZWZpbmVkOwotICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTsKLSAgICAodGhpcy5v
bkNvbXBsZXRlIHx8IFByb3RvdHlwZS5lbXB0eUZ1bmN0aW9uKS5hcHBseSh0aGlzLCBhcmd1bWVu
dHMpOwotICB9LAotCi0gIHVwZGF0ZUNvbXBsZXRlOiBmdW5jdGlvbihyZXNwb25zZSkgewotICAg
IGlmICh0aGlzLm9wdGlvbnMuZGVjYXkpIHsKLSAgICAgIHRoaXMuZGVjYXkgPSAocmVzcG9uc2Uu
cmVzcG9uc2VUZXh0ID09IHRoaXMubGFzdFRleHQgPwotICAgICAgICB0aGlzLmRlY2F5ICogdGhp
cy5vcHRpb25zLmRlY2F5IDogMSk7Ci0KLSAgICAgIHRoaXMubGFzdFRleHQgPSByZXNwb25zZS5y
ZXNwb25zZVRleHQ7Ci0gICAgfQotICAgIHRoaXMudGltZXIgPSB0aGlzLm9uVGltZXJFdmVudC5i
aW5kKHRoaXMpLmRlbGF5KHRoaXMuZGVjYXkgKiB0aGlzLmZyZXF1ZW5jeSk7Ci0gIH0sCi0KLSAg
b25UaW1lckV2ZW50OiBmdW5jdGlvbigpIHsKLSAgICB0aGlzLnVwZGF0ZXIgPSBuZXcgQWpheC5V
cGRhdGVyKHRoaXMuY29udGFpbmVyLCB0aGlzLnVybCwgdGhpcy5vcHRpb25zKTsKLSAgfQotfSk7
Ci1mdW5jdGlvbiAkKGVsZW1lbnQpIHsKLSAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7Ci0g
ICAgZm9yICh2YXIgaSA9IDAsIGVsZW1lbnRzID0gW10sIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5n
dGg7IGkgPCBsZW5ndGg7IGkrKykKLSAgICAgIGVsZW1lbnRzLnB1c2goJChhcmd1bWVudHNbaV0p
KTsKLSAgICByZXR1cm4gZWxlbWVudHM7Ci0gIH0KLSAgaWYgKE9iamVjdC5pc1N0cmluZyhlbGVt
ZW50KSkKLSAgICBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudCk7Ci0g
IHJldHVybiBFbGVtZW50LmV4dGVuZChlbGVtZW50KTsKLX0KLQotaWYgKFByb3RvdHlwZS5Ccm93
c2VyRmVhdHVyZXMuWFBhdGgpIHsKLSAgZG9jdW1lbnQuX2dldEVsZW1lbnRzQnlYUGF0aCA9IGZ1
bmN0aW9uKGV4cHJlc3Npb24sIHBhcmVudEVsZW1lbnQpIHsKLSAgICB2YXIgcmVzdWx0cyA9IFtd
OwotICAgIHZhciBxdWVyeSA9IGRvY3VtZW50LmV2YWx1YXRlKGV4cHJlc3Npb24sICQocGFyZW50
RWxlbWVudCkgfHwgZG9jdW1lbnQsCi0gICAgICBudWxsLCBYUGF0aFJlc3VsdC5PUkRFUkVEX05P
REVfU05BUFNIT1RfVFlQRSwgbnVsbCk7Ci0gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IHF1
ZXJ5LnNuYXBzaG90TGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspCi0gICAgICByZXN1bHRzLnB1c2go
RWxlbWVudC5leHRlbmQocXVlcnkuc25hcHNob3RJdGVtKGkpKSk7Ci0gICAgcmV0dXJuIHJlc3Vs
dHM7Ci0gIH07Ci19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1pZiAoIXdpbmRvdy5Ob2Rl
KSB2YXIgTm9kZSA9IHsgfTsKLQotaWYgKCFOb2RlLkVMRU1FTlRfTk9ERSkgewotICAvLyBET00g
bGV2ZWwgMiBFQ01BU2NyaXB0IExhbmd1YWdlIEJpbmRpbmcKLSAgT2JqZWN0LmV4dGVuZChOb2Rl
LCB7Ci0gICAgRUxFTUVOVF9OT0RFOiAxLAotICAgIEFUVFJJQlVURV9OT0RFOiAyLAotICAgIFRF
WFRfTk9ERTogMywKLSAgICBDREFUQV9TRUNUSU9OX05PREU6IDQsCi0gICAgRU5USVRZX1JFRkVS
RU5DRV9OT0RFOiA1LAotICAgIEVOVElUWV9OT0RFOiA2LAotICAgIFBST0NFU1NJTkdfSU5TVFJV
Q1RJT05fTk9ERTogNywKLSAgICBDT01NRU5UX05PREU6IDgsCi0gICAgRE9DVU1FTlRfTk9ERTog
OSwKLSAgICBET0NVTUVOVF9UWVBFX05PREU6IDEwLAotICAgIERPQ1VNRU5UX0ZSQUdNRU5UX05P
REU6IDExLAotICAgIE5PVEFUSU9OX05PREU6IDEyCi0gIH0pOwotfQotCi0oZnVuY3Rpb24oKSB7
Ci0gIHZhciBlbGVtZW50ID0gdGhpcy5FbGVtZW50OwotICB0aGlzLkVsZW1lbnQgPSBmdW5jdGlv
bih0YWdOYW1lLCBhdHRyaWJ1dGVzKSB7Ci0gICAgYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMgfHwg
eyB9OwotICAgIHRhZ05hbWUgPSB0YWdOYW1lLnRvTG93ZXJDYXNlKCk7Ci0gICAgdmFyIGNhY2hl
ID0gRWxlbWVudC5jYWNoZTsKLSAgICBpZiAoUHJvdG90eXBlLkJyb3dzZXIuSUUgJiYgYXR0cmli
dXRlcy5uYW1lKSB7Ci0gICAgICB0YWdOYW1lID0gJzwnICsgdGFnTmFtZSArICcgbmFtZT0iJyAr
IGF0dHJpYnV0ZXMubmFtZSArICciPic7Ci0gICAgICBkZWxldGUgYXR0cmlidXRlcy5uYW1lOwot
ICAgICAgcmV0dXJuIEVsZW1lbnQud3JpdGVBdHRyaWJ1dGUoZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCh0YWdOYW1lKSwgYXR0cmlidXRlcyk7Ci0gICAgfQotICAgIGlmICghY2FjaGVbdGFnTmFtZV0p
IGNhY2hlW3RhZ05hbWVdID0gRWxlbWVudC5leHRlbmQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0
YWdOYW1lKSk7Ci0gICAgcmV0dXJuIEVsZW1lbnQud3JpdGVBdHRyaWJ1dGUoY2FjaGVbdGFnTmFt
ZV0uY2xvbmVOb2RlKGZhbHNlKSwgYXR0cmlidXRlcyk7Ci0gIH07Ci0gIE9iamVjdC5leHRlbmQo
dGhpcy5FbGVtZW50LCBlbGVtZW50IHx8IHsgfSk7Ci19KS5jYWxsKHdpbmRvdyk7Ci0KLUVsZW1l
bnQuY2FjaGUgPSB7IH07Ci0KLUVsZW1lbnQuTWV0aG9kcyA9IHsKLSAgdmlzaWJsZTogZnVuY3Rp
b24oZWxlbWVudCkgewotICAgIHJldHVybiAkKGVsZW1lbnQpLnN0eWxlLmRpc3BsYXkgIT0gJ25v
bmUnOwotICB9LAotCi0gIHRvZ2dsZTogZnVuY3Rpb24oZWxlbWVudCkgewotICAgIGVsZW1lbnQg
PSAkKGVsZW1lbnQpOwotICAgIEVsZW1lbnRbRWxlbWVudC52aXNpYmxlKGVsZW1lbnQpID8gJ2hp
ZGUnIDogJ3Nob3cnXShlbGVtZW50KTsKLSAgICByZXR1cm4gZWxlbWVudDsKLSAgfSwKLQotICBo
aWRlOiBmdW5jdGlvbihlbGVtZW50KSB7Ci0gICAgJChlbGVtZW50KS5zdHlsZS5kaXNwbGF5ID0g
J25vbmUnOwotICAgIHJldHVybiBlbGVtZW50OwotICB9LAotCi0gIHNob3c6IGZ1bmN0aW9uKGVs
ZW1lbnQpIHsKLSAgICAkKGVsZW1lbnQpLnN0eWxlLmRpc3BsYXkgPSAnJzsKLSAgICByZXR1cm4g
ZWxlbWVudDsKLSAgfSwKLQotICByZW1vdmU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAgICBlbGVt
ZW50ID0gJChlbGVtZW50KTsKLSAgICBlbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWxl
bWVudCk7Ci0gICAgcmV0dXJuIGVsZW1lbnQ7Ci0gIH0sCi0KLSAgdXBkYXRlOiBmdW5jdGlvbihl
bGVtZW50LCBjb250ZW50KSB7Ci0gICAgZWxlbWVudCA9ICQoZWxlbWVudCk7Ci0gICAgaWYgKGNv
bnRlbnQgJiYgY29udGVudC50b0VsZW1lbnQpIGNvbnRlbnQgPSBjb250ZW50LnRvRWxlbWVudCgp
OwotICAgIGlmIChPYmplY3QuaXNFbGVtZW50KGNvbnRlbnQpKSByZXR1cm4gZWxlbWVudC51cGRh
dGUoKS5pbnNlcnQoY29udGVudCk7Ci0gICAgY29udGVudCA9IE9iamVjdC50b0hUTUwoY29udGVu
dCk7Ci0gICAgZWxlbWVudC5pbm5lckhUTUwgPSBjb250ZW50LnN0cmlwU2NyaXB0cygpOwotICAg
IGNvbnRlbnQuZXZhbFNjcmlwdHMuYmluZChjb250ZW50KS5kZWZlcigpOwotICAgIHJldHVybiBl
bGVtZW50OwotICB9LAotCi0gIHJlcGxhY2U6IGZ1bmN0aW9uKGVsZW1lbnQsIGNvbnRlbnQpIHsK
LSAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKLSAgICBpZiAoY29udGVudCAmJiBjb250ZW50LnRv
RWxlbWVudCkgY29udGVudCA9IGNvbnRlbnQudG9FbGVtZW50KCk7Ci0gICAgZWxzZSBpZiAoIU9i
amVjdC5pc0VsZW1lbnQoY29udGVudCkpIHsKLSAgICAgIGNvbnRlbnQgPSBPYmplY3QudG9IVE1M
KGNvbnRlbnQpOwotICAgICAgdmFyIHJhbmdlID0gZWxlbWVudC5vd25lckRvY3VtZW50LmNyZWF0
ZVJhbmdlKCk7Ci0gICAgICByYW5nZS5zZWxlY3ROb2RlKGVsZW1lbnQpOwotICAgICAgY29udGVu
dC5ldmFsU2NyaXB0cy5iaW5kKGNvbnRlbnQpLmRlZmVyKCk7Ci0gICAgICBjb250ZW50ID0gcmFu
Z2UuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGNvbnRlbnQuc3RyaXBTY3JpcHRzKCkpOwotICAg
IH0KLSAgICBlbGVtZW50LnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGNvbnRlbnQsIGVsZW1lbnQp
OwotICAgIHJldHVybiBlbGVtZW50OwotICB9LAotCi0gIGluc2VydDogZnVuY3Rpb24oZWxlbWVu
dCwgaW5zZXJ0aW9ucykgewotICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwotCi0gICAgaWYgKE9i
amVjdC5pc1N0cmluZyhpbnNlcnRpb25zKSB8fCBPYmplY3QuaXNOdW1iZXIoaW5zZXJ0aW9ucykg
fHwKLSAgICAgICAgT2JqZWN0LmlzRWxlbWVudChpbnNlcnRpb25zKSB8fCAoaW5zZXJ0aW9ucyAm
JiAoaW5zZXJ0aW9ucy50b0VsZW1lbnQgfHwgaW5zZXJ0aW9ucy50b0hUTUwpKSkKLSAgICAgICAg
ICBpbnNlcnRpb25zID0ge2JvdHRvbTppbnNlcnRpb25zfTsKLQotICAgIHZhciBjb250ZW50LCBp
bnNlcnQsIHRhZ05hbWUsIGNoaWxkTm9kZXM7Ci0KLSAgICBmb3IgKHZhciBwb3NpdGlvbiBpbiBp
bnNlcnRpb25zKSB7Ci0gICAgICBjb250ZW50ICA9IGluc2VydGlvbnNbcG9zaXRpb25dOwotICAg
ICAgcG9zaXRpb24gPSBwb3NpdGlvbi50b0xvd2VyQ2FzZSgpOwotICAgICAgaW5zZXJ0ID0gRWxl
bWVudC5faW5zZXJ0aW9uVHJhbnNsYXRpb25zW3Bvc2l0aW9uXTsKLQotICAgICAgaWYgKGNvbnRl
bnQgJiYgY29udGVudC50b0VsZW1lbnQpIGNvbnRlbnQgPSBjb250ZW50LnRvRWxlbWVudCgpOwot
ICAgICAgaWYgKE9iamVjdC5pc0VsZW1lbnQoY29udGVudCkpIHsKLSAgICAgICAgaW5zZXJ0KGVs
ZW1lbnQsIGNvbnRlbnQpOwotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLQotICAgICAgY29u
dGVudCA9IE9iamVjdC50b0hUTUwoY29udGVudCk7Ci0KLSAgICAgIHRhZ05hbWUgPSAoKHBvc2l0
aW9uID09ICdiZWZvcmUnIHx8IHBvc2l0aW9uID09ICdhZnRlcicpCi0gICAgICAgID8gZWxlbWVu
dC5wYXJlbnROb2RlIDogZWxlbWVudCkudGFnTmFtZS50b1VwcGVyQ2FzZSgpOwotCi0gICAgICBj
aGlsZE5vZGVzID0gRWxlbWVudC5fZ2V0Q29udGVudEZyb21Bbm9ueW1vdXNFbGVtZW50KHRhZ05h
bWUsIGNvbnRlbnQuc3RyaXBTY3JpcHRzKCkpOwotCi0gICAgICBpZiAocG9zaXRpb24gPT0gJ3Rv
cCcgfHwgcG9zaXRpb24gPT0gJ2FmdGVyJykgY2hpbGROb2Rlcy5yZXZlcnNlKCk7Ci0gICAgICBj
aGlsZE5vZGVzLmVhY2goaW5zZXJ0LmN1cnJ5KGVsZW1lbnQpKTsKLQotICAgICAgY29udGVudC5l
dmFsU2NyaXB0cy5iaW5kKGNvbnRlbnQpLmRlZmVyKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGVs
ZW1lbnQ7Ci0gIH0sCi0KLSAgd3JhcDogZnVuY3Rpb24oZWxlbWVudCwgd3JhcHBlciwgYXR0cmli
dXRlcykgewotICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwotICAgIGlmIChPYmplY3QuaXNFbGVt
ZW50KHdyYXBwZXIpKQotICAgICAgJCh3cmFwcGVyKS53cml0ZUF0dHJpYnV0ZShhdHRyaWJ1dGVz
IHx8IHsgfSk7Ci0gICAgZWxzZSBpZiAoT2JqZWN0LmlzU3RyaW5nKHdyYXBwZXIpKSB3cmFwcGVy
ID0gbmV3IEVsZW1lbnQod3JhcHBlciwgYXR0cmlidXRlcyk7Ci0gICAgZWxzZSB3cmFwcGVyID0g
bmV3IEVsZW1lbnQoJ2RpdicsIHdyYXBwZXIpOwotICAgIGlmIChlbGVtZW50LnBhcmVudE5vZGUp
Ci0gICAgICBlbGVtZW50LnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKHdyYXBwZXIsIGVsZW1lbnQp
OwotICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoZWxlbWVudCk7Ci0gICAgcmV0dXJuIHdyYXBwZXI7
Ci0gIH0sCi0KLSAgaW5zcGVjdDogZnVuY3Rpb24oZWxlbWVudCkgewotICAgIGVsZW1lbnQgPSAk
KGVsZW1lbnQpOwotICAgIHZhciByZXN1bHQgPSAnPCcgKyBlbGVtZW50LnRhZ05hbWUudG9Mb3dl
ckNhc2UoKTsKLSAgICAkSCh7J2lkJzogJ2lkJywgJ2NsYXNzTmFtZSc6ICdjbGFzcyd9KS5lYWNo
KGZ1bmN0aW9uKHBhaXIpIHsKLSAgICAgIHZhciBwcm9wZXJ0eSA9IHBhaXIuZmlyc3QoKSwgYXR0
cmlidXRlID0gcGFpci5sYXN0KCk7Ci0gICAgICB2YXIgdmFsdWUgPSAoZWxlbWVudFtwcm9wZXJ0
eV0gfHwgJycpLnRvU3RyaW5nKCk7Ci0gICAgICBpZiAodmFsdWUpIHJlc3VsdCArPSAnICcgKyBh
dHRyaWJ1dGUgKyAnPScgKyB2YWx1ZS5pbnNwZWN0KHRydWUpOwotICAgIH0pOwotICAgIHJldHVy
biByZXN1bHQgKyAnPic7Ci0gIH0sCi0KLSAgcmVjdXJzaXZlbHlDb2xsZWN0OiBmdW5jdGlvbihl
bGVtZW50LCBwcm9wZXJ0eSkgewotICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwotICAgIHZhciBl
bGVtZW50cyA9IFtdOwotICAgIHdoaWxlIChlbGVtZW50ID0gZWxlbWVudFtwcm9wZXJ0eV0pCi0g
ICAgICBpZiAoZWxlbWVudC5ub2RlVHlwZSA9PSAxKQotICAgICAgICBlbGVtZW50cy5wdXNoKEVs
ZW1lbnQuZXh0ZW5kKGVsZW1lbnQpKTsKLSAgICByZXR1cm4gZWxlbWVudHM7Ci0gIH0sCi0KLSAg
YW5jZXN0b3JzOiBmdW5jdGlvbihlbGVtZW50KSB7Ci0gICAgcmV0dXJuICQoZWxlbWVudCkucmVj
dXJzaXZlbHlDb2xsZWN0KCdwYXJlbnROb2RlJyk7Ci0gIH0sCi0KLSAgZGVzY2VuZGFudHM6IGZ1
bmN0aW9uKGVsZW1lbnQpIHsKLSAgICByZXR1cm4gJChlbGVtZW50KS5zZWxlY3QoIioiKTsKLSAg
fSwKLQotICBmaXJzdERlc2NlbmRhbnQ6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAgICBlbGVtZW50
ID0gJChlbGVtZW50KS5maXJzdENoaWxkOwotICAgIHdoaWxlIChlbGVtZW50ICYmIGVsZW1lbnQu
bm9kZVR5cGUgIT0gMSkgZWxlbWVudCA9IGVsZW1lbnQubmV4dFNpYmxpbmc7Ci0gICAgcmV0dXJu
ICQoZWxlbWVudCk7Ci0gIH0sCi0KLSAgaW1tZWRpYXRlRGVzY2VuZGFudHM6IGZ1bmN0aW9uKGVs
ZW1lbnQpIHsKLSAgICBpZiAoIShlbGVtZW50ID0gJChlbGVtZW50KS5maXJzdENoaWxkKSkgcmV0
dXJuIFtdOwotICAgIHdoaWxlIChlbGVtZW50ICYmIGVsZW1lbnQubm9kZVR5cGUgIT0gMSkgZWxl
bWVudCA9IGVsZW1lbnQubmV4dFNpYmxpbmc7Ci0gICAgaWYgKGVsZW1lbnQpIHJldHVybiBbZWxl
bWVudF0uY29uY2F0KCQoZWxlbWVudCkubmV4dFNpYmxpbmdzKCkpOwotICAgIHJldHVybiBbXTsK
LSAgfSwKLQotICBwcmV2aW91c1NpYmxpbmdzOiBmdW5jdGlvbihlbGVtZW50KSB7Ci0gICAgcmV0
dXJuICQoZWxlbWVudCkucmVjdXJzaXZlbHlDb2xsZWN0KCdwcmV2aW91c1NpYmxpbmcnKTsKLSAg
fSwKLQotICBuZXh0U2libGluZ3M6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAgICByZXR1cm4gJChl
bGVtZW50KS5yZWN1cnNpdmVseUNvbGxlY3QoJ25leHRTaWJsaW5nJyk7Ci0gIH0sCi0KLSAgc2li
bGluZ3M6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKLSAg
ICByZXR1cm4gZWxlbWVudC5wcmV2aW91c1NpYmxpbmdzKCkucmV2ZXJzZSgpLmNvbmNhdChlbGVt
ZW50Lm5leHRTaWJsaW5ncygpKTsKLSAgfSwKLQotICBtYXRjaDogZnVuY3Rpb24oZWxlbWVudCwg
c2VsZWN0b3IpIHsKLSAgICBpZiAoT2JqZWN0LmlzU3RyaW5nKHNlbGVjdG9yKSkKLSAgICAgIHNl
bGVjdG9yID0gbmV3IFNlbGVjdG9yKHNlbGVjdG9yKTsKLSAgICByZXR1cm4gc2VsZWN0b3IubWF0
Y2goJChlbGVtZW50KSk7Ci0gIH0sCi0KLSAgdXA6IGZ1bmN0aW9uKGVsZW1lbnQsIGV4cHJlc3Np
b24sIGluZGV4KSB7Ci0gICAgZWxlbWVudCA9ICQoZWxlbWVudCk7Ci0gICAgaWYgKGFyZ3VtZW50
cy5sZW5ndGggPT0gMSkgcmV0dXJuICQoZWxlbWVudC5wYXJlbnROb2RlKTsKLSAgICB2YXIgYW5j
ZXN0b3JzID0gZWxlbWVudC5hbmNlc3RvcnMoKTsKLSAgICByZXR1cm4gT2JqZWN0LmlzTnVtYmVy
KGV4cHJlc3Npb24pID8gYW5jZXN0b3JzW2V4cHJlc3Npb25dIDoKLSAgICAgIFNlbGVjdG9yLmZp
bmRFbGVtZW50KGFuY2VzdG9ycywgZXhwcmVzc2lvbiwgaW5kZXgpOwotICB9LAotCi0gIGRvd246
IGZ1bmN0aW9uKGVsZW1lbnQsIGV4cHJlc3Npb24sIGluZGV4KSB7Ci0gICAgZWxlbWVudCA9ICQo
ZWxlbWVudCk7Ci0gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSkgcmV0dXJuIGVsZW1lbnQu
Zmlyc3REZXNjZW5kYW50KCk7Ci0gICAgcmV0dXJuIE9iamVjdC5pc051bWJlcihleHByZXNzaW9u
KSA/IGVsZW1lbnQuZGVzY2VuZGFudHMoKVtleHByZXNzaW9uXSA6Ci0gICAgICBlbGVtZW50LnNl
bGVjdChleHByZXNzaW9uKVtpbmRleCB8fCAwXTsKLSAgfSwKLQotICBwcmV2aW91czogZnVuY3Rp
b24oZWxlbWVudCwgZXhwcmVzc2lvbiwgaW5kZXgpIHsKLSAgICBlbGVtZW50ID0gJChlbGVtZW50
KTsKLSAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSByZXR1cm4gJChTZWxlY3Rvci5oYW5k
bGVycy5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKGVsZW1lbnQpKTsKLSAgICB2YXIgcHJldmlvdXNT
aWJsaW5ncyA9IGVsZW1lbnQucHJldmlvdXNTaWJsaW5ncygpOwotICAgIHJldHVybiBPYmplY3Qu
aXNOdW1iZXIoZXhwcmVzc2lvbikgPyBwcmV2aW91c1NpYmxpbmdzW2V4cHJlc3Npb25dIDoKLSAg
ICAgIFNlbGVjdG9yLmZpbmRFbGVtZW50KHByZXZpb3VzU2libGluZ3MsIGV4cHJlc3Npb24sIGlu
ZGV4KTsKLSAgfSwKLQotICBuZXh0OiBmdW5jdGlvbihlbGVtZW50LCBleHByZXNzaW9uLCBpbmRl
eCkgewotICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwotICAgIGlmIChhcmd1bWVudHMubGVuZ3Ro
ID09IDEpIHJldHVybiAkKFNlbGVjdG9yLmhhbmRsZXJzLm5leHRFbGVtZW50U2libGluZyhlbGVt
ZW50KSk7Ci0gICAgdmFyIG5leHRTaWJsaW5ncyA9IGVsZW1lbnQubmV4dFNpYmxpbmdzKCk7Ci0g
ICAgcmV0dXJuIE9iamVjdC5pc051bWJlcihleHByZXNzaW9uKSA/IG5leHRTaWJsaW5nc1tleHBy
ZXNzaW9uXSA6Ci0gICAgICBTZWxlY3Rvci5maW5kRWxlbWVudChuZXh0U2libGluZ3MsIGV4cHJl
c3Npb24sIGluZGV4KTsKLSAgfSwKLQotICBzZWxlY3Q6IGZ1bmN0aW9uKCkgewotICAgIHZhciBh
cmdzID0gJEEoYXJndW1lbnRzKSwgZWxlbWVudCA9ICQoYXJncy5zaGlmdCgpKTsKLSAgICByZXR1
cm4gU2VsZWN0b3IuZmluZENoaWxkRWxlbWVudHMoZWxlbWVudCwgYXJncyk7Ci0gIH0sCi0KLSAg
YWRqYWNlbnQ6IGZ1bmN0aW9uKCkgewotICAgIHZhciBhcmdzID0gJEEoYXJndW1lbnRzKSwgZWxl
bWVudCA9ICQoYXJncy5zaGlmdCgpKTsKLSAgICByZXR1cm4gU2VsZWN0b3IuZmluZENoaWxkRWxl
bWVudHMoZWxlbWVudC5wYXJlbnROb2RlLCBhcmdzKS53aXRob3V0KGVsZW1lbnQpOwotICB9LAot
Ci0gIGlkZW50aWZ5OiBmdW5jdGlvbihlbGVtZW50KSB7Ci0gICAgZWxlbWVudCA9ICQoZWxlbWVu
dCk7Ci0gICAgdmFyIGlkID0gZWxlbWVudC5yZWFkQXR0cmlidXRlKCdpZCcpLCBzZWxmID0gYXJn
dW1lbnRzLmNhbGxlZTsKLSAgICBpZiAoaWQpIHJldHVybiBpZDsKLSAgICBkbyB7IGlkID0gJ2Fu
b255bW91c19lbGVtZW50XycgKyBzZWxmLmNvdW50ZXIrKyB9IHdoaWxlICgkKGlkKSk7Ci0gICAg
ZWxlbWVudC53cml0ZUF0dHJpYnV0ZSgnaWQnLCBpZCk7Ci0gICAgcmV0dXJuIGlkOwotICB9LAot
Ci0gIHJlYWRBdHRyaWJ1dGU6IGZ1bmN0aW9uKGVsZW1lbnQsIG5hbWUpIHsKLSAgICBlbGVtZW50
ID0gJChlbGVtZW50KTsKLSAgICBpZiAoUHJvdG90eXBlLkJyb3dzZXIuSUUpIHsKLSAgICAgIHZh
ciB0ID0gRWxlbWVudC5fYXR0cmlidXRlVHJhbnNsYXRpb25zLnJlYWQ7Ci0gICAgICBpZiAodC52
YWx1ZXNbbmFtZV0pIHJldHVybiB0LnZhbHVlc1tuYW1lXShlbGVtZW50LCBuYW1lKTsKLSAgICAg
IGlmICh0Lm5hbWVzW25hbWVdKSBuYW1lID0gdC5uYW1lc1tuYW1lXTsKLSAgICAgIGlmIChuYW1l
LmluY2x1ZGUoJzonKSkgewotICAgICAgICByZXR1cm4gKCFlbGVtZW50LmF0dHJpYnV0ZXMgfHwg
IWVsZW1lbnQuYXR0cmlidXRlc1tuYW1lXSkgPyBudWxsIDoKLSAgICAgICAgIGVsZW1lbnQuYXR0
cmlidXRlc1tuYW1lXS52YWx1ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGVsZW1lbnQu
Z2V0QXR0cmlidXRlKG5hbWUpOwotICB9LAotCi0gIHdyaXRlQXR0cmlidXRlOiBmdW5jdGlvbihl
bGVtZW50LCBuYW1lLCB2YWx1ZSkgewotICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwotICAgIHZh
ciBhdHRyaWJ1dGVzID0geyB9LCB0ID0gRWxlbWVudC5fYXR0cmlidXRlVHJhbnNsYXRpb25zLndy
aXRlOwotCi0gICAgaWYgKHR5cGVvZiBuYW1lID09ICdvYmplY3QnKSBhdHRyaWJ1dGVzID0gbmFt
ZTsKLSAgICBlbHNlIGF0dHJpYnV0ZXNbbmFtZV0gPSBPYmplY3QuaXNVbmRlZmluZWQodmFsdWUp
ID8gdHJ1ZSA6IHZhbHVlOwotCi0gICAgZm9yICh2YXIgYXR0ciBpbiBhdHRyaWJ1dGVzKSB7Ci0g
ICAgICBuYW1lID0gdC5uYW1lc1thdHRyXSB8fCBhdHRyOwotICAgICAgdmFsdWUgPSBhdHRyaWJ1
dGVzW2F0dHJdOwotICAgICAgaWYgKHQudmFsdWVzW2F0dHJdKSBuYW1lID0gdC52YWx1ZXNbYXR0
cl0oZWxlbWVudCwgdmFsdWUpOwotICAgICAgaWYgKHZhbHVlID09PSBmYWxzZSB8fCB2YWx1ZSA9
PT0gbnVsbCkKLSAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7Ci0gICAgICBl
bHNlIGlmICh2YWx1ZSA9PT0gdHJ1ZSkKLSAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUobmFt
ZSwgbmFtZSk7Ci0gICAgICBlbHNlIGVsZW1lbnQuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTsK
LSAgICB9Ci0gICAgcmV0dXJuIGVsZW1lbnQ7Ci0gIH0sCi0KLSAgZ2V0SGVpZ2h0OiBmdW5jdGlv
bihlbGVtZW50KSB7Ci0gICAgcmV0dXJuICQoZWxlbWVudCkuZ2V0RGltZW5zaW9ucygpLmhlaWdo
dDsKLSAgfSwKLQotICBnZXRXaWR0aDogZnVuY3Rpb24oZWxlbWVudCkgewotICAgIHJldHVybiAk
KGVsZW1lbnQpLmdldERpbWVuc2lvbnMoKS53aWR0aDsKLSAgfSwKLQotICBjbGFzc05hbWVzOiBm
dW5jdGlvbihlbGVtZW50KSB7Ci0gICAgcmV0dXJuIG5ldyBFbGVtZW50LkNsYXNzTmFtZXMoZWxl
bWVudCk7Ci0gIH0sCi0KLSAgaGFzQ2xhc3NOYW1lOiBmdW5jdGlvbihlbGVtZW50LCBjbGFzc05h
bWUpIHsKLSAgICBpZiAoIShlbGVtZW50ID0gJChlbGVtZW50KSkpIHJldHVybjsKLSAgICB2YXIg
ZWxlbWVudENsYXNzTmFtZSA9IGVsZW1lbnQuY2xhc3NOYW1lOwotICAgIHJldHVybiAoZWxlbWVu
dENsYXNzTmFtZS5sZW5ndGggPiAwICYmIChlbGVtZW50Q2xhc3NOYW1lID09IGNsYXNzTmFtZSB8
fAotICAgICAgbmV3IFJlZ0V4cCgiKF58XFxzKSIgKyBjbGFzc05hbWUgKyAiKFxcc3wkKSIpLnRl
c3QoZWxlbWVudENsYXNzTmFtZSkpKTsKLSAgfSwKLQotICBhZGRDbGFzc05hbWU6IGZ1bmN0aW9u
KGVsZW1lbnQsIGNsYXNzTmFtZSkgewotICAgIGlmICghKGVsZW1lbnQgPSAkKGVsZW1lbnQpKSkg
cmV0dXJuOwotICAgIGlmICghZWxlbWVudC5oYXNDbGFzc05hbWUoY2xhc3NOYW1lKSkKLSAgICAg
IGVsZW1lbnQuY2xhc3NOYW1lICs9IChlbGVtZW50LmNsYXNzTmFtZSA/ICcgJyA6ICcnKSArIGNs
YXNzTmFtZTsKLSAgICByZXR1cm4gZWxlbWVudDsKLSAgfSwKLQotICByZW1vdmVDbGFzc05hbWU6
IGZ1bmN0aW9uKGVsZW1lbnQsIGNsYXNzTmFtZSkgewotICAgIGlmICghKGVsZW1lbnQgPSAkKGVs
ZW1lbnQpKSkgcmV0dXJuOwotICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gZWxlbWVudC5jbGFzc05h
bWUucmVwbGFjZSgKLSAgICAgIG5ldyBSZWdFeHAoIihefFxccyspIiArIGNsYXNzTmFtZSArICIo
XFxzK3wkKSIpLCAnICcpLnN0cmlwKCk7Ci0gICAgcmV0dXJuIGVsZW1lbnQ7Ci0gIH0sCi0KLSAg
dG9nZ2xlQ2xhc3NOYW1lOiBmdW5jdGlvbihlbGVtZW50LCBjbGFzc05hbWUpIHsKLSAgICBpZiAo
IShlbGVtZW50ID0gJChlbGVtZW50KSkpIHJldHVybjsKLSAgICByZXR1cm4gZWxlbWVudFtlbGVt
ZW50Lmhhc0NsYXNzTmFtZShjbGFzc05hbWUpID8KLSAgICAgICdyZW1vdmVDbGFzc05hbWUnIDog
J2FkZENsYXNzTmFtZSddKGNsYXNzTmFtZSk7Ci0gIH0sCi0KLSAgLy8gcmVtb3ZlcyB3aGl0ZXNw
YWNlLW9ubHkgdGV4dCBub2RlIGNoaWxkcmVuCi0gIGNsZWFuV2hpdGVzcGFjZTogZnVuY3Rpb24o
ZWxlbWVudCkgewotICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwotICAgIHZhciBub2RlID0gZWxl
bWVudC5maXJzdENoaWxkOwotICAgIHdoaWxlIChub2RlKSB7Ci0gICAgICB2YXIgbmV4dE5vZGUg
PSBub2RlLm5leHRTaWJsaW5nOwotICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT0gMyAmJiAhL1xT
Ly50ZXN0KG5vZGUubm9kZVZhbHVlKSkKLSAgICAgICAgZWxlbWVudC5yZW1vdmVDaGlsZChub2Rl
KTsKLSAgICAgIG5vZGUgPSBuZXh0Tm9kZTsKLSAgICB9Ci0gICAgcmV0dXJuIGVsZW1lbnQ7Ci0g
IH0sCi0KLSAgZW1wdHk6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAgICByZXR1cm4gJChlbGVtZW50
KS5pbm5lckhUTUwuYmxhbmsoKTsKLSAgfSwKLQotICBkZXNjZW5kYW50T2Y6IGZ1bmN0aW9uKGVs
ZW1lbnQsIGFuY2VzdG9yKSB7Ci0gICAgZWxlbWVudCA9ICQoZWxlbWVudCksIGFuY2VzdG9yID0g
JChhbmNlc3Rvcik7Ci0gICAgdmFyIG9yaWdpbmFsQW5jZXN0b3IgPSBhbmNlc3RvcjsKLQotICAg
IGlmIChlbGVtZW50LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKQotICAgICAgcmV0dXJuIChlbGVt
ZW50LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGFuY2VzdG9yKSAmIDgpID09PSA4OwotCi0gICAg
aWYgKGVsZW1lbnQuc291cmNlSW5kZXggJiYgIVByb3RvdHlwZS5Ccm93c2VyLk9wZXJhKSB7Ci0g
ICAgICB2YXIgZSA9IGVsZW1lbnQuc291cmNlSW5kZXgsIGEgPSBhbmNlc3Rvci5zb3VyY2VJbmRl
eCwKLSAgICAgICBuZXh0QW5jZXN0b3IgPSBhbmNlc3Rvci5uZXh0U2libGluZzsKLSAgICAgIGlm
ICghbmV4dEFuY2VzdG9yKSB7Ci0gICAgICAgIGRvIHsgYW5jZXN0b3IgPSBhbmNlc3Rvci5wYXJl
bnROb2RlOyB9Ci0gICAgICAgIHdoaWxlICghKG5leHRBbmNlc3RvciA9IGFuY2VzdG9yLm5leHRT
aWJsaW5nKSAmJiBhbmNlc3Rvci5wYXJlbnROb2RlKTsKLSAgICAgIH0KLSAgICAgIGlmIChuZXh0
QW5jZXN0b3IgJiYgbmV4dEFuY2VzdG9yLnNvdXJjZUluZGV4KQotICAgICAgIHJldHVybiAoZSA+
IGEgJiYgZSA8IG5leHRBbmNlc3Rvci5zb3VyY2VJbmRleCk7Ci0gICAgfQotCi0gICAgd2hpbGUg
KGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGUpCi0gICAgICBpZiAoZWxlbWVudCA9PSBvcmln
aW5hbEFuY2VzdG9yKSByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0sCi0KLSAg
c2Nyb2xsVG86IGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAgICBlbGVtZW50ID0gJChlbGVtZW50KTsK
LSAgICB2YXIgcG9zID0gZWxlbWVudC5jdW11bGF0aXZlT2Zmc2V0KCk7Ci0gICAgd2luZG93LnNj
cm9sbFRvKHBvc1swXSwgcG9zWzFdKTsKLSAgICByZXR1cm4gZWxlbWVudDsKLSAgfSwKLQotICBn
ZXRTdHlsZTogZnVuY3Rpb24oZWxlbWVudCwgc3R5bGUpIHsKLSAgICBlbGVtZW50ID0gJChlbGVt
ZW50KTsKLSAgICBzdHlsZSA9IHN0eWxlID09ICdmbG9hdCcgPyAnY3NzRmxvYXQnIDogc3R5bGUu
Y2FtZWxpemUoKTsKLSAgICB2YXIgdmFsdWUgPSBlbGVtZW50LnN0eWxlW3N0eWxlXTsKLSAgICBp
ZiAoIXZhbHVlKSB7Ci0gICAgICB2YXIgY3NzID0gZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29t
cHV0ZWRTdHlsZShlbGVtZW50LCBudWxsKTsKLSAgICAgIHZhbHVlID0gY3NzID8gY3NzW3N0eWxl
XSA6IG51bGw7Ci0gICAgfQotICAgIGlmIChzdHlsZSA9PSAnb3BhY2l0eScpIHJldHVybiB2YWx1
ZSA/IHBhcnNlRmxvYXQodmFsdWUpIDogMS4wOwotICAgIHJldHVybiB2YWx1ZSA9PSAnYXV0bycg
PyBudWxsIDogdmFsdWU7Ci0gIH0sCi0KLSAgZ2V0T3BhY2l0eTogZnVuY3Rpb24oZWxlbWVudCkg
ewotICAgIHJldHVybiAkKGVsZW1lbnQpLmdldFN0eWxlKCdvcGFjaXR5Jyk7Ci0gIH0sCi0KLSAg
c2V0U3R5bGU6IGZ1bmN0aW9uKGVsZW1lbnQsIHN0eWxlcykgewotICAgIGVsZW1lbnQgPSAkKGVs
ZW1lbnQpOwotICAgIHZhciBlbGVtZW50U3R5bGUgPSBlbGVtZW50LnN0eWxlLCBtYXRjaDsKLSAg
ICBpZiAoT2JqZWN0LmlzU3RyaW5nKHN0eWxlcykpIHsKLSAgICAgIGVsZW1lbnQuc3R5bGUuY3Nz
VGV4dCArPSAnOycgKyBzdHlsZXM7Ci0gICAgICByZXR1cm4gc3R5bGVzLmluY2x1ZGUoJ29wYWNp
dHknKSA/Ci0gICAgICAgIGVsZW1lbnQuc2V0T3BhY2l0eShzdHlsZXMubWF0Y2goL29wYWNpdHk6
XHMqKFxkP1wuP1xkKikvKVsxXSkgOiBlbGVtZW50OwotICAgIH0KLSAgICBmb3IgKHZhciBwcm9w
ZXJ0eSBpbiBzdHlsZXMpCi0gICAgICBpZiAocHJvcGVydHkgPT0gJ29wYWNpdHknKSBlbGVtZW50
LnNldE9wYWNpdHkoc3R5bGVzW3Byb3BlcnR5XSk7Ci0gICAgICBlbHNlCi0gICAgICAgIGVsZW1l
bnRTdHlsZVsocHJvcGVydHkgPT0gJ2Zsb2F0JyB8fCBwcm9wZXJ0eSA9PSAnY3NzRmxvYXQnKSA/
Ci0gICAgICAgICAgKE9iamVjdC5pc1VuZGVmaW5lZChlbGVtZW50U3R5bGUuc3R5bGVGbG9hdCkg
PyAnY3NzRmxvYXQnIDogJ3N0eWxlRmxvYXQnKSA6Ci0gICAgICAgICAgICBwcm9wZXJ0eV0gPSBz
dHlsZXNbcHJvcGVydHldOwotCi0gICAgcmV0dXJuIGVsZW1lbnQ7Ci0gIH0sCi0KLSAgc2V0T3Bh
Y2l0eTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWUpIHsKLSAgICBlbGVtZW50ID0gJChlbGVtZW50
KTsKLSAgICBlbGVtZW50LnN0eWxlLm9wYWNpdHkgPSAodmFsdWUgPT0gMSB8fCB2YWx1ZSA9PT0g
JycpID8gJycgOgotICAgICAgKHZhbHVlIDwgMC4wMDAwMSkgPyAwIDogdmFsdWU7Ci0gICAgcmV0
dXJuIGVsZW1lbnQ7Ci0gIH0sCi0KLSAgZ2V0RGltZW5zaW9uczogZnVuY3Rpb24oZWxlbWVudCkg
ewotICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwotICAgIHZhciBkaXNwbGF5ID0gJChlbGVtZW50
KS5nZXRTdHlsZSgnZGlzcGxheScpOwotICAgIGlmIChkaXNwbGF5ICE9ICdub25lJyAmJiBkaXNw
bGF5ICE9IG51bGwpIC8vIFNhZmFyaSBidWcKLSAgICAgIHJldHVybiB7d2lkdGg6IGVsZW1lbnQu
b2Zmc2V0V2lkdGgsIGhlaWdodDogZWxlbWVudC5vZmZzZXRIZWlnaHR9OwotCi0gICAgLy8gQWxs
ICpXaWR0aCBhbmQgKkhlaWdodCBwcm9wZXJ0aWVzIGdpdmUgMCBvbiBlbGVtZW50cyB3aXRoIGRp
c3BsYXkgbm9uZSwKLSAgICAvLyBzbyBlbmFibGUgdGhlIGVsZW1lbnQgdGVtcG9yYXJpbHkKLSAg
ICB2YXIgZWxzID0gZWxlbWVudC5zdHlsZTsKLSAgICB2YXIgb3JpZ2luYWxWaXNpYmlsaXR5ID0g
ZWxzLnZpc2liaWxpdHk7Ci0gICAgdmFyIG9yaWdpbmFsUG9zaXRpb24gPSBlbHMucG9zaXRpb247
Ci0gICAgdmFyIG9yaWdpbmFsRGlzcGxheSA9IGVscy5kaXNwbGF5OwotICAgIGVscy52aXNpYmls
aXR5ID0gJ2hpZGRlbic7Ci0gICAgZWxzLnBvc2l0aW9uID0gJ2Fic29sdXRlJzsKLSAgICBlbHMu
ZGlzcGxheSA9ICdibG9jayc7Ci0gICAgdmFyIG9yaWdpbmFsV2lkdGggPSBlbGVtZW50LmNsaWVu
dFdpZHRoOwotICAgIHZhciBvcmlnaW5hbEhlaWdodCA9IGVsZW1lbnQuY2xpZW50SGVpZ2h0Owot
ICAgIGVscy5kaXNwbGF5ID0gb3JpZ2luYWxEaXNwbGF5OwotICAgIGVscy5wb3NpdGlvbiA9IG9y
aWdpbmFsUG9zaXRpb247Ci0gICAgZWxzLnZpc2liaWxpdHkgPSBvcmlnaW5hbFZpc2liaWxpdHk7
Ci0gICAgcmV0dXJuIHt3aWR0aDogb3JpZ2luYWxXaWR0aCwgaGVpZ2h0OiBvcmlnaW5hbEhlaWdo
dH07Ci0gIH0sCi0KLSAgbWFrZVBvc2l0aW9uZWQ6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAgICBl
bGVtZW50ID0gJChlbGVtZW50KTsKLSAgICB2YXIgcG9zID0gRWxlbWVudC5nZXRTdHlsZShlbGVt
ZW50LCAncG9zaXRpb24nKTsKLSAgICBpZiAocG9zID09ICdzdGF0aWMnIHx8ICFwb3MpIHsKLSAg
ICAgIGVsZW1lbnQuX21hZGVQb3NpdGlvbmVkID0gdHJ1ZTsKLSAgICAgIGVsZW1lbnQuc3R5bGUu
cG9zaXRpb24gPSAncmVsYXRpdmUnOwotICAgICAgLy8gT3BlcmEgcmV0dXJucyB0aGUgb2Zmc2V0
IHJlbGF0aXZlIHRvIHRoZSBwb3NpdGlvbmluZyBjb250ZXh0LCB3aGVuIGFuCi0gICAgICAvLyBl
bGVtZW50IGlzIHBvc2l0aW9uIHJlbGF0aXZlIGJ1dCB0b3AgYW5kIGxlZnQgaGF2ZSBub3QgYmVl
biBkZWZpbmVkCi0gICAgICBpZiAod2luZG93Lm9wZXJhKSB7Ci0gICAgICAgIGVsZW1lbnQuc3R5
bGUudG9wID0gMDsKLSAgICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gMDsKLSAgICAgIH0KLSAg
ICB9Ci0gICAgcmV0dXJuIGVsZW1lbnQ7Ci0gIH0sCi0KLSAgdW5kb1Bvc2l0aW9uZWQ6IGZ1bmN0
aW9uKGVsZW1lbnQpIHsKLSAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKLSAgICBpZiAoZWxlbWVu
dC5fbWFkZVBvc2l0aW9uZWQpIHsKLSAgICAgIGVsZW1lbnQuX21hZGVQb3NpdGlvbmVkID0gdW5k
ZWZpbmVkOwotICAgICAgZWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9Ci0gICAgICAgIGVsZW1lbnQu
c3R5bGUudG9wID0KLSAgICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0KLSAgICAgICAgZWxlbWVu
dC5zdHlsZS5ib3R0b20gPQotICAgICAgICBlbGVtZW50LnN0eWxlLnJpZ2h0ID0gJyc7Ci0gICAg
fQotICAgIHJldHVybiBlbGVtZW50OwotICB9LAotCi0gIG1ha2VDbGlwcGluZzogZnVuY3Rpb24o
ZWxlbWVudCkgewotICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwotICAgIGlmIChlbGVtZW50Ll9v
dmVyZmxvdykgcmV0dXJuIGVsZW1lbnQ7Ci0gICAgZWxlbWVudC5fb3ZlcmZsb3cgPSBFbGVtZW50
LmdldFN0eWxlKGVsZW1lbnQsICdvdmVyZmxvdycpIHx8ICdhdXRvJzsKLSAgICBpZiAoZWxlbWVu
dC5fb3ZlcmZsb3cgIT09ICdoaWRkZW4nKQotICAgICAgZWxlbWVudC5zdHlsZS5vdmVyZmxvdyA9
ICdoaWRkZW4nOwotICAgIHJldHVybiBlbGVtZW50OwotICB9LAotCi0gIHVuZG9DbGlwcGluZzog
ZnVuY3Rpb24oZWxlbWVudCkgewotICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwotICAgIGlmICgh
ZWxlbWVudC5fb3ZlcmZsb3cpIHJldHVybiBlbGVtZW50OwotICAgIGVsZW1lbnQuc3R5bGUub3Zl
cmZsb3cgPSBlbGVtZW50Ll9vdmVyZmxvdyA9PSAnYXV0bycgPyAnJyA6IGVsZW1lbnQuX292ZXJm
bG93OwotICAgIGVsZW1lbnQuX292ZXJmbG93ID0gbnVsbDsKLSAgICByZXR1cm4gZWxlbWVudDsK
LSAgfSwKLQotICBjdW11bGF0aXZlT2Zmc2V0OiBmdW5jdGlvbihlbGVtZW50KSB7Ci0gICAgdmFy
IHZhbHVlVCA9IDAsIHZhbHVlTCA9IDA7Ci0gICAgZG8gewotICAgICAgdmFsdWVUICs9IGVsZW1l
bnQub2Zmc2V0VG9wICB8fCAwOwotICAgICAgdmFsdWVMICs9IGVsZW1lbnQub2Zmc2V0TGVmdCB8
fCAwOwotICAgICAgZWxlbWVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50OwotICAgIH0gd2hpbGUg
KGVsZW1lbnQpOwotICAgIHJldHVybiBFbGVtZW50Ll9yZXR1cm5PZmZzZXQodmFsdWVMLCB2YWx1
ZVQpOwotICB9LAotCi0gIHBvc2l0aW9uZWRPZmZzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAg
ICB2YXIgdmFsdWVUID0gMCwgdmFsdWVMID0gMDsKLSAgICBkbyB7Ci0gICAgICB2YWx1ZVQgKz0g
ZWxlbWVudC5vZmZzZXRUb3AgIHx8IDA7Ci0gICAgICB2YWx1ZUwgKz0gZWxlbWVudC5vZmZzZXRM
ZWZ0IHx8IDA7Ci0gICAgICBlbGVtZW50ID0gZWxlbWVudC5vZmZzZXRQYXJlbnQ7Ci0gICAgICBp
ZiAoZWxlbWVudCkgewotICAgICAgICBpZiAoZWxlbWVudC50YWdOYW1lID09ICdCT0RZJykgYnJl
YWs7Ci0gICAgICAgIHZhciBwID0gRWxlbWVudC5nZXRTdHlsZShlbGVtZW50LCAncG9zaXRpb24n
KTsKLSAgICAgICAgaWYgKHAgIT09ICdzdGF0aWMnKSBicmVhazsKLSAgICAgIH0KLSAgICB9IHdo
aWxlIChlbGVtZW50KTsKLSAgICByZXR1cm4gRWxlbWVudC5fcmV0dXJuT2Zmc2V0KHZhbHVlTCwg
dmFsdWVUKTsKLSAgfSwKLQotICBhYnNvbHV0aXplOiBmdW5jdGlvbihlbGVtZW50KSB7Ci0gICAg
ZWxlbWVudCA9ICQoZWxlbWVudCk7Ci0gICAgaWYgKGVsZW1lbnQuZ2V0U3R5bGUoJ3Bvc2l0aW9u
JykgPT0gJ2Fic29sdXRlJykgcmV0dXJuOwotICAgIC8vIFBvc2l0aW9uLnByZXBhcmUoKTsgLy8g
VG8gYmUgZG9uZSBtYW51YWxseSBieSBTY3JpcHR5IHdoZW4gaXQgbmVlZHMgaXQuCi0KLSAgICB2
YXIgb2Zmc2V0cyA9IGVsZW1lbnQucG9zaXRpb25lZE9mZnNldCgpOwotICAgIHZhciB0b3AgICAg
ID0gb2Zmc2V0c1sxXTsKLSAgICB2YXIgbGVmdCAgICA9IG9mZnNldHNbMF07Ci0gICAgdmFyIHdp
ZHRoICAgPSBlbGVtZW50LmNsaWVudFdpZHRoOwotICAgIHZhciBoZWlnaHQgID0gZWxlbWVudC5j
bGllbnRIZWlnaHQ7Ci0KLSAgICBlbGVtZW50Ll9vcmlnaW5hbExlZnQgICA9IGxlZnQgLSBwYXJz
ZUZsb2F0KGVsZW1lbnQuc3R5bGUubGVmdCAgfHwgMCk7Ci0gICAgZWxlbWVudC5fb3JpZ2luYWxU
b3AgICAgPSB0b3AgIC0gcGFyc2VGbG9hdChlbGVtZW50LnN0eWxlLnRvcCB8fCAwKTsKLSAgICBl
bGVtZW50Ll9vcmlnaW5hbFdpZHRoICA9IGVsZW1lbnQuc3R5bGUud2lkdGg7Ci0gICAgZWxlbWVu
dC5fb3JpZ2luYWxIZWlnaHQgPSBlbGVtZW50LnN0eWxlLmhlaWdodDsKLQotICAgIGVsZW1lbnQu
c3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnOwotICAgIGVsZW1lbnQuc3R5bGUudG9wICAgID0g
dG9wICsgJ3B4JzsKLSAgICBlbGVtZW50LnN0eWxlLmxlZnQgICA9IGxlZnQgKyAncHgnOwotICAg
IGVsZW1lbnQuc3R5bGUud2lkdGggID0gd2lkdGggKyAncHgnOwotICAgIGVsZW1lbnQuc3R5bGUu
aGVpZ2h0ID0gaGVpZ2h0ICsgJ3B4JzsKLSAgICByZXR1cm4gZWxlbWVudDsKLSAgfSwKLQotICBy
ZWxhdGl2aXplOiBmdW5jdGlvbihlbGVtZW50KSB7Ci0gICAgZWxlbWVudCA9ICQoZWxlbWVudCk7
Ci0gICAgaWYgKGVsZW1lbnQuZ2V0U3R5bGUoJ3Bvc2l0aW9uJykgPT0gJ3JlbGF0aXZlJykgcmV0
dXJuOwotICAgIC8vIFBvc2l0aW9uLnByZXBhcmUoKTsgLy8gVG8gYmUgZG9uZSBtYW51YWxseSBi
eSBTY3JpcHR5IHdoZW4gaXQgbmVlZHMgaXQuCi0KLSAgICBlbGVtZW50LnN0eWxlLnBvc2l0aW9u
ID0gJ3JlbGF0aXZlJzsKLSAgICB2YXIgdG9wICA9IHBhcnNlRmxvYXQoZWxlbWVudC5zdHlsZS50
b3AgIHx8IDApIC0gKGVsZW1lbnQuX29yaWdpbmFsVG9wIHx8IDApOwotICAgIHZhciBsZWZ0ID0g
cGFyc2VGbG9hdChlbGVtZW50LnN0eWxlLmxlZnQgfHwgMCkgLSAoZWxlbWVudC5fb3JpZ2luYWxM
ZWZ0IHx8IDApOwotCi0gICAgZWxlbWVudC5zdHlsZS50b3AgICAgPSB0b3AgKyAncHgnOwotICAg
IGVsZW1lbnQuc3R5bGUubGVmdCAgID0gbGVmdCArICdweCc7Ci0gICAgZWxlbWVudC5zdHlsZS5o
ZWlnaHQgPSBlbGVtZW50Ll9vcmlnaW5hbEhlaWdodDsKLSAgICBlbGVtZW50LnN0eWxlLndpZHRo
ICA9IGVsZW1lbnQuX29yaWdpbmFsV2lkdGg7Ci0gICAgcmV0dXJuIGVsZW1lbnQ7Ci0gIH0sCi0K
LSAgY3VtdWxhdGl2ZVNjcm9sbE9mZnNldDogZnVuY3Rpb24oZWxlbWVudCkgewotICAgIHZhciB2
YWx1ZVQgPSAwLCB2YWx1ZUwgPSAwOwotICAgIGRvIHsKLSAgICAgIHZhbHVlVCArPSBlbGVtZW50
LnNjcm9sbFRvcCAgfHwgMDsKLSAgICAgIHZhbHVlTCArPSBlbGVtZW50LnNjcm9sbExlZnQgfHwg
MDsKLSAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7Ci0gICAgfSB3aGlsZSAoZWxl
bWVudCk7Ci0gICAgcmV0dXJuIEVsZW1lbnQuX3JldHVybk9mZnNldCh2YWx1ZUwsIHZhbHVlVCk7
Ci0gIH0sCi0KLSAgZ2V0T2Zmc2V0UGFyZW50OiBmdW5jdGlvbihlbGVtZW50KSB7Ci0gICAgaWYg
KGVsZW1lbnQub2Zmc2V0UGFyZW50KSByZXR1cm4gJChlbGVtZW50Lm9mZnNldFBhcmVudCk7Ci0g
ICAgaWYgKGVsZW1lbnQgPT0gZG9jdW1lbnQuYm9keSkgcmV0dXJuICQoZWxlbWVudCk7Ci0KLSAg
ICB3aGlsZSAoKGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGUpICYmIGVsZW1lbnQgIT0gZG9j
dW1lbnQuYm9keSkKLSAgICAgIGlmIChFbGVtZW50LmdldFN0eWxlKGVsZW1lbnQsICdwb3NpdGlv
bicpICE9ICdzdGF0aWMnKQotICAgICAgICByZXR1cm4gJChlbGVtZW50KTsKLQotICAgIHJldHVy
biAkKGRvY3VtZW50LmJvZHkpOwotICB9LAotCi0gIHZpZXdwb3J0T2Zmc2V0OiBmdW5jdGlvbihm
b3JFbGVtZW50KSB7Ci0gICAgdmFyIHZhbHVlVCA9IDAsIHZhbHVlTCA9IDA7Ci0KLSAgICB2YXIg
ZWxlbWVudCA9IGZvckVsZW1lbnQ7Ci0gICAgZG8gewotICAgICAgdmFsdWVUICs9IGVsZW1lbnQu
b2Zmc2V0VG9wICB8fCAwOwotICAgICAgdmFsdWVMICs9IGVsZW1lbnQub2Zmc2V0TGVmdCB8fCAw
OwotCi0gICAgICAvLyBTYWZhcmkgZml4Ci0gICAgICBpZiAoZWxlbWVudC5vZmZzZXRQYXJlbnQg
PT0gZG9jdW1lbnQuYm9keSAmJgotICAgICAgICBFbGVtZW50LmdldFN0eWxlKGVsZW1lbnQsICdw
b3NpdGlvbicpID09ICdhYnNvbHV0ZScpIGJyZWFrOwotCi0gICAgfSB3aGlsZSAoZWxlbWVudCA9
IGVsZW1lbnQub2Zmc2V0UGFyZW50KTsKLQotICAgIGVsZW1lbnQgPSBmb3JFbGVtZW50OwotICAg
IGRvIHsKLSAgICAgIGlmICghUHJvdG90eXBlLkJyb3dzZXIuT3BlcmEgfHwgZWxlbWVudC50YWdO
YW1lID09ICdCT0RZJykgewotICAgICAgICB2YWx1ZVQgLT0gZWxlbWVudC5zY3JvbGxUb3AgIHx8
IDA7Ci0gICAgICAgIHZhbHVlTCAtPSBlbGVtZW50LnNjcm9sbExlZnQgfHwgMDsKLSAgICAgIH0K
LSAgICB9IHdoaWxlIChlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlKTsKLQotICAgIHJldHVy
biBFbGVtZW50Ll9yZXR1cm5PZmZzZXQodmFsdWVMLCB2YWx1ZVQpOwotICB9LAotCi0gIGNsb25l
UG9zaXRpb246IGZ1bmN0aW9uKGVsZW1lbnQsIHNvdXJjZSkgewotICAgIHZhciBvcHRpb25zID0g
T2JqZWN0LmV4dGVuZCh7Ci0gICAgICBzZXRMZWZ0OiAgICB0cnVlLAotICAgICAgc2V0VG9wOiAg
ICAgdHJ1ZSwKLSAgICAgIHNldFdpZHRoOiAgIHRydWUsCi0gICAgICBzZXRIZWlnaHQ6ICB0cnVl
LAotICAgICAgb2Zmc2V0VG9wOiAgMCwKLSAgICAgIG9mZnNldExlZnQ6IDAKLSAgICB9LCBhcmd1
bWVudHNbMl0gfHwgeyB9KTsKLQotICAgIC8vIGZpbmQgcGFnZSBwb3NpdGlvbiBvZiBzb3VyY2UK
LSAgICBzb3VyY2UgPSAkKHNvdXJjZSk7Ci0gICAgdmFyIHAgPSBzb3VyY2Uudmlld3BvcnRPZmZz
ZXQoKTsKLQotICAgIC8vIGZpbmQgY29vcmRpbmF0ZSBzeXN0ZW0gdG8gdXNlCi0gICAgZWxlbWVu
dCA9ICQoZWxlbWVudCk7Ci0gICAgdmFyIGRlbHRhID0gWzAsIDBdOwotICAgIHZhciBwYXJlbnQg
PSBudWxsOwotICAgIC8vIGRlbHRhIFswLDBdIHdpbGwgZG8gZmluZSB3aXRoIHBvc2l0aW9uOiBm
aXhlZCBlbGVtZW50cywKLSAgICAvLyBwb3NpdGlvbjphYnNvbHV0ZSBuZWVkcyBvZmZzZXRQYXJl
bnQgZGVsdGFzCi0gICAgaWYgKEVsZW1lbnQuZ2V0U3R5bGUoZWxlbWVudCwgJ3Bvc2l0aW9uJykg
PT0gJ2Fic29sdXRlJykgewotICAgICAgcGFyZW50ID0gZWxlbWVudC5nZXRPZmZzZXRQYXJlbnQo
KTsKLSAgICAgIGRlbHRhID0gcGFyZW50LnZpZXdwb3J0T2Zmc2V0KCk7Ci0gICAgfQotCi0gICAg
Ly8gY29ycmVjdCBieSBib2R5IG9mZnNldHMgKGZpeGVzIFNhZmFyaSkKLSAgICBpZiAocGFyZW50
ID09IGRvY3VtZW50LmJvZHkpIHsKLSAgICAgIGRlbHRhWzBdIC09IGRvY3VtZW50LmJvZHkub2Zm
c2V0TGVmdDsKLSAgICAgIGRlbHRhWzFdIC09IGRvY3VtZW50LmJvZHkub2Zmc2V0VG9wOwotICAg
IH0KLQotICAgIC8vIHNldCBwb3NpdGlvbgotICAgIGlmIChvcHRpb25zLnNldExlZnQpICAgZWxl
bWVudC5zdHlsZS5sZWZ0ICA9IChwWzBdIC0gZGVsdGFbMF0gKyBvcHRpb25zLm9mZnNldExlZnQp
ICsgJ3B4JzsKLSAgICBpZiAob3B0aW9ucy5zZXRUb3ApICAgIGVsZW1lbnQuc3R5bGUudG9wICAg
PSAocFsxXSAtIGRlbHRhWzFdICsgb3B0aW9ucy5vZmZzZXRUb3ApICsgJ3B4JzsKLSAgICBpZiAo
b3B0aW9ucy5zZXRXaWR0aCkgIGVsZW1lbnQuc3R5bGUud2lkdGggPSBzb3VyY2Uub2Zmc2V0V2lk
dGggKyAncHgnOwotICAgIGlmIChvcHRpb25zLnNldEhlaWdodCkgZWxlbWVudC5zdHlsZS5oZWln
aHQgPSBzb3VyY2Uub2Zmc2V0SGVpZ2h0ICsgJ3B4JzsKLSAgICByZXR1cm4gZWxlbWVudDsKLSAg
fQotfTsKLQotRWxlbWVudC5NZXRob2RzLmlkZW50aWZ5LmNvdW50ZXIgPSAxOwotCi1PYmplY3Qu
ZXh0ZW5kKEVsZW1lbnQuTWV0aG9kcywgewotICBnZXRFbGVtZW50c0J5U2VsZWN0b3I6IEVsZW1l
bnQuTWV0aG9kcy5zZWxlY3QsCi0gIGNoaWxkRWxlbWVudHM6IEVsZW1lbnQuTWV0aG9kcy5pbW1l
ZGlhdGVEZXNjZW5kYW50cwotfSk7Ci0KLUVsZW1lbnQuX2F0dHJpYnV0ZVRyYW5zbGF0aW9ucyA9
IHsKLSAgd3JpdGU6IHsKLSAgICBuYW1lczogewotICAgICAgY2xhc3NOYW1lOiAnY2xhc3MnLAot
ICAgICAgaHRtbEZvcjogICAnZm9yJwotICAgIH0sCi0gICAgdmFsdWVzOiB7IH0KLSAgfQotfTsK
LQotaWYgKFByb3RvdHlwZS5Ccm93c2VyLk9wZXJhKSB7Ci0gIEVsZW1lbnQuTWV0aG9kcy5nZXRT
dHlsZSA9IEVsZW1lbnQuTWV0aG9kcy5nZXRTdHlsZS53cmFwKAotICAgIGZ1bmN0aW9uKHByb2Nl
ZWQsIGVsZW1lbnQsIHN0eWxlKSB7Ci0gICAgICBzd2l0Y2ggKHN0eWxlKSB7Ci0gICAgICAgIGNh
c2UgJ2xlZnQnOiBjYXNlICd0b3AnOiBjYXNlICdyaWdodCc6IGNhc2UgJ2JvdHRvbSc6Ci0gICAg
ICAgICAgaWYgKHByb2NlZWQoZWxlbWVudCwgJ3Bvc2l0aW9uJykgPT09ICdzdGF0aWMnKSByZXR1
cm4gbnVsbDsKLSAgICAgICAgY2FzZSAnaGVpZ2h0JzogY2FzZSAnd2lkdGgnOgotICAgICAgICAg
IC8vIHJldHVybnMgJzBweCcgZm9yIGhpZGRlbiBlbGVtZW50czsgd2Ugd2FudCBpdCB0byByZXR1
cm4gbnVsbAotICAgICAgICAgIGlmICghRWxlbWVudC52aXNpYmxlKGVsZW1lbnQpKSByZXR1cm4g
bnVsbDsKLQotICAgICAgICAgIC8vIHJldHVybnMgdGhlIGJvcmRlci1ib3ggZGltZW5zaW9ucyBy
YXRoZXIgdGhhbiB0aGUgY29udGVudC1ib3gKLSAgICAgICAgICAvLyBkaW1lbnNpb25zLCBzbyB3
ZSBzdWJ0cmFjdCBwYWRkaW5nIGFuZCBib3JkZXJzIGZyb20gdGhlIHZhbHVlCi0gICAgICAgICAg
dmFyIGRpbSA9IHBhcnNlSW50KHByb2NlZWQoZWxlbWVudCwgc3R5bGUpLCAxMCk7Ci0KLSAgICAg
ICAgICBpZiAoZGltICE9PSBlbGVtZW50WydvZmZzZXQnICsgc3R5bGUuY2FwaXRhbGl6ZSgpXSkK
LSAgICAgICAgICAgIHJldHVybiBkaW0gKyAncHgnOwotCi0gICAgICAgICAgdmFyIHByb3BlcnRp
ZXM7Ci0gICAgICAgICAgaWYgKHN0eWxlID09PSAnaGVpZ2h0JykgewotICAgICAgICAgICAgcHJv
cGVydGllcyA9IFsnYm9yZGVyLXRvcC13aWR0aCcsICdwYWRkaW5nLXRvcCcsCi0gICAgICAgICAg
ICAgJ3BhZGRpbmctYm90dG9tJywgJ2JvcmRlci1ib3R0b20td2lkdGgnXTsKLSAgICAgICAgICB9
Ci0gICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBwcm9wZXJ0aWVzID0gWydib3JkZXItbGVm
dC13aWR0aCcsICdwYWRkaW5nLWxlZnQnLAotICAgICAgICAgICAgICdwYWRkaW5nLXJpZ2h0Jywg
J2JvcmRlci1yaWdodC13aWR0aCddOwotICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gcHJv
cGVydGllcy5pbmplY3QoZGltLCBmdW5jdGlvbihtZW1vLCBwcm9wZXJ0eSkgewotICAgICAgICAg
ICAgdmFyIHZhbCA9IHByb2NlZWQoZWxlbWVudCwgcHJvcGVydHkpOwotICAgICAgICAgICAgcmV0
dXJuIHZhbCA9PT0gbnVsbCA/IG1lbW8gOiBtZW1vIC0gcGFyc2VJbnQodmFsLCAxMCk7Ci0gICAg
ICAgICAgfSkgKyAncHgnOwotICAgICAgICBkZWZhdWx0OiByZXR1cm4gcHJvY2VlZChlbGVtZW50
LCBzdHlsZSk7Ci0gICAgICB9Ci0gICAgfQotICApOwotCi0gIEVsZW1lbnQuTWV0aG9kcy5yZWFk
QXR0cmlidXRlID0gRWxlbWVudC5NZXRob2RzLnJlYWRBdHRyaWJ1dGUud3JhcCgKLSAgICBmdW5j
dGlvbihwcm9jZWVkLCBlbGVtZW50LCBhdHRyaWJ1dGUpIHsKLSAgICAgIGlmIChhdHRyaWJ1dGUg
PT09ICd0aXRsZScpIHJldHVybiBlbGVtZW50LnRpdGxlOwotICAgICAgcmV0dXJuIHByb2NlZWQo
ZWxlbWVudCwgYXR0cmlidXRlKTsKLSAgICB9Ci0gICk7Ci19Ci0KLWVsc2UgaWYgKFByb3RvdHlw
ZS5Ccm93c2VyLklFKSB7Ci0gIC8vIElFIGRvZXNuJ3QgcmVwb3J0IG9mZnNldHMgY29ycmVjdGx5
IGZvciBzdGF0aWMgZWxlbWVudHMsIHNvIHdlIGNoYW5nZSB0aGVtCi0gIC8vIHRvICJyZWxhdGl2
ZSIgdG8gZ2V0IHRoZSB2YWx1ZXMsIHRoZW4gY2hhbmdlIHRoZW0gYmFjay4KLSAgRWxlbWVudC5N
ZXRob2RzLmdldE9mZnNldFBhcmVudCA9IEVsZW1lbnQuTWV0aG9kcy5nZXRPZmZzZXRQYXJlbnQu
d3JhcCgKLSAgICBmdW5jdGlvbihwcm9jZWVkLCBlbGVtZW50KSB7Ci0gICAgICBlbGVtZW50ID0g
JChlbGVtZW50KTsKLSAgICAgIHZhciBwb3NpdGlvbiA9IGVsZW1lbnQuZ2V0U3R5bGUoJ3Bvc2l0
aW9uJyk7Ci0gICAgICBpZiAocG9zaXRpb24gIT09ICdzdGF0aWMnKSByZXR1cm4gcHJvY2VlZChl
bGVtZW50KTsKLSAgICAgIGVsZW1lbnQuc2V0U3R5bGUoeyBwb3NpdGlvbjogJ3JlbGF0aXZlJyB9
KTsKLSAgICAgIHZhciB2YWx1ZSA9IHByb2NlZWQoZWxlbWVudCk7Ci0gICAgICBlbGVtZW50LnNl
dFN0eWxlKHsgcG9zaXRpb246IHBvc2l0aW9uIH0pOwotICAgICAgcmV0dXJuIHZhbHVlOwotICAg
IH0KLSAgKTsKLQotICAkdygncG9zaXRpb25lZE9mZnNldCB2aWV3cG9ydE9mZnNldCcpLmVhY2go
ZnVuY3Rpb24obWV0aG9kKSB7Ci0gICAgRWxlbWVudC5NZXRob2RzW21ldGhvZF0gPSBFbGVtZW50
Lk1ldGhvZHNbbWV0aG9kXS53cmFwKAotICAgICAgZnVuY3Rpb24ocHJvY2VlZCwgZWxlbWVudCkg
ewotICAgICAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKLSAgICAgICAgdmFyIHBvc2l0aW9uID0g
ZWxlbWVudC5nZXRTdHlsZSgncG9zaXRpb24nKTsKLSAgICAgICAgaWYgKHBvc2l0aW9uICE9PSAn
c3RhdGljJykgcmV0dXJuIHByb2NlZWQoZWxlbWVudCk7Ci0gICAgICAgIC8vIFRyaWdnZXIgaGFz
TGF5b3V0IG9uIHRoZSBvZmZzZXQgcGFyZW50IHNvIHRoYXQgSUU2IHJlcG9ydHMKLSAgICAgICAg
Ly8gYWNjdXJhdGUgb2Zmc2V0VG9wIGFuZCBvZmZzZXRMZWZ0IHZhbHVlcyBmb3IgcG9zaXRpb246
IGZpeGVkLgotICAgICAgICB2YXIgb2Zmc2V0UGFyZW50ID0gZWxlbWVudC5nZXRPZmZzZXRQYXJl
bnQoKTsKLSAgICAgICAgaWYgKG9mZnNldFBhcmVudCAmJiBvZmZzZXRQYXJlbnQuZ2V0U3R5bGUo
J3Bvc2l0aW9uJykgPT09ICdmaXhlZCcpCi0gICAgICAgICAgb2Zmc2V0UGFyZW50LnNldFN0eWxl
KHsgem9vbTogMSB9KTsKLSAgICAgICAgZWxlbWVudC5zZXRTdHlsZSh7IHBvc2l0aW9uOiAncmVs
YXRpdmUnIH0pOwotICAgICAgICB2YXIgdmFsdWUgPSBwcm9jZWVkKGVsZW1lbnQpOwotICAgICAg
ICBlbGVtZW50LnNldFN0eWxlKHsgcG9zaXRpb246IHBvc2l0aW9uIH0pOwotICAgICAgICByZXR1
cm4gdmFsdWU7Ci0gICAgICB9Ci0gICAgKTsKLSAgfSk7Ci0KLSAgRWxlbWVudC5NZXRob2RzLmdl
dFN0eWxlID0gZnVuY3Rpb24oZWxlbWVudCwgc3R5bGUpIHsKLSAgICBlbGVtZW50ID0gJChlbGVt
ZW50KTsKLSAgICBzdHlsZSA9IChzdHlsZSA9PSAnZmxvYXQnIHx8IHN0eWxlID09ICdjc3NGbG9h
dCcpID8gJ3N0eWxlRmxvYXQnIDogc3R5bGUuY2FtZWxpemUoKTsKLSAgICB2YXIgdmFsdWUgPSBl
bGVtZW50LnN0eWxlW3N0eWxlXTsKLSAgICBpZiAoIXZhbHVlICYmIGVsZW1lbnQuY3VycmVudFN0
eWxlKSB2YWx1ZSA9IGVsZW1lbnQuY3VycmVudFN0eWxlW3N0eWxlXTsKLQotICAgIGlmIChzdHls
ZSA9PSAnb3BhY2l0eScpIHsKLSAgICAgIGlmICh2YWx1ZSA9IChlbGVtZW50LmdldFN0eWxlKCdm
aWx0ZXInKSB8fCAnJykubWF0Y2goL2FscGhhXChvcGFjaXR5PSguKilcKS8pKQotICAgICAgICBp
ZiAodmFsdWVbMV0pIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlWzFdKSAvIDEwMDsKLSAgICAgIHJl
dHVybiAxLjA7Ci0gICAgfQotCi0gICAgaWYgKHZhbHVlID09ICdhdXRvJykgewotICAgICAgaWYg
KChzdHlsZSA9PSAnd2lkdGgnIHx8IHN0eWxlID09ICdoZWlnaHQnKSAmJiAoZWxlbWVudC5nZXRT
dHlsZSgnZGlzcGxheScpICE9ICdub25lJykpCi0gICAgICAgIHJldHVybiBlbGVtZW50WydvZmZz
ZXQnICsgc3R5bGUuY2FwaXRhbGl6ZSgpXSArICdweCc7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAg
ICB9Ci0gICAgcmV0dXJuIHZhbHVlOwotICB9OwotCi0gIEVsZW1lbnQuTWV0aG9kcy5zZXRPcGFj
aXR5ID0gZnVuY3Rpb24oZWxlbWVudCwgdmFsdWUpIHsKLSAgICBmdW5jdGlvbiBzdHJpcEFscGhh
KGZpbHRlcil7Ci0gICAgICByZXR1cm4gZmlsdGVyLnJlcGxhY2UoL2FscGhhXChbXlwpXSpcKS9n
aSwnJyk7Ci0gICAgfQotICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwotICAgIHZhciBjdXJyZW50
U3R5bGUgPSBlbGVtZW50LmN1cnJlbnRTdHlsZTsKLSAgICBpZiAoKGN1cnJlbnRTdHlsZSAmJiAh
Y3VycmVudFN0eWxlLmhhc0xheW91dCkgfHwKLSAgICAgICghY3VycmVudFN0eWxlICYmIGVsZW1l
bnQuc3R5bGUuem9vbSA9PSAnbm9ybWFsJykpCi0gICAgICAgIGVsZW1lbnQuc3R5bGUuem9vbSA9
IDE7Ci0KLSAgICB2YXIgZmlsdGVyID0gZWxlbWVudC5nZXRTdHlsZSgnZmlsdGVyJyksIHN0eWxl
ID0gZWxlbWVudC5zdHlsZTsKLSAgICBpZiAodmFsdWUgPT0gMSB8fCB2YWx1ZSA9PT0gJycpIHsK
LSAgICAgIChmaWx0ZXIgPSBzdHJpcEFscGhhKGZpbHRlcikpID8KLSAgICAgICAgc3R5bGUuZmls
dGVyID0gZmlsdGVyIDogc3R5bGUucmVtb3ZlQXR0cmlidXRlKCdmaWx0ZXInKTsKLSAgICAgIHJl
dHVybiBlbGVtZW50OwotICAgIH0gZWxzZSBpZiAodmFsdWUgPCAwLjAwMDAxKSB2YWx1ZSA9IDA7
Ci0gICAgc3R5bGUuZmlsdGVyID0gc3RyaXBBbHBoYShmaWx0ZXIpICsKLSAgICAgICdhbHBoYShv
cGFjaXR5PScgKyAodmFsdWUgKiAxMDApICsgJyknOwotICAgIHJldHVybiBlbGVtZW50OwotICB9
OwotCi0gIEVsZW1lbnQuX2F0dHJpYnV0ZVRyYW5zbGF0aW9ucyA9IHsKLSAgICByZWFkOiB7Ci0g
ICAgICBuYW1lczogewotICAgICAgICAnY2xhc3MnOiAnY2xhc3NOYW1lJywKLSAgICAgICAgJ2Zv
cic6ICAgJ2h0bWxGb3InCi0gICAgICB9LAotICAgICAgdmFsdWVzOiB7Ci0gICAgICAgIF9nZXRB
dHRyOiBmdW5jdGlvbihlbGVtZW50LCBhdHRyaWJ1dGUpIHsKLSAgICAgICAgICByZXR1cm4gZWxl
bWVudC5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlLCAyKTsKLSAgICAgICAgfSwKLSAgICAgICAgX2dl
dEF0dHJOb2RlOiBmdW5jdGlvbihlbGVtZW50LCBhdHRyaWJ1dGUpIHsKLSAgICAgICAgICB2YXIg
bm9kZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlTm9kZShhdHRyaWJ1dGUpOwotICAgICAgICAgIHJl
dHVybiBub2RlID8gbm9kZS52YWx1ZSA6ICIiOwotICAgICAgICB9LAotICAgICAgICBfZ2V0RXY6
IGZ1bmN0aW9uKGVsZW1lbnQsIGF0dHJpYnV0ZSkgewotICAgICAgICAgIGF0dHJpYnV0ZSA9IGVs
ZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZSk7Ci0gICAgICAgICAgcmV0dXJuIGF0dHJpYnV0
ZSA/IGF0dHJpYnV0ZS50b1N0cmluZygpLnNsaWNlKDIzLCAtMikgOiBudWxsOwotICAgICAgICB9
LAotICAgICAgICBfZmxhZzogZnVuY3Rpb24oZWxlbWVudCwgYXR0cmlidXRlKSB7Ci0gICAgICAg
ICAgcmV0dXJuICQoZWxlbWVudCkuaGFzQXR0cmlidXRlKGF0dHJpYnV0ZSkgPyBhdHRyaWJ1dGUg
OiBudWxsOwotICAgICAgICB9LAotICAgICAgICBzdHlsZTogZnVuY3Rpb24oZWxlbWVudCkgewot
ICAgICAgICAgIHJldHVybiBlbGVtZW50LnN0eWxlLmNzc1RleHQudG9Mb3dlckNhc2UoKTsKLSAg
ICAgICAgfSwKLSAgICAgICAgdGl0bGU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAgICAgICAgICBy
ZXR1cm4gZWxlbWVudC50aXRsZTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfTsKLQot
ICBFbGVtZW50Ll9hdHRyaWJ1dGVUcmFuc2xhdGlvbnMud3JpdGUgPSB7Ci0gICAgbmFtZXM6IE9i
amVjdC5leHRlbmQoewotICAgICAgY2VsbHBhZGRpbmc6ICdjZWxsUGFkZGluZycsCi0gICAgICBj
ZWxsc3BhY2luZzogJ2NlbGxTcGFjaW5nJwotICAgIH0sIEVsZW1lbnQuX2F0dHJpYnV0ZVRyYW5z
bGF0aW9ucy5yZWFkLm5hbWVzKSwKLSAgICB2YWx1ZXM6IHsKLSAgICAgIGNoZWNrZWQ6IGZ1bmN0
aW9uKGVsZW1lbnQsIHZhbHVlKSB7Ci0gICAgICAgIGVsZW1lbnQuY2hlY2tlZCA9ICEhdmFsdWU7
Ci0gICAgICB9LAotCi0gICAgICBzdHlsZTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWUpIHsKLSAg
ICAgICAgZWxlbWVudC5zdHlsZS5jc3NUZXh0ID0gdmFsdWUgPyB2YWx1ZSA6ICcnOwotICAgICAg
fQotICAgIH0KLSAgfTsKLQotICBFbGVtZW50Ll9hdHRyaWJ1dGVUcmFuc2xhdGlvbnMuaGFzID0g
e307Ci0KLSAgJHcoJ2NvbFNwYW4gcm93U3BhbiB2QWxpZ24gZGF0ZVRpbWUgYWNjZXNzS2V5IHRh
YkluZGV4ICcgKwotICAgICAgJ2VuY1R5cGUgbWF4TGVuZ3RoIHJlYWRPbmx5IGxvbmdEZXNjJyku
ZWFjaChmdW5jdGlvbihhdHRyKSB7Ci0gICAgRWxlbWVudC5fYXR0cmlidXRlVHJhbnNsYXRpb25z
LndyaXRlLm5hbWVzW2F0dHIudG9Mb3dlckNhc2UoKV0gPSBhdHRyOwotICAgIEVsZW1lbnQuX2F0
dHJpYnV0ZVRyYW5zbGF0aW9ucy5oYXNbYXR0ci50b0xvd2VyQ2FzZSgpXSA9IGF0dHI7Ci0gIH0p
OwotCi0gIChmdW5jdGlvbih2KSB7Ci0gICAgT2JqZWN0LmV4dGVuZCh2LCB7Ci0gICAgICBocmVm
OiAgICAgICAgdi5fZ2V0QXR0ciwKLSAgICAgIHNyYzogICAgICAgICB2Ll9nZXRBdHRyLAotICAg
ICAgdHlwZTogICAgICAgIHYuX2dldEF0dHIsCi0gICAgICBhY3Rpb246ICAgICAgdi5fZ2V0QXR0
ck5vZGUsCi0gICAgICBkaXNhYmxlZDogICAgdi5fZmxhZywKLSAgICAgIGNoZWNrZWQ6ICAgICB2
Ll9mbGFnLAotICAgICAgcmVhZG9ubHk6ICAgIHYuX2ZsYWcsCi0gICAgICBtdWx0aXBsZTogICAg
di5fZmxhZywKLSAgICAgIG9ubG9hZDogICAgICB2Ll9nZXRFdiwKLSAgICAgIG9udW5sb2FkOiAg
ICB2Ll9nZXRFdiwKLSAgICAgIG9uY2xpY2s6ICAgICB2Ll9nZXRFdiwKLSAgICAgIG9uZGJsY2xp
Y2s6ICB2Ll9nZXRFdiwKLSAgICAgIG9ubW91c2Vkb3duOiB2Ll9nZXRFdiwKLSAgICAgIG9ubW91
c2V1cDogICB2Ll9nZXRFdiwKLSAgICAgIG9ubW91c2VvdmVyOiB2Ll9nZXRFdiwKLSAgICAgIG9u
bW91c2Vtb3ZlOiB2Ll9nZXRFdiwKLSAgICAgIG9ubW91c2VvdXQ6ICB2Ll9nZXRFdiwKLSAgICAg
IG9uZm9jdXM6ICAgICB2Ll9nZXRFdiwKLSAgICAgIG9uYmx1cjogICAgICB2Ll9nZXRFdiwKLSAg
ICAgIG9ua2V5cHJlc3M6ICB2Ll9nZXRFdiwKLSAgICAgIG9ua2V5ZG93bjogICB2Ll9nZXRFdiwK
LSAgICAgIG9ua2V5dXA6ICAgICB2Ll9nZXRFdiwKLSAgICAgIG9uc3VibWl0OiAgICB2Ll9nZXRF
diwKLSAgICAgIG9ucmVzZXQ6ICAgICB2Ll9nZXRFdiwKLSAgICAgIG9uc2VsZWN0OiAgICB2Ll9n
ZXRFdiwKLSAgICAgIG9uY2hhbmdlOiAgICB2Ll9nZXRFdgotICAgIH0pOwotICB9KShFbGVtZW50
Ll9hdHRyaWJ1dGVUcmFuc2xhdGlvbnMucmVhZC52YWx1ZXMpOwotfQotCi1lbHNlIGlmIChQcm90
b3R5cGUuQnJvd3Nlci5HZWNrbyAmJiAvcnY6MVwuOFwuMC8udGVzdChuYXZpZ2F0b3IudXNlckFn
ZW50KSkgewotICBFbGVtZW50Lk1ldGhvZHMuc2V0T3BhY2l0eSA9IGZ1bmN0aW9uKGVsZW1lbnQs
IHZhbHVlKSB7Ci0gICAgZWxlbWVudCA9ICQoZWxlbWVudCk7Ci0gICAgZWxlbWVudC5zdHlsZS5v
cGFjaXR5ID0gKHZhbHVlID09IDEpID8gMC45OTk5OTkgOgotICAgICAgKHZhbHVlID09PSAnJykg
PyAnJyA6ICh2YWx1ZSA8IDAuMDAwMDEpID8gMCA6IHZhbHVlOwotICAgIHJldHVybiBlbGVtZW50
OwotICB9OwotfQotCi1lbHNlIGlmIChQcm90b3R5cGUuQnJvd3Nlci5XZWJLaXQpIHsKLSAgRWxl
bWVudC5NZXRob2RzLnNldE9wYWNpdHkgPSBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZSkgewotICAg
IGVsZW1lbnQgPSAkKGVsZW1lbnQpOwotICAgIGVsZW1lbnQuc3R5bGUub3BhY2l0eSA9ICh2YWx1
ZSA9PSAxIHx8IHZhbHVlID09PSAnJykgPyAnJyA6Ci0gICAgICAodmFsdWUgPCAwLjAwMDAxKSA/
IDAgOiB2YWx1ZTsKLQotICAgIGlmICh2YWx1ZSA9PSAxKQotICAgICAgaWYoZWxlbWVudC50YWdO
YW1lID09ICdJTUcnICYmIGVsZW1lbnQud2lkdGgpIHsKLSAgICAgICAgZWxlbWVudC53aWR0aCsr
OyBlbGVtZW50LndpZHRoLS07Ci0gICAgICB9IGVsc2UgdHJ5IHsKLSAgICAgICAgdmFyIG4gPSBk
b2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnICcpOwotICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxk
KG4pOwotICAgICAgICBlbGVtZW50LnJlbW92ZUNoaWxkKG4pOwotICAgICAgfSBjYXRjaCAoZSkg
eyB9Ci0KLSAgICByZXR1cm4gZWxlbWVudDsKLSAgfTsKLQotICAvLyBTYWZhcmkgcmV0dXJucyBt
YXJnaW5zIG9uIGJvZHkgd2hpY2ggaXMgaW5jb3JyZWN0IGlmIHRoZSBjaGlsZCBpcyBhYnNvbHV0
ZWx5Ci0gIC8vIHBvc2l0aW9uZWQuICBGb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgcmVkZWZpbmUg
RWxlbWVudCNjdW11bGF0aXZlT2Zmc2V0IGZvcgotICAvLyBLSFRNTC9XZWJLaXQgb25seS4KLSAg
RWxlbWVudC5NZXRob2RzLmN1bXVsYXRpdmVPZmZzZXQgPSBmdW5jdGlvbihlbGVtZW50KSB7Ci0g
ICAgdmFyIHZhbHVlVCA9IDAsIHZhbHVlTCA9IDA7Ci0gICAgZG8gewotICAgICAgdmFsdWVUICs9
IGVsZW1lbnQub2Zmc2V0VG9wICB8fCAwOwotICAgICAgdmFsdWVMICs9IGVsZW1lbnQub2Zmc2V0
TGVmdCB8fCAwOwotICAgICAgaWYgKGVsZW1lbnQub2Zmc2V0UGFyZW50ID09IGRvY3VtZW50LmJv
ZHkpCi0gICAgICAgIGlmIChFbGVtZW50LmdldFN0eWxlKGVsZW1lbnQsICdwb3NpdGlvbicpID09
ICdhYnNvbHV0ZScpIGJyZWFrOwotCi0gICAgICBlbGVtZW50ID0gZWxlbWVudC5vZmZzZXRQYXJl
bnQ7Ci0gICAgfSB3aGlsZSAoZWxlbWVudCk7Ci0KLSAgICByZXR1cm4gRWxlbWVudC5fcmV0dXJu
T2Zmc2V0KHZhbHVlTCwgdmFsdWVUKTsKLSAgfTsKLX0KLQotaWYgKFByb3RvdHlwZS5Ccm93c2Vy
LklFIHx8IFByb3RvdHlwZS5Ccm93c2VyLk9wZXJhKSB7Ci0gIC8vIElFIGFuZCBPcGVyYSBhcmUg
bWlzc2luZyAuaW5uZXJIVE1MIHN1cHBvcnQgZm9yIFRBQkxFLXJlbGF0ZWQgYW5kIFNFTEVDVCBl
bGVtZW50cwotICBFbGVtZW50Lk1ldGhvZHMudXBkYXRlID0gZnVuY3Rpb24oZWxlbWVudCwgY29u
dGVudCkgewotICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwotCi0gICAgaWYgKGNvbnRlbnQgJiYg
Y29udGVudC50b0VsZW1lbnQpIGNvbnRlbnQgPSBjb250ZW50LnRvRWxlbWVudCgpOwotICAgIGlm
IChPYmplY3QuaXNFbGVtZW50KGNvbnRlbnQpKSByZXR1cm4gZWxlbWVudC51cGRhdGUoKS5pbnNl
cnQoY29udGVudCk7Ci0KLSAgICBjb250ZW50ID0gT2JqZWN0LnRvSFRNTChjb250ZW50KTsKLSAg
ICB2YXIgdGFnTmFtZSA9IGVsZW1lbnQudGFnTmFtZS50b1VwcGVyQ2FzZSgpOwotCi0gICAgaWYg
KHRhZ05hbWUgaW4gRWxlbWVudC5faW5zZXJ0aW9uVHJhbnNsYXRpb25zLnRhZ3MpIHsKLSAgICAg
ICRBKGVsZW1lbnQuY2hpbGROb2RlcykuZWFjaChmdW5jdGlvbihub2RlKSB7IGVsZW1lbnQucmVt
b3ZlQ2hpbGQobm9kZSkgfSk7Ci0gICAgICBFbGVtZW50Ll9nZXRDb250ZW50RnJvbUFub255bW91
c0VsZW1lbnQodGFnTmFtZSwgY29udGVudC5zdHJpcFNjcmlwdHMoKSkKLSAgICAgICAgLmVhY2go
ZnVuY3Rpb24obm9kZSkgeyBlbGVtZW50LmFwcGVuZENoaWxkKG5vZGUpIH0pOwotICAgIH0KLSAg
ICBlbHNlIGVsZW1lbnQuaW5uZXJIVE1MID0gY29udGVudC5zdHJpcFNjcmlwdHMoKTsKLQotICAg
IGNvbnRlbnQuZXZhbFNjcmlwdHMuYmluZChjb250ZW50KS5kZWZlcigpOwotICAgIHJldHVybiBl
bGVtZW50OwotICB9OwotfQotCi1pZiAoJ291dGVySFRNTCcgaW4gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgnZGl2JykpIHsKLSAgRWxlbWVudC5NZXRob2RzLnJlcGxhY2UgPSBmdW5jdGlvbihlbGVt
ZW50LCBjb250ZW50KSB7Ci0gICAgZWxlbWVudCA9ICQoZWxlbWVudCk7Ci0KLSAgICBpZiAoY29u
dGVudCAmJiBjb250ZW50LnRvRWxlbWVudCkgY29udGVudCA9IGNvbnRlbnQudG9FbGVtZW50KCk7
Ci0gICAgaWYgKE9iamVjdC5pc0VsZW1lbnQoY29udGVudCkpIHsKLSAgICAgIGVsZW1lbnQucGFy
ZW50Tm9kZS5yZXBsYWNlQ2hpbGQoY29udGVudCwgZWxlbWVudCk7Ci0gICAgICByZXR1cm4gZWxl
bWVudDsKLSAgICB9Ci0KLSAgICBjb250ZW50ID0gT2JqZWN0LnRvSFRNTChjb250ZW50KTsKLSAg
ICB2YXIgcGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlLCB0YWdOYW1lID0gcGFyZW50LnRhZ05h
bWUudG9VcHBlckNhc2UoKTsKLQotICAgIGlmIChFbGVtZW50Ll9pbnNlcnRpb25UcmFuc2xhdGlv
bnMudGFnc1t0YWdOYW1lXSkgewotICAgICAgdmFyIG5leHRTaWJsaW5nID0gZWxlbWVudC5uZXh0
KCk7Ci0gICAgICB2YXIgZnJhZ21lbnRzID0gRWxlbWVudC5fZ2V0Q29udGVudEZyb21Bbm9ueW1v
dXNFbGVtZW50KHRhZ05hbWUsIGNvbnRlbnQuc3RyaXBTY3JpcHRzKCkpOwotICAgICAgcGFyZW50
LnJlbW92ZUNoaWxkKGVsZW1lbnQpOwotICAgICAgaWYgKG5leHRTaWJsaW5nKQotICAgICAgICBm
cmFnbWVudHMuZWFjaChmdW5jdGlvbihub2RlKSB7IHBhcmVudC5pbnNlcnRCZWZvcmUobm9kZSwg
bmV4dFNpYmxpbmcpIH0pOwotICAgICAgZWxzZQotICAgICAgICBmcmFnbWVudHMuZWFjaChmdW5j
dGlvbihub2RlKSB7IHBhcmVudC5hcHBlbmRDaGlsZChub2RlKSB9KTsKLSAgICB9Ci0gICAgZWxz
ZSBlbGVtZW50Lm91dGVySFRNTCA9IGNvbnRlbnQuc3RyaXBTY3JpcHRzKCk7Ci0KLSAgICBjb250
ZW50LmV2YWxTY3JpcHRzLmJpbmQoY29udGVudCkuZGVmZXIoKTsKLSAgICByZXR1cm4gZWxlbWVu
dDsKLSAgfTsKLX0KLQotRWxlbWVudC5fcmV0dXJuT2Zmc2V0ID0gZnVuY3Rpb24obCwgdCkgewot
ICB2YXIgcmVzdWx0ID0gW2wsIHRdOwotICByZXN1bHQubGVmdCA9IGw7Ci0gIHJlc3VsdC50b3Ag
PSB0OwotICByZXR1cm4gcmVzdWx0OwotfTsKLQotRWxlbWVudC5fZ2V0Q29udGVudEZyb21Bbm9u
eW1vdXNFbGVtZW50ID0gZnVuY3Rpb24odGFnTmFtZSwgaHRtbCkgewotICB2YXIgZGl2ID0gbmV3
IEVsZW1lbnQoJ2RpdicpLCB0ID0gRWxlbWVudC5faW5zZXJ0aW9uVHJhbnNsYXRpb25zLnRhZ3Nb
dGFnTmFtZV07Ci0gIGlmICh0KSB7Ci0gICAgZGl2LmlubmVySFRNTCA9IHRbMF0gKyBodG1sICsg
dFsxXTsKLSAgICB0WzJdLnRpbWVzKGZ1bmN0aW9uKCkgeyBkaXYgPSBkaXYuZmlyc3RDaGlsZCB9
KTsKLSAgfSBlbHNlIGRpdi5pbm5lckhUTUwgPSBodG1sOwotICByZXR1cm4gJEEoZGl2LmNoaWxk
Tm9kZXMpOwotfTsKLQotRWxlbWVudC5faW5zZXJ0aW9uVHJhbnNsYXRpb25zID0gewotICBiZWZv
cmU6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHsKLSAgICBlbGVtZW50LnBhcmVudE5vZGUuaW5z
ZXJ0QmVmb3JlKG5vZGUsIGVsZW1lbnQpOwotICB9LAotICB0b3A6IGZ1bmN0aW9uKGVsZW1lbnQs
IG5vZGUpIHsKLSAgICBlbGVtZW50Lmluc2VydEJlZm9yZShub2RlLCBlbGVtZW50LmZpcnN0Q2hp
bGQpOwotICB9LAotICBib3R0b206IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHsKLSAgICBlbGVt
ZW50LmFwcGVuZENoaWxkKG5vZGUpOwotICB9LAotICBhZnRlcjogZnVuY3Rpb24oZWxlbWVudCwg
bm9kZSkgewotICAgIGVsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobm9kZSwgZWxlbWVu
dC5uZXh0U2libGluZyk7Ci0gIH0sCi0gIHRhZ3M6IHsKLSAgICBUQUJMRTogIFsnPHRhYmxlPics
ICAgICAgICAgICAgICAgICc8L3RhYmxlPicsICAgICAgICAgICAgICAgICAgIDFdLAotICAgIFRC
T0RZOiAgWyc8dGFibGU+PHRib2R5PicsICAgICAgICAgJzwvdGJvZHk+PC90YWJsZT4nLCAgICAg
ICAgICAgMl0sCi0gICAgVFI6ICAgICBbJzx0YWJsZT48dGJvZHk+PHRyPicsICAgICAnPC90cj48
L3Rib2R5PjwvdGFibGU+JywgICAgICAzXSwKLSAgICBURDogICAgIFsnPHRhYmxlPjx0Ym9keT48
dHI+PHRkPicsICc8L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPicsIDRdLAotICAgIFNFTEVDVDog
Wyc8c2VsZWN0PicsICAgICAgICAgICAgICAgJzwvc2VsZWN0PicsICAgICAgICAgICAgICAgICAg
MV0KLSAgfQotfTsKLQotKGZ1bmN0aW9uKCkgewotICBPYmplY3QuZXh0ZW5kKHRoaXMudGFncywg
ewotICAgIFRIRUFEOiB0aGlzLnRhZ3MuVEJPRFksCi0gICAgVEZPT1Q6IHRoaXMudGFncy5UQk9E
WSwKLSAgICBUSDogICAgdGhpcy50YWdzLlRECi0gIH0pOwotfSkuY2FsbChFbGVtZW50Ll9pbnNl
cnRpb25UcmFuc2xhdGlvbnMpOwotCi1FbGVtZW50Lk1ldGhvZHMuU2ltdWxhdGVkID0gewotICBo
YXNBdHRyaWJ1dGU6IGZ1bmN0aW9uKGVsZW1lbnQsIGF0dHJpYnV0ZSkgewotICAgIGF0dHJpYnV0
ZSA9IEVsZW1lbnQuX2F0dHJpYnV0ZVRyYW5zbGF0aW9ucy5oYXNbYXR0cmlidXRlXSB8fCBhdHRy
aWJ1dGU7Ci0gICAgdmFyIG5vZGUgPSAkKGVsZW1lbnQpLmdldEF0dHJpYnV0ZU5vZGUoYXR0cmli
dXRlKTsKLSAgICByZXR1cm4gbm9kZSAmJiBub2RlLnNwZWNpZmllZDsKLSAgfQotfTsKLQotRWxl
bWVudC5NZXRob2RzLkJ5VGFnID0geyB9OwotCi1PYmplY3QuZXh0ZW5kKEVsZW1lbnQsIEVsZW1l
bnQuTWV0aG9kcyk7Ci0KLWlmICghUHJvdG90eXBlLkJyb3dzZXJGZWF0dXJlcy5FbGVtZW50RXh0
ZW5zaW9ucyAmJgotICAgIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLl9fcHJvdG9fXykg
ewotICB3aW5kb3cuSFRNTEVsZW1lbnQgPSB7IH07Ci0gIHdpbmRvdy5IVE1MRWxlbWVudC5wcm90
b3R5cGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKS5fX3Byb3RvX187Ci0gIFByb3Rv
dHlwZS5Ccm93c2VyRmVhdHVyZXMuRWxlbWVudEV4dGVuc2lvbnMgPSB0cnVlOwotfQotCi1FbGVt
ZW50LmV4dGVuZCA9IChmdW5jdGlvbigpIHsKLSAgaWYgKFByb3RvdHlwZS5Ccm93c2VyRmVhdHVy
ZXMuU3BlY2lmaWNFbGVtZW50RXh0ZW5zaW9ucykKLSAgICByZXR1cm4gUHJvdG90eXBlLks7Ci0K
LSAgdmFyIE1ldGhvZHMgPSB7IH0sIEJ5VGFnID0gRWxlbWVudC5NZXRob2RzLkJ5VGFnOwotCi0g
IHZhciBleHRlbmQgPSBPYmplY3QuZXh0ZW5kKGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAgICBpZiAo
IWVsZW1lbnQgfHwgZWxlbWVudC5fZXh0ZW5kZWRCeVByb3RvdHlwZSB8fAotICAgICAgICBlbGVt
ZW50Lm5vZGVUeXBlICE9IDEgfHwgZWxlbWVudCA9PSB3aW5kb3cpIHJldHVybiBlbGVtZW50Owot
Ci0gICAgdmFyIG1ldGhvZHMgPSBPYmplY3QuY2xvbmUoTWV0aG9kcyksCi0gICAgICB0YWdOYW1l
ID0gZWxlbWVudC50YWdOYW1lLCBwcm9wZXJ0eSwgdmFsdWU7Ci0KLSAgICAvLyBleHRlbmQgbWV0
aG9kcyBmb3Igc3BlY2lmaWMgdGFncwotICAgIGlmIChCeVRhZ1t0YWdOYW1lXSkgT2JqZWN0LmV4
dGVuZChtZXRob2RzLCBCeVRhZ1t0YWdOYW1lXSk7Ci0KLSAgICBmb3IgKHByb3BlcnR5IGluIG1l
dGhvZHMpIHsKLSAgICAgIHZhbHVlID0gbWV0aG9kc1twcm9wZXJ0eV07Ci0gICAgICBpZiAoT2Jq
ZWN0LmlzRnVuY3Rpb24odmFsdWUpICYmICEocHJvcGVydHkgaW4gZWxlbWVudCkpCi0gICAgICAg
IGVsZW1lbnRbcHJvcGVydHldID0gdmFsdWUubWV0aG9kaXplKCk7Ci0gICAgfQotCi0gICAgZWxl
bWVudC5fZXh0ZW5kZWRCeVByb3RvdHlwZSA9IFByb3RvdHlwZS5lbXB0eUZ1bmN0aW9uOwotICAg
IHJldHVybiBlbGVtZW50OwotCi0gIH0sIHsKLSAgICByZWZyZXNoOiBmdW5jdGlvbigpIHsKLSAg
ICAgIC8vIGV4dGVuZCBtZXRob2RzIGZvciBhbGwgdGFncyAoU2FmYXJpIGRvZXNuJ3QgbmVlZCB0
aGlzKQotICAgICAgaWYgKCFQcm90b3R5cGUuQnJvd3NlckZlYXR1cmVzLkVsZW1lbnRFeHRlbnNp
b25zKSB7Ci0gICAgICAgIE9iamVjdC5leHRlbmQoTWV0aG9kcywgRWxlbWVudC5NZXRob2RzKTsK
LSAgICAgICAgT2JqZWN0LmV4dGVuZChNZXRob2RzLCBFbGVtZW50Lk1ldGhvZHMuU2ltdWxhdGVk
KTsKLSAgICAgIH0KLSAgICB9Ci0gIH0pOwotCi0gIGV4dGVuZC5yZWZyZXNoKCk7Ci0gIHJldHVy
biBleHRlbmQ7Ci19KSgpOwotCi1FbGVtZW50Lmhhc0F0dHJpYnV0ZSA9IGZ1bmN0aW9uKGVsZW1l
bnQsIGF0dHJpYnV0ZSkgewotICBpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGUpIHJldHVybiBlbGVt
ZW50Lmhhc0F0dHJpYnV0ZShhdHRyaWJ1dGUpOwotICByZXR1cm4gRWxlbWVudC5NZXRob2RzLlNp
bXVsYXRlZC5oYXNBdHRyaWJ1dGUoZWxlbWVudCwgYXR0cmlidXRlKTsKLX07Ci0KLUVsZW1lbnQu
YWRkTWV0aG9kcyA9IGZ1bmN0aW9uKG1ldGhvZHMpIHsKLSAgdmFyIEYgPSBQcm90b3R5cGUuQnJv
d3NlckZlYXR1cmVzLCBUID0gRWxlbWVudC5NZXRob2RzLkJ5VGFnOwotCi0gIGlmICghbWV0aG9k
cykgewotICAgIE9iamVjdC5leHRlbmQoRm9ybSwgRm9ybS5NZXRob2RzKTsKLSAgICBPYmplY3Qu
ZXh0ZW5kKEZvcm0uRWxlbWVudCwgRm9ybS5FbGVtZW50Lk1ldGhvZHMpOwotICAgIE9iamVjdC5l
eHRlbmQoRWxlbWVudC5NZXRob2RzLkJ5VGFnLCB7Ci0gICAgICAiRk9STSI6ICAgICBPYmplY3Qu
Y2xvbmUoRm9ybS5NZXRob2RzKSwKLSAgICAgICJJTlBVVCI6ICAgIE9iamVjdC5jbG9uZShGb3Jt
LkVsZW1lbnQuTWV0aG9kcyksCi0gICAgICAiU0VMRUNUIjogICBPYmplY3QuY2xvbmUoRm9ybS5F
bGVtZW50Lk1ldGhvZHMpLAotICAgICAgIlRFWFRBUkVBIjogT2JqZWN0LmNsb25lKEZvcm0uRWxl
bWVudC5NZXRob2RzKQotICAgIH0pOwotICB9Ci0KLSAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0g
MikgewotICAgIHZhciB0YWdOYW1lID0gbWV0aG9kczsKLSAgICBtZXRob2RzID0gYXJndW1lbnRz
WzFdOwotICB9Ci0KLSAgaWYgKCF0YWdOYW1lKSBPYmplY3QuZXh0ZW5kKEVsZW1lbnQuTWV0aG9k
cywgbWV0aG9kcyB8fCB7IH0pOwotICBlbHNlIHsKLSAgICBpZiAoT2JqZWN0LmlzQXJyYXkodGFn
TmFtZSkpIHRhZ05hbWUuZWFjaChleHRlbmQpOwotICAgIGVsc2UgZXh0ZW5kKHRhZ05hbWUpOwot
ICB9Ci0KLSAgZnVuY3Rpb24gZXh0ZW5kKHRhZ05hbWUpIHsKLSAgICB0YWdOYW1lID0gdGFnTmFt
ZS50b1VwcGVyQ2FzZSgpOwotICAgIGlmICghRWxlbWVudC5NZXRob2RzLkJ5VGFnW3RhZ05hbWVd
KQotICAgICAgRWxlbWVudC5NZXRob2RzLkJ5VGFnW3RhZ05hbWVdID0geyB9OwotICAgIE9iamVj
dC5leHRlbmQoRWxlbWVudC5NZXRob2RzLkJ5VGFnW3RhZ05hbWVdLCBtZXRob2RzKTsKLSAgfQot
Ci0gIGZ1bmN0aW9uIGNvcHkobWV0aG9kcywgZGVzdGluYXRpb24sIG9ubHlJZkFic2VudCkgewot
ICAgIG9ubHlJZkFic2VudCA9IG9ubHlJZkFic2VudCB8fCBmYWxzZTsKLSAgICBmb3IgKHZhciBw
cm9wZXJ0eSBpbiBtZXRob2RzKSB7Ci0gICAgICB2YXIgdmFsdWUgPSBtZXRob2RzW3Byb3BlcnR5
XTsKLSAgICAgIGlmICghT2JqZWN0LmlzRnVuY3Rpb24odmFsdWUpKSBjb250aW51ZTsKLSAgICAg
IGlmICghb25seUlmQWJzZW50IHx8ICEocHJvcGVydHkgaW4gZGVzdGluYXRpb24pKQotICAgICAg
ICBkZXN0aW5hdGlvbltwcm9wZXJ0eV0gPSB2YWx1ZS5tZXRob2RpemUoKTsKLSAgICB9Ci0gIH0K
LQotICBmdW5jdGlvbiBmaW5kRE9NQ2xhc3ModGFnTmFtZSkgewotICAgIHZhciBrbGFzczsKLSAg
ICB2YXIgdHJhbnMgPSB7Ci0gICAgICAiT1BUR1JPVVAiOiAiT3B0R3JvdXAiLCAiVEVYVEFSRUEi
OiAiVGV4dEFyZWEiLCAiUCI6ICJQYXJhZ3JhcGgiLAotICAgICAgIkZJRUxEU0VUIjogIkZpZWxk
U2V0IiwgIlVMIjogIlVMaXN0IiwgIk9MIjogIk9MaXN0IiwgIkRMIjogIkRMaXN0IiwKLSAgICAg
ICJESVIiOiAiRGlyZWN0b3J5IiwgIkgxIjogIkhlYWRpbmciLCAiSDIiOiAiSGVhZGluZyIsICJI
MyI6ICJIZWFkaW5nIiwKLSAgICAgICJINCI6ICJIZWFkaW5nIiwgIkg1IjogIkhlYWRpbmciLCAi
SDYiOiAiSGVhZGluZyIsICJRIjogIlF1b3RlIiwKLSAgICAgICJJTlMiOiAiTW9kIiwgIkRFTCI6
ICJNb2QiLCAiQSI6ICJBbmNob3IiLCAiSU1HIjogIkltYWdlIiwgIkNBUFRJT04iOgotICAgICAg
IlRhYmxlQ2FwdGlvbiIsICJDT0wiOiAiVGFibGVDb2wiLCAiQ09MR1JPVVAiOiAiVGFibGVDb2wi
LCAiVEhFQUQiOgotICAgICAgIlRhYmxlU2VjdGlvbiIsICJURk9PVCI6ICJUYWJsZVNlY3Rpb24i
LCAiVEJPRFkiOiAiVGFibGVTZWN0aW9uIiwgIlRSIjoKLSAgICAgICJUYWJsZVJvdyIsICJUSCI6
ICJUYWJsZUNlbGwiLCAiVEQiOiAiVGFibGVDZWxsIiwgIkZSQU1FU0VUIjoKLSAgICAgICJGcmFt
ZVNldCIsICJJRlJBTUUiOiAiSUZyYW1lIgotICAgIH07Ci0gICAgaWYgKHRyYW5zW3RhZ05hbWVd
KSBrbGFzcyA9ICdIVE1MJyArIHRyYW5zW3RhZ05hbWVdICsgJ0VsZW1lbnQnOwotICAgIGlmICh3
aW5kb3dba2xhc3NdKSByZXR1cm4gd2luZG93W2tsYXNzXTsKLSAgICBrbGFzcyA9ICdIVE1MJyAr
IHRhZ05hbWUgKyAnRWxlbWVudCc7Ci0gICAgaWYgKHdpbmRvd1trbGFzc10pIHJldHVybiB3aW5k
b3dba2xhc3NdOwotICAgIGtsYXNzID0gJ0hUTUwnICsgdGFnTmFtZS5jYXBpdGFsaXplKCkgKyAn
RWxlbWVudCc7Ci0gICAgaWYgKHdpbmRvd1trbGFzc10pIHJldHVybiB3aW5kb3dba2xhc3NdOwot
Ci0gICAgd2luZG93W2tsYXNzXSA9IHsgfTsKLSAgICB3aW5kb3dba2xhc3NdLnByb3RvdHlwZSA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSkuX19wcm90b19fOwotICAgIHJldHVybiB3
aW5kb3dba2xhc3NdOwotICB9Ci0KLSAgaWYgKEYuRWxlbWVudEV4dGVuc2lvbnMpIHsKLSAgICBj
b3B5KEVsZW1lbnQuTWV0aG9kcywgSFRNTEVsZW1lbnQucHJvdG90eXBlKTsKLSAgICBjb3B5KEVs
ZW1lbnQuTWV0aG9kcy5TaW11bGF0ZWQsIEhUTUxFbGVtZW50LnByb3RvdHlwZSwgdHJ1ZSk7Ci0g
IH0KLQotICBpZiAoRi5TcGVjaWZpY0VsZW1lbnRFeHRlbnNpb25zKSB7Ci0gICAgZm9yICh2YXIg
dGFnIGluIEVsZW1lbnQuTWV0aG9kcy5CeVRhZykgewotICAgICAgdmFyIGtsYXNzID0gZmluZERP
TUNsYXNzKHRhZyk7Ci0gICAgICBpZiAoT2JqZWN0LmlzVW5kZWZpbmVkKGtsYXNzKSkgY29udGlu
dWU7Ci0gICAgICBjb3B5KFRbdGFnXSwga2xhc3MucHJvdG90eXBlKTsKLSAgICB9Ci0gIH0KLQot
ICBPYmplY3QuZXh0ZW5kKEVsZW1lbnQsIEVsZW1lbnQuTWV0aG9kcyk7Ci0gIGRlbGV0ZSBFbGVt
ZW50LkJ5VGFnOwotCi0gIGlmIChFbGVtZW50LmV4dGVuZC5yZWZyZXNoKSBFbGVtZW50LmV4dGVu
ZC5yZWZyZXNoKCk7Ci0gIEVsZW1lbnQuY2FjaGUgPSB7IH07Ci19OwotCi1kb2N1bWVudC52aWV3
cG9ydCA9IHsKLSAgZ2V0RGltZW5zaW9uczogZnVuY3Rpb24oKSB7Ci0gICAgdmFyIGRpbWVuc2lv
bnMgPSB7IH07Ci0gICAgdmFyIEIgPSBQcm90b3R5cGUuQnJvd3NlcjsKLSAgICAkdygnd2lkdGgg
aGVpZ2h0JykuZWFjaChmdW5jdGlvbihkKSB7Ci0gICAgICB2YXIgRCA9IGQuY2FwaXRhbGl6ZSgp
OwotICAgICAgZGltZW5zaW9uc1tkXSA9IChCLldlYktpdCAmJiAhZG9jdW1lbnQuZXZhbHVhdGUp
ID8gc2VsZlsnaW5uZXInICsgRF0gOgotICAgICAgICAoQi5PcGVyYSkgPyBkb2N1bWVudC5ib2R5
WydjbGllbnQnICsgRF0gOiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbJ2NsaWVudCcgKyBEXTsK
LSAgICB9KTsKLSAgICByZXR1cm4gZGltZW5zaW9uczsKLSAgfSwKLQotICBnZXRXaWR0aDogZnVu
Y3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMuZ2V0RGltZW5zaW9ucygpLndpZHRoOwotICB9LAot
Ci0gIGdldEhlaWdodDogZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMuZ2V0RGltZW5zaW9u
cygpLmhlaWdodDsKLSAgfSwKLQotICBnZXRTY3JvbGxPZmZzZXRzOiBmdW5jdGlvbigpIHsKLSAg
ICByZXR1cm4gRWxlbWVudC5fcmV0dXJuT2Zmc2V0KAotICAgICAgd2luZG93LnBhZ2VYT2Zmc2V0
IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0IHx8IGRvY3VtZW50LmJvZHku
c2Nyb2xsTGVmdCwKLSAgICAgIHdpbmRvdy5wYWdlWU9mZnNldCB8fCBkb2N1bWVudC5kb2N1bWVu
dEVsZW1lbnQuc2Nyb2xsVG9wIHx8IGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wKTsKLSAgfQotfTsK
LS8qIFBvcnRpb25zIG9mIHRoZSBTZWxlY3RvciBjbGFzcyBhcmUgZGVyaXZlZCBmcm9tIEphY2sg
U2xvY3Vt4oCZcyBEb21RdWVyeSwKLSAqIHBhcnQgb2YgWVVJLUV4dCB2ZXJzaW9uIDAuNDAsIGRp
c3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbiBNSVQtc3R5bGUKLSAqIGxpY2Vuc2UuICBQ
bGVhc2Ugc2VlIGh0dHA6Ly93d3cueXVpLWV4dC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLiAq
LwotCi12YXIgU2VsZWN0b3IgPSBDbGFzcy5jcmVhdGUoewotICBpbml0aWFsaXplOiBmdW5jdGlv
bihleHByZXNzaW9uKSB7Ci0gICAgdGhpcy5leHByZXNzaW9uID0gZXhwcmVzc2lvbi5zdHJpcCgp
OwotICAgIHRoaXMuY29tcGlsZU1hdGNoZXIoKTsKLSAgfSwKLQotICBzaG91bGRVc2VYUGF0aDog
ZnVuY3Rpb24oKSB7Ci0gICAgaWYgKCFQcm90b3R5cGUuQnJvd3NlckZlYXR1cmVzLlhQYXRoKSBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICB2YXIgZSA9IHRoaXMuZXhwcmVzc2lvbjsKLQotICAgIC8vIFNh
ZmFyaSAzIGNob2tlcyBvbiA6Ki1vZi10eXBlIGFuZCA6ZW1wdHkKLSAgICBpZiAoUHJvdG90eXBl
LkJyb3dzZXIuV2ViS2l0ICYmCi0gICAgIChlLmluY2x1ZGUoIi1vZi10eXBlIikgfHwgZS5pbmNs
dWRlKCI6ZW1wdHkiKSkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBYUGF0aCBjYW4n
dCBkbyBuYW1lc3BhY2VkIGF0dHJpYnV0ZXMsIG5vciBjYW4gaXQgcmVhZAotICAgIC8vIHRoZSAi
Y2hlY2tlZCIgcHJvcGVydHkgZnJvbSBET00gbm9kZXMKLSAgICBpZiAoKC8oXFtbXHctXSo/Onw6
Y2hlY2tlZCkvKS50ZXN0KHRoaXMuZXhwcmVzc2lvbikpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLSAgfSwKLQotICBjb21waWxlTWF0Y2hlcjogZnVuY3Rpb24oKSB7
Ci0gICAgaWYgKHRoaXMuc2hvdWxkVXNlWFBhdGgoKSkKLSAgICAgIHJldHVybiB0aGlzLmNvbXBp
bGVYUGF0aE1hdGNoZXIoKTsKLQotICAgIHZhciBlID0gdGhpcy5leHByZXNzaW9uLCBwcyA9IFNl
bGVjdG9yLnBhdHRlcm5zLCBoID0gU2VsZWN0b3IuaGFuZGxlcnMsCi0gICAgICAgIGMgPSBTZWxl
Y3Rvci5jcml0ZXJpYSwgbGUsIHAsIG07Ci0KLSAgICBpZiAoU2VsZWN0b3IuX2NhY2hlW2VdKSB7
Ci0gICAgICB0aGlzLm1hdGNoZXIgPSBTZWxlY3Rvci5fY2FjaGVbZV07Ci0gICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgdGhpcy5tYXRjaGVyID0gWyJ0aGlzLm1hdGNoZXIgPSBmdW5jdGlvbihy
b290KSB7IiwKLSAgICAgICAgICAgICAgICAgICAgInZhciByID0gcm9vdCwgaCA9IFNlbGVjdG9y
LmhhbmRsZXJzLCBjID0gZmFsc2UsIG47Il07Ci0KLSAgICB3aGlsZSAoZSAmJiBsZSAhPSBlICYm
ICgvXFMvKS50ZXN0KGUpKSB7Ci0gICAgICBsZSA9IGU7Ci0gICAgICBmb3IgKHZhciBpIGluIHBz
KSB7Ci0gICAgICAgIHAgPSBwc1tpXTsKLSAgICAgICAgaWYgKG0gPSBlLm1hdGNoKHApKSB7Ci0g
ICAgICAgICAgdGhpcy5tYXRjaGVyLnB1c2goT2JqZWN0LmlzRnVuY3Rpb24oY1tpXSkgPyBjW2ld
KG0pIDoKLSAgICAJICAgICAgbmV3IFRlbXBsYXRlKGNbaV0pLmV2YWx1YXRlKG0pKTsKLSAgICAg
ICAgICBlID0gZS5yZXBsYWNlKG1bMF0sICcnKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgfQotICAgIH0KLQotICAgIHRoaXMubWF0Y2hlci5wdXNoKCJyZXR1cm4gaC51bmlx
dWUobik7XG59Iik7Ci0gICAgZXZhbCh0aGlzLm1hdGNoZXIuam9pbignXG4nKSk7Ci0gICAgU2Vs
ZWN0b3IuX2NhY2hlW3RoaXMuZXhwcmVzc2lvbl0gPSB0aGlzLm1hdGNoZXI7Ci0gIH0sCi0KLSAg
Y29tcGlsZVhQYXRoTWF0Y2hlcjogZnVuY3Rpb24oKSB7Ci0gICAgdmFyIGUgPSB0aGlzLmV4cHJl
c3Npb24sIHBzID0gU2VsZWN0b3IucGF0dGVybnMsCi0gICAgICAgIHggPSBTZWxlY3Rvci54cGF0
aCwgbGUsIG07Ci0KLSAgICBpZiAoU2VsZWN0b3IuX2NhY2hlW2VdKSB7Ci0gICAgICB0aGlzLnhw
YXRoID0gU2VsZWN0b3IuX2NhY2hlW2VdOyByZXR1cm47Ci0gICAgfQotCi0gICAgdGhpcy5tYXRj
aGVyID0gWycuLy8qJ107Ci0gICAgd2hpbGUgKGUgJiYgbGUgIT0gZSAmJiAoL1xTLykudGVzdChl
KSkgewotICAgICAgbGUgPSBlOwotICAgICAgZm9yICh2YXIgaSBpbiBwcykgewotICAgICAgICBp
ZiAobSA9IGUubWF0Y2gocHNbaV0pKSB7Ci0gICAgICAgICAgdGhpcy5tYXRjaGVyLnB1c2goT2Jq
ZWN0LmlzRnVuY3Rpb24oeFtpXSkgPyB4W2ldKG0pIDoKLSAgICAgICAgICAgIG5ldyBUZW1wbGF0
ZSh4W2ldKS5ldmFsdWF0ZShtKSk7Ci0gICAgICAgICAgZSA9IGUucmVwbGFjZShtWzBdLCAnJyk7
Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICB0aGlz
LnhwYXRoID0gdGhpcy5tYXRjaGVyLmpvaW4oJycpOwotICAgIFNlbGVjdG9yLl9jYWNoZVt0aGlz
LmV4cHJlc3Npb25dID0gdGhpcy54cGF0aDsKLSAgfSwKLQotICBmaW5kRWxlbWVudHM6IGZ1bmN0
aW9uKHJvb3QpIHsKLSAgICByb290ID0gcm9vdCB8fCBkb2N1bWVudDsKLSAgICBpZiAodGhpcy54
cGF0aCkgcmV0dXJuIGRvY3VtZW50Ll9nZXRFbGVtZW50c0J5WFBhdGgodGhpcy54cGF0aCwgcm9v
dCk7Ci0gICAgcmV0dXJuIHRoaXMubWF0Y2hlcihyb290KTsKLSAgfSwKLQotICBtYXRjaDogZnVu
Y3Rpb24oZWxlbWVudCkgewotICAgIHRoaXMudG9rZW5zID0gW107Ci0KLSAgICB2YXIgZSA9IHRo
aXMuZXhwcmVzc2lvbiwgcHMgPSBTZWxlY3Rvci5wYXR0ZXJucywgYXMgPSBTZWxlY3Rvci5hc3Nl
cnRpb25zOwotICAgIHZhciBsZSwgcCwgbTsKLQotICAgIHdoaWxlIChlICYmIGxlICE9PSBlICYm
ICgvXFMvKS50ZXN0KGUpKSB7Ci0gICAgICBsZSA9IGU7Ci0gICAgICBmb3IgKHZhciBpIGluIHBz
KSB7Ci0gICAgICAgIHAgPSBwc1tpXTsKLSAgICAgICAgaWYgKG0gPSBlLm1hdGNoKHApKSB7Ci0g
ICAgICAgICAgLy8gdXNlIHRoZSBTZWxlY3Rvci5hc3NlcnRpb25zIG1ldGhvZHMgdW5sZXNzIHRo
ZSBzZWxlY3RvcgotICAgICAgICAgIC8vIGlzIHRvbyBjb21wbGV4LgotICAgICAgICAgIGlmIChh
c1tpXSkgewotICAgICAgICAgICAgdGhpcy50b2tlbnMucHVzaChbaSwgT2JqZWN0LmNsb25lKG0p
XSk7Ci0gICAgICAgICAgICBlID0gZS5yZXBsYWNlKG1bMF0sICcnKTsKLSAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgLy8gcmVsdWN0YW50bHkgZG8gYSBkb2N1bWVudC13aWRlIHNlYXJj
aAotICAgICAgICAgICAgLy8gYW5kIGxvb2sgZm9yIGEgbWF0Y2ggaW4gdGhlIGFycmF5Ci0gICAg
ICAgICAgICByZXR1cm4gdGhpcy5maW5kRWxlbWVudHMoZG9jdW1lbnQpLmluY2x1ZGUoZWxlbWVu
dCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgdmFyIG1h
dGNoID0gdHJ1ZSwgbmFtZSwgbWF0Y2hlczsKLSAgICBmb3IgKHZhciBpID0gMCwgdG9rZW47IHRv
a2VuID0gdGhpcy50b2tlbnNbaV07IGkrKykgewotICAgICAgbmFtZSA9IHRva2VuWzBdLCBtYXRj
aGVzID0gdG9rZW5bMV07Ci0gICAgICBpZiAoIVNlbGVjdG9yLmFzc2VydGlvbnNbbmFtZV0oZWxl
bWVudCwgbWF0Y2hlcykpIHsKLSAgICAgICAgbWF0Y2ggPSBmYWxzZTsgYnJlYWs7Ci0gICAgICB9
Ci0gICAgfQotCi0gICAgcmV0dXJuIG1hdGNoOwotICB9LAotCi0gIHRvU3RyaW5nOiBmdW5jdGlv
bigpIHsKLSAgICByZXR1cm4gdGhpcy5leHByZXNzaW9uOwotICB9LAotCi0gIGluc3BlY3Q6IGZ1
bmN0aW9uKCkgewotICAgIHJldHVybiAiIzxTZWxlY3RvcjoiICsgdGhpcy5leHByZXNzaW9uLmlu
c3BlY3QoKSArICI+IjsKLSAgfQotfSk7Ci0KLU9iamVjdC5leHRlbmQoU2VsZWN0b3IsIHsKLSAg
X2NhY2hlOiB7IH0sCi0KLSAgeHBhdGg6IHsKLSAgICBkZXNjZW5kYW50OiAgICIvLyoiLAotICAg
IGNoaWxkOiAgICAgICAgIi8qIiwKLSAgICBhZGphY2VudDogICAgICIvZm9sbG93aW5nLXNpYmxp
bmc6OipbMV0iLAotICAgIGxhdGVyU2libGluZzogJy9mb2xsb3dpbmctc2libGluZzo6KicsCi0g
ICAgdGFnTmFtZTogICAgICBmdW5jdGlvbihtKSB7Ci0gICAgICBpZiAobVsxXSA9PSAnKicpIHJl
dHVybiAnJzsKLSAgICAgIHJldHVybiAiW2xvY2FsLW5hbWUoKT0nIiArIG1bMV0udG9Mb3dlckNh
c2UoKSArCi0gICAgICAgICAgICAgIicgb3IgbG9jYWwtbmFtZSgpPSciICsgbVsxXS50b1VwcGVy
Q2FzZSgpICsgIiddIjsKLSAgICB9LAotICAgIGNsYXNzTmFtZTogICAgIltjb250YWlucyhjb25j
YXQoJyAnLCBAY2xhc3MsICcgJyksICcgI3sxfSAnKV0iLAotICAgIGlkOiAgICAgICAgICAgIltA
aWQ9JyN7MX0nXSIsCi0gICAgYXR0clByZXNlbmNlOiBmdW5jdGlvbihtKSB7Ci0gICAgICBtWzFd
ID0gbVsxXS50b0xvd2VyQ2FzZSgpOwotICAgICAgcmV0dXJuIG5ldyBUZW1wbGF0ZSgiW0AjezF9
XSIpLmV2YWx1YXRlKG0pOwotICAgIH0sCi0gICAgYXR0cjogZnVuY3Rpb24obSkgewotICAgICAg
bVsxXSA9IG1bMV0udG9Mb3dlckNhc2UoKTsKLSAgICAgIG1bM10gPSBtWzVdIHx8IG1bNl07Ci0g
ICAgICByZXR1cm4gbmV3IFRlbXBsYXRlKFNlbGVjdG9yLnhwYXRoLm9wZXJhdG9yc1ttWzJdXSku
ZXZhbHVhdGUobSk7Ci0gICAgfSwKLSAgICBwc2V1ZG86IGZ1bmN0aW9uKG0pIHsKLSAgICAgIHZh
ciBoID0gU2VsZWN0b3IueHBhdGgucHNldWRvc1ttWzFdXTsKLSAgICAgIGlmICghaCkgcmV0dXJu
ICcnOwotICAgICAgaWYgKE9iamVjdC5pc0Z1bmN0aW9uKGgpKSByZXR1cm4gaChtKTsKLSAgICAg
IHJldHVybiBuZXcgVGVtcGxhdGUoU2VsZWN0b3IueHBhdGgucHNldWRvc1ttWzFdXSkuZXZhbHVh
dGUobSk7Ci0gICAgfSwKLSAgICBvcGVyYXRvcnM6IHsKLSAgICAgICc9JzogICJbQCN7MX09JyN7
M30nXSIsCi0gICAgICAnIT0nOiAiW0AjezF9IT0nI3szfSddIiwKLSAgICAgICdePSc6ICJbc3Rh
cnRzLXdpdGgoQCN7MX0sICcjezN9JyldIiwKLSAgICAgICckPSc6ICJbc3Vic3RyaW5nKEAjezF9
LCAoc3RyaW5nLWxlbmd0aChAI3sxfSkgLSBzdHJpbmctbGVuZ3RoKCcjezN9JykgKyAxKSk9JyN7
M30nXSIsCi0gICAgICAnKj0nOiAiW2NvbnRhaW5zKEAjezF9LCAnI3szfScpXSIsCi0gICAgICAn
fj0nOiAiW2NvbnRhaW5zKGNvbmNhdCgnICcsIEAjezF9LCAnICcpLCAnICN7M30gJyldIiwKLSAg
ICAgICd8PSc6ICJbY29udGFpbnMoY29uY2F0KCctJywgQCN7MX0sICctJyksICctI3szfS0nKV0i
Ci0gICAgfSwKLSAgICBwc2V1ZG9zOiB7Ci0gICAgICAnZmlyc3QtY2hpbGQnOiAnW25vdChwcmVj
ZWRpbmctc2libGluZzo6KildJywKLSAgICAgICdsYXN0LWNoaWxkJzogICdbbm90KGZvbGxvd2lu
Zy1zaWJsaW5nOjoqKV0nLAotICAgICAgJ29ubHktY2hpbGQnOiAgJ1tub3QocHJlY2VkaW5nLXNp
Ymxpbmc6Oiogb3IgZm9sbG93aW5nLXNpYmxpbmc6OiopXScsCi0gICAgICAnZW1wdHknOiAgICAg
ICAiW2NvdW50KCopID0gMCBhbmQgKGNvdW50KHRleHQoKSkgPSAwIG9yIHRyYW5zbGF0ZSh0ZXh0
KCksICcgXHRcclxuJywgJycpID0gJycpXSIsCi0gICAgICAnY2hlY2tlZCc6ICAgICAiW0BjaGVj
a2VkXSIsCi0gICAgICAnZGlzYWJsZWQnOiAgICAiW0BkaXNhYmxlZF0iLAotICAgICAgJ2VuYWJs
ZWQnOiAgICAgIltub3QoQGRpc2FibGVkKV0iLAotICAgICAgJ25vdCc6IGZ1bmN0aW9uKG0pIHsK
LSAgICAgICAgdmFyIGUgPSBtWzZdLCBwID0gU2VsZWN0b3IucGF0dGVybnMsCi0gICAgICAgICAg
ICB4ID0gU2VsZWN0b3IueHBhdGgsIGxlLCB2OwotCi0gICAgICAgIHZhciBleGNsdXNpb24gPSBb
XTsKLSAgICAgICAgd2hpbGUgKGUgJiYgbGUgIT0gZSAmJiAoL1xTLykudGVzdChlKSkgewotICAg
ICAgICAgIGxlID0gZTsKLSAgICAgICAgICBmb3IgKHZhciBpIGluIHApIHsKLSAgICAgICAgICAg
IGlmIChtID0gZS5tYXRjaChwW2ldKSkgewotICAgICAgICAgICAgICB2ID0gT2JqZWN0LmlzRnVu
Y3Rpb24oeFtpXSkgPyB4W2ldKG0pIDogbmV3IFRlbXBsYXRlKHhbaV0pLmV2YWx1YXRlKG0pOwot
ICAgICAgICAgICAgICBleGNsdXNpb24ucHVzaCgiKCIgKyB2LnN1YnN0cmluZygxLCB2Lmxlbmd0
aCAtIDEpICsgIikiKTsKLSAgICAgICAgICAgICAgZSA9IGUucmVwbGFjZShtWzBdLCAnJyk7Ci0g
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gIltub3QoIiArIGV4Y2x1c2lvbi5qb2luKCIgYW5kICIpICsgIild
IjsKLSAgICAgIH0sCi0gICAgICAnbnRoLWNoaWxkJzogICAgICBmdW5jdGlvbihtKSB7Ci0gICAg
ICAgIHJldHVybiBTZWxlY3Rvci54cGF0aC5wc2V1ZG9zLm50aCgiKGNvdW50KC4vcHJlY2VkaW5n
LXNpYmxpbmc6OiopICsgMSkgIiwgbSk7Ci0gICAgICB9LAotICAgICAgJ250aC1sYXN0LWNoaWxk
JzogZnVuY3Rpb24obSkgewotICAgICAgICByZXR1cm4gU2VsZWN0b3IueHBhdGgucHNldWRvcy5u
dGgoIihjb3VudCguL2ZvbGxvd2luZy1zaWJsaW5nOjoqKSArIDEpICIsIG0pOwotICAgICAgfSwK
LSAgICAgICdudGgtb2YtdHlwZSc6ICAgIGZ1bmN0aW9uKG0pIHsKLSAgICAgICAgcmV0dXJuIFNl
bGVjdG9yLnhwYXRoLnBzZXVkb3MubnRoKCJwb3NpdGlvbigpICIsIG0pOwotICAgICAgfSwKLSAg
ICAgICdudGgtbGFzdC1vZi10eXBlJzogZnVuY3Rpb24obSkgewotICAgICAgICByZXR1cm4gU2Vs
ZWN0b3IueHBhdGgucHNldWRvcy5udGgoIihsYXN0KCkgKyAxIC0gcG9zaXRpb24oKSkgIiwgbSk7
Ci0gICAgICB9LAotICAgICAgJ2ZpcnN0LW9mLXR5cGUnOiAgZnVuY3Rpb24obSkgewotICAgICAg
ICBtWzZdID0gIjEiOyByZXR1cm4gU2VsZWN0b3IueHBhdGgucHNldWRvc1snbnRoLW9mLXR5cGUn
XShtKTsKLSAgICAgIH0sCi0gICAgICAnbGFzdC1vZi10eXBlJzogICBmdW5jdGlvbihtKSB7Ci0g
ICAgICAgIG1bNl0gPSAiMSI7IHJldHVybiBTZWxlY3Rvci54cGF0aC5wc2V1ZG9zWydudGgtbGFz
dC1vZi10eXBlJ10obSk7Ci0gICAgICB9LAotICAgICAgJ29ubHktb2YtdHlwZSc6ICAgZnVuY3Rp
b24obSkgewotICAgICAgICB2YXIgcCA9IFNlbGVjdG9yLnhwYXRoLnBzZXVkb3M7IHJldHVybiBw
WydmaXJzdC1vZi10eXBlJ10obSkgKyBwWydsYXN0LW9mLXR5cGUnXShtKTsKLSAgICAgIH0sCi0g
ICAgICBudGg6IGZ1bmN0aW9uKGZyYWdtZW50LCBtKSB7Ci0gICAgICAgIHZhciBtbSwgZm9ybXVs
YSA9IG1bNl0sIHByZWRpY2F0ZTsKLSAgICAgICAgaWYgKGZvcm11bGEgPT0gJ2V2ZW4nKSBmb3Jt
dWxhID0gJzJuKzAnOwotICAgICAgICBpZiAoZm9ybXVsYSA9PSAnb2RkJykgIGZvcm11bGEgPSAn
Mm4rMSc7Ci0gICAgICAgIGlmIChtbSA9IGZvcm11bGEubWF0Y2goL14oXGQrKSQvKSkgLy8gZGln
aXQgb25seQotICAgICAgICAgIHJldHVybiAnWycgKyBmcmFnbWVudCArICI9ICIgKyBtbVsxXSAr
ICddJzsKLSAgICAgICAgaWYgKG1tID0gZm9ybXVsYS5tYXRjaCgvXigtP1xkKik/bigoWystXSko
XGQrKSk/LykpIHsgLy8gYW4rYgotICAgICAgICAgIGlmIChtbVsxXSA9PSAiLSIpIG1tWzFdID0g
LTE7Ci0gICAgICAgICAgdmFyIGEgPSBtbVsxXSA/IE51bWJlcihtbVsxXSkgOiAxOwotICAgICAg
ICAgIHZhciBiID0gbW1bMl0gPyBOdW1iZXIobW1bMl0pIDogMDsKLSAgICAgICAgICBwcmVkaWNh
dGUgPSAiWygoI3tmcmFnbWVudH0gLSAje2J9KSBtb2QgI3thfSA9IDApIGFuZCAiICsKLSAgICAg
ICAgICAiKCgje2ZyYWdtZW50fSAtICN7Yn0pIGRpdiAje2F9ID49IDApXSI7Ci0gICAgICAgICAg
cmV0dXJuIG5ldyBUZW1wbGF0ZShwcmVkaWNhdGUpLmV2YWx1YXRlKHsKLSAgICAgICAgICAgIGZy
YWdtZW50OiBmcmFnbWVudCwgYTogYSwgYjogYiB9KTsKLSAgICAgICAgfQotICAgICAgfQotICAg
IH0KLSAgfSwKLQotICBjcml0ZXJpYTogewotICAgIHRhZ05hbWU6ICAgICAgJ24gPSBoLnRhZ05h
bWUobiwgciwgIiN7MX0iLCBjKTsgICAgICBjID0gZmFsc2U7JywKLSAgICBjbGFzc05hbWU6ICAg
ICduID0gaC5jbGFzc05hbWUobiwgciwgIiN7MX0iLCBjKTsgICAgYyA9IGZhbHNlOycsCi0gICAg
aWQ6ICAgICAgICAgICAnbiA9IGguaWQobiwgciwgIiN7MX0iLCBjKTsgICAgICAgICAgIGMgPSBm
YWxzZTsnLAotICAgIGF0dHJQcmVzZW5jZTogJ24gPSBoLmF0dHJQcmVzZW5jZShuLCByLCAiI3sx
fSIsIGMpOyBjID0gZmFsc2U7JywKLSAgICBhdHRyOiBmdW5jdGlvbihtKSB7Ci0gICAgICBtWzNd
ID0gKG1bNV0gfHwgbVs2XSk7Ci0gICAgICByZXR1cm4gbmV3IFRlbXBsYXRlKCduID0gaC5hdHRy
KG4sIHIsICIjezF9IiwgIiN7M30iLCAiI3syfSIsIGMpOyBjID0gZmFsc2U7JykuZXZhbHVhdGUo
bSk7Ci0gICAgfSwKLSAgICBwc2V1ZG86IGZ1bmN0aW9uKG0pIHsKLSAgICAgIGlmIChtWzZdKSBt
WzZdID0gbVs2XS5yZXBsYWNlKC8iL2csICdcXCInKTsKLSAgICAgIHJldHVybiBuZXcgVGVtcGxh
dGUoJ24gPSBoLnBzZXVkbyhuLCAiI3sxfSIsICIjezZ9IiwgciwgYyk7IGMgPSBmYWxzZTsnKS5l
dmFsdWF0ZShtKTsKLSAgICB9LAotICAgIGRlc2NlbmRhbnQ6ICAgJ2MgPSAiZGVzY2VuZGFudCI7
JywKLSAgICBjaGlsZDogICAgICAgICdjID0gImNoaWxkIjsnLAotICAgIGFkamFjZW50OiAgICAg
J2MgPSAiYWRqYWNlbnQiOycsCi0gICAgbGF0ZXJTaWJsaW5nOiAnYyA9ICJsYXRlclNpYmxpbmci
OycKLSAgfSwKLQotICBwYXR0ZXJuczogewotICAgIC8vIGNvbWJpbmF0b3JzIG11c3QgYmUgbGlz
dGVkIGZpcnN0Ci0gICAgLy8gKGFuZCBkZXNjZW5kYW50IG5lZWRzIHRvIGJlIGxhc3QgY29tYmlu
YXRvcikKLSAgICBsYXRlclNpYmxpbmc6IC9eXHMqflxzKi8sCi0gICAgY2hpbGQ6ICAgICAgICAv
XlxzKj5ccyovLAotICAgIGFkamFjZW50OiAgICAgL15ccypcK1xzKi8sCi0gICAgZGVzY2VuZGFu
dDogICAvXlxzLywKLQotICAgIC8vIHNlbGVjdG9ycyBmb2xsb3cKLSAgICB0YWdOYW1lOiAgICAg
IC9eXHMqKFwqfFtcd1wtXSspKFxifCQpPy8sCi0gICAgaWQ6ICAgICAgICAgICAvXiMoW1x3XC1c
Kl0rKShcYnwkKS8sCi0gICAgY2xhc3NOYW1lOiAgICAvXlwuKFtcd1wtXCpdKykoXGJ8JCkvLAot
ICAgIHBzZXVkbzoKLS9eOigoZmlyc3R8bGFzdHxudGh8bnRoLWxhc3R8b25seSkoLWNoaWxkfC1v
Zi10eXBlKXxlbXB0eXxjaGVja2VkfChlbnxkaXMpYWJsZWR8bm90KShcKCguKj8pXCkpPyhcYnwk
fCg/PVxzfFs6K34+XSkpLywKLSAgICBhdHRyUHJlc2VuY2U6IC9eXFsoW1x3XSspXF0vLAotICAg
IGF0dHI6ICAgICAgICAgL1xbKCg/Oltcdy1dKjopP1tcdy1dKylccyooPzooWyFeJCp+fF0/PSlc
cyooKFsnIl0pKFteXDRdKj8pXDR8KFteJyJdW15cXV0qPykpKT9cXS8KLSAgfSwKLQotICAvLyBm
b3IgU2VsZWN0b3IubWF0Y2ggYW5kIEVsZW1lbnQjbWF0Y2gKLSAgYXNzZXJ0aW9uczogewotICAg
IHRhZ05hbWU6IGZ1bmN0aW9uKGVsZW1lbnQsIG1hdGNoZXMpIHsKLSAgICAgIHJldHVybiBtYXRj
aGVzWzFdLnRvVXBwZXJDYXNlKCkgPT0gZWxlbWVudC50YWdOYW1lLnRvVXBwZXJDYXNlKCk7Ci0g
ICAgfSwKLQotICAgIGNsYXNzTmFtZTogZnVuY3Rpb24oZWxlbWVudCwgbWF0Y2hlcykgewotICAg
ICAgcmV0dXJuIEVsZW1lbnQuaGFzQ2xhc3NOYW1lKGVsZW1lbnQsIG1hdGNoZXNbMV0pOwotICAg
IH0sCi0KLSAgICBpZDogZnVuY3Rpb24oZWxlbWVudCwgbWF0Y2hlcykgewotICAgICAgcmV0dXJu
IGVsZW1lbnQuaWQgPT09IG1hdGNoZXNbMV07Ci0gICAgfSwKLQotICAgIGF0dHJQcmVzZW5jZTog
ZnVuY3Rpb24oZWxlbWVudCwgbWF0Y2hlcykgewotICAgICAgcmV0dXJuIEVsZW1lbnQuaGFzQXR0
cmlidXRlKGVsZW1lbnQsIG1hdGNoZXNbMV0pOwotICAgIH0sCi0KLSAgICBhdHRyOiBmdW5jdGlv
bihlbGVtZW50LCBtYXRjaGVzKSB7Ci0gICAgICB2YXIgbm9kZVZhbHVlID0gRWxlbWVudC5yZWFk
QXR0cmlidXRlKGVsZW1lbnQsIG1hdGNoZXNbMV0pOwotICAgICAgcmV0dXJuIG5vZGVWYWx1ZSAm
JiBTZWxlY3Rvci5vcGVyYXRvcnNbbWF0Y2hlc1syXV0obm9kZVZhbHVlLCBtYXRjaGVzWzVdIHx8
IG1hdGNoZXNbNl0pOwotICAgIH0KLSAgfSwKLQotICBoYW5kbGVyczogewotICAgIC8vIFVUSUxJ
VFkgRlVOQ1RJT05TCi0gICAgLy8gam9pbnMgdHdvIGNvbGxlY3Rpb25zCi0gICAgY29uY2F0OiBm
dW5jdGlvbihhLCBiKSB7Ci0gICAgICBmb3IgKHZhciBpID0gMCwgbm9kZTsgbm9kZSA9IGJbaV07
IGkrKykKLSAgICAgICAgYS5wdXNoKG5vZGUpOwotICAgICAgcmV0dXJuIGE7Ci0gICAgfSwKLQot
ICAgIC8vIG1hcmtzIGFuIGFycmF5IG9mIG5vZGVzIGZvciBjb3VudGluZwotICAgIG1hcms6IGZ1
bmN0aW9uKG5vZGVzKSB7Ci0gICAgICB2YXIgX3RydWUgPSBQcm90b3R5cGUuZW1wdHlGdW5jdGlv
bjsKLSAgICAgIGZvciAodmFyIGkgPSAwLCBub2RlOyBub2RlID0gbm9kZXNbaV07IGkrKykKLSAg
ICAgICAgbm9kZS5fY291bnRlZEJ5UHJvdG90eXBlID0gX3RydWU7Ci0gICAgICByZXR1cm4gbm9k
ZXM7Ci0gICAgfSwKLQotICAgIHVubWFyazogZnVuY3Rpb24obm9kZXMpIHsKLSAgICAgIGZvciAo
dmFyIGkgPSAwLCBub2RlOyBub2RlID0gbm9kZXNbaV07IGkrKykKLSAgICAgICAgbm9kZS5fY291
bnRlZEJ5UHJvdG90eXBlID0gdW5kZWZpbmVkOwotICAgICAgcmV0dXJuIG5vZGVzOwotICAgIH0s
Ci0KLSAgICAvLyBtYXJrIGVhY2ggY2hpbGQgbm9kZSB3aXRoIGl0cyBwb3NpdGlvbiAoZm9yIG50
aCBjYWxscykKLSAgICAvLyAib2ZUeXBlIiBmbGFnIGluZGljYXRlcyB3aGV0aGVyIHdlJ3JlIGlu
ZGV4aW5nIGZvciBudGgtb2YtdHlwZQotICAgIC8vIHJhdGhlciB0aGFuIG50aC1jaGlsZAotICAg
IGluZGV4OiBmdW5jdGlvbihwYXJlbnROb2RlLCByZXZlcnNlLCBvZlR5cGUpIHsKLSAgICAgIHBh
cmVudE5vZGUuX2NvdW50ZWRCeVByb3RvdHlwZSA9IFByb3RvdHlwZS5lbXB0eUZ1bmN0aW9uOwot
ICAgICAgaWYgKHJldmVyc2UpIHsKLSAgICAgICAgZm9yICh2YXIgbm9kZXMgPSBwYXJlbnROb2Rl
LmNoaWxkTm9kZXMsIGkgPSBub2Rlcy5sZW5ndGggLSAxLCBqID0gMTsgaSA+PSAwOyBpLS0pIHsK
LSAgICAgICAgICB2YXIgbm9kZSA9IG5vZGVzW2ldOwotICAgICAgICAgIGlmIChub2RlLm5vZGVU
eXBlID09IDEgJiYgKCFvZlR5cGUgfHwgbm9kZS5fY291bnRlZEJ5UHJvdG90eXBlKSkgbm9kZS5u
b2RlSW5kZXggPSBqKys7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAo
dmFyIGkgPSAwLCBqID0gMSwgbm9kZXMgPSBwYXJlbnROb2RlLmNoaWxkTm9kZXM7IG5vZGUgPSBu
b2Rlc1tpXTsgaSsrKQotICAgICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09IDEgJiYgKCFvZlR5
cGUgfHwgbm9kZS5fY291bnRlZEJ5UHJvdG90eXBlKSkgbm9kZS5ub2RlSW5kZXggPSBqKys7Ci0g
ICAgICB9Ci0gICAgfSwKLQotICAgIC8vIGZpbHRlcnMgb3V0IGR1cGxpY2F0ZXMgYW5kIGV4dGVu
ZHMgYWxsIG5vZGVzCi0gICAgdW5pcXVlOiBmdW5jdGlvbihub2RlcykgewotICAgICAgaWYgKG5v
ZGVzLmxlbmd0aCA9PSAwKSByZXR1cm4gbm9kZXM7Ci0gICAgICB2YXIgcmVzdWx0cyA9IFtdLCBu
OwotICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBub2Rlcy5sZW5ndGg7IGkgPCBsOyBpKyspCi0g
ICAgICAgIGlmICghKG4gPSBub2Rlc1tpXSkuX2NvdW50ZWRCeVByb3RvdHlwZSkgewotICAgICAg
ICAgIG4uX2NvdW50ZWRCeVByb3RvdHlwZSA9IFByb3RvdHlwZS5lbXB0eUZ1bmN0aW9uOwotICAg
ICAgICAgIHJlc3VsdHMucHVzaChFbGVtZW50LmV4dGVuZChuKSk7Ci0gICAgICAgIH0KLSAgICAg
IHJldHVybiBTZWxlY3Rvci5oYW5kbGVycy51bm1hcmsocmVzdWx0cyk7Ci0gICAgfSwKLQotICAg
IC8vIENPTUJJTkFUT1IgRlVOQ1RJT05TCi0gICAgZGVzY2VuZGFudDogZnVuY3Rpb24obm9kZXMp
IHsKLSAgICAgIHZhciBoID0gU2VsZWN0b3IuaGFuZGxlcnM7Ci0gICAgICBmb3IgKHZhciBpID0g
MCwgcmVzdWx0cyA9IFtdLCBub2RlOyBub2RlID0gbm9kZXNbaV07IGkrKykKLSAgICAgICAgaC5j
b25jYXQocmVzdWx0cywgbm9kZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpKTsKLSAgICAgIHJl
dHVybiByZXN1bHRzOwotICAgIH0sCi0KLSAgICBjaGlsZDogZnVuY3Rpb24obm9kZXMpIHsKLSAg
ICAgIHZhciBoID0gU2VsZWN0b3IuaGFuZGxlcnM7Ci0gICAgICBmb3IgKHZhciBpID0gMCwgcmVz
dWx0cyA9IFtdLCBub2RlOyBub2RlID0gbm9kZXNbaV07IGkrKykgewotICAgICAgICBmb3IgKHZh
ciBqID0gMCwgY2hpbGQ7IGNoaWxkID0gbm9kZS5jaGlsZE5vZGVzW2pdOyBqKyspCi0gICAgICAg
ICAgaWYgKGNoaWxkLm5vZGVUeXBlID09IDEgJiYgY2hpbGQudGFnTmFtZSAhPSAnIScpIHJlc3Vs
dHMucHVzaChjaGlsZCk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gcmVzdWx0czsKLSAgICB9LAot
Ci0gICAgYWRqYWNlbnQ6IGZ1bmN0aW9uKG5vZGVzKSB7Ci0gICAgICBmb3IgKHZhciBpID0gMCwg
cmVzdWx0cyA9IFtdLCBub2RlOyBub2RlID0gbm9kZXNbaV07IGkrKykgewotICAgICAgICB2YXIg
bmV4dCA9IHRoaXMubmV4dEVsZW1lbnRTaWJsaW5nKG5vZGUpOwotICAgICAgICBpZiAobmV4dCkg
cmVzdWx0cy5wdXNoKG5leHQpOwotICAgICAgfQotICAgICAgcmV0dXJuIHJlc3VsdHM7Ci0gICAg
fSwKLQotICAgIGxhdGVyU2libGluZzogZnVuY3Rpb24obm9kZXMpIHsKLSAgICAgIHZhciBoID0g
U2VsZWN0b3IuaGFuZGxlcnM7Ci0gICAgICBmb3IgKHZhciBpID0gMCwgcmVzdWx0cyA9IFtdLCBu
b2RlOyBub2RlID0gbm9kZXNbaV07IGkrKykKLSAgICAgICAgaC5jb25jYXQocmVzdWx0cywgRWxl
bWVudC5uZXh0U2libGluZ3Mobm9kZSkpOwotICAgICAgcmV0dXJuIHJlc3VsdHM7Ci0gICAgfSwK
LQotICAgIG5leHRFbGVtZW50U2libGluZzogZnVuY3Rpb24obm9kZSkgewotICAgICAgd2hpbGUg
KG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKQotCSAgICAgIGlmIChub2RlLm5vZGVUeXBlID09IDEp
IHJldHVybiBub2RlOwotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfSwKLQotICAgIHByZXZpb3Vz
RWxlbWVudFNpYmxpbmc6IGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgIHdoaWxlIChub2RlID0gbm9k
ZS5wcmV2aW91c1NpYmxpbmcpCi0gICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09IDEpIHJldHVy
biBub2RlOwotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfSwKLQotICAgIC8vIFRPS0VOIEZVTkNU
SU9OUwotICAgIHRhZ05hbWU6IGZ1bmN0aW9uKG5vZGVzLCByb290LCB0YWdOYW1lLCBjb21iaW5h
dG9yKSB7Ci0gICAgICB2YXIgdVRhZ05hbWUgPSB0YWdOYW1lLnRvVXBwZXJDYXNlKCk7Ci0gICAg
ICB2YXIgcmVzdWx0cyA9IFtdLCBoID0gU2VsZWN0b3IuaGFuZGxlcnM7Ci0gICAgICBpZiAobm9k
ZXMpIHsKLSAgICAgICAgaWYgKGNvbWJpbmF0b3IpIHsKLSAgICAgICAgICAvLyBmYXN0bGFuZSBm
b3Igb3JkaW5hcnkgZGVzY2VuZGFudCBjb21iaW5hdG9ycwotICAgICAgICAgIGlmIChjb21iaW5h
dG9yID09ICJkZXNjZW5kYW50IikgewotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIG5vZGU7
IG5vZGUgPSBub2Rlc1tpXTsgaSsrKQotICAgICAgICAgICAgICBoLmNvbmNhdChyZXN1bHRzLCBu
b2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKHRhZ05hbWUpKTsKLSAgICAgICAgICAgIHJldHVybiBy
ZXN1bHRzOwotICAgICAgICAgIH0gZWxzZSBub2RlcyA9IHRoaXNbY29tYmluYXRvcl0obm9kZXMp
OwotICAgICAgICAgIGlmICh0YWdOYW1lID09ICIqIikgcmV0dXJuIG5vZGVzOwotICAgICAgICB9
Ci0gICAgICAgIGZvciAodmFyIGkgPSAwLCBub2RlOyBub2RlID0gbm9kZXNbaV07IGkrKykKLSAg
ICAgICAgICBpZiAobm9kZS50YWdOYW1lLnRvVXBwZXJDYXNlKCkgPT09IHVUYWdOYW1lKSByZXN1
bHRzLnB1c2gobm9kZSk7Ci0gICAgICAgIHJldHVybiByZXN1bHRzOwotICAgICAgfSBlbHNlIHJl
dHVybiByb290LmdldEVsZW1lbnRzQnlUYWdOYW1lKHRhZ05hbWUpOwotICAgIH0sCi0KLSAgICBp
ZDogZnVuY3Rpb24obm9kZXMsIHJvb3QsIGlkLCBjb21iaW5hdG9yKSB7Ci0gICAgICB2YXIgdGFy
Z2V0Tm9kZSA9ICQoaWQpLCBoID0gU2VsZWN0b3IuaGFuZGxlcnM7Ci0gICAgICBpZiAoIXRhcmdl
dE5vZGUpIHJldHVybiBbXTsKLSAgICAgIGlmICghbm9kZXMgJiYgcm9vdCA9PSBkb2N1bWVudCkg
cmV0dXJuIFt0YXJnZXROb2RlXTsKLSAgICAgIGlmIChub2RlcykgewotICAgICAgICBpZiAoY29t
YmluYXRvcikgewotICAgICAgICAgIGlmIChjb21iaW5hdG9yID09ICdjaGlsZCcpIHsKLSAgICAg
ICAgICAgIGZvciAodmFyIGkgPSAwLCBub2RlOyBub2RlID0gbm9kZXNbaV07IGkrKykKLSAgICAg
ICAgICAgICAgaWYgKHRhcmdldE5vZGUucGFyZW50Tm9kZSA9PSBub2RlKSByZXR1cm4gW3Rhcmdl
dE5vZGVdOwotICAgICAgICAgIH0gZWxzZSBpZiAoY29tYmluYXRvciA9PSAnZGVzY2VuZGFudCcp
IHsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBub2RlOyBub2RlID0gbm9kZXNbaV07IGkr
KykKLSAgICAgICAgICAgICAgaWYgKEVsZW1lbnQuZGVzY2VuZGFudE9mKHRhcmdldE5vZGUsIG5v
ZGUpKSByZXR1cm4gW3RhcmdldE5vZGVdOwotICAgICAgICAgIH0gZWxzZSBpZiAoY29tYmluYXRv
ciA9PSAnYWRqYWNlbnQnKSB7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbm9kZTsgbm9k
ZSA9IG5vZGVzW2ldOyBpKyspCi0gICAgICAgICAgICAgIGlmIChTZWxlY3Rvci5oYW5kbGVycy5w
cmV2aW91c0VsZW1lbnRTaWJsaW5nKHRhcmdldE5vZGUpID09IG5vZGUpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIFt0YXJnZXROb2RlXTsKLSAgICAgICAgICB9IGVsc2Ugbm9kZXMgPSBoW2NvbWJp
bmF0b3JdKG5vZGVzKTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKHZhciBpID0gMCwgbm9kZTsg
bm9kZSA9IG5vZGVzW2ldOyBpKyspCi0gICAgICAgICAgaWYgKG5vZGUgPT0gdGFyZ2V0Tm9kZSkg
cmV0dXJuIFt0YXJnZXROb2RlXTsKLSAgICAgICAgcmV0dXJuIFtdOwotICAgICAgfQotICAgICAg
cmV0dXJuICh0YXJnZXROb2RlICYmIEVsZW1lbnQuZGVzY2VuZGFudE9mKHRhcmdldE5vZGUsIHJv
b3QpKSA/IFt0YXJnZXROb2RlXSA6IFtdOwotICAgIH0sCi0KLSAgICBjbGFzc05hbWU6IGZ1bmN0
aW9uKG5vZGVzLCByb290LCBjbGFzc05hbWUsIGNvbWJpbmF0b3IpIHsKLSAgICAgIGlmIChub2Rl
cyAmJiBjb21iaW5hdG9yKSBub2RlcyA9IHRoaXNbY29tYmluYXRvcl0obm9kZXMpOwotICAgICAg
cmV0dXJuIFNlbGVjdG9yLmhhbmRsZXJzLmJ5Q2xhc3NOYW1lKG5vZGVzLCByb290LCBjbGFzc05h
bWUpOwotICAgIH0sCi0KLSAgICBieUNsYXNzTmFtZTogZnVuY3Rpb24obm9kZXMsIHJvb3QsIGNs
YXNzTmFtZSkgewotICAgICAgaWYgKCFub2Rlcykgbm9kZXMgPSBTZWxlY3Rvci5oYW5kbGVycy5k
ZXNjZW5kYW50KFtyb290XSk7Ci0gICAgICB2YXIgbmVlZGxlID0gJyAnICsgY2xhc3NOYW1lICsg
JyAnOwotICAgICAgZm9yICh2YXIgaSA9IDAsIHJlc3VsdHMgPSBbXSwgbm9kZSwgbm9kZUNsYXNz
TmFtZTsgbm9kZSA9IG5vZGVzW2ldOyBpKyspIHsKLSAgICAgICAgbm9kZUNsYXNzTmFtZSA9IG5v
ZGUuY2xhc3NOYW1lOwotICAgICAgICBpZiAobm9kZUNsYXNzTmFtZS5sZW5ndGggPT0gMCkgY29u
dGludWU7Ci0gICAgICAgIGlmIChub2RlQ2xhc3NOYW1lID09IGNsYXNzTmFtZSB8fCAoJyAnICsg
bm9kZUNsYXNzTmFtZSArICcgJykuaW5jbHVkZShuZWVkbGUpKQotICAgICAgICAgIHJlc3VsdHMu
cHVzaChub2RlKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiByZXN1bHRzOwotICAgIH0sCi0KLSAg
ICBhdHRyUHJlc2VuY2U6IGZ1bmN0aW9uKG5vZGVzLCByb290LCBhdHRyLCBjb21iaW5hdG9yKSB7
Ci0gICAgICBpZiAoIW5vZGVzKSBub2RlcyA9IHJvb3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioi
KTsKLSAgICAgIGlmIChub2RlcyAmJiBjb21iaW5hdG9yKSBub2RlcyA9IHRoaXNbY29tYmluYXRv
cl0obm9kZXMpOwotICAgICAgdmFyIHJlc3VsdHMgPSBbXTsKLSAgICAgIGZvciAodmFyIGkgPSAw
LCBub2RlOyBub2RlID0gbm9kZXNbaV07IGkrKykKLSAgICAgICAgaWYgKEVsZW1lbnQuaGFzQXR0
cmlidXRlKG5vZGUsIGF0dHIpKSByZXN1bHRzLnB1c2gobm9kZSk7Ci0gICAgICByZXR1cm4gcmVz
dWx0czsKLSAgICB9LAotCi0gICAgYXR0cjogZnVuY3Rpb24obm9kZXMsIHJvb3QsIGF0dHIsIHZh
bHVlLCBvcGVyYXRvciwgY29tYmluYXRvcikgewotICAgICAgaWYgKCFub2Rlcykgbm9kZXMgPSBy
b290LmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik7Ci0gICAgICBpZiAobm9kZXMgJiYgY29tYmlu
YXRvcikgbm9kZXMgPSB0aGlzW2NvbWJpbmF0b3JdKG5vZGVzKTsKLSAgICAgIHZhciBoYW5kbGVy
ID0gU2VsZWN0b3Iub3BlcmF0b3JzW29wZXJhdG9yXSwgcmVzdWx0cyA9IFtdOwotICAgICAgZm9y
ICh2YXIgaSA9IDAsIG5vZGU7IG5vZGUgPSBub2Rlc1tpXTsgaSsrKSB7Ci0gICAgICAgIHZhciBu
b2RlVmFsdWUgPSBFbGVtZW50LnJlYWRBdHRyaWJ1dGUobm9kZSwgYXR0cik7Ci0gICAgICAgIGlm
IChub2RlVmFsdWUgPT09IG51bGwpIGNvbnRpbnVlOwotICAgICAgICBpZiAoaGFuZGxlcihub2Rl
VmFsdWUsIHZhbHVlKSkgcmVzdWx0cy5wdXNoKG5vZGUpOwotICAgICAgfQotICAgICAgcmV0dXJu
IHJlc3VsdHM7Ci0gICAgfSwKLQotICAgIHBzZXVkbzogZnVuY3Rpb24obm9kZXMsIG5hbWUsIHZh
bHVlLCByb290LCBjb21iaW5hdG9yKSB7Ci0gICAgICBpZiAobm9kZXMgJiYgY29tYmluYXRvcikg
bm9kZXMgPSB0aGlzW2NvbWJpbmF0b3JdKG5vZGVzKTsKLSAgICAgIGlmICghbm9kZXMpIG5vZGVz
ID0gcm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpOwotICAgICAgcmV0dXJuIFNlbGVjdG9y
LnBzZXVkb3NbbmFtZV0obm9kZXMsIHZhbHVlLCByb290KTsKLSAgICB9Ci0gIH0sCi0KLSAgcHNl
dWRvczogewotICAgICdmaXJzdC1jaGlsZCc6IGZ1bmN0aW9uKG5vZGVzLCB2YWx1ZSwgcm9vdCkg
ewotICAgICAgZm9yICh2YXIgaSA9IDAsIHJlc3VsdHMgPSBbXSwgbm9kZTsgbm9kZSA9IG5vZGVz
W2ldOyBpKyspIHsKLSAgICAgICAgaWYgKFNlbGVjdG9yLmhhbmRsZXJzLnByZXZpb3VzRWxlbWVu
dFNpYmxpbmcobm9kZSkpIGNvbnRpbnVlOwotICAgICAgICAgIHJlc3VsdHMucHVzaChub2RlKTsK
LSAgICAgIH0KLSAgICAgIHJldHVybiByZXN1bHRzOwotICAgIH0sCi0gICAgJ2xhc3QtY2hpbGQn
OiBmdW5jdGlvbihub2RlcywgdmFsdWUsIHJvb3QpIHsKLSAgICAgIGZvciAodmFyIGkgPSAwLCBy
ZXN1bHRzID0gW10sIG5vZGU7IG5vZGUgPSBub2Rlc1tpXTsgaSsrKSB7Ci0gICAgICAgIGlmIChT
ZWxlY3Rvci5oYW5kbGVycy5uZXh0RWxlbWVudFNpYmxpbmcobm9kZSkpIGNvbnRpbnVlOwotICAg
ICAgICAgIHJlc3VsdHMucHVzaChub2RlKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiByZXN1bHRz
OwotICAgIH0sCi0gICAgJ29ubHktY2hpbGQnOiBmdW5jdGlvbihub2RlcywgdmFsdWUsIHJvb3Qp
IHsKLSAgICAgIHZhciBoID0gU2VsZWN0b3IuaGFuZGxlcnM7Ci0gICAgICBmb3IgKHZhciBpID0g
MCwgcmVzdWx0cyA9IFtdLCBub2RlOyBub2RlID0gbm9kZXNbaV07IGkrKykKLSAgICAgICAgaWYg
KCFoLnByZXZpb3VzRWxlbWVudFNpYmxpbmcobm9kZSkgJiYgIWgubmV4dEVsZW1lbnRTaWJsaW5n
KG5vZGUpKQotICAgICAgICAgIHJlc3VsdHMucHVzaChub2RlKTsKLSAgICAgIHJldHVybiByZXN1
bHRzOwotICAgIH0sCi0gICAgJ250aC1jaGlsZCc6ICAgICAgICBmdW5jdGlvbihub2RlcywgZm9y
bXVsYSwgcm9vdCkgewotICAgICAgcmV0dXJuIFNlbGVjdG9yLnBzZXVkb3MubnRoKG5vZGVzLCBm
b3JtdWxhLCByb290KTsKLSAgICB9LAotICAgICdudGgtbGFzdC1jaGlsZCc6ICAgZnVuY3Rpb24o
bm9kZXMsIGZvcm11bGEsIHJvb3QpIHsKLSAgICAgIHJldHVybiBTZWxlY3Rvci5wc2V1ZG9zLm50
aChub2RlcywgZm9ybXVsYSwgcm9vdCwgdHJ1ZSk7Ci0gICAgfSwKLSAgICAnbnRoLW9mLXR5cGUn
OiAgICAgIGZ1bmN0aW9uKG5vZGVzLCBmb3JtdWxhLCByb290KSB7Ci0gICAgICByZXR1cm4gU2Vs
ZWN0b3IucHNldWRvcy5udGgobm9kZXMsIGZvcm11bGEsIHJvb3QsIGZhbHNlLCB0cnVlKTsKLSAg
ICB9LAotICAgICdudGgtbGFzdC1vZi10eXBlJzogZnVuY3Rpb24obm9kZXMsIGZvcm11bGEsIHJv
b3QpIHsKLSAgICAgIHJldHVybiBTZWxlY3Rvci5wc2V1ZG9zLm50aChub2RlcywgZm9ybXVsYSwg
cm9vdCwgdHJ1ZSwgdHJ1ZSk7Ci0gICAgfSwKLSAgICAnZmlyc3Qtb2YtdHlwZSc6ICAgIGZ1bmN0
aW9uKG5vZGVzLCBmb3JtdWxhLCByb290KSB7Ci0gICAgICByZXR1cm4gU2VsZWN0b3IucHNldWRv
cy5udGgobm9kZXMsICIxIiwgcm9vdCwgZmFsc2UsIHRydWUpOwotICAgIH0sCi0gICAgJ2xhc3Qt
b2YtdHlwZSc6ICAgICBmdW5jdGlvbihub2RlcywgZm9ybXVsYSwgcm9vdCkgewotICAgICAgcmV0
dXJuIFNlbGVjdG9yLnBzZXVkb3MubnRoKG5vZGVzLCAiMSIsIHJvb3QsIHRydWUsIHRydWUpOwot
ICAgIH0sCi0gICAgJ29ubHktb2YtdHlwZSc6ICAgICBmdW5jdGlvbihub2RlcywgZm9ybXVsYSwg
cm9vdCkgewotICAgICAgdmFyIHAgPSBTZWxlY3Rvci5wc2V1ZG9zOwotICAgICAgcmV0dXJuIHBb
J2xhc3Qtb2YtdHlwZSddKHBbJ2ZpcnN0LW9mLXR5cGUnXShub2RlcywgZm9ybXVsYSwgcm9vdCks
IGZvcm11bGEsIHJvb3QpOwotICAgIH0sCi0KLSAgICAvLyBoYW5kbGVzIHRoZSBhbitiIGxvZ2lj
Ci0gICAgZ2V0SW5kaWNlczogZnVuY3Rpb24oYSwgYiwgdG90YWwpIHsKLSAgICAgIGlmIChhID09
IDApIHJldHVybiBiID4gMCA/IFtiXSA6IFtdOwotICAgICAgcmV0dXJuICRSKDEsIHRvdGFsKS5p
bmplY3QoW10sIGZ1bmN0aW9uKG1lbW8sIGkpIHsKLSAgICAgICAgaWYgKDAgPT0gKGkgLSBiKSAl
IGEgJiYgKGkgLSBiKSAvIGEgPj0gMCkgbWVtby5wdXNoKGkpOwotICAgICAgICByZXR1cm4gbWVt
bzsKLSAgICAgIH0pOwotICAgIH0sCi0KLSAgICAvLyBoYW5kbGVzIG50aCgtbGFzdCktY2hpbGQs
IG50aCgtbGFzdCktb2YtdHlwZSwgYW5kIChmaXJzdHxsYXN0KS1vZi10eXBlCi0gICAgbnRoOiBm
dW5jdGlvbihub2RlcywgZm9ybXVsYSwgcm9vdCwgcmV2ZXJzZSwgb2ZUeXBlKSB7Ci0gICAgICBp
ZiAobm9kZXMubGVuZ3RoID09IDApIHJldHVybiBbXTsKLSAgICAgIGlmIChmb3JtdWxhID09ICdl
dmVuJykgZm9ybXVsYSA9ICcybiswJzsKLSAgICAgIGlmIChmb3JtdWxhID09ICdvZGQnKSAgZm9y
bXVsYSA9ICcybisxJzsKLSAgICAgIHZhciBoID0gU2VsZWN0b3IuaGFuZGxlcnMsIHJlc3VsdHMg
PSBbXSwgaW5kZXhlZCA9IFtdLCBtOwotICAgICAgaC5tYXJrKG5vZGVzKTsKLSAgICAgIGZvciAo
dmFyIGkgPSAwLCBub2RlOyBub2RlID0gbm9kZXNbaV07IGkrKykgewotICAgICAgICBpZiAoIW5v
ZGUucGFyZW50Tm9kZS5fY291bnRlZEJ5UHJvdG90eXBlKSB7Ci0gICAgICAgICAgaC5pbmRleChu
b2RlLnBhcmVudE5vZGUsIHJldmVyc2UsIG9mVHlwZSk7Ci0gICAgICAgICAgaW5kZXhlZC5wdXNo
KG5vZGUucGFyZW50Tm9kZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmIChmb3JtdWxh
Lm1hdGNoKC9eXGQrJC8pKSB7IC8vIGp1c3QgYSBudW1iZXIKLSAgICAgICAgZm9ybXVsYSA9IE51
bWJlcihmb3JtdWxhKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDAsIG5vZGU7IG5vZGUgPSBub2Rl
c1tpXTsgaSsrKQotICAgICAgICAgIGlmIChub2RlLm5vZGVJbmRleCA9PSBmb3JtdWxhKSByZXN1
bHRzLnB1c2gobm9kZSk7Ci0gICAgICB9IGVsc2UgaWYgKG0gPSBmb3JtdWxhLm1hdGNoKC9eKC0/
XGQqKT9uKChbKy1dKShcZCspKT8vKSkgeyAvLyBhbitiCi0gICAgICAgIGlmIChtWzFdID09ICIt
IikgbVsxXSA9IC0xOwotICAgICAgICB2YXIgYSA9IG1bMV0gPyBOdW1iZXIobVsxXSkgOiAxOwot
ICAgICAgICB2YXIgYiA9IG1bMl0gPyBOdW1iZXIobVsyXSkgOiAwOwotICAgICAgICB2YXIgaW5k
aWNlcyA9IFNlbGVjdG9yLnBzZXVkb3MuZ2V0SW5kaWNlcyhhLCBiLCBub2Rlcy5sZW5ndGgpOwot
ICAgICAgICBmb3IgKHZhciBpID0gMCwgbm9kZSwgbCA9IGluZGljZXMubGVuZ3RoOyBub2RlID0g
bm9kZXNbaV07IGkrKykgewotICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbDsgaisrKQot
ICAgICAgICAgICAgaWYgKG5vZGUubm9kZUluZGV4ID09IGluZGljZXNbal0pIHJlc3VsdHMucHVz
aChub2RlKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgaC51bm1hcmsobm9kZXMpOwotICAg
ICAgaC51bm1hcmsoaW5kZXhlZCk7Ci0gICAgICByZXR1cm4gcmVzdWx0czsKLSAgICB9LAotCi0g
ICAgJ2VtcHR5JzogZnVuY3Rpb24obm9kZXMsIHZhbHVlLCByb290KSB7Ci0gICAgICBmb3IgKHZh
ciBpID0gMCwgcmVzdWx0cyA9IFtdLCBub2RlOyBub2RlID0gbm9kZXNbaV07IGkrKykgewotICAg
ICAgICAvLyBJRSB0cmVhdHMgY29tbWVudHMgYXMgZWxlbWVudCBub2RlcwotICAgICAgICBpZiAo
bm9kZS50YWdOYW1lID09ICchJyB8fCAobm9kZS5maXJzdENoaWxkICYmICFub2RlLmlubmVySFRN
TC5tYXRjaCgvXlxzKiQvKSkpIGNvbnRpbnVlOwotICAgICAgICByZXN1bHRzLnB1c2gobm9kZSk7
Ci0gICAgICB9Ci0gICAgICByZXR1cm4gcmVzdWx0czsKLSAgICB9LAotCi0gICAgJ25vdCc6IGZ1
bmN0aW9uKG5vZGVzLCBzZWxlY3Rvciwgcm9vdCkgewotICAgICAgdmFyIGggPSBTZWxlY3Rvci5o
YW5kbGVycywgc2VsZWN0b3JUeXBlLCBtOwotICAgICAgdmFyIGV4Y2x1c2lvbnMgPSBuZXcgU2Vs
ZWN0b3Ioc2VsZWN0b3IpLmZpbmRFbGVtZW50cyhyb290KTsKLSAgICAgIGgubWFyayhleGNsdXNp
b25zKTsKLSAgICAgIGZvciAodmFyIGkgPSAwLCByZXN1bHRzID0gW10sIG5vZGU7IG5vZGUgPSBu
b2Rlc1tpXTsgaSsrKQotICAgICAgICBpZiAoIW5vZGUuX2NvdW50ZWRCeVByb3RvdHlwZSkgcmVz
dWx0cy5wdXNoKG5vZGUpOwotICAgICAgaC51bm1hcmsoZXhjbHVzaW9ucyk7Ci0gICAgICByZXR1
cm4gcmVzdWx0czsKLSAgICB9LAotCi0gICAgJ2VuYWJsZWQnOiBmdW5jdGlvbihub2RlcywgdmFs
dWUsIHJvb3QpIHsKLSAgICAgIGZvciAodmFyIGkgPSAwLCByZXN1bHRzID0gW10sIG5vZGU7IG5v
ZGUgPSBub2Rlc1tpXTsgaSsrKQotICAgICAgICBpZiAoIW5vZGUuZGlzYWJsZWQpIHJlc3VsdHMu
cHVzaChub2RlKTsKLSAgICAgIHJldHVybiByZXN1bHRzOwotICAgIH0sCi0KLSAgICAnZGlzYWJs
ZWQnOiBmdW5jdGlvbihub2RlcywgdmFsdWUsIHJvb3QpIHsKLSAgICAgIGZvciAodmFyIGkgPSAw
LCByZXN1bHRzID0gW10sIG5vZGU7IG5vZGUgPSBub2Rlc1tpXTsgaSsrKQotICAgICAgICBpZiAo
bm9kZS5kaXNhYmxlZCkgcmVzdWx0cy5wdXNoKG5vZGUpOwotICAgICAgcmV0dXJuIHJlc3VsdHM7
Ci0gICAgfSwKLQotICAgICdjaGVja2VkJzogZnVuY3Rpb24obm9kZXMsIHZhbHVlLCByb290KSB7
Ci0gICAgICBmb3IgKHZhciBpID0gMCwgcmVzdWx0cyA9IFtdLCBub2RlOyBub2RlID0gbm9kZXNb
aV07IGkrKykKLSAgICAgICAgaWYgKG5vZGUuY2hlY2tlZCkgcmVzdWx0cy5wdXNoKG5vZGUpOwot
ICAgICAgcmV0dXJuIHJlc3VsdHM7Ci0gICAgfQotICB9LAotCi0gIG9wZXJhdG9yczogewotICAg
ICc9JzogIGZ1bmN0aW9uKG52LCB2KSB7IHJldHVybiBudiA9PSB2OyB9LAotICAgICchPSc6IGZ1
bmN0aW9uKG52LCB2KSB7IHJldHVybiBudiAhPSB2OyB9LAotICAgICdePSc6IGZ1bmN0aW9uKG52
LCB2KSB7IHJldHVybiBudi5zdGFydHNXaXRoKHYpOyB9LAotICAgICckPSc6IGZ1bmN0aW9uKG52
LCB2KSB7IHJldHVybiBudi5lbmRzV2l0aCh2KTsgfSwKLSAgICAnKj0nOiBmdW5jdGlvbihudiwg
dikgeyByZXR1cm4gbnYuaW5jbHVkZSh2KTsgfSwKLSAgICAnfj0nOiBmdW5jdGlvbihudiwgdikg
eyByZXR1cm4gKCcgJyArIG52ICsgJyAnKS5pbmNsdWRlKCcgJyArIHYgKyAnICcpOyB9LAotICAg
ICd8PSc6IGZ1bmN0aW9uKG52LCB2KSB7IHJldHVybiAoJy0nICsgbnYudG9VcHBlckNhc2UoKSAr
ICctJykuaW5jbHVkZSgnLScgKyB2LnRvVXBwZXJDYXNlKCkgKyAnLScpOyB9Ci0gIH0sCi0KLSAg
c3BsaXQ6IGZ1bmN0aW9uKGV4cHJlc3Npb24pIHsKLSAgICB2YXIgZXhwcmVzc2lvbnMgPSBbXTsK
LSAgICBleHByZXNzaW9uLnNjYW4oLygoW1x3Izoufj4rKClccy1dK3xcKnxcWy4qP1xdKSspXHMq
KCx8JCkvLCBmdW5jdGlvbihtKSB7Ci0gICAgICBleHByZXNzaW9ucy5wdXNoKG1bMV0uc3RyaXAo
KSk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIGV4cHJlc3Npb25zOwotICB9LAotCi0gIG1hdGNoRWxl
bWVudHM6IGZ1bmN0aW9uKGVsZW1lbnRzLCBleHByZXNzaW9uKSB7Ci0gICAgdmFyIG1hdGNoZXMg
PSAkJChleHByZXNzaW9uKSwgaCA9IFNlbGVjdG9yLmhhbmRsZXJzOwotICAgIGgubWFyayhtYXRj
aGVzKTsKLSAgICBmb3IgKHZhciBpID0gMCwgcmVzdWx0cyA9IFtdLCBlbGVtZW50OyBlbGVtZW50
ID0gZWxlbWVudHNbaV07IGkrKykKLSAgICAgIGlmIChlbGVtZW50Ll9jb3VudGVkQnlQcm90b3R5
cGUpIHJlc3VsdHMucHVzaChlbGVtZW50KTsKLSAgICBoLnVubWFyayhtYXRjaGVzKTsKLSAgICBy
ZXR1cm4gcmVzdWx0czsKLSAgfSwKLQotICBmaW5kRWxlbWVudDogZnVuY3Rpb24oZWxlbWVudHMs
IGV4cHJlc3Npb24sIGluZGV4KSB7Ci0gICAgaWYgKE9iamVjdC5pc051bWJlcihleHByZXNzaW9u
KSkgewotICAgICAgaW5kZXggPSBleHByZXNzaW9uOyBleHByZXNzaW9uID0gZmFsc2U7Ci0gICAg
fQotICAgIHJldHVybiBTZWxlY3Rvci5tYXRjaEVsZW1lbnRzKGVsZW1lbnRzLCBleHByZXNzaW9u
IHx8ICcqJylbaW5kZXggfHwgMF07Ci0gIH0sCi0KLSAgZmluZENoaWxkRWxlbWVudHM6IGZ1bmN0
aW9uKGVsZW1lbnQsIGV4cHJlc3Npb25zKSB7Ci0gICAgZXhwcmVzc2lvbnMgPSBTZWxlY3Rvci5z
cGxpdChleHByZXNzaW9ucy5qb2luKCcsJykpOwotICAgIHZhciByZXN1bHRzID0gW10sIGggPSBT
ZWxlY3Rvci5oYW5kbGVyczsKLSAgICBmb3IgKHZhciBpID0gMCwgbCA9IGV4cHJlc3Npb25zLmxl
bmd0aCwgc2VsZWN0b3I7IGkgPCBsOyBpKyspIHsKLSAgICAgIHNlbGVjdG9yID0gbmV3IFNlbGVj
dG9yKGV4cHJlc3Npb25zW2ldLnN0cmlwKCkpOwotICAgICAgaC5jb25jYXQocmVzdWx0cywgc2Vs
ZWN0b3IuZmluZEVsZW1lbnRzKGVsZW1lbnQpKTsKLSAgICB9Ci0gICAgcmV0dXJuIChsID4gMSkg
PyBoLnVuaXF1ZShyZXN1bHRzKSA6IHJlc3VsdHM7Ci0gIH0KLX0pOwotCi1pZiAoUHJvdG90eXBl
LkJyb3dzZXIuSUUpIHsKLSAgT2JqZWN0LmV4dGVuZChTZWxlY3Rvci5oYW5kbGVycywgewotICAg
IC8vIElFIHJldHVybnMgY29tbWVudCBub2RlcyBvbiBnZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIp
LgotICAgIC8vIEZpbHRlciB0aGVtIG91dC4KLSAgICBjb25jYXQ6IGZ1bmN0aW9uKGEsIGIpIHsK
LSAgICAgIGZvciAodmFyIGkgPSAwLCBub2RlOyBub2RlID0gYltpXTsgaSsrKQotICAgICAgICBp
ZiAobm9kZS50YWdOYW1lICE9PSAiISIpIGEucHVzaChub2RlKTsKLSAgICAgIHJldHVybiBhOwot
ICAgIH0sCi0KLSAgICAvLyBJRSBpbXByb3Blcmx5IHNlcmlhbGl6ZXMgX2NvdW50ZWRCeVByb3Rv
dHlwZSBpbiAoaW5uZXJ8b3V0ZXIpSFRNTC4KLSAgICB1bm1hcms6IGZ1bmN0aW9uKG5vZGVzKSB7
Ci0gICAgICBmb3IgKHZhciBpID0gMCwgbm9kZTsgbm9kZSA9IG5vZGVzW2ldOyBpKyspCi0gICAg
ICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKCdfY291bnRlZEJ5UHJvdG90eXBlJyk7Ci0gICAgICBy
ZXR1cm4gbm9kZXM7Ci0gICAgfQotICB9KTsKLX0KLQotZnVuY3Rpb24gJCQoKSB7Ci0gIHJldHVy
biBTZWxlY3Rvci5maW5kQ2hpbGRFbGVtZW50cyhkb2N1bWVudCwgJEEoYXJndW1lbnRzKSk7Ci19
Ci12YXIgRm9ybSA9IHsKLSAgcmVzZXQ6IGZ1bmN0aW9uKGZvcm0pIHsKLSAgICAkKGZvcm0pLnJl
c2V0KCk7Ci0gICAgcmV0dXJuIGZvcm07Ci0gIH0sCi0KLSAgc2VyaWFsaXplRWxlbWVudHM6IGZ1
bmN0aW9uKGVsZW1lbnRzLCBvcHRpb25zKSB7Ci0gICAgaWYgKHR5cGVvZiBvcHRpb25zICE9ICdv
YmplY3QnKSBvcHRpb25zID0geyBoYXNoOiAhIW9wdGlvbnMgfTsKLSAgICBlbHNlIGlmIChPYmpl
Y3QuaXNVbmRlZmluZWQob3B0aW9ucy5oYXNoKSkgb3B0aW9ucy5oYXNoID0gdHJ1ZTsKLSAgICB2
YXIga2V5LCB2YWx1ZSwgc3VibWl0dGVkID0gZmFsc2UsIHN1Ym1pdCA9IG9wdGlvbnMuc3VibWl0
OwotCi0gICAgdmFyIGRhdGEgPSBlbGVtZW50cy5pbmplY3QoeyB9LCBmdW5jdGlvbihyZXN1bHQs
IGVsZW1lbnQpIHsKLSAgICAgIGlmICghZWxlbWVudC5kaXNhYmxlZCAmJiBlbGVtZW50Lm5hbWUp
IHsKLSAgICAgICAga2V5ID0gZWxlbWVudC5uYW1lOyB2YWx1ZSA9ICQoZWxlbWVudCkuZ2V0VmFs
dWUoKTsKLSAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgKGVsZW1lbnQudHlwZSAhPSAnc3Vi
bWl0JyB8fCAoIXN1Ym1pdHRlZCAmJgotICAgICAgICAgICAgc3VibWl0ICE9PSBmYWxzZSAmJiAo
IXN1Ym1pdCB8fCBrZXkgPT0gc3VibWl0KSAmJiAoc3VibWl0dGVkID0gdHJ1ZSkpKSkgewotICAg
ICAgICAgIGlmIChrZXkgaW4gcmVzdWx0KSB7Ci0gICAgICAgICAgICAvLyBhIGtleSBpcyBhbHJl
YWR5IHByZXNlbnQ7IGNvbnN0cnVjdCBhbiBhcnJheSBvZiB2YWx1ZXMKLSAgICAgICAgICAgIGlm
ICghT2JqZWN0LmlzQXJyYXkocmVzdWx0W2tleV0pKSByZXN1bHRba2V5XSA9IFtyZXN1bHRba2V5
XV07Ci0gICAgICAgICAgICByZXN1bHRba2V5XS5wdXNoKHZhbHVlKTsKLSAgICAgICAgICB9Ci0g
ICAgICAgICAgZWxzZSByZXN1bHRba2V5XSA9IHZhbHVlOwotICAgICAgICB9Ci0gICAgICB9Ci0g
ICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0pOwotCi0gICAgcmV0dXJuIG9wdGlvbnMuaGFzaCA/
IGRhdGEgOiBPYmplY3QudG9RdWVyeVN0cmluZyhkYXRhKTsKLSAgfQotfTsKLQotRm9ybS5NZXRo
b2RzID0gewotICBzZXJpYWxpemU6IGZ1bmN0aW9uKGZvcm0sIG9wdGlvbnMpIHsKLSAgICByZXR1
cm4gRm9ybS5zZXJpYWxpemVFbGVtZW50cyhGb3JtLmdldEVsZW1lbnRzKGZvcm0pLCBvcHRpb25z
KTsKLSAgfSwKLQotICBnZXRFbGVtZW50czogZnVuY3Rpb24oZm9ybSkgewotICAgIHJldHVybiAk
QSgkKGZvcm0pLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJykpLmluamVjdChbXSwKLSAgICAgIGZ1
bmN0aW9uKGVsZW1lbnRzLCBjaGlsZCkgewotICAgICAgICBpZiAoRm9ybS5FbGVtZW50LlNlcmlh
bGl6ZXJzW2NoaWxkLnRhZ05hbWUudG9Mb3dlckNhc2UoKV0pCi0gICAgICAgICAgZWxlbWVudHMu
cHVzaChFbGVtZW50LmV4dGVuZChjaGlsZCkpOwotICAgICAgICByZXR1cm4gZWxlbWVudHM7Ci0g
ICAgICB9Ci0gICAgKTsKLSAgfSwKLQotICBnZXRJbnB1dHM6IGZ1bmN0aW9uKGZvcm0sIHR5cGVO
YW1lLCBuYW1lKSB7Ci0gICAgZm9ybSA9ICQoZm9ybSk7Ci0gICAgdmFyIGlucHV0cyA9IGZvcm0u
Z2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0Jyk7Ci0KLSAgICBpZiAoIXR5cGVOYW1lICYmICFu
YW1lKSByZXR1cm4gJEEoaW5wdXRzKS5tYXAoRWxlbWVudC5leHRlbmQpOwotCi0gICAgZm9yICh2
YXIgaSA9IDAsIG1hdGNoaW5nSW5wdXRzID0gW10sIGxlbmd0aCA9IGlucHV0cy5sZW5ndGg7IGkg
PCBsZW5ndGg7IGkrKykgewotICAgICAgdmFyIGlucHV0ID0gaW5wdXRzW2ldOwotICAgICAgaWYg
KCh0eXBlTmFtZSAmJiBpbnB1dC50eXBlICE9IHR5cGVOYW1lKSB8fCAobmFtZSAmJiBpbnB1dC5u
YW1lICE9IG5hbWUpKQotICAgICAgICBjb250aW51ZTsKLSAgICAgIG1hdGNoaW5nSW5wdXRzLnB1
c2goRWxlbWVudC5leHRlbmQoaW5wdXQpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbWF0Y2hpbmdJ
bnB1dHM7Ci0gIH0sCi0KLSAgZGlzYWJsZTogZnVuY3Rpb24oZm9ybSkgewotICAgIGZvcm0gPSAk
KGZvcm0pOwotICAgIEZvcm0uZ2V0RWxlbWVudHMoZm9ybSkuaW52b2tlKCdkaXNhYmxlJyk7Ci0g
ICAgcmV0dXJuIGZvcm07Ci0gIH0sCi0KLSAgZW5hYmxlOiBmdW5jdGlvbihmb3JtKSB7Ci0gICAg
Zm9ybSA9ICQoZm9ybSk7Ci0gICAgRm9ybS5nZXRFbGVtZW50cyhmb3JtKS5pbnZva2UoJ2VuYWJs
ZScpOwotICAgIHJldHVybiBmb3JtOwotICB9LAotCi0gIGZpbmRGaXJzdEVsZW1lbnQ6IGZ1bmN0
aW9uKGZvcm0pIHsKLSAgICB2YXIgZWxlbWVudHMgPSAkKGZvcm0pLmdldEVsZW1lbnRzKCkuZmlu
ZEFsbChmdW5jdGlvbihlbGVtZW50KSB7Ci0gICAgICByZXR1cm4gJ2hpZGRlbicgIT0gZWxlbWVu
dC50eXBlICYmICFlbGVtZW50LmRpc2FibGVkOwotICAgIH0pOwotICAgIHZhciBmaXJzdEJ5SW5k
ZXggPSBlbGVtZW50cy5maW5kQWxsKGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAgICAgIHJldHVybiBl
bGVtZW50Lmhhc0F0dHJpYnV0ZSgndGFiSW5kZXgnKSAmJiBlbGVtZW50LnRhYkluZGV4ID49IDA7
Ci0gICAgfSkuc29ydEJ5KGZ1bmN0aW9uKGVsZW1lbnQpIHsgcmV0dXJuIGVsZW1lbnQudGFiSW5k
ZXggfSkuZmlyc3QoKTsKLQotICAgIHJldHVybiBmaXJzdEJ5SW5kZXggPyBmaXJzdEJ5SW5kZXgg
OiBlbGVtZW50cy5maW5kKGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAgICAgIHJldHVybiBbJ2lucHV0
JywgJ3NlbGVjdCcsICd0ZXh0YXJlYSddLmluY2x1ZGUoZWxlbWVudC50YWdOYW1lLnRvTG93ZXJD
YXNlKCkpOwotICAgIH0pOwotICB9LAotCi0gIGZvY3VzRmlyc3RFbGVtZW50OiBmdW5jdGlvbihm
b3JtKSB7Ci0gICAgZm9ybSA9ICQoZm9ybSk7Ci0gICAgZm9ybS5maW5kRmlyc3RFbGVtZW50KCku
YWN0aXZhdGUoKTsKLSAgICByZXR1cm4gZm9ybTsKLSAgfSwKLQotICByZXF1ZXN0OiBmdW5jdGlv
bihmb3JtLCBvcHRpb25zKSB7Ci0gICAgZm9ybSA9ICQoZm9ybSksIG9wdGlvbnMgPSBPYmplY3Qu
Y2xvbmUob3B0aW9ucyB8fCB7IH0pOwotCi0gICAgdmFyIHBhcmFtcyA9IG9wdGlvbnMucGFyYW1l
dGVycywgYWN0aW9uID0gZm9ybS5yZWFkQXR0cmlidXRlKCdhY3Rpb24nKSB8fCAnJzsKLSAgICBp
ZiAoYWN0aW9uLmJsYW5rKCkpIGFjdGlvbiA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmOwotICAgIG9w
dGlvbnMucGFyYW1ldGVycyA9IGZvcm0uc2VyaWFsaXplKHRydWUpOwotCi0gICAgaWYgKHBhcmFt
cykgewotICAgICAgaWYgKE9iamVjdC5pc1N0cmluZyhwYXJhbXMpKSBwYXJhbXMgPSBwYXJhbXMu
dG9RdWVyeVBhcmFtcygpOwotICAgICAgT2JqZWN0LmV4dGVuZChvcHRpb25zLnBhcmFtZXRlcnMs
IHBhcmFtcyk7Ci0gICAgfQotCi0gICAgaWYgKGZvcm0uaGFzQXR0cmlidXRlKCdtZXRob2QnKSAm
JiAhb3B0aW9ucy5tZXRob2QpCi0gICAgICBvcHRpb25zLm1ldGhvZCA9IGZvcm0ubWV0aG9kOwot
Ci0gICAgcmV0dXJuIG5ldyBBamF4LlJlcXVlc3QoYWN0aW9uLCBvcHRpb25zKTsKLSAgfQotfTsK
LQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLUZvcm0uRWxlbWVudCA9IHsKLSAgZm9jdXM6IGZ1
bmN0aW9uKGVsZW1lbnQpIHsKLSAgICAkKGVsZW1lbnQpLmZvY3VzKCk7Ci0gICAgcmV0dXJuIGVs
ZW1lbnQ7Ci0gIH0sCi0KLSAgc2VsZWN0OiBmdW5jdGlvbihlbGVtZW50KSB7Ci0gICAgJChlbGVt
ZW50KS5zZWxlY3QoKTsKLSAgICByZXR1cm4gZWxlbWVudDsKLSAgfQotfTsKLQotRm9ybS5FbGVt
ZW50Lk1ldGhvZHMgPSB7Ci0gIHNlcmlhbGl6ZTogZnVuY3Rpb24oZWxlbWVudCkgewotICAgIGVs
ZW1lbnQgPSAkKGVsZW1lbnQpOwotICAgIGlmICghZWxlbWVudC5kaXNhYmxlZCAmJiBlbGVtZW50
Lm5hbWUpIHsKLSAgICAgIHZhciB2YWx1ZSA9IGVsZW1lbnQuZ2V0VmFsdWUoKTsKLSAgICAgIGlm
ICh2YWx1ZSAhPSB1bmRlZmluZWQpIHsKLSAgICAgICAgdmFyIHBhaXIgPSB7IH07Ci0gICAgICAg
IHBhaXJbZWxlbWVudC5uYW1lXSA9IHZhbHVlOwotICAgICAgICByZXR1cm4gT2JqZWN0LnRvUXVl
cnlTdHJpbmcocGFpcik7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiAnJzsKLSAgfSwKLQot
ICBnZXRWYWx1ZTogZnVuY3Rpb24oZWxlbWVudCkgewotICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQp
OwotICAgIHZhciBtZXRob2QgPSBlbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKTsKLSAgICBy
ZXR1cm4gRm9ybS5FbGVtZW50LlNlcmlhbGl6ZXJzW21ldGhvZF0oZWxlbWVudCk7Ci0gIH0sCi0K
LSAgc2V0VmFsdWU6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlKSB7Ci0gICAgZWxlbWVudCA9ICQo
ZWxlbWVudCk7Ci0gICAgdmFyIG1ldGhvZCA9IGVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgp
OwotICAgIEZvcm0uRWxlbWVudC5TZXJpYWxpemVyc1ttZXRob2RdKGVsZW1lbnQsIHZhbHVlKTsK
LSAgICByZXR1cm4gZWxlbWVudDsKLSAgfSwKLQotICBjbGVhcjogZnVuY3Rpb24oZWxlbWVudCkg
ewotICAgICQoZWxlbWVudCkudmFsdWUgPSAnJzsKLSAgICByZXR1cm4gZWxlbWVudDsKLSAgfSwK
LQotICBwcmVzZW50OiBmdW5jdGlvbihlbGVtZW50KSB7Ci0gICAgcmV0dXJuICQoZWxlbWVudCku
dmFsdWUgIT0gJyc7Ci0gIH0sCi0KLSAgYWN0aXZhdGU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAg
ICBlbGVtZW50ID0gJChlbGVtZW50KTsKLSAgICB0cnkgewotICAgICAgZWxlbWVudC5mb2N1cygp
OwotICAgICAgaWYgKGVsZW1lbnQuc2VsZWN0ICYmIChlbGVtZW50LnRhZ05hbWUudG9Mb3dlckNh
c2UoKSAhPSAnaW5wdXQnIHx8Ci0gICAgICAgICAgIVsnYnV0dG9uJywgJ3Jlc2V0JywgJ3N1Ym1p
dCddLmluY2x1ZGUoZWxlbWVudC50eXBlKSkpCi0gICAgICAgIGVsZW1lbnQuc2VsZWN0KCk7Ci0g
ICAgfSBjYXRjaCAoZSkgeyB9Ci0gICAgcmV0dXJuIGVsZW1lbnQ7Ci0gIH0sCi0KLSAgZGlzYWJs
ZTogZnVuY3Rpb24oZWxlbWVudCkgewotICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwotICAgIGVs
ZW1lbnQuYmx1cigpOwotICAgIGVsZW1lbnQuZGlzYWJsZWQgPSB0cnVlOwotICAgIHJldHVybiBl
bGVtZW50OwotICB9LAotCi0gIGVuYWJsZTogZnVuY3Rpb24oZWxlbWVudCkgewotICAgIGVsZW1l
bnQgPSAkKGVsZW1lbnQpOwotICAgIGVsZW1lbnQuZGlzYWJsZWQgPSBmYWxzZTsKLSAgICByZXR1
cm4gZWxlbWVudDsKLSAgfQotfTsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXZhciBGaWVs
ZCA9IEZvcm0uRWxlbWVudDsKLXZhciAkRiA9IEZvcm0uRWxlbWVudC5NZXRob2RzLmdldFZhbHVl
OwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotRm9ybS5FbGVtZW50LlNlcmlhbGl6ZXJzID0g
ewotICBpbnB1dDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWUpIHsKLSAgICBzd2l0Y2ggKGVsZW1l
bnQudHlwZS50b0xvd2VyQ2FzZSgpKSB7Ci0gICAgICBjYXNlICdjaGVja2JveCc6Ci0gICAgICBj
YXNlICdyYWRpbyc6Ci0gICAgICAgIHJldHVybiBGb3JtLkVsZW1lbnQuU2VyaWFsaXplcnMuaW5w
dXRTZWxlY3RvcihlbGVtZW50LCB2YWx1ZSk7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1
cm4gRm9ybS5FbGVtZW50LlNlcmlhbGl6ZXJzLnRleHRhcmVhKGVsZW1lbnQsIHZhbHVlKTsKLSAg
ICB9Ci0gIH0sCi0KLSAgaW5wdXRTZWxlY3RvcjogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWUpIHsK
LSAgICBpZiAoT2JqZWN0LmlzVW5kZWZpbmVkKHZhbHVlKSkgcmV0dXJuIGVsZW1lbnQuY2hlY2tl
ZCA/IGVsZW1lbnQudmFsdWUgOiBudWxsOwotICAgIGVsc2UgZWxlbWVudC5jaGVja2VkID0gISF2
YWx1ZTsKLSAgfSwKLQotICB0ZXh0YXJlYTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWUpIHsKLSAg
ICBpZiAoT2JqZWN0LmlzVW5kZWZpbmVkKHZhbHVlKSkgcmV0dXJuIGVsZW1lbnQudmFsdWU7Ci0g
ICAgZWxzZSBlbGVtZW50LnZhbHVlID0gdmFsdWU7Ci0gIH0sCi0KLSAgc2VsZWN0OiBmdW5jdGlv
bihlbGVtZW50LCBpbmRleCkgewotICAgIGlmIChPYmplY3QuaXNVbmRlZmluZWQoaW5kZXgpKQot
ICAgICAgcmV0dXJuIHRoaXNbZWxlbWVudC50eXBlID09ICdzZWxlY3Qtb25lJyA/Ci0gICAgICAg
ICdzZWxlY3RPbmUnIDogJ3NlbGVjdE1hbnknXShlbGVtZW50KTsKLSAgICBlbHNlIHsKLSAgICAg
IHZhciBvcHQsIHZhbHVlLCBzaW5nbGUgPSAhT2JqZWN0LmlzQXJyYXkoaW5kZXgpOwotICAgICAg
Zm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGVsZW1lbnQubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKysp
IHsKLSAgICAgICAgb3B0ID0gZWxlbWVudC5vcHRpb25zW2ldOwotICAgICAgICB2YWx1ZSA9IHRo
aXMub3B0aW9uVmFsdWUob3B0KTsKLSAgICAgICAgaWYgKHNpbmdsZSkgewotICAgICAgICAgIGlm
ICh2YWx1ZSA9PSBpbmRleCkgewotICAgICAgICAgICAgb3B0LnNlbGVjdGVkID0gdHJ1ZTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBv
cHQuc2VsZWN0ZWQgPSBpbmRleC5pbmNsdWRlKHZhbHVlKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0s
Ci0KLSAgc2VsZWN0T25lOiBmdW5jdGlvbihlbGVtZW50KSB7Ci0gICAgdmFyIGluZGV4ID0gZWxl
bWVudC5zZWxlY3RlZEluZGV4OwotICAgIHJldHVybiBpbmRleCA+PSAwID8gdGhpcy5vcHRpb25W
YWx1ZShlbGVtZW50Lm9wdGlvbnNbaW5kZXhdKSA6IG51bGw7Ci0gIH0sCi0KLSAgc2VsZWN0TWFu
eTogZnVuY3Rpb24oZWxlbWVudCkgewotICAgIHZhciB2YWx1ZXMsIGxlbmd0aCA9IGVsZW1lbnQu
bGVuZ3RoOwotICAgIGlmICghbGVuZ3RoKSByZXR1cm4gbnVsbDsKLQotICAgIGZvciAodmFyIGkg
PSAwLCB2YWx1ZXMgPSBbXTsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICB2YXIgb3B0ID0gZWxl
bWVudC5vcHRpb25zW2ldOwotICAgICAgaWYgKG9wdC5zZWxlY3RlZCkgdmFsdWVzLnB1c2godGhp
cy5vcHRpb25WYWx1ZShvcHQpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHZhbHVlczsKLSAgfSwKLQot
ICBvcHRpb25WYWx1ZTogZnVuY3Rpb24ob3B0KSB7Ci0gICAgLy8gZXh0ZW5kIGVsZW1lbnQgYmVj
YXVzZSBoYXNBdHRyaWJ1dGUgbWF5IG5vdCBiZSBuYXRpdmUKLSAgICByZXR1cm4gRWxlbWVudC5l
eHRlbmQob3B0KS5oYXNBdHRyaWJ1dGUoJ3ZhbHVlJykgPyBvcHQudmFsdWUgOiBvcHQudGV4dDsK
LSAgfQotfTsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLUFic3RyYWN0LlRpbWVkT2JzZXJ2
ZXIgPSBDbGFzcy5jcmVhdGUoUGVyaW9kaWNhbEV4ZWN1dGVyLCB7Ci0gIGluaXRpYWxpemU6IGZ1
bmN0aW9uKCRzdXBlciwgZWxlbWVudCwgZnJlcXVlbmN5LCBjYWxsYmFjaykgewotICAgICRzdXBl
cihjYWxsYmFjaywgZnJlcXVlbmN5KTsKLSAgICB0aGlzLmVsZW1lbnQgICA9ICQoZWxlbWVudCk7
Ci0gICAgdGhpcy5sYXN0VmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7Ci0gIH0sCi0KLSAgZXhlY3V0
ZTogZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpOwotICAgIGlm
IChPYmplY3QuaXNTdHJpbmcodGhpcy5sYXN0VmFsdWUpICYmIE9iamVjdC5pc1N0cmluZyh2YWx1
ZSkgPwotICAgICAgICB0aGlzLmxhc3RWYWx1ZSAhPSB2YWx1ZSA6IFN0cmluZyh0aGlzLmxhc3RW
YWx1ZSkgIT0gU3RyaW5nKHZhbHVlKSkgewotICAgICAgdGhpcy5jYWxsYmFjayh0aGlzLmVsZW1l
bnQsIHZhbHVlKTsKLSAgICAgIHRoaXMubGFzdFZhbHVlID0gdmFsdWU7Ci0gICAgfQotICB9Ci19
KTsKLQotRm9ybS5FbGVtZW50Lk9ic2VydmVyID0gQ2xhc3MuY3JlYXRlKEFic3RyYWN0LlRpbWVk
T2JzZXJ2ZXIsIHsKLSAgZ2V0VmFsdWU6IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBGb3JtLkVs
ZW1lbnQuZ2V0VmFsdWUodGhpcy5lbGVtZW50KTsKLSAgfQotfSk7Ci0KLUZvcm0uT2JzZXJ2ZXIg
PSBDbGFzcy5jcmVhdGUoQWJzdHJhY3QuVGltZWRPYnNlcnZlciwgewotICBnZXRWYWx1ZTogZnVu
Y3Rpb24oKSB7Ci0gICAgcmV0dXJuIEZvcm0uc2VyaWFsaXplKHRoaXMuZWxlbWVudCk7Ci0gIH0K
LX0pOwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotQWJzdHJhY3QuRXZlbnRPYnNlcnZlciA9
IENsYXNzLmNyZWF0ZSh7Ci0gIGluaXRpYWxpemU6IGZ1bmN0aW9uKGVsZW1lbnQsIGNhbGxiYWNr
KSB7Ci0gICAgdGhpcy5lbGVtZW50ICA9ICQoZWxlbWVudCk7Ci0gICAgdGhpcy5jYWxsYmFjayA9
IGNhbGxiYWNrOwotCi0gICAgdGhpcy5sYXN0VmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7Ci0gICAg
aWYgKHRoaXMuZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT0gJ2Zvcm0nKQotICAgICAg
dGhpcy5yZWdpc3RlckZvcm1DYWxsYmFja3MoKTsKLSAgICBlbHNlCi0gICAgICB0aGlzLnJlZ2lz
dGVyQ2FsbGJhY2sodGhpcy5lbGVtZW50KTsKLSAgfSwKLQotICBvbkVsZW1lbnRFdmVudDogZnVu
Y3Rpb24oKSB7Ci0gICAgdmFyIHZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpOwotICAgIGlmICh0aGlz
Lmxhc3RWYWx1ZSAhPSB2YWx1ZSkgewotICAgICAgdGhpcy5jYWxsYmFjayh0aGlzLmVsZW1lbnQs
IHZhbHVlKTsKLSAgICAgIHRoaXMubGFzdFZhbHVlID0gdmFsdWU7Ci0gICAgfQotICB9LAotCi0g
IHJlZ2lzdGVyRm9ybUNhbGxiYWNrczogZnVuY3Rpb24oKSB7Ci0gICAgRm9ybS5nZXRFbGVtZW50
cyh0aGlzLmVsZW1lbnQpLmVhY2godGhpcy5yZWdpc3RlckNhbGxiYWNrLCB0aGlzKTsKLSAgfSwK
LQotICByZWdpc3RlckNhbGxiYWNrOiBmdW5jdGlvbihlbGVtZW50KSB7Ci0gICAgaWYgKGVsZW1l
bnQudHlwZSkgewotICAgICAgc3dpdGNoIChlbGVtZW50LnR5cGUudG9Mb3dlckNhc2UoKSkgewot
ICAgICAgICBjYXNlICdjaGVja2JveCc6Ci0gICAgICAgIGNhc2UgJ3JhZGlvJzoKLSAgICAgICAg
ICBFdmVudC5vYnNlcnZlKGVsZW1lbnQsICdjbGljaycsIHRoaXMub25FbGVtZW50RXZlbnQuYmlu
ZCh0aGlzKSk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
RXZlbnQub2JzZXJ2ZShlbGVtZW50LCAnY2hhbmdlJywgdGhpcy5vbkVsZW1lbnRFdmVudC5iaW5k
KHRoaXMpKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0pOwotCi1G
b3JtLkVsZW1lbnQuRXZlbnRPYnNlcnZlciA9IENsYXNzLmNyZWF0ZShBYnN0cmFjdC5FdmVudE9i
c2VydmVyLCB7Ci0gIGdldFZhbHVlOiBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gRm9ybS5FbGVt
ZW50LmdldFZhbHVlKHRoaXMuZWxlbWVudCk7Ci0gIH0KLX0pOwotCi1Gb3JtLkV2ZW50T2JzZXJ2
ZXIgPSBDbGFzcy5jcmVhdGUoQWJzdHJhY3QuRXZlbnRPYnNlcnZlciwgewotICBnZXRWYWx1ZTog
ZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIEZvcm0uc2VyaWFsaXplKHRoaXMuZWxlbWVudCk7Ci0g
IH0KLX0pOwotaWYgKCF3aW5kb3cuRXZlbnQpIHZhciBFdmVudCA9IHsgfTsKLQotT2JqZWN0LmV4
dGVuZChFdmVudCwgewotICBLRVlfQkFDS1NQQUNFOiA4LAotICBLRVlfVEFCOiAgICAgICA5LAot
ICBLRVlfUkVUVVJOOiAgIDEzLAotICBLRVlfRVNDOiAgICAgIDI3LAotICBLRVlfTEVGVDogICAg
IDM3LAotICBLRVlfVVA6ICAgICAgIDM4LAotICBLRVlfUklHSFQ6ICAgIDM5LAotICBLRVlfRE9X
TjogICAgIDQwLAotICBLRVlfREVMRVRFOiAgIDQ2LAotICBLRVlfSE9NRTogICAgIDM2LAotICBL
RVlfRU5EOiAgICAgIDM1LAotICBLRVlfUEFHRVVQOiAgIDMzLAotICBLRVlfUEFHRURPV046IDM0
LAotICBLRVlfSU5TRVJUOiAgIDQ1LAotCi0gIGNhY2hlOiB7IH0sCi0KLSAgcmVsYXRlZFRhcmdl
dDogZnVuY3Rpb24oZXZlbnQpIHsKLSAgICB2YXIgZWxlbWVudDsKLSAgICBzd2l0Y2goZXZlbnQu
dHlwZSkgewotICAgICAgY2FzZSAnbW91c2VvdmVyJzogZWxlbWVudCA9IGV2ZW50LmZyb21FbGVt
ZW50OyBicmVhazsKLSAgICAgIGNhc2UgJ21vdXNlb3V0JzogIGVsZW1lbnQgPSBldmVudC50b0Vs
ZW1lbnQ7ICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiByZXR1cm4gbnVsbDsKLSAgICB9Ci0gICAg
cmV0dXJuIEVsZW1lbnQuZXh0ZW5kKGVsZW1lbnQpOwotICB9Ci19KTsKLQotRXZlbnQuTWV0aG9k
cyA9IChmdW5jdGlvbigpIHsKLSAgdmFyIGlzQnV0dG9uOwotCi0gIGlmIChQcm90b3R5cGUuQnJv
d3Nlci5JRSkgewotICAgIHZhciBidXR0b25NYXAgPSB7IDA6IDEsIDE6IDQsIDI6IDIgfTsKLSAg
ICBpc0J1dHRvbiA9IGZ1bmN0aW9uKGV2ZW50LCBjb2RlKSB7Ci0gICAgICByZXR1cm4gZXZlbnQu
YnV0dG9uID09IGJ1dHRvbk1hcFtjb2RlXTsKLSAgICB9OwotCi0gIH0gZWxzZSBpZiAoUHJvdG90
eXBlLkJyb3dzZXIuV2ViS2l0KSB7Ci0gICAgaXNCdXR0b24gPSBmdW5jdGlvbihldmVudCwgY29k
ZSkgewotICAgICAgc3dpdGNoIChjb2RlKSB7Ci0gICAgICAgIGNhc2UgMDogcmV0dXJuIGV2ZW50
LndoaWNoID09IDEgJiYgIWV2ZW50Lm1ldGFLZXk7Ci0gICAgICAgIGNhc2UgMTogcmV0dXJuIGV2
ZW50LndoaWNoID09IDEgJiYgZXZlbnQubWV0YUtleTsKLSAgICAgICAgZGVmYXVsdDogcmV0dXJu
IGZhbHNlOwotICAgICAgfQotICAgIH07Ci0KLSAgfSBlbHNlIHsKLSAgICBpc0J1dHRvbiA9IGZ1
bmN0aW9uKGV2ZW50LCBjb2RlKSB7Ci0gICAgICByZXR1cm4gZXZlbnQud2hpY2ggPyAoZXZlbnQu
d2hpY2ggPT09IGNvZGUgKyAxKSA6IChldmVudC5idXR0b24gPT09IGNvZGUpOwotICAgIH07Ci0g
IH0KLQotICByZXR1cm4gewotICAgIGlzTGVmdENsaWNrOiAgIGZ1bmN0aW9uKGV2ZW50KSB7IHJl
dHVybiBpc0J1dHRvbihldmVudCwgMCkgfSwKLSAgICBpc01pZGRsZUNsaWNrOiBmdW5jdGlvbihl
dmVudCkgeyByZXR1cm4gaXNCdXR0b24oZXZlbnQsIDEpIH0sCi0gICAgaXNSaWdodENsaWNrOiAg
ZnVuY3Rpb24oZXZlbnQpIHsgcmV0dXJuIGlzQnV0dG9uKGV2ZW50LCAyKSB9LAotCi0gICAgZWxl
bWVudDogZnVuY3Rpb24oZXZlbnQpIHsKLSAgICAgIHZhciBub2RlID0gRXZlbnQuZXh0ZW5kKGV2
ZW50KS50YXJnZXQ7Ci0gICAgICByZXR1cm4gRWxlbWVudC5leHRlbmQobm9kZS5ub2RlVHlwZSA9
PSBOb2RlLlRFWFRfTk9ERSA/IG5vZGUucGFyZW50Tm9kZSA6IG5vZGUpOwotICAgIH0sCi0KLSAg
ICBmaW5kRWxlbWVudDogZnVuY3Rpb24oZXZlbnQsIGV4cHJlc3Npb24pIHsKLSAgICAgIHZhciBl
bGVtZW50ID0gRXZlbnQuZWxlbWVudChldmVudCk7Ci0gICAgICBpZiAoIWV4cHJlc3Npb24pIHJl
dHVybiBlbGVtZW50OwotICAgICAgdmFyIGVsZW1lbnRzID0gW2VsZW1lbnRdLmNvbmNhdChlbGVt
ZW50LmFuY2VzdG9ycygpKTsKLSAgICAgIHJldHVybiBTZWxlY3Rvci5maW5kRWxlbWVudChlbGVt
ZW50cywgZXhwcmVzc2lvbiwgMCk7Ci0gICAgfSwKLQotICAgIHBvaW50ZXI6IGZ1bmN0aW9uKGV2
ZW50KSB7Ci0gICAgICByZXR1cm4gewotICAgICAgICB4OiBldmVudC5wYWdlWCB8fCAoZXZlbnQu
Y2xpZW50WCArCi0gICAgICAgICAgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0
IHx8IGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCkpLAotICAgICAgICB5OiBldmVudC5wYWdlWSB8
fCAoZXZlbnQuY2xpZW50WSArCi0gICAgICAgICAgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5z
Y3JvbGxUb3AgfHwgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ApKQotICAgICAgfTsKLSAgICB9LAot
Ci0gICAgcG9pbnRlclg6IGZ1bmN0aW9uKGV2ZW50KSB7IHJldHVybiBFdmVudC5wb2ludGVyKGV2
ZW50KS54IH0sCi0gICAgcG9pbnRlclk6IGZ1bmN0aW9uKGV2ZW50KSB7IHJldHVybiBFdmVudC5w
b2ludGVyKGV2ZW50KS55IH0sCi0KLSAgICBzdG9wOiBmdW5jdGlvbihldmVudCkgewotICAgICAg
RXZlbnQuZXh0ZW5kKGV2ZW50KTsKLSAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Ci0gICAg
ICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKLSAgICAgIGV2ZW50LnN0b3BwZWQgPSB0cnVlOwot
ICAgIH0KLSAgfTsKLX0pKCk7Ci0KLUV2ZW50LmV4dGVuZCA9IChmdW5jdGlvbigpIHsKLSAgdmFy
IG1ldGhvZHMgPSBPYmplY3Qua2V5cyhFdmVudC5NZXRob2RzKS5pbmplY3QoeyB9LCBmdW5jdGlv
bihtLCBuYW1lKSB7Ci0gICAgbVtuYW1lXSA9IEV2ZW50Lk1ldGhvZHNbbmFtZV0ubWV0aG9kaXpl
KCk7Ci0gICAgcmV0dXJuIG07Ci0gIH0pOwotCi0gIGlmIChQcm90b3R5cGUuQnJvd3Nlci5JRSkg
ewotICAgIE9iamVjdC5leHRlbmQobWV0aG9kcywgewotICAgICAgc3RvcFByb3BhZ2F0aW9uOiBm
dW5jdGlvbigpIHsgdGhpcy5jYW5jZWxCdWJibGUgPSB0cnVlIH0sCi0gICAgICBwcmV2ZW50RGVm
YXVsdDogIGZ1bmN0aW9uKCkgeyB0aGlzLnJldHVyblZhbHVlID0gZmFsc2UgfSwKLSAgICAgIGlu
c3BlY3Q6IGZ1bmN0aW9uKCkgeyByZXR1cm4gIltvYmplY3QgRXZlbnRdIiB9Ci0gICAgfSk7Ci0K
LSAgICByZXR1cm4gZnVuY3Rpb24oZXZlbnQpIHsKLSAgICAgIGlmICghZXZlbnQpIHJldHVybiBm
YWxzZTsKLSAgICAgIGlmIChldmVudC5fZXh0ZW5kZWRCeVByb3RvdHlwZSkgcmV0dXJuIGV2ZW50
OwotCi0gICAgICBldmVudC5fZXh0ZW5kZWRCeVByb3RvdHlwZSA9IFByb3RvdHlwZS5lbXB0eUZ1
bmN0aW9uOwotICAgICAgdmFyIHBvaW50ZXIgPSBFdmVudC5wb2ludGVyKGV2ZW50KTsKLSAgICAg
IE9iamVjdC5leHRlbmQoZXZlbnQsIHsKLSAgICAgICAgdGFyZ2V0OiBldmVudC5zcmNFbGVtZW50
LAotICAgICAgICByZWxhdGVkVGFyZ2V0OiBFdmVudC5yZWxhdGVkVGFyZ2V0KGV2ZW50KSwKLSAg
ICAgICAgcGFnZVg6ICBwb2ludGVyLngsCi0gICAgICAgIHBhZ2VZOiAgcG9pbnRlci55Ci0gICAg
ICB9KTsKLSAgICAgIHJldHVybiBPYmplY3QuZXh0ZW5kKGV2ZW50LCBtZXRob2RzKTsKLSAgICB9
OwotCi0gIH0gZWxzZSB7Ci0gICAgRXZlbnQucHJvdG90eXBlID0gRXZlbnQucHJvdG90eXBlIHx8
IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCJIVE1MRXZlbnRzIikuX19wcm90b19fOwotICAgIE9iamVj
dC5leHRlbmQoRXZlbnQucHJvdG90eXBlLCBtZXRob2RzKTsKLSAgICByZXR1cm4gUHJvdG90eXBl
Lks7Ci0gIH0KLX0pKCk7Ci0KLU9iamVjdC5leHRlbmQoRXZlbnQsIChmdW5jdGlvbigpIHsKLSAg
dmFyIGNhY2hlID0gRXZlbnQuY2FjaGU7Ci0KLSAgZnVuY3Rpb24gZ2V0RXZlbnRJRChlbGVtZW50
KSB7Ci0gICAgaWYgKGVsZW1lbnQuX3Byb3RvdHlwZUV2ZW50SUQpIHJldHVybiBlbGVtZW50Ll9w
cm90b3R5cGVFdmVudElEWzBdOwotICAgIGFyZ3VtZW50cy5jYWxsZWUuaWQgPSBhcmd1bWVudHMu
Y2FsbGVlLmlkIHx8IDE7Ci0gICAgcmV0dXJuIGVsZW1lbnQuX3Byb3RvdHlwZUV2ZW50SUQgPSBb
Kythcmd1bWVudHMuY2FsbGVlLmlkXTsKLSAgfQotCi0gIGZ1bmN0aW9uIGdldERPTUV2ZW50TmFt
ZShldmVudE5hbWUpIHsKLSAgICBpZiAoZXZlbnROYW1lICYmIGV2ZW50TmFtZS5pbmNsdWRlKCc6
JykpIHJldHVybiAiZGF0YWF2YWlsYWJsZSI7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZTsKLSAgfQot
Ci0gIGZ1bmN0aW9uIGdldENhY2hlRm9ySUQoaWQpIHsKLSAgICByZXR1cm4gY2FjaGVbaWRdID0g
Y2FjaGVbaWRdIHx8IHsgfTsKLSAgfQotCi0gIGZ1bmN0aW9uIGdldFdyYXBwZXJzRm9yRXZlbnRO
YW1lKGlkLCBldmVudE5hbWUpIHsKLSAgICB2YXIgYyA9IGdldENhY2hlRm9ySUQoaWQpOwotICAg
IHJldHVybiBjW2V2ZW50TmFtZV0gPSBjW2V2ZW50TmFtZV0gfHwgW107Ci0gIH0KLQotICBmdW5j
dGlvbiBjcmVhdGVXcmFwcGVyKGVsZW1lbnQsIGV2ZW50TmFtZSwgaGFuZGxlcikgewotICAgIHZh
ciBpZCA9IGdldEV2ZW50SUQoZWxlbWVudCk7Ci0gICAgdmFyIGMgPSBnZXRXcmFwcGVyc0ZvckV2
ZW50TmFtZShpZCwgZXZlbnROYW1lKTsKLSAgICBpZiAoYy5wbHVjaygiaGFuZGxlciIpLmluY2x1
ZGUoaGFuZGxlcikpIHJldHVybiBmYWxzZTsKLQotICAgIHZhciB3cmFwcGVyID0gZnVuY3Rpb24o
ZXZlbnQpIHsKLSAgICAgIGlmICghRXZlbnQgfHwgIUV2ZW50LmV4dGVuZCB8fAotICAgICAgICAo
ZXZlbnQuZXZlbnROYW1lICYmIGV2ZW50LmV2ZW50TmFtZSAhPSBldmVudE5hbWUpKQotICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgRXZlbnQuZXh0ZW5kKGV2ZW50KTsKLSAgICAgIGhh
bmRsZXIuY2FsbChlbGVtZW50LCBldmVudCk7Ci0gICAgfTsKLQotICAgIHdyYXBwZXIuaGFuZGxl
ciA9IGhhbmRsZXI7Ci0gICAgYy5wdXNoKHdyYXBwZXIpOwotICAgIHJldHVybiB3cmFwcGVyOwot
ICB9Ci0KLSAgZnVuY3Rpb24gZmluZFdyYXBwZXIoaWQsIGV2ZW50TmFtZSwgaGFuZGxlcikgewot
ICAgIHZhciBjID0gZ2V0V3JhcHBlcnNGb3JFdmVudE5hbWUoaWQsIGV2ZW50TmFtZSk7Ci0gICAg
cmV0dXJuIGMuZmluZChmdW5jdGlvbih3cmFwcGVyKSB7IHJldHVybiB3cmFwcGVyLmhhbmRsZXIg
PT0gaGFuZGxlciB9KTsKLSAgfQotCi0gIGZ1bmN0aW9uIGRlc3Ryb3lXcmFwcGVyKGlkLCBldmVu
dE5hbWUsIGhhbmRsZXIpIHsKLSAgICB2YXIgYyA9IGdldENhY2hlRm9ySUQoaWQpOwotICAgIGlm
ICghY1tldmVudE5hbWVdKSByZXR1cm4gZmFsc2U7Ci0gICAgY1tldmVudE5hbWVdID0gY1tldmVu
dE5hbWVdLndpdGhvdXQoZmluZFdyYXBwZXIoaWQsIGV2ZW50TmFtZSwgaGFuZGxlcikpOwotICB9
Ci0KLSAgZnVuY3Rpb24gZGVzdHJveUNhY2hlKCkgewotICAgIGZvciAodmFyIGlkIGluIGNhY2hl
KQotICAgICAgZm9yICh2YXIgZXZlbnROYW1lIGluIGNhY2hlW2lkXSkKLSAgICAgICAgY2FjaGVb
aWRdW2V2ZW50TmFtZV0gPSBudWxsOwotICB9Ci0KLSAgaWYgKHdpbmRvdy5hdHRhY2hFdmVudCkg
ewotICAgIHdpbmRvdy5hdHRhY2hFdmVudCgib251bmxvYWQiLCBkZXN0cm95Q2FjaGUpOwotICB9
Ci0KLSAgcmV0dXJuIHsKLSAgICBvYnNlcnZlOiBmdW5jdGlvbihlbGVtZW50LCBldmVudE5hbWUs
IGhhbmRsZXIpIHsKLSAgICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwotICAgICAgdmFyIG5hbWUg
PSBnZXRET01FdmVudE5hbWUoZXZlbnROYW1lKTsKLQotICAgICAgdmFyIHdyYXBwZXIgPSBjcmVh
dGVXcmFwcGVyKGVsZW1lbnQsIGV2ZW50TmFtZSwgaGFuZGxlcik7Ci0gICAgICBpZiAoIXdyYXBw
ZXIpIHJldHVybiBlbGVtZW50OwotCi0gICAgICBpZiAoZWxlbWVudC5hZGRFdmVudExpc3RlbmVy
KSB7Ci0gICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihuYW1lLCB3cmFwcGVyLCBmYWxz
ZSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBlbGVtZW50LmF0dGFjaEV2ZW50KCJvbiIgKyBu
YW1lLCB3cmFwcGVyKTsKLSAgICAgIH0KLQotICAgICAgcmV0dXJuIGVsZW1lbnQ7Ci0gICAgfSwK
LQotICAgIHN0b3BPYnNlcnZpbmc6IGZ1bmN0aW9uKGVsZW1lbnQsIGV2ZW50TmFtZSwgaGFuZGxl
cikgewotICAgICAgZWxlbWVudCA9ICQoZWxlbWVudCk7Ci0gICAgICB2YXIgaWQgPSBnZXRFdmVu
dElEKGVsZW1lbnQpLCBuYW1lID0gZ2V0RE9NRXZlbnROYW1lKGV2ZW50TmFtZSk7Ci0KLSAgICAg
IGlmICghaGFuZGxlciAmJiBldmVudE5hbWUpIHsKLSAgICAgICAgZ2V0V3JhcHBlcnNGb3JFdmVu
dE5hbWUoaWQsIGV2ZW50TmFtZSkuZWFjaChmdW5jdGlvbih3cmFwcGVyKSB7Ci0gICAgICAgICAg
ZWxlbWVudC5zdG9wT2JzZXJ2aW5nKGV2ZW50TmFtZSwgd3JhcHBlci5oYW5kbGVyKTsKLSAgICAg
ICAgfSk7Ci0gICAgICAgIHJldHVybiBlbGVtZW50OwotCi0gICAgICB9IGVsc2UgaWYgKCFldmVu
dE5hbWUpIHsKLSAgICAgICAgT2JqZWN0LmtleXMoZ2V0Q2FjaGVGb3JJRChpZCkpLmVhY2goZnVu
Y3Rpb24oZXZlbnROYW1lKSB7Ci0gICAgICAgICAgZWxlbWVudC5zdG9wT2JzZXJ2aW5nKGV2ZW50
TmFtZSk7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm4gZWxlbWVudDsKLSAgICAgIH0KLQot
ICAgICAgdmFyIHdyYXBwZXIgPSBmaW5kV3JhcHBlcihpZCwgZXZlbnROYW1lLCBoYW5kbGVyKTsK
LSAgICAgIGlmICghd3JhcHBlcikgcmV0dXJuIGVsZW1lbnQ7Ci0KLSAgICAgIGlmIChlbGVtZW50
LnJlbW92ZUV2ZW50TGlzdGVuZXIpIHsKLSAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3Rl
bmVyKG5hbWUsIHdyYXBwZXIsIGZhbHNlKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGVsZW1l
bnQuZGV0YWNoRXZlbnQoIm9uIiArIG5hbWUsIHdyYXBwZXIpOwotICAgICAgfQotCi0gICAgICBk
ZXN0cm95V3JhcHBlcihpZCwgZXZlbnROYW1lLCBoYW5kbGVyKTsKLQotICAgICAgcmV0dXJuIGVs
ZW1lbnQ7Ci0gICAgfSwKLQotICAgIGZpcmU6IGZ1bmN0aW9uKGVsZW1lbnQsIGV2ZW50TmFtZSwg
bWVtbykgewotICAgICAgZWxlbWVudCA9ICQoZWxlbWVudCk7Ci0gICAgICBpZiAoZWxlbWVudCA9
PSBkb2N1bWVudCAmJiBkb2N1bWVudC5jcmVhdGVFdmVudCAmJiAhZWxlbWVudC5kaXNwYXRjaEV2
ZW50KQotICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50OwotCi0gICAg
ICB2YXIgZXZlbnQ7Ci0gICAgICBpZiAoZG9jdW1lbnQuY3JlYXRlRXZlbnQpIHsKLSAgICAgICAg
ZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgiSFRNTEV2ZW50cyIpOwotICAgICAgICBldmVu
dC5pbml0RXZlbnQoImRhdGFhdmFpbGFibGUiLCB0cnVlLCB0cnVlKTsKLSAgICAgIH0gZWxzZSB7
Ci0gICAgICAgIGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnRPYmplY3QoKTsKLSAgICAgICAg
ZXZlbnQuZXZlbnRUeXBlID0gIm9uZGF0YWF2YWlsYWJsZSI7Ci0gICAgICB9Ci0KLSAgICAgIGV2
ZW50LmV2ZW50TmFtZSA9IGV2ZW50TmFtZTsKLSAgICAgIGV2ZW50Lm1lbW8gPSBtZW1vIHx8IHsg
fTsKLQotICAgICAgaWYgKGRvY3VtZW50LmNyZWF0ZUV2ZW50KSB7Ci0gICAgICAgIGVsZW1lbnQu
ZGlzcGF0Y2hFdmVudChldmVudCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBlbGVtZW50LmZp
cmVFdmVudChldmVudC5ldmVudFR5cGUsIGV2ZW50KTsKLSAgICAgIH0KLQotICAgICAgcmV0dXJu
IEV2ZW50LmV4dGVuZChldmVudCk7Ci0gICAgfQotICB9OwotfSkoKSk7Ci0KLU9iamVjdC5leHRl
bmQoRXZlbnQsIEV2ZW50Lk1ldGhvZHMpOwotCi1FbGVtZW50LmFkZE1ldGhvZHMoewotICBmaXJl
OiAgICAgICAgICBFdmVudC5maXJlLAotICBvYnNlcnZlOiAgICAgICBFdmVudC5vYnNlcnZlLAot
ICBzdG9wT2JzZXJ2aW5nOiBFdmVudC5zdG9wT2JzZXJ2aW5nCi19KTsKLQotT2JqZWN0LmV4dGVu
ZChkb2N1bWVudCwgewotICBmaXJlOiAgICAgICAgICBFbGVtZW50Lk1ldGhvZHMuZmlyZS5tZXRo
b2RpemUoKSwKLSAgb2JzZXJ2ZTogICAgICAgRWxlbWVudC5NZXRob2RzLm9ic2VydmUubWV0aG9k
aXplKCksCi0gIHN0b3BPYnNlcnZpbmc6IEVsZW1lbnQuTWV0aG9kcy5zdG9wT2JzZXJ2aW5nLm1l
dGhvZGl6ZSgpLAotICBsb2FkZWQ6ICAgICAgICBmYWxzZQotfSk7Ci0KLShmdW5jdGlvbigpIHsK
LSAgLyogU3VwcG9ydCBmb3IgdGhlIERPTUNvbnRlbnRMb2FkZWQgZXZlbnQgaXMgYmFzZWQgb24g
d29yayBieSBEYW4gV2ViYiwKLSAgICAgTWF0dGhpYXMgTWlsbGVyLCBEZWFuIEVkd2FyZHMgYW5k
IEpvaG4gUmVzaWcuICovCi0KLSAgdmFyIHRpbWVyOwotCi0gIGZ1bmN0aW9uIGZpcmVDb250ZW50
TG9hZGVkRXZlbnQoKSB7Ci0gICAgaWYgKGRvY3VtZW50LmxvYWRlZCkgcmV0dXJuOwotICAgIGlm
ICh0aW1lcikgd2luZG93LmNsZWFySW50ZXJ2YWwodGltZXIpOwotICAgIGRvY3VtZW50LmZpcmUo
ImRvbTpsb2FkZWQiKTsKLSAgICBkb2N1bWVudC5sb2FkZWQgPSB0cnVlOwotICB9Ci0KLSAgaWYg
KGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHsKLSAgICBpZiAoUHJvdG90eXBlLkJyb3dzZXIu
V2ViS2l0KSB7Ci0gICAgICB0aW1lciA9IHdpbmRvdy5zZXRJbnRlcnZhbChmdW5jdGlvbigpIHsK
LSAgICAgICAgaWYgKC9sb2FkZWR8Y29tcGxldGUvLnRlc3QoZG9jdW1lbnQucmVhZHlTdGF0ZSkp
Ci0gICAgICAgICAgZmlyZUNvbnRlbnRMb2FkZWRFdmVudCgpOwotICAgICAgfSwgMCk7Ci0KLSAg
ICAgIEV2ZW50Lm9ic2VydmUod2luZG93LCAibG9hZCIsIGZpcmVDb250ZW50TG9hZGVkRXZlbnQp
OwotCi0gICAgfSBlbHNlIHsKLSAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNv
bnRlbnRMb2FkZWQiLAotICAgICAgICBmaXJlQ29udGVudExvYWRlZEV2ZW50LCBmYWxzZSk7Ci0g
ICAgfQotCi0gIH0gZWxzZSB7Ci0gICAgZG9jdW1lbnQud3JpdGUoIjxzY3JpcHQgaWQ9X19vbkRP
TUNvbnRlbnRMb2FkZWQgZGVmZXIgc3JjPS8vOj48XC9zY3JpcHQ+Iik7Ci0gICAgJCgiX19vbkRP
TUNvbnRlbnRMb2FkZWQiKS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHsKLSAgICAg
IGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gImNvbXBsZXRlIikgewotICAgICAgICB0aGlzLm9ucmVh
ZHlzdGF0ZWNoYW5nZSA9IG51bGw7Ci0gICAgICAgIGZpcmVDb250ZW50TG9hZGVkRXZlbnQoKTsK
LSAgICAgIH0KLSAgICB9OwotICB9Ci19KSgpOwotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tIERFUFJFQ0FURUQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLUhh
c2gudG9RdWVyeVN0cmluZyA9IE9iamVjdC50b1F1ZXJ5U3RyaW5nOwotCi12YXIgVG9nZ2xlID0g
eyBkaXNwbGF5OiBFbGVtZW50LnRvZ2dsZSB9OwotCi1FbGVtZW50Lk1ldGhvZHMuY2hpbGRPZiA9
IEVsZW1lbnQuTWV0aG9kcy5kZXNjZW5kYW50T2Y7Ci0KLXZhciBJbnNlcnRpb24gPSB7Ci0gIEJl
Zm9yZTogZnVuY3Rpb24oZWxlbWVudCwgY29udGVudCkgewotICAgIHJldHVybiBFbGVtZW50Lmlu
c2VydChlbGVtZW50LCB7YmVmb3JlOmNvbnRlbnR9KTsKLSAgfSwKLQotICBUb3A6IGZ1bmN0aW9u
KGVsZW1lbnQsIGNvbnRlbnQpIHsKLSAgICByZXR1cm4gRWxlbWVudC5pbnNlcnQoZWxlbWVudCwg
e3RvcDpjb250ZW50fSk7Ci0gIH0sCi0KLSAgQm90dG9tOiBmdW5jdGlvbihlbGVtZW50LCBjb250
ZW50KSB7Ci0gICAgcmV0dXJuIEVsZW1lbnQuaW5zZXJ0KGVsZW1lbnQsIHtib3R0b206Y29udGVu
dH0pOwotICB9LAotCi0gIEFmdGVyOiBmdW5jdGlvbihlbGVtZW50LCBjb250ZW50KSB7Ci0gICAg
cmV0dXJuIEVsZW1lbnQuaW5zZXJ0KGVsZW1lbnQsIHthZnRlcjpjb250ZW50fSk7Ci0gIH0KLX07
Ci0KLXZhciAkY29udGludWUgPSBuZXcgRXJyb3IoJyJ0aHJvdyAkY29udGludWUiIGlzIGRlcHJl
Y2F0ZWQsIHVzZSAicmV0dXJuIiBpbnN0ZWFkJyk7Ci0KLS8vIFRoaXMgc2hvdWxkIGJlIG1vdmVk
IHRvIHNjcmlwdC5hY3Vsby51czsgbm90aWNlIHRoZSBkZXByZWNhdGVkIG1ldGhvZHMKLS8vIGZ1
cnRoZXIgYmVsb3csIHRoYXQgbWFwIHRvIHRoZSBuZXdlciBFbGVtZW50IG1ldGhvZHMuCi12YXIg
UG9zaXRpb24gPSB7Ci0gIC8vIHNldCB0byB0cnVlIGlmIG5lZWRlZCwgd2FybmluZzogZmlyZWZv
eCBwZXJmb3JtYW5jZSBwcm9ibGVtcwotICAvLyBOT1QgbmVlZWRlZCBmb3IgcGFnZSBzY3JvbGxp
bmcsIG9ubHkgaWYgZHJhZ2dhYmxlIGNvbnRhaW5lZCBpbgotICAvLyBzY3JvbGxhYmxlIGVsZW1l
bnRzCi0gIGluY2x1ZGVTY3JvbGxPZmZzZXRzOiBmYWxzZSwKLQotICAvLyBtdXN0IGJlIGNhbGxl
ZCBiZWZvcmUgY2FsbGluZyB3aXRoaW5JbmNsdWRpbmdTY3JvbGxvZmZzZXQsIGV2ZXJ5IHRpbWUg
dGhlCi0gIC8vIHBhZ2UgaXMgc2Nyb2xsZWQKLSAgcHJlcGFyZTogZnVuY3Rpb24oKSB7Ci0gICAg
dGhpcy5kZWx0YVggPSAgd2luZG93LnBhZ2VYT2Zmc2V0Ci0gICAgICAgICAgICAgICAgfHwgZG9j
dW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQKLSAgICAgICAgICAgICAgICB8fCBkb2N1
bWVudC5ib2R5LnNjcm9sbExlZnQKLSAgICAgICAgICAgICAgICB8fCAwOwotICAgIHRoaXMuZGVs
dGFZID0gIHdpbmRvdy5wYWdlWU9mZnNldAotICAgICAgICAgICAgICAgIHx8IGRvY3VtZW50LmRv
Y3VtZW50RWxlbWVudC5zY3JvbGxUb3AKLSAgICAgICAgICAgICAgICB8fCBkb2N1bWVudC5ib2R5
LnNjcm9sbFRvcAotICAgICAgICAgICAgICAgIHx8IDA7Ci0gIH0sCi0KLSAgLy8gY2FjaGVzIHgv
eSBjb29yZGluYXRlIHBhaXIgdG8gdXNlIHdpdGggb3ZlcmxhcAotICB3aXRoaW46IGZ1bmN0aW9u
KGVsZW1lbnQsIHgsIHkpIHsKLSAgICBpZiAodGhpcy5pbmNsdWRlU2Nyb2xsT2Zmc2V0cykKLSAg
ICAgIHJldHVybiB0aGlzLndpdGhpbkluY2x1ZGluZ1Njcm9sbG9mZnNldHMoZWxlbWVudCwgeCwg
eSk7Ci0gICAgdGhpcy54Y29tcCA9IHg7Ci0gICAgdGhpcy55Y29tcCA9IHk7Ci0gICAgdGhpcy5v
ZmZzZXQgPSBFbGVtZW50LmN1bXVsYXRpdmVPZmZzZXQoZWxlbWVudCk7Ci0KLSAgICByZXR1cm4g
KHkgPj0gdGhpcy5vZmZzZXRbMV0gJiYKLSAgICAgICAgICAgIHkgPCAgdGhpcy5vZmZzZXRbMV0g
KyBlbGVtZW50Lm9mZnNldEhlaWdodCAmJgotICAgICAgICAgICAgeCA+PSB0aGlzLm9mZnNldFsw
XSAmJgotICAgICAgICAgICAgeCA8ICB0aGlzLm9mZnNldFswXSArIGVsZW1lbnQub2Zmc2V0V2lk
dGgpOwotICB9LAotCi0gIHdpdGhpbkluY2x1ZGluZ1Njcm9sbG9mZnNldHM6IGZ1bmN0aW9uKGVs
ZW1lbnQsIHgsIHkpIHsKLSAgICB2YXIgb2Zmc2V0Y2FjaGUgPSBFbGVtZW50LmN1bXVsYXRpdmVT
Y3JvbGxPZmZzZXQoZWxlbWVudCk7Ci0KLSAgICB0aGlzLnhjb21wID0geCArIG9mZnNldGNhY2hl
WzBdIC0gdGhpcy5kZWx0YVg7Ci0gICAgdGhpcy55Y29tcCA9IHkgKyBvZmZzZXRjYWNoZVsxXSAt
IHRoaXMuZGVsdGFZOwotICAgIHRoaXMub2Zmc2V0ID0gRWxlbWVudC5jdW11bGF0aXZlT2Zmc2V0
KGVsZW1lbnQpOwotCi0gICAgcmV0dXJuICh0aGlzLnljb21wID49IHRoaXMub2Zmc2V0WzFdICYm
Ci0gICAgICAgICAgICB0aGlzLnljb21wIDwgIHRoaXMub2Zmc2V0WzFdICsgZWxlbWVudC5vZmZz
ZXRIZWlnaHQgJiYKLSAgICAgICAgICAgIHRoaXMueGNvbXAgPj0gdGhpcy5vZmZzZXRbMF0gJiYK
LSAgICAgICAgICAgIHRoaXMueGNvbXAgPCAgdGhpcy5vZmZzZXRbMF0gKyBlbGVtZW50Lm9mZnNl
dFdpZHRoKTsKLSAgfSwKLQotICAvLyB3aXRoaW4gbXVzdCBiZSBjYWxsZWQgZGlyZWN0bHkgYmVm
b3JlCi0gIG92ZXJsYXA6IGZ1bmN0aW9uKG1vZGUsIGVsZW1lbnQpIHsKLSAgICBpZiAoIW1vZGUp
IHJldHVybiAwOwotICAgIGlmIChtb2RlID09ICd2ZXJ0aWNhbCcpCi0gICAgICByZXR1cm4gKCh0
aGlzLm9mZnNldFsxXSArIGVsZW1lbnQub2Zmc2V0SGVpZ2h0KSAtIHRoaXMueWNvbXApIC8KLSAg
ICAgICAgZWxlbWVudC5vZmZzZXRIZWlnaHQ7Ci0gICAgaWYgKG1vZGUgPT0gJ2hvcml6b250YWwn
KQotICAgICAgcmV0dXJuICgodGhpcy5vZmZzZXRbMF0gKyBlbGVtZW50Lm9mZnNldFdpZHRoKSAt
IHRoaXMueGNvbXApIC8KLSAgICAgICAgZWxlbWVudC5vZmZzZXRXaWR0aDsKLSAgfSwKLQotICAv
LyBEZXByZWNhdGlvbiBsYXllciAtLSB1c2UgbmV3ZXIgRWxlbWVudCBtZXRob2RzIG5vdyAoMS41
LjIpLgotCi0gIGN1bXVsYXRpdmVPZmZzZXQ6IEVsZW1lbnQuTWV0aG9kcy5jdW11bGF0aXZlT2Zm
c2V0LAotCi0gIHBvc2l0aW9uZWRPZmZzZXQ6IEVsZW1lbnQuTWV0aG9kcy5wb3NpdGlvbmVkT2Zm
c2V0LAotCi0gIGFic29sdXRpemU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAgICBQb3NpdGlvbi5w
cmVwYXJlKCk7Ci0gICAgcmV0dXJuIEVsZW1lbnQuYWJzb2x1dGl6ZShlbGVtZW50KTsKLSAgfSwK
LQotICByZWxhdGl2aXplOiBmdW5jdGlvbihlbGVtZW50KSB7Ci0gICAgUG9zaXRpb24ucHJlcGFy
ZSgpOwotICAgIHJldHVybiBFbGVtZW50LnJlbGF0aXZpemUoZWxlbWVudCk7Ci0gIH0sCi0KLSAg
cmVhbE9mZnNldDogRWxlbWVudC5NZXRob2RzLmN1bXVsYXRpdmVTY3JvbGxPZmZzZXQsCi0KLSAg
b2Zmc2V0UGFyZW50OiBFbGVtZW50Lk1ldGhvZHMuZ2V0T2Zmc2V0UGFyZW50LAotCi0gIHBhZ2U6
IEVsZW1lbnQuTWV0aG9kcy52aWV3cG9ydE9mZnNldCwKLQotICBjbG9uZTogZnVuY3Rpb24oc291
cmNlLCB0YXJnZXQsIG9wdGlvbnMpIHsKLSAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7IH07Ci0g
ICAgcmV0dXJuIEVsZW1lbnQuY2xvbmVQb3NpdGlvbih0YXJnZXQsIHNvdXJjZSwgb3B0aW9ucyk7
Ci0gIH0KLX07Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1pZiAoIWRvY3VtZW50LmdldEVs
ZW1lbnRzQnlDbGFzc05hbWUpIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgPSBmdW5j
dGlvbihpbnN0YW5jZU1ldGhvZHMpewotICBmdW5jdGlvbiBpdGVyKG5hbWUpIHsKLSAgICByZXR1
cm4gbmFtZS5ibGFuaygpID8gbnVsbCA6ICJbY29udGFpbnMoY29uY2F0KCcgJywgQGNsYXNzLCAn
ICcpLCAnICIgKyBuYW1lICsgIiAnKV0iOwotICB9Ci0KLSAgaW5zdGFuY2VNZXRob2RzLmdldEVs
ZW1lbnRzQnlDbGFzc05hbWUgPSBQcm90b3R5cGUuQnJvd3NlckZlYXR1cmVzLlhQYXRoID8KLSAg
ZnVuY3Rpb24oZWxlbWVudCwgY2xhc3NOYW1lKSB7Ci0gICAgY2xhc3NOYW1lID0gY2xhc3NOYW1l
LnRvU3RyaW5nKCkuc3RyaXAoKTsKLSAgICB2YXIgY29uZCA9IC9ccy8udGVzdChjbGFzc05hbWUp
ID8gJHcoY2xhc3NOYW1lKS5tYXAoaXRlcikuam9pbignJykgOiBpdGVyKGNsYXNzTmFtZSk7Ci0g
ICAgcmV0dXJuIGNvbmQgPyBkb2N1bWVudC5fZ2V0RWxlbWVudHNCeVhQYXRoKCcuLy8qJyArIGNv
bmQsIGVsZW1lbnQpIDogW107Ci0gIH0gOiBmdW5jdGlvbihlbGVtZW50LCBjbGFzc05hbWUpIHsK
LSAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUudG9TdHJpbmcoKS5zdHJpcCgpOwotICAgIHZhciBl
bGVtZW50cyA9IFtdLCBjbGFzc05hbWVzID0gKC9ccy8udGVzdChjbGFzc05hbWUpID8gJHcoY2xh
c3NOYW1lKSA6IG51bGwpOwotICAgIGlmICghY2xhc3NOYW1lcyAmJiAhY2xhc3NOYW1lKSByZXR1
cm4gZWxlbWVudHM7Ci0KLSAgICB2YXIgbm9kZXMgPSAkKGVsZW1lbnQpLmdldEVsZW1lbnRzQnlU
YWdOYW1lKCcqJyk7Ci0gICAgY2xhc3NOYW1lID0gJyAnICsgY2xhc3NOYW1lICsgJyAnOwotCi0g
ICAgZm9yICh2YXIgaSA9IDAsIGNoaWxkLCBjbjsgY2hpbGQgPSBub2Rlc1tpXTsgaSsrKSB7Ci0g
ICAgICBpZiAoY2hpbGQuY2xhc3NOYW1lICYmIChjbiA9ICcgJyArIGNoaWxkLmNsYXNzTmFtZSAr
ICcgJykgJiYgKGNuLmluY2x1ZGUoY2xhc3NOYW1lKSB8fAotICAgICAgICAgIChjbGFzc05hbWVz
ICYmIGNsYXNzTmFtZXMuYWxsKGZ1bmN0aW9uKG5hbWUpIHsKLSAgICAgICAgICAgIHJldHVybiAh
bmFtZS50b1N0cmluZygpLmJsYW5rKCkgJiYgY24uaW5jbHVkZSgnICcgKyBuYW1lICsgJyAnKTsK
LSAgICAgICAgICB9KSkpKQotICAgICAgICBlbGVtZW50cy5wdXNoKEVsZW1lbnQuZXh0ZW5kKGNo
aWxkKSk7Ci0gICAgfQotICAgIHJldHVybiBlbGVtZW50czsKLSAgfTsKLQotICByZXR1cm4gZnVu
Y3Rpb24oY2xhc3NOYW1lLCBwYXJlbnRFbGVtZW50KSB7Ci0gICAgcmV0dXJuICQocGFyZW50RWxl
bWVudCB8fCBkb2N1bWVudC5ib2R5KS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNsYXNzTmFtZSk7
Ci0gIH07Ci19KEVsZW1lbnQuTWV0aG9kcyk7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1F
bGVtZW50LkNsYXNzTmFtZXMgPSBDbGFzcy5jcmVhdGUoKTsKLUVsZW1lbnQuQ2xhc3NOYW1lcy5w
cm90b3R5cGUgPSB7Ci0gIGluaXRpYWxpemU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAgICB0aGlz
LmVsZW1lbnQgPSAkKGVsZW1lbnQpOwotICB9LAotCi0gIF9lYWNoOiBmdW5jdGlvbihpdGVyYXRv
cikgewotICAgIHRoaXMuZWxlbWVudC5jbGFzc05hbWUuc3BsaXQoL1xzKy8pLnNlbGVjdChmdW5j
dGlvbihuYW1lKSB7Ci0gICAgICByZXR1cm4gbmFtZS5sZW5ndGggPiAwOwotICAgIH0pLl9lYWNo
KGl0ZXJhdG9yKTsKLSAgfSwKLQotICBzZXQ6IGZ1bmN0aW9uKGNsYXNzTmFtZSkgewotICAgIHRo
aXMuZWxlbWVudC5jbGFzc05hbWUgPSBjbGFzc05hbWU7Ci0gIH0sCi0KLSAgYWRkOiBmdW5jdGlv
bihjbGFzc05hbWVUb0FkZCkgewotICAgIGlmICh0aGlzLmluY2x1ZGUoY2xhc3NOYW1lVG9BZGQp
KSByZXR1cm47Ci0gICAgdGhpcy5zZXQoJEEodGhpcykuY29uY2F0KGNsYXNzTmFtZVRvQWRkKS5q
b2luKCcgJykpOwotICB9LAotCi0gIHJlbW92ZTogZnVuY3Rpb24oY2xhc3NOYW1lVG9SZW1vdmUp
IHsKLSAgICBpZiAoIXRoaXMuaW5jbHVkZShjbGFzc05hbWVUb1JlbW92ZSkpIHJldHVybjsKLSAg
ICB0aGlzLnNldCgkQSh0aGlzKS53aXRob3V0KGNsYXNzTmFtZVRvUmVtb3ZlKS5qb2luKCcgJykp
OwotICB9LAotCi0gIHRvU3RyaW5nOiBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gJEEodGhpcyku
am9pbignICcpOwotICB9Ci19OwotCi1PYmplY3QuZXh0ZW5kKEVsZW1lbnQuQ2xhc3NOYW1lcy5w
cm90b3R5cGUsIEVudW1lcmFibGUpOwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotRWxlbWVu
dC5hZGRNZXRob2RzKCk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEv
V2Vic2l0ZXMvd2Via2l0Lm9yZy9wZXJmL3NsaWNrc3BlZWQvaGVhZGVyLmh0bWwgYi9XZWJzaXRl
cy93ZWJraXQub3JnL3BlcmYvc2xpY2tzcGVlZC9oZWFkZXIuaHRtbApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDdjZmYxMWU0ZDMzNmZmZTE1MzcwYmMzNzAyYTllNzMwZWUxYmRmNC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9XZWJzaXRlcy93
ZWJraXQub3JnL3BlcmYvc2xpY2tzcGVlZC9oZWFkZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0x
LDExICswLDAgQEAKLTxoMT48c3Bhbj5TbGlja1NwZWVkPC9zcGFuPjwvaDE+Ci08aDI+c3BlZWQv
dmFsaWRpdHkgc2VsZWN0b3JzIHRlc3QgZm9yIGZyYW1ld29ya3MuPC9oMj4KLTxwPkV2ZXJ5IGZy
YW1ld29yayBydW5zIGluIGl0cyBvd24gaUZyYW1lLCB0aHVzIG5vIGNvbmZsaWN0cyBjYW4gaGFw
cGVuLiBUZXN0cyBhcmUgcnVuIHNlbGVjdG9yIGJ5IHNlbGVjdG9yLCB3aXRoIGFuIGludGVydmFs
IHRvIHByZXZlbnQgdGhlIGJyb3dzZXIgZnJvbSBmcmVlemluZy48L3A+Ci08cD5UZXN0cyBhcmUg
cnVuIGluIGEgbmV1dHJhbCBlbnZpcm9ubWVudCwgbm8gbGlicmFyeSBvciBmcmFtZXdvcmsgaXMg
aW5jbHVkZWQgaW4gdGhlIG1haW4gamF2YXNjcmlwdCB0ZXN0LCB0byBhdm9pZCBmYXZvcml0aXNt
LjwvcD4KLTxwPlRoZSBXZWJLaXQgdmVyc2lvbiBvZiB0aGlzIHRlc3QgaW5jbHVkZXMgYSBudW1i
ZXIgb2YgbW9kaWZpY2F0aW9ucy4gU3BlY2lmaWNhbGx5Ci08dWw+Ci08bGk+VGhlIHRlc3RzIGFy
ZSBydW4gMjUwIHRpbWVzIGluc3RlYWQgb2Ygb25jZSB0byBzaG93IHNwZWVkIGRpZmZlcmVuY2Vz
IG1vcmUgYWNjdXJhdGVseTwvbGk+Ci08bGk+cXVlcnlTZWxlY3RvckFsbCBpcyBhZGRlZCBhcyBh
IHN1cHBvcnRlZCAmcXVvdDtsaWJyYXJ5JnF1b3Q7PC9saT4KLTxsaT5DU1Mgc2VsZWN0b3JzIHRo
YXQgbm90IGFsbCBpbXBsZW1lbnRhdGlvbnMgc3VwcG9ydCBoYXZlIGJlZW4gcmVtb3ZlZCB0byBh
dm9pZCBkaXN0b3J0aW5nIHRpbWluZyByZXN1bHRzLiBUaGVzZSB3aWxsIGJlIGFkZGVkIGJhY2sg
aW4gYXMgbmV3IHNlbGVjdG9ycyBhcmUgaW1wbGVtZW50ZWQuPC9saT4KLTwvdWw+Ci08L3A+CmRp
ZmYgLS1naXQgYS9XZWJzaXRlcy93ZWJraXQub3JnL3BlcmYvc2xpY2tzcGVlZC9pbmRleC5waHAg
Yi9XZWJzaXRlcy93ZWJraXQub3JnL3BlcmYvc2xpY2tzcGVlZC9pbmRleC5waHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxMWNjMmY1OWM2ZGJlMDYyNWUzYTdmZDhmNTI0NGY5MmE5
MjgyOGQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvV2Vi
c2l0ZXMvd2Via2l0Lm9yZy9wZXJmL3NsaWNrc3BlZWQvaW5kZXgucGhwCisrKyAvZGV2L251bGwK
QEAgLTEgKzAsMCBAQAotPD9waHAgaW5jbHVkZSgnc3lzdGVtL2luZGV4LnBocCcpOz8+ClwgTm8g
bmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvd2Via2l0Lm9yZy9w
ZXJmL3NsaWNrc3BlZWQvaW5zdHJ1Y3Rpb25zLnR4dCBiL1dlYnNpdGVzL3dlYmtpdC5vcmcvcGVy
Zi9zbGlja3NwZWVkL2luc3RydWN0aW9ucy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGFmMDRkMzU2MmE4NDg2ODVmMGQ4Njg4NjExYTNiZTU5YmU5NGU1YTMuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvV2Vic2l0ZXMvd2Via2l0Lm9yZy9w
ZXJmL3NsaWNrc3BlZWQvaW5zdHJ1Y3Rpb25zLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAs
MCBAQAotMSkgZWRpdCBjb25maWcuaW5pIGFuZCBmaWxsIGluIHlvdXIgZnJhbWV3b3JrIGxpc3Qu
Ci0yKSBlZGl0IHNlbGVjdG9ycy5saXN0IGFuZCBlZGl0IHlvdXIgc2VsZWN0b3JzIGxpc3QuCi0z
KSBlZGl0IHN0eWxlLmNzcywgaGVhZGVyLmh0bWwgYW5kIGZvb3Rlci5odG1sIGlmIHlvdSB3aXNo
LgotNCkgZWRpdCB0ZW1wbGF0ZS5odG1sIGlmIHlvdSB3YW50IHRvIGNoYW5nZSB0aGUgc2VsZWN0
b3JzIGh0bWwgZmlsZS4gSXQgRE9FUyBOT1QgYWNjZXB0IHRoZSBmdWxsIGRvY3VtZW50LCBqdXN0
IGVsZW1lbnRzLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1dlYnNp
dGVzL3dlYmtpdC5vcmcvcGVyZi9zbGlja3NwZWVkL2xvZ28ucG5nIGIvV2Vic2l0ZXMvd2Via2l0
Lm9yZy9wZXJmL3NsaWNrc3BlZWQvbG9nby5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDQ0OTIzODU2ZTI3MWU1MmI1OTM5M2VlZTM1MTA4OTRjZTlhZDA3NjkuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDAK
SGNtVj9kMDAwMDEKCmxpdGVyYWwgNTgyOQp6Y21kXkQpbUliXzZKM3hGMT9pRncjYUozNzdpcDAw
MT1hPFk/eWV0Rk9OVnJhZkhjd18zcms3WShqYykqTitUKTQKej1sfTd8IV59TnI5YDFkYUdqfUZS
UShjamloQEo9bDBGV3Z4JCFQLXNTaFdBSkppKEtIeGtRQUp7YT5OO2tUPit1Cnpha2xkQ2hQdUgz
QVdMVSs3Pmx3YSlFY0dAZ0lmQiE0I09rPmZGfVM9SENfM1FwRmNaQl5rUVM8MklwM0BEcWxebgp6
cTMxVnU4WEZzM1VFT1FDYHBYK3loWmxac1pFVTAjJTcwMC0/d3xKYjQzTHt4XzhsNztPLVZAfFRV
c3spbzNge0AKejZjclZAYCsmeitIZD1uRCZpPSQ/N000YVBzbCtDd3thanJRaSM5ZF8+d1piZ156
I2RfYjh3bk5wJXlSITx6P2w/CnpFdTdgZW5vY2Ztam9sdWZCVUVFampJQ3wkbXZfUk8yMF9UKS1w
KFA5O3dKSSMhNGR5cCEtJS1WI3FIcGdyS1FZYgp6NFhBfXhTYWZ7VDFqK2E2PmlSS2tTMSt4PSgx
XyZScUtaTWw+aGlMMHNDYTR+QnJYLSZKQW9TUEExRWxkVUQ9SzUKej8mQC1JYTthX1c0dnJRMVdV
MVhVSTl9Wik9a0RwOW02O1dxIyNVVFc0WVJVQSZDQ1BeMXZffnQ8PmxwamB1S01ZCnpQY3t5N0Jn
U0ROcDwhQCVjdUZPTzgzWn53ZyRmN15mPTVReil6KGZkaFBuRG5NWntXOE8tJEgzOCYmbzI9bz1X
dQp6PD90O29FVlE/XlRSRXRGOXxqQ0IqcH5ESTB6PUoqPWF2KW1NWll6RVhoIXN6bm43d2lWNGw5
OFd+UWNlXiRaWj4KenZ4VV9TZDFjVkIxWCttMSRCeT4pdyFSQDdNPWVCbWNTK3IrO2h+e3tJVExm
MztuPjI7X2A8NHx3citFQ2I3aUFACnpVVE5qfD5GTFNRKGI+dCM7bGFWX0AkdnJOLXFFakx5Vzg4
bl5DQ1RTZTZ3M0YtS2FPSEV3YD4mOXUoU1JYNENRYgp6QE5qSSthQ0I4fmQ8e0pRKTJ3NUxWLUQ+
I3ZaQ0YkQVU9b28qKyEhZV9WIzhyP2MxbEJmOT4hMEZHXiMhd2d5bHUKenRLMGtZOHs1K3h3dGNo
OTZZSjJhNFF1NGcoJWk9T0pqUVF0WEo+TlZhJCMkeWNZM2pQaWYmKzA3QlJKbVRGMn5RCnpGcEZF
ZSF6PTI4T0EzPUtuP3VWZ2xkRF9Ibjd4dDNeX2lkT01mN2c+PGlnc3shVCM+PDVfLTNEVnQhP056
aCNuZwp6MSslfXBlWHhZeXRFI0xqRD1xNjdwQnRIKEA5Z080b0NLaihIITUyVmBqRSlrbTVyZiFp
Xi0rNil8U0BaOFRBU1QKek9XaEJxdlN6akZ3b216MDRJXyhBQl8kPShsYW4xSSh7QTFkd0xgUXkq
Kk9Vcngje1R7eSopajdtNUw2fENXQUFKCnpeKiExKGVmKV5nc21oQVYkWHYjWXYkSFdhRlQjSGwx
bnwmUypMblFeNHVILXpKfF9WMVR0aXQ3cjBjVk1YeVBCQgp6SkN9PEh1T2kkZUI0UjNsVGs/blQ1
eiYmZiM/fjV6a1lmXjAzNmNRaHZjYmg8e1YoblJKMmlhc0M3TXohQmVUdFkKendee3l8Z1QwWT1O
dGMtYyp3Y0I8eFlXMTxKbGVXKWdjUjBvSHdKQGU4YmNDSDQ8MDdhZDRGO3V7I3VPaEhVdHA1Cnox
bnZmV3pWQEVEe15AQCNjQVpERCo+QGkpJDV2LTNAZ2lZPmpkQnF7cCpgXkRLVCp1KV93U2xQJXJT
fS1ObT1eZQp6PE9HU25QWng4MW8zJkx8UUx5bChjZXNjZDNoeHc1QnE7eDBrd3I+RHdEJnlLbEMh
RG92ekFLWUgjej5WQmhrJWUKei1pZGhue0NOI3NQWjR7WDI2ej9PTzIwQ0w5fEQ2IylPYT11NHk9
V2JXZUFRSWVINGFBezA8fTxDVjJQZClNMUIjCno/TDtGYXVCT0ZSS3FtQGFuel8jTVZvPkhpUWpT
ZWF4aDtxVU1OfXZuNCZLJH43bjZZXmhAJlopWDQySS0tb2w+RQp6cE19Rl9sdG1NTDtaZlo2dW5o
NVU3RE52PHRoKGxQRCUkJXQjWE58NTJldWI8QlEkRS1GWEMjQmB+MHQ7ISVtfmQKei1sKyp6X2cp
SFo/e2NmPis9dk9mJldnSSZiTGd8ckQ8XmgzbGMocFdzVXA5K147Jk1reyZgX3NaI2lzejkyVENO
Cnpve1NyJmVCa24tQCRWTVM7SmFuQTx2N2oxZ3difnJOMW5IKVFeX0JVR1JndTdGZDIxV2ZSdj8t
TUR1QFlsKntTRQp6XmFXbihxZXJXYiFtdztraE8xaERaeExDUGFgZiM7aiFSRGgkRDtQdnc8SHE0
ZWgtTngxNnNZYHRpTU98d2VGdTIKekh7NG17Nj9CPEtVJkEtZkZRTmBLc1RFWUpMM154UlZAKVRs
OXQhYjBSOXR6fkdCS1psTEdZITRZRXkheVM1Wm8/Cnpmd0okVkpwTkd7XlVDVV5vMlgoam9vNCVD
S3szKWd3Q1ZYUSZ0T3A5WTFUMlZSd3xyQG9NNWIybnxWa1RraTQ+Sgp6V2ltZipDI3hgSF5FXmRD
PmZVYE1NblhvSHgpISpRZy1uNHRBVUMzUDErJnorbykyNDZLMF9EMWNpS1NFXiZuQzEKeiM0bDhM
PnN1MzhETzY4WUlVP0R8VnBqdU1OVX1xK25tcGghcnhrO1g5O3VYSTZ7WkYkWU5gPTViRlIjJnRC
PXNFCno5NmEtNVU/aC1HaHRfMWduOFB9aTFmY0s7e0Y5dSpXcklSNnUlTUJkVjtPfHxBTlh6R2p2
O2dwKF5iQ3BAVigoSQp6UntPRUo4PDk8fHRFOGtJQX5lZnhsQ3h1OzdOKGJXcytBZm10TGt8MVdg
PjduZiVPI2BycU52Kzk0WFVSZFVoc3wKekMyYmZGJnk+dSp7eys9RyRzb3Y4dl88WH1SUlI9NHZC
eE4ycSN+I0pxLTQrbDBjQWZmMmA/MnZzd3s/eG90TlMzCnohJHF0dng/IzBfSE9rNkNlbiM0PWJQ
TURmLU1PMl5KT0IrSGtVMUd8UTU1cGxSZFgzZ3VRSG9mJlFvNU1INz9gKAp6I1B1MkJPVVljR3lk
RSRFJDdhV35VTEtERjJmUz5jJVdgckIrdUspNW1TZU9CRHRHZUpiM09pTngmYEoyQHs7UHoKekF6
dVlAc0txIXZ5eHBWKSticWthRExyb0J7SStAdj5obXtLSWRTKmBFRmJ3M3oyR3tRUjE/cSZ0Y0xm
fTNgQ2IrCnokRGg3c3Q1OFNuNnNQTHlGVVUzdERUdXYtdj8kSGFTdGpDYHMzUnxLciFrQzM4U2tW
b0l7NHk9cUBKKSVGVTJSNQp6S1N4emhCd3R4X3UxYkNOcUhxJXhqYGJwOWVedmZYTEZpempaeTts
Q2IrYSlSS0chXzB6d0UyWWUpNFk1IzhBQnsKeiE0PkM/bUBZP2ZILSMlYS0qNVluY1FgP3dSKVMk
N2BqXmRyQDQyd3YybE58O0dUYm9adHM9fEYzYVRjeTc4WElvCnpfS2JtMCNGUyhFRj5TUmlIbVNH
SWlCaXVgZk1lKFM7fVRRemEoNEA8JTg3KjlqRD1pb0JYUVFabXtPalRGN1lVRgp6JktsayVuR3hI
WTl5MnFFT0JLOUk7OTF6fnEkdX5sVisqdWE+Z1Vze0J5P2dtQWl0KmB7RlVvSU17I3FTaFRKP3gK
eilDRz1mSX0zO0xQWjN3Wnl3QnpmPEVeZDVRNF9OKjwzS3dCM3l5ZyE2PiY4fD8za0tYSCVoKmlJ
RFZCREArUkM/CnpaO1BxZEAre1c9QDV0ejB1IVg3MU0kKWp6Zm9PfjtgWEZeVHdkcHtnPD83OTdG
TmVVbjVEfjZ2eW1PTkkrYSRyYAp6MER0KzlKZ2k2bVVGdG5rdFgjTExmLXR6bEYqOSNYUFA4NnZk
YTJtPVE+aW1SVnt8O2dJcW1tRWxZWFRIP3wtWEwKeklvJEszQ0dHaTZ1YitvdDt8UlMyclJ0alVj
KkJ7OG0jQ3FJKzlsTUd4NiY+X1k3RkVlUTlAQzRRI1RWXyglbEstCnpLV35DZGl7PyVrPztWQUdy
cmEkZ1RiTGdHI2leNDQ+XyU1MWJWSDZ8eFJ9XnFgK3w7RktoUSU9NH5DMHdBbSEwcAp6ZiYjVFBH
WXhqOFojajxTVCQhWHVDWm9xclZocVlYMklWZ3hBbCZ5S200aSY0KTEpLXk8b3ZfOVYjY2k8QG8j
PVoKejhYQX1KWGBaWT5wezlfN1g3I2FSb1lta3JVakVFT1ZTS1VgV0ZYM2s5aUNFSlg5OXtTKXQ5
MTA8TFEyWTEoZWxkCnopaHtvMClaVnQyRXF0YCptWUBZKCt4NTVkTUdyMXlKUE5NNGR+JUtNYUk1
M1M2NnN0eWQ5KDxXLTZONX1xdXpPSAp6TEc7OE9TMlhtRThSXzg8VVhvUVpONSMoN0paSU5DQmFn
TmVsTC1HOFJ7I3tEV0RiTDdDKVcqXjNwSXZDTWlIZ3wKejFxZVV+OW8tZklwLUZleld3JHpKSnhH
Xk8wKmU7U245Pnk7czs1Pkw8UEM/IUh8MCUjZEg7MCtJN05ndkQ3dGFLCnpwMHlEbUxhbXB8V3BW
QlU4MmA4Jl5PT0p5Vk5ATyFsWUVUKCooaCVUUnE0blRDclhLa1JlaUwzb3shITQrQDw+aAp6QlJM
TmNGKkVGRHRzRE1GeGJgPHdEYHJ9dnRjMU9vKU19I0oyeUp+TkZiPW5yKUIyKkJgITRjall6bFRG
RklUNCQKekRCT25XNE0hWnJ3fV4oNnJEWUJ8UFVIT2pwSmdqNmpNIzR3JFl2SV9IS2JgQlYpcHIr
Tz9rcnhMU0tMUntXfEJOCnoxZWJ3Mm8qNlA7e3djWCY+YXx0RXctMU9UaT9+PkVZPGNwKnRjY1lv
dGtsUEtjdWZTTWtXV3BFXmR2MT9faTVjdgp6YiE5VEZvRm9sa0grb0h0VkAoM3RDdkpQIzhuY29i
MD5HOSY7O1RiO2BtZCFRVWwrc0JDbVVqNntQVlRLSTJxblMKejB1P2M9NGs5MFBYVX5uU0IxPzBU
WU09SGwjQ0IqRWRVMEN4MkNDYkI7RkB7U1huYlU4N3drRGJJSV5hXyFldy10CnpiYUBTfEE2JSgj
Y0RJLUN0YE0kJiE0cUJeTHtTbFVaWnY2XzghTl4yMVU9UXdFVERGaXw0TjVtQjFuS0pQfGVMagp6
S0wpeHtzeVBsMTU5ZjFgWU1VTXIxYk10OW1maTBAcDxpX1EqaDN2cGI1RGE9JGF4PWdAZDl7MDd+
JmM/MmR3Uk4KemNAPSl6NER3LV4jSjlLYXNQYktCNjNrYTJAPDYjaUIxNXxNLSV9a3phMzBUMWxC
XnFBdjJ0fkgqVGUyWkhjcTQkCnptUipuQXZGdXMjPVF2Un5uLXZJKS1mb2JwWGRiYkZCM0pfYDBU
PnpFJH41RjtAN2tvTlYwZEFYOE8lbS1aIT1aeQp6YDgySFczRmthblhxeEw3WXNUcCslPkdIMmdJ
RTRJPy0qbUhEXzFjTENSV0tDbyVjTSU0N248UVR2Vz48XlhDYTkKelVAWVhzTUR7SmleTFQ0blRu
I3VicFR9U3BWZWJDbyZeZmRneEN6dXF3dV59O0QqP0xkUmZla1dEMCsyNTJGJXBYCno3fTtYeTR1
Q1QqKyhQJlI5KWQzaG9OYmR8YENlU0opMH5ufGhKUUxCezNxQ3smalFqSjRvNGUoSVZTZm9BYHhO
Iwp6LUpVM0IhfEdFPWZHa0sxJGtoZD40SFU1QlA7ak05Q0NJK25kNjxnVlhyQWcwd3tFUl5JdVcp
SDdFSzJKe0p9bGsKenZCbGd6NEtoUjkmXzhUSns8YntyUlIyVG9ebnQhI1VrQUVaMkAmRFBlfWto
ejM4S1oyeUVmQDBWVGdMSTdpYGJ4Cnp6amBpa0ExJXRLWTt3NjdTMVl1S0NgOHViZnxIKXReRSs+
c1VxZkJ5c0xoPnVjbTZ2UzV8PzViYVktZyVGQlFfWgp6WExwfkhKKFZpfUxaXzZUTGswQ2I7VHk7
QElfY3hnPX5iZF5WRSY/QkZ8YkFVayZMb2xufmltSTgpbjRrMDg8WksKem10YXhxRHA0a3I8dUpM
TmApdThaRlBhUDxCfG8/PDwoRE5ac1lze0l5bSpjQ3Rne2g3I1dmfW50NkgjcDZqRGZWCno2aTtA
aiZ4WFg9PWJhZyo1YyFQNkh1PnlDN0JhcXRYRn1LbldsZEdLRWt2fFB1Y0RrUnlmWDF+MnlvR3xB
RTgkWQp6Un1UejxtcjF5QEVUZVdRSU5BNVQjJGptfVlBaHk+I2gqUSFDYDcqMHhyNEIhPjF7czAr
UGpXJFdaZn5rcWNzd00KeiohKmJeZX5id3gmeU9IK047Sj1JTElNbEdtcUx2WmVNZjdVVHF3OVlT
MWhyVmswT15POT0oWUBFOUVvTHFrMUJYCnoqQWZgb2FnZGk2JUhzRGVAJXJWRGokVn5oU3JEPzZN
MyhjbkZFPjczeXp6JWxiMFB9OClhVGh+T2YpJShOR1BtVwp6QGU2O3BQfndHKXYjIX1zMmd6dm9L
RXAmRGRHYzVPdDdtfWcjfm9Qcz81RDBWekduIzZ6SVNOc1FWNyhAdXVWblgKeig4PHwoQms9QXMy
LXpXRioyQTt+YCN7X0o9fF85NW5CSnZuej5mfiglKUpFQyE/aEMwX0A8QCMmU1hxWEIlIylwCnpB
bChWSkVodlNfZVpZUUY0QjV6Vk48b1leb09VKG1mTylIRHFpbEo1THN3dG82Myh2VDI9bykxV1ZF
SVA2TDs5dAp6WmdmWXZeRWxyQ0BzeXI1NmY+b3JOSTUrJTRjKHNpP2dtNjs5LTJHUlNAQTJjPHBG
WktWez5PeEhHbmRBZ2NQTjkKelBpPWxtVDBPT211JnYxJVQ1anEqN2FWVXgoOF9LIWg2MF94YWxX
R0ElOTQ2a2luN2AyZTxPdmR2PnJfNkp0cSE1Cno3ezdZalFCem9tUkdNKCpUanpfSyFnP3FEUzlB
Y0RqO35wZU0zPG19emxHTSU+RTZ4VHJAcjduN2x2aFZUSGtnMgp6O3BPRXVGczczeWQpcDhwPktH
JUlARTxDSXVKYD5hbERqSmlRc29qVklPVEwzYyhRK201cjR+N2FVKHByNzteUF8Kem40Kj5WUntQ
KURYKG9iQHg2eGdIRkB6SjBVZj4jeXJVZTZgLUE5RD9DRDlCVkMzQU04K3QmezhQQHtNdTM/MVY3
Cno9Jl96QWVpT1ZxK0UmTHIkUnMpQ2ROTVhGPkx1dz4wdykwNEVhaHtMNyZwNV81PylsJWB+VzA/
ZjdvdHtMR252Mgp6QDxWO2VVZGBIM2l5VFl1eiNqKig7PHgpUk1KO0otZXlyc3Vodkd9KTYxd0Y0
YSp5fiZvSyt7YWxpdy14OXRGPEMKej5JM0ptKitISD5IdX5JMXVJISFLYjMrUHplRSRZM2NHZ2x5
XztiK0FHWTRya0t2KkV+PEVzKXotVHtjJTVFYVhCCnpYVjZ+SFU1PXwpe1hvPUIhKmh2TGRjK0J5
P3s+X05mVzFfWE40NmRYNXBvPiFyKnAtJXlSVXxlQH4oKDtfZlBXbAp6JEFvfUJjKHppakdwNlMq
KkpvUTxyRjVQQStUWlAxMG4+NGxic3ErTnNCT0Z1UiFvR2hUZk1kKE5WWDQ8dmUmPXcKemtFZT9K
b3g5OXZUI0tFRHxJMHpZbiZtZkkyPjBeb1AoQ1Z8K0JtYjJYUVEkKkIrWComRSMmY3lfYEhyTyo8
fGE4Cnp6RGFhR1lWR0NIJjNXZmx2JEw0JSU2OUFlZysyWVBUejJ2bDJock0xcmx9b28yU2M0dGBV
VVFrUGxhNmZfJDFScQp6NGZXVmkhcz5VZyl7Rnl9aHR2MEEhbmxyVVdxYWloWWxiMVdaLTtpKWdp
R0BEUEV+MGtSOXNVQXJOSj1nfDBZOUwKem9eM2VLb35Hez56entxOEVzPUptK1dXPEFga1AkWWtK
bDxLTnd+NnNAQGM4fVZPNTI+Wlloc2BiaD4rOUlnNTYwCnpHcjQxIUNaXmtaUi0rSnFIRnsyPys9
ckVGYGNGPXs/RVE+fiopcDg2Xi05WExqY3ZJLVBsWUNpOyZ9dFhAJkB4Jgp6Z2QmRVM/WFN2NXY7
I2JFaloxSSNFPVgkS2pjb1RkdSQpdWhpcCR7NV89cnR0a2JYSytjPzNqTkkmcHRvSGRWT2wKekZ3
fTFlZElWP3E+aDBIOFZfQV5LNSRXOUQ8MHZRWDZVdXt+aHQzYH4raGVJOzc8U0NKNTNffSY0OzdD
Ym43Q0plCnpUcis9Rkc/JXNGQ2lrKGIkKVE7KmQ3MTsmK2YrZDA3P1ExNCVVN2g4QCNTbmx5WDw+
YUZUMlNUcW5edWp5ZDJgZgp6V2RSPnt0QHVtTEcoQ2VlQTY4a3glISRUeShVSWxWNn1RRXQjKWs9
fV88NU02VU1pSjRkLWBrZVl0eSh2M3JucVoKek8/IUtvWTR3K3gyRVUjNnl2Y3tER2k4alArI3Ik
OUhOMT9iPWV1dnpjMHJ4PShYWVErJSRlRjxEfC1JJkpBRShOCno5eHVxdThvclJKKHIoKGA5S0s8
NnQ/OyY0TX15TU8hMHsjYi08PnFRenUwQ1VYYWBpKXRIRjxxNDBrUn05QWZPUgp6PUA8MFdvbCtg
QENDdnd1bUZKYTlXVl5iKXJpODMjUyh8THVXQXg0LWJVZztqVm4qfEdkZzI4eWNNNFZZTytXNTIK
eiY4aSZWM3xDdklVbEd0bCh2MmN6YyNDWUZrbUB6Z1Rpb0ctQzxwUyljSVR4bj5iQDY3VkZ6Yy1A
VWlZSnstJCR4CnojRVA0YHRueVBSM04lKkdQenxIPTxVM1E+NSZDJFl5SHpafVhzWWkoUmw8Rzlq
anZaPDtyUjhQPjM2JWNofXdFagp6UEc/cVpAWDUlQ2tmXl97OTtjX2Y2RSpCdEB6KlVFIzFHNEsy
WmByVks5MjlhOU96M19HYiNGJDloKXokJmJ4KksKeik+X3laTypKMURASl9RN0twTFpZOzt1Jno1
KU5sTGZnPytLOCNYeWsqO21WRVYrPyU8NF9kLSsxY253QlVIJT1mCnpCa0l0NTZ9RF44X3tSK35U
M2lEMUF1KD9zO3QkcHwxWiQwTU1acFFhdm09XyV4c0lONXtpajlTezxWVmN0SCF6eQp6ZGlPTTZx
d216ezUzTSlKUSZ1UCZBKE1pcyRiYSRKVHYoaTkhcUk7YjZ5ZThLVUdQME87Kn4zUkUhejZXJXom
WSMKenlIZUAzNU5rIXdYaTVZUiRxSFhoPlY9a0g4eUJ8KTRJR05ObFRwdFZgMFUrM2JRa2sxSk94
TkQwVmorSCZyVzt0CnpEeytVPiExO3VpPC1hdm57YzZ2I2FeSF9aVyhkJUJeNi13Nyp3TWdXYG58
aCtxPFN6MiFVN1FMeEpyS3E+MEFIJQpQTzlQYlUpI2JqK2VoVD4/REFFJGsKCmRpZmYgLS1naXQg
YS9XZWJzaXRlcy93ZWJraXQub3JnL3BlcmYvc2xpY2tzcGVlZC9zZWxlY3RvcnMubGlzdCBiL1dl
YnNpdGVzL3dlYmtpdC5vcmcvcGVyZi9zbGlja3NwZWVkL3NlbGVjdG9ycy5saXN0CmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzgzNjgwOTgxOTM4YjQxYzFhOTkzN2RhM2Y0Mzc4MTJk
NTY3YzhkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1dl
YnNpdGVzL3dlYmtpdC5vcmcvcGVyZi9zbGlja3NwZWVkL3NlbGVjdG9ycy5saXN0CisrKyAvZGV2
L251bGwKQEAgLTEsMzYgKzAsMCBAQAotKgotZGl2Om9ubHktY2hpbGQKLWRpdjpmaXJzdC1jaGls
ZAotZGl2Om50aC1jaGlsZChldmVuKQotZGl2Om50aC1jaGlsZCgybikKLWRpdjpudGgtY2hpbGQo
b2RkKQotZGl2Om50aC1jaGlsZCgybisxKQotZGl2Om50aC1jaGlsZChuKQotZGl2Omxhc3QtY2hp
bGQKLWRpdiA+IGRpdgotZGl2ICsgZGl2Ci1kaXYgfiBkaXYKLWJvZHkKLWJvZHkgZGl2Ci1kaXYK
LWRpdiBkaXYKLWRpdiBkaXYgZGl2Ci1kaXYsIGRpdiwgZGl2Ci1kaXYsIGEsIHNwYW4KLS5kaWFs
b2cKLWRpdi5kaWFsb2cKLWRpdiAuZGlhbG9nCi1kaXYuY2hhcmFjdGVyLCBkaXYuZGlhbG9nCi0j
c3BlZWNoNQotZGl2I3NwZWVjaDUKLWRpdiAjc3BlZWNoNQotZGl2LnNjZW5lIGRpdi5kaWFsb2cK
LWRpdiNzY2VuZTEgZGl2LmRpYWxvZyBkaXYKLSNzY2VuZTEgI3NwZWVjaDEKLWRpdlslY2xhc3Nd
Ci1kaXZbJWNsYXNzPWRpYWxvZ10KLWRpdlslY2xhc3NePWRpYV0KLWRpdlslY2xhc3MkPWxvZ10K
LWRpdlslY2xhc3MqPXNjZV0KLWRpdlslY2xhc3N8PWRpYWxvZ10KLWRpdlslY2xhc3N+PWRpYWxv
Z10KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9XZWJzaXRlcy93ZWJr
aXQub3JnL3BlcmYvc2xpY2tzcGVlZC9zdHlsZS5jc3MgYi9XZWJzaXRlcy93ZWJraXQub3JnL3Bl
cmYvc2xpY2tzcGVlZC9zdHlsZS5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdh
OThjMDlhOTI0YzkxNjViOTM4N2IyNTM1MGMxNzUxNGQ0OGNlMjcuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvV2Vic2l0ZXMvd2Via2l0Lm9yZy9wZXJmL3Ns
aWNrc3BlZWQvc3R5bGUuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMTg5ICswLDAgQEAKLWJvZHkg
ewotCWZvbnQ6IDExcHggIkx1Y2lkYSBHcmFuZGUiLCAiVHJlYnVjaGV0IE1TIiwgVmVyZGFuYSwg
c2Fucy1zZXJpZjsKLQljb2xvcjogIzQxNDY0RDsKLQltYXJnaW46IDA7Ci0JcGFkZGluZzogMDsK
LQliYWNrZ3JvdW5kOiAjRjNGMUYxOwotfQotCi0vKm1haW4gcnVsZXMqLwotCi1hOmxpbmssIGE6
dmlzaXRlZCB7Ci0JY29sb3I6ICM1MjhDRTA7Ci19Ci0KLWE6aG92ZXIsIGE6YWN0aXZlIHsKLQlj
b2xvcjogI0M2NUY1RTsKLX0KLQotcCB7Ci0JZm9udC1zaXplOiAxM3B4OwotCW1hcmdpbjogMDsK
LQlwYWRkaW5nOiAzcHggMDsKLX0KLQotaWZyYW1lIHsKLQloZWlnaHQ6IDFweDsKLQl3aWR0aDog
MXB4OwotCXZpc2liaWxpdHk6IGhpZGRlbjsKLX0KLQotc3Bhbi5jbHIgewotCWRpc3BsYXk6IGJs
b2NrOwotCWNsZWFyOiBib3RoOwotfQotCi0vKmhlYWRlciovCi0KLWgxIHsKLQlmb250LWZhbWls
eTogR2VvcmdpYTsKLQltYXJnaW46IDA7Ci0JcGFkZGluZzogMDsKLQliYWNrZ3JvdW5kOiB1cmwo
bG9nby5wbmcpIG5vLXJlcGVhdCB0b3AgbGVmdDsKLQloZWlnaHQ6IDY5cHg7Ci0Jd2lkdGg6IDI4
MHB4OwotfQotCi1oMSBzcGFuIHsKLQlkaXNwbGF5OiBub25lOwotfQotCi1oMiB7Ci0JbWFyZ2lu
OiAwOwotCXBhZGRpbmc6IDEwcHggMDsKLQlmb250LXNpemU6IDE1cHg7Ci19Ci0KLSNjb250YWlu
ZXIgewotCXBhZGRpbmc6IDMwcHg7Ci19Ci0KLS8qY29udHJvbHMqLwotCi0jY29udHJvbHMgYTps
aW5rLCAjY29udHJvbHMgYTp2aXNpdGVkIHsKLQlkaXNwbGF5OiBibG9jazsKLQlmbG9hdDogcmln
aHQ7Ci0JYmFja2dyb3VuZDogI0QwQzhDODsKLQlwYWRkaW5nOiA3cHggMTBweDsKLQlmb250LXNp
emU6IDEzcHg7Ci0JZm9udC13ZWlnaHQ6IGJvbGQ7Ci0JbWFyZ2luLWxlZnQ6IDEwcHg7Ci0JdGV4
dC1hbGlnbjogY2VudGVyOwotCXRleHQtZGVjb3JhdGlvbjogbm9uZTsKLQlib3JkZXI6IDNweCBz
b2xpZCAjZmZmOwotCWNvbG9yOiAjNDE0NjREOwotCXRleHQtc2hhZG93OiAycHggMnB4IDFweCAj
QjlBQ0FDOwotfQotCi0jY29udHJvbHMgYTpob3ZlciwgI2NvbnRyb2xzIGE6YWN0aXZlIHsKLQl0
ZXh0LXNoYWRvdzogbm9uZTsKLQliYWNrZ3JvdW5kOiAjRjNGMUYxOwotCWNvbG9yOiAjNTI4Q0Uw
OwotfQotCi0vKnRhYmxlKi8KLQotdGFibGUgewotCWJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7
Ci0Jd2lkdGg6IDEwMCU7Ci0JbWluLXdpZHRoOiA4MDBweDsKLQltYXJnaW46IDA7Ci0JcGFkZGlu
ZzogMDsKLX0KLQotI2xlZ2VuZCB0ZCB7Ci0JcGFkZGluZzogMTVweDsKLX0KLQotdGQsIHRoIHsK
LQliYWNrZ3JvdW5kOiAjQzhDQkQwOwotCXBhZGRpbmc6IDVweCA4cHg7Ci0JbWFyZ2luOiAwOwot
CXdpZHRoOiAxNTBweDsKLQlmb250LXdlaWdodDogYm9sZDsKLQlib3JkZXI6IDNweCBzb2xpZCAj
ZmZmOwotfQotCi10aCB7Ci0JZm9udC13ZWlnaHQ6IGJvbGQ7Ci0JYmFja2dyb3VuZDogI0QwQzhD
ODsKLQljb2xvcjogIzhBNzU3NTsKLX0KLQotdGguZnJhbWV3b3JrIHsKLQlmb250LXNpemU6IDE1
cHg7Ci0JdGV4dC1zaGFkb3c6IDJweCAycHggMXB4ICNCOUFDQUM7Ci19Ci0KLXRkLnRlc3QsIHRk
LmVtcHR5LCB0aCB7Ci0JdGV4dC1hbGlnbjogcmlnaHQ7Ci19Ci0KLXRkLm5vcm1hbCB7Ci0JY29s
b3I6ICM2MzZBNzU7Ci19Ci0KLXRkLm1pc21hdGNoIHsKLQljb2xvcjogI0FENzUyMDsKLX0KLQot
dGQuZ29vZCB7Ci0JY29sb3I6ICM2NTc1Mjg7Ci0JYmFja2dyb3VuZDogI0NGRTc3MzsKLX0KLQot
dGQuYmFkIHsKLQljb2xvcjogI0IzM0YzRjsKLQliYWNrZ3JvdW5kOiAjRUU5QTlBOwotfQotCi10
ZC5leGNlcHRpb24gewotCWNvbG9yOiAjRjNGMUYxOwotCWJhY2tncm91bmQ6ICM0MTQ2NEQ7Ci19
Ci0KLXNwYW4uZXhjZXB0aW9uIHsKLQljb2xvcjogI0RCRUFGMDsKLQl0ZXh0LWRlY29yYXRpb246
IHVuZGVybGluZTsKLQljdXJzb3I6IGhlbHA7Ci19Ci0KLXRkLnplcm8gewotCWNvbG9yOiAjRjNG
MUYxOwotCWJhY2tncm91bmQ6ICM0MTQ2NEQ7Ci19Ci0KLXRoLnNlbGVjdG9yIHsKLQliYWNrZ3Jv
dW5kOiAjRDJFMEU2OwotCWNvbG9yOiAjNTI4Q0UwOwotCXRleHQtYWxpZ246IGxlZnQ7Ci19Ci0K
LXRoLnNjb3JlLXRpdGxlLCB0aC5zZWxlY3RvcnMtdGl0bGUgewotCXRleHQtYWxpZ246IGxlZnQ7
Ci0JZm9udC1zaXplOiAxMnB4OwotCXdpZHRoOiAxODBweDsKLX0KLQotdGQuc2NvcmUgewotCWNv
bG9yOiAjOEE3NTc1OwotCWJhY2tncm91bmQ6ICNEMEM4Qzg7Ci0JdGV4dC1hbGlnbjogY2VudGVy
OwotCWZvbnQtc2l6ZTogMTJweDsKLX0KLQotdGQubWlzbWF0Y2ggewotCWJhY2tncm91bmQ6ICNF
OEM4OTY7Ci19Ci0KLS8qcGFnZSBmb290ZXIqLwotCi1kaXYjZm9vdGVyIHsKLQlwYWRkaW5nOiAy
MHB4IDA7Ci19Ci0KLWRpdiNmb290ZXIgcCB7Ci0JZm9udC1zaXplOiAxMXB4OwotCWNvbG9yOiAj
QjlBQ0FDOwotfQotCmRpZmYgLS1naXQgYS9XZWJzaXRlcy93ZWJraXQub3JnL3BlcmYvc2xpY2tz
cGVlZC9zeXN0ZW0vaW5kZXgucGhwIGIvV2Vic2l0ZXMvd2Via2l0Lm9yZy9wZXJmL3NsaWNrc3Bl
ZWQvc3lzdGVtL2luZGV4LnBocApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzcxYzU5
YzcwODAwZGYyNDg5Y2RhOTZhZTU1YmYxODcxMDJmNzY1MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9XZWJzaXRlcy93ZWJraXQub3JnL3BlcmYvc2xpY2tz
cGVlZC9zeXN0ZW0vaW5kZXgucGhwCisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLTw/
cGhwCi0KLQkkZnJhbWV3b3JrcyA9IHBhcnNlX2luaV9maWxlKCdjb25maWcuaW5pJywgdHJ1ZSk7
Ci0JJHNlbGVjdG9ycyA9IGZpbGVfZ2V0X2NvbnRlbnRzKCdzZWxlY3RvcnMubGlzdCcpOwotCi0/
PgotPCFET0NUWVBFIGh0bWw+Ci0KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5
L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KLTxoZWFkPgotCTxtZXRhIGh0dHAtZXF1
aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ii8+Ci0J
PHRpdGxlPlNsaWNrU3BlZWQgU2VsZWN0b3JzIFRlc3Q8L3RpdGxlPgotCTxsaW5rIHJlbD0ic3R5
bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9InNjcmVlbiI+
Ci0JCi0JPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotCQk8P3BocAotCQkkc2VsZWN0
b3JzID0gZXhwbG9kZSgiXG4iLCAkc2VsZWN0b3JzKTsKLQkJZm9yZWFjaCAoJHNlbGVjdG9ycyBh
cyAkaSA9PiAkc2VsZWN0b3IpICRsaXN0WyRpXSA9ICInIi4kc2VsZWN0b3IuIiciOwotCQkkbGlz
dCA9IGltcGxvZGUoJywnLCAkbGlzdCk7Ci0JCWVjaG8gIndpbmRvdy5zZWxlY3RvcnMgPSBbJGxp
c3RdIjsKLQkJPz4KLQk8L3NjcmlwdD4KLQkKLQk8c2NyaXB0IHNyYz0ic3lzdGVtL3NsaWNrc3Bl
ZWQuanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci0KLTxib2R5
PgotCQotPGRpdiBpZD0iY29udGFpbmVyIj4KLQkKLQk8ZGl2IGlkPSJjb250cm9scyI+Ci0JCTxh
IGNsYXNzPSJzdG9wIiBocmVmPSIjIj5zdG9wIHRlc3RzPC9hPgotCQk8YSBjbGFzcz0ic3RhcnQi
IGhyZWY9IiMiPnN0YXJ0IHRlc3RzPC9hPgotCTwvZGl2PgotCQotPD9waHAgaW5jbHVkZSgnaGVh
ZGVyLmh0bWwnKTsgPz4KLQotPD9waHAKLQlmb3JlYWNoICgkZnJhbWV3b3JrcyBhcyAkZnJhbWV3
b3JrID0+ICRwcm9wZXJ0aWVzKXsKLQkJJGluY2x1ZGUgPSAkcHJvcGVydGllc1snZmlsZSddOwot
CQkkZnVuY3Rpb24gPSAkcHJvcGVydGllc1snZnVuY3Rpb24nXTsKLQkJJG1vZGlmaWVyID0gJHBy
b3BlcnRpZXNbJ21vZGlmaWVyJ107Ci0JCSR0aW1lID0gdGltZSgpOwotCQllY2hvICI8aWZyYW1l
IG5hbWU9JyRmcmFtZXdvcmsnIHNyYz0nc3lzdGVtL3RlbXBsYXRlLnBocD9pbmNsdWRlPSRpbmNs
dWRlJmZ1bmN0aW9uPSRmdW5jdGlvbiZtb2RpZmllcj0kbW9kaWZpZXImbm9jYWNoZT0kdGltZSc+
PC9pZnJhbWU+XG5cbiI7Ci0JfQotPz4KLQotPHRhYmxlPgotCi0JPHRoZWFkIGlkPSJ0aGVhZCI+
Ci0JCTx0cj4KLQkJCTx0aCBjbGFzcz0ic2VsZWN0b3JzLXRpdGxlIj5zZWxlY3RvcnM8L3RoPgot
CQkJPD9waHAKLQkJCQlmb3JlYWNoICgkZnJhbWV3b3JrcyBhcyAkZnJhbWV3b3JrID0+ICRwcm9w
ZXJ0aWVzKXsKLQkJCQkJZWNobyAiPHRoIGNsYXNzPSdmcmFtZXdvcmsnPiRmcmFtZXdvcms8L3Ro
PiI7Ci0JCQkJfQotCQkJPz4KLQkJPC90cj4KLQk8L3RoZWFkPgotCi0JPHRib2R5IGlkPSJ0Ym9k
eSI+Ci0JCTw/cGhwCi0JCQlmb3JlYWNoICgkc2VsZWN0b3JzIGFzICRzZWxlY3Rvcil7Ci0JCQkJ
ZWNobyAiPHRyPiI7Ci0JCQkJJHNlbGVjdG9yID0gc3RyX3JlcGxhY2UoJyUnLCAnJywgJHNlbGVj
dG9yKTsKLQkJCQllY2hvICI8dGggY2xhc3M9J3NlbGVjdG9yJz4kc2VsZWN0b3I8L3RoPiI7Ci0J
CQkJZm9yZWFjaCAoJGZyYW1ld29ya3MgYXMgJGZyYW1ld29yayl7Ci0JCQkJCWVjaG8gIjx0ZCBj
bGFzcz0nZW1wdHknPjwvdGQ+IjsKLQkJCQl9Ci0JCQkJZWNobyAiPC90cj4iOwotCQkJfQotCQk/
PgotCTwvdGJvZHk+Ci0JCi0JPHRmb290IGlkPSJ0Zm9vdCI+Ci0JCTx0cj4KLQkJPHRoIGNsYXNz
PSJzY29yZS10aXRsZSI+PHN0cm9uZz5maW5hbCB0aW1lIChsZXNzIGlzIGJldHRlcik8L3N0cm9u
Zz48L3RoPgotCQk8P3BocAotCQkJZm9yZWFjaCAoJGZyYW1ld29ya3MgYXMgJGZyYW1ld29yayl7
Ci0JCQkJZWNobyAiPHRkIGNsYXNzPSdzY29yZSc+MDwvdGQ+IjsKLQkJCX0KLQkJPz4KLQkJPC90
cj4KLQk8L3Rmb290PgotCi08L3RhYmxlPgotCi08aDI+TGVnZW5kPC9oMj4KLQotPHRhYmxlIGlk
PSJsZWdlbmQiPgotCi0JPHRyPgotCQk8dGg+dGhlIGZhc3RlcjwvdGg+Ci0JCTx0aD50aGUgc2xv
d2VyPC90aD4KLQkJPHRoPmV4Y2VwdGlvbiB0aHJvd24gb3IgemVybyBlbGVtZW50cyBmb3VuZDwv
dGg+Ci0JCTx0aD5kaWZmZXJlbnQgcmV0dXJuZWQgZWxlbWVudHM8L3RoPgotCTwvdHI+Ci0KLQk8
dHI+Ci0JCTx0ZCBjbGFzcz0iZ29vZCI+PC90ZD4KLQkJPHRkIGNsYXNzPSJiYWQiPjwvdGQ+Ci0J
CTx0ZCBjbGFzcz0iZXhjZXB0aW9uIj48L3RkPgotCQk8dGQgY2xhc3M9Im1pc21hdGNoIj48L3Rk
PgotCTwvdHI+Ci0KLTwvdGFibGU+Ci0KLTw/cGhwIGluY2x1ZGUoJ2Zvb3Rlci5odG1sJyk7ID8+
Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
ZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3dlYmtpdC5vcmcvcGVyZi9zbGlja3NwZWVkL3N5c3RlbS9z
bGlja3NwZWVkLmpzIGIvV2Vic2l0ZXMvd2Via2l0Lm9yZy9wZXJmL3NsaWNrc3BlZWQvc3lzdGVt
L3NsaWNrc3BlZWQuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlNGMxYjVjMTdm
OTI5ODAwYzdkZjAxYmYwZDU3OTQwMDFkNWM4ZTQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvV2Vic2l0ZXMvd2Via2l0Lm9yZy9wZXJmL3NsaWNrc3BlZWQv
c3lzdGVtL3NsaWNrc3BlZWQuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTQgKzAsMCBAQAotLy9i
YXNlIHRlc3QgZnVuY3Rpb25zCi0KLWZ1bmN0aW9uIGZvckVhY2goaXRlcmFibGUsIGZuLCBiaW5k
KXsKLQlmb3IgKHZhciBpID0gMCwgaiA9IGl0ZXJhYmxlLmxlbmd0aDsgaSA8IGo7IGkrKykgZm4u
Y2FsbChiaW5kLCBpdGVyYWJsZVtpXSwgaSwgaXRlcmFibGUpOwotfTsKLQotLy90ZXN0IHN0YXJ0
Ci0KLXdpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbigpewotCQotCXZhciBmcmFtZXdvcmtzID0ge307
Ci0JCi0JZm9yRWFjaChkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaWZyYW1lJyksIGZ1
bmN0aW9uKGlmcmFtZSl7Ci0JCWZyYW1ld29ya3NbaWZyYW1lLm5hbWVdID0gewotCQkJJ3Rlc3Qn
OiB3aW5kb3cuZnJhbWVzW2lmcmFtZS5uYW1lXS50ZXN0LAotCQkJJ2F0dHJpYnV0ZSc6IHdpbmRv
dy5mcmFtZXNbaWZyYW1lLm5hbWVdLm1vZGlmaWVyIHx8ICcnLAotCQkJJ3NlbGVjdG9ycyc6IFtd
Ci0JCX07Ci0JfSk7Ci0JCi0JdmFyIHRib2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Ri
b2R5Jyk7Ci0JdmFyIHRmb290ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rmb290Jyk7Ci0J
dmFyIGxhc3Ryb3cgPSB0Zm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZSgndHInKVswXTsKLQkKLQl2
YXIgY29udHJvbHMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udHJvbHMnKTsKLQkKLQl2
YXIgbGlua3MgPSBjb250cm9scy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYScpOwotCQotCXZhciBz
dGFydCA9IGxpbmtzWzFdOwotCXZhciBzdG9wID0gbGlua3NbMF07Ci0JCi0Jc3RhcnQub25jbGlj
ayA9IGZ1bmN0aW9uKCl7Ci0JCXRlc3RSdW5uZXIoKTsKLQkJcmV0dXJuIGZhbHNlOwotCX07Ci0J
Ci0Jc3RvcC5vbmNsaWNrID0gZnVuY3Rpb24oKXsKLQkJY2xlYXJUaW1lb3V0KHRpbWVyKTsKLQkJ
dGltZXIgPSBudWxsOwotCQlyZXR1cm4gZmFsc2U7Ci0JfTsKLQkKLQl2YXIgc2NvcmUgPSBbXTsK
LQl2YXIgc2NvcmVzID0ge307Ci0JCi0JdmFyIGZyeGkgPSAwOwotCWZvciAodmFyIG5hbWUgaW4g
ZnJhbWV3b3Jrcyl7Ci0JCXZhciBmcmFtZXdvcmsgPSBmcmFtZXdvcmtzW25hbWVdOwotCQlmb3JF
YWNoKHdpbmRvdy5zZWxlY3RvcnMsIGZ1bmN0aW9uKHNlbGVjdG9yKXsKLQkJCXZhciBmcmFtZXdv
cmtTZWxlY3RvciA9IHNlbGVjdG9yLnJlcGxhY2UoJyUnLCBmcmFtZXdvcmtzW25hbWVdLmF0dHJp
YnV0ZSk7Ci0JCQlmcmFtZXdvcmsuc2VsZWN0b3JzLnB1c2goZnJhbWV3b3JrU2VsZWN0b3IpOwot
CQl9KTsKLQkJc2NvcmVzW25hbWVdID0gbGFzdHJvdy5nZXRFbGVtZW50c0J5VGFnTmFtZSgndGQn
KVtmcnhpXTsKLQkJc2NvcmVbbmFtZV0gPSAwOwotCQlmcnhpKys7Ci0JfQotCQotCXZhciB0ZXN0
cyA9IFtdOwotCi0JZm9yRWFjaCh3aW5kb3cuc2VsZWN0b3JzLCBmdW5jdGlvbihzZWxlY3Rvciwg
aSl7Ci0JCXZhciBmcnhpID0gMDsKLQkJdmFyIHJvdyA9IHRib2R5LmdldEVsZW1lbnRzQnlUYWdO
YW1lKCd0cicpW2ldOwotCQlmb3IgKHZhciBuYW1lIGluIGZyYW1ld29ya3MpewotCQkJdmFyIGZy
YW1ld29yayA9IGZyYW1ld29ya3NbbmFtZV07Ci0JCQl2YXIgY2VsbCA9IHJvdy5nZXRFbGVtZW50
c0J5VGFnTmFtZSgndGQnKVtmcnhpXTsKLQkJCXRlc3RzLnB1c2goewotCQkJCSdleGVjdXRlJzog
ZnJhbWV3b3JrLnRlc3QsCi0JCQkJJ3NlbGVjdG9yJzogZnJhbWV3b3JrLnNlbGVjdG9yc1tpXSwK
LQkJCQknbmFtZSc6IG5hbWUsCi0JCQkJJ3Jvdyc6IHJvdywKLQkJCQknY2VsbCcgOiBjZWxsCi0J
CQl9KTsKLQkJCWZyeGkrKzsKLQkJfQotCX0pOwotCQotCXZhciB0aW1lciA9IG51bGw7Ci0JCi0J
dmFyIHRlc3RSdW5uZXIgPSBmdW5jdGlvbigpewotCQl2YXIgdGVzdCA9IHRlc3RzLnNoaWZ0KCk7
Ci0JCWlmICghdGVzdCkgcmV0dXJuOwotCQl2YXIgcmVzdWx0cyA9IHRlc3QuZXhlY3V0ZSh0ZXN0
LnNlbGVjdG9yKTsKLQkJdGVzdC5jZWxsLmNsYXNzTmFtZSA9ICd0ZXN0JzsKLQkJdGVzdC5jZWxs
LmlubmVySFRNTCA9IHJlc3VsdHMudGltZSArICcgbXMgfCAnICsgcmVzdWx0cy5mb3VuZCArICcg
Zm91bmQnOwotCQl0ZXN0LmNlbGwuc3BlZWQgPSByZXN1bHRzLnRpbWU7Ci0JCWlmIChyZXN1bHRz
LmZvdW5kID09IDApewotCQkJdGVzdC5jZWxsLmlubmVySFRNTCA9IHJlc3VsdHMudGltZSArICcg
bXMgfCB6ZXJvIHJlc3VsdHMnOwotCQkJdGVzdC5jZWxsLmNsYXNzTmFtZSArPSAnIHplcm8nOwot
CQkJdGVzdC5jZWxsLmZvdW5kID0gMDsKLQkJCXRlc3QuY2VsbC5lcnJvciA9IHRydWU7Ci0JCX0g
ZWxzZSBpZiAocmVzdWx0cy5lcnJvcil7Ci0JCQl0ZXN0LmNlbGwuaW5uZXJIVE1MID0gcmVzdWx0
cy50aW1lICsgJyBtcyB8IDxzcGFuIGNsYXNzPSJleGNlcHRpb24iIHRpdGxlPSInICsgcmVzdWx0
cy5lcnJvciArICciPmVycm9yIHJldHVybmVkPC9hPic7Ci0JCQl0ZXN0LmNlbGwuY2xhc3NOYW1l
ICs9ICcgZXhjZXB0aW9uJzsKLQkJCXRlc3QuY2VsbC5mb3VuZCA9IDA7Ci0JCQl0ZXN0LmNlbGwu
ZXJyb3IgPSB0cnVlOwotCQl9IGVsc2UgewotCQkJdGVzdC5jZWxsLmZvdW5kID0gcmVzdWx0cy5m
b3VuZDsKLQkJCXRlc3QuY2VsbC5lcnJvciA9IGZhbHNlOwotCQl9Ci0JCQotCQlzY29yZVt0ZXN0
Lm5hbWVdICs9IHRlc3QuY2VsbC5zcGVlZDsKLQkJc2NvcmVzW3Rlc3QubmFtZV0uaW5uZXJIVE1M
ID0gICcmbmJzcDsnICsgc2NvcmVbdGVzdC5uYW1lXSArICcmbmJzcDsnOwotCQkKLQkJaWYgKHRl
c3QuY2VsbCA9PSB0ZXN0LnJvdy5sYXN0Q2hpbGQpIGNvbG91clJvdyh0ZXN0LnJvdyk7Ci0JCXRp
bWVyID0gc2V0VGltZW91dCh0ZXN0UnVubmVyLCAwKTsKLQl9OwotCQotCXZhciBjb2xvdXJSb3cg
PSBmdW5jdGlvbihyb3cpewotCQkKLQkJdmFyIGNlbGxzID0gW107Ci0JCQotCQl2YXIgdGRzID0g
cm93LmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0ZCcpOwotCQlmb3JFYWNoKHRkcywgZnVuY3Rpb24o
dGQpewotCQkJY2VsbHMucHVzaCh0ZCk7Ci0JCX0pOwotCQkKLQkJdmFyIHNwZWVkcyA9IFtdOwot
CQkKLQkJZm9yRWFjaChjZWxscywgZnVuY3Rpb24oY2VsbCwgaSl7Ci0JCQlpZiAoIWNlbGwuZXJy
b3IpIHNwZWVkc1tpXSA9IGNlbGwuc3BlZWQ7Ci0JCQkvL2Vycm9yLCBzbyB3ZSBleGNsdWRlIGl0
IGZyb20gY29sb3VyaW5nCi0JCQllbHNlIHNwZWVkc1tpXSA9IDk5OTk5OTk5OTk5OTk5OTk5OTk5
OTk5OwotCQl9KTsKLQkJCi0JCXZhciBtaW4gPSBNYXRoLm1pbi5hcHBseSh0aGlzLCBzcGVlZHMp
OwotCQl2YXIgbWF4ID0gTWF0aC5tYXguYXBwbHkodGhpcywgc3BlZWRzKTsKLQkJCi0JCXZhciBm
b3VuZCA9IFtdOwotCQl2YXIgbWlzbWF0Y2ggPSBmYWxzZTsKLQkJZm9yRWFjaChjZWxscywgZnVu
Y3Rpb24oY2VsbCwgaSl7Ci0JCQlmb3VuZC5wdXNoKGNlbGwuZm91bmQpOwotCQkJaWYgKCFtaXNt
YXRjaCl7Ci0JCQkJZm9yRWFjaChmb3VuZCwgZnVuY3Rpb24obil7Ci0JCQkJCWlmIChjZWxsLmZv
dW5kICYmIG4gJiYgY2VsbC5mb3VuZCAhPSBuKXsKLQkJCQkJCW1pc21hdGNoID0gdHJ1ZTsKLQkJ
CQkJCXJldHVybjsKLQkJCQkJfQotCQkJCX0pOwotCQkJfQotCQkJaWYgKGNlbGwuc3BlZWQgPT0g
bWluKSBjZWxsLmNsYXNzTmFtZSArPSAnIGdvb2QnOwotCQkJZWxzZSBpZiAoY2VsbC5zcGVlZCA9
PSBtYXgpIGNlbGwuY2xhc3NOYW1lICs9ICcgYmFkJzsKLQkJCWVsc2UgY2VsbC5jbGFzc05hbWUg
Kz0gJyBub3JtYWwnOwotCQl9KTsKLQkJCi0JCWlmIChtaXNtYXRjaCl7Ci0JCQlmb3JFYWNoKGNl
bGxzLCBmdW5jdGlvbihjZWxsLCBpKXsKLQkJCQlpZiAoY2VsbC5mb3VuZCkgY2VsbC5jbGFzc05h
bWUgKz0gJyBtaXNtYXRjaCc7Ci0JCQl9KTsKLQkJfQotCQkKLQl9OwotCQotCi19OwpcIE5vIG5l
d2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3dlYmtpdC5vcmcvcGVy
Zi9zbGlja3NwZWVkL3N5c3RlbS90ZW1wbGF0ZS5waHAgYi9XZWJzaXRlcy93ZWJraXQub3JnL3Bl
cmYvc2xpY2tzcGVlZC9zeXN0ZW0vdGVtcGxhdGUucGhwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBlYmI3ZGNmZGIzMDA5MzdmNTdjNjY2MDA5YzkyNDFiMjNkNWZjZmEzLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1dlYnNpdGVzL3dlYmtpdC5v
cmcvcGVyZi9zbGlja3NwZWVkL3N5c3RlbS90ZW1wbGF0ZS5waHAKKysrIC9kZXYvbnVsbApAQCAt
MSw0MSArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLQotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cu
dzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iIGRlYnVnPSJ0cnVlIj4K
LTxoZWFkPgotCTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9o
dG1sOyBjaGFyc2V0PXV0Zi04Ii8+Ci0JCi0JPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQi
IHNyYz0iLi4vZnJhbWV3b3Jrcy88P3BocCBlY2hvICRfR0VUWydpbmNsdWRlJ107ID8+Ij48L3Nj
cmlwdD4KLQkKLQk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0JCQotCQl2YXIgbW9k
aWZpZXIgPSA8P3BocCBlY2hvICciJy4kX0dFVFsnbW9kaWZpZXInXS4nIic7ID8+OwotCQotCQlm
dW5jdGlvbiB0ZXN0KHNlbGVjdG9yKXsKLQkJCXRyeSB7Ci0JCQkJdmFyIHN0YXJ0ID0gbmV3IERh
dGUoKS5nZXRUaW1lKCk7Ci0JCQkJdmFyIGVsZW1lbnRzID0gPD9waHAgZWNobyAkX0dFVFsnZnVu
Y3Rpb24nXTsgPz4oc2VsZWN0b3IpOwotCQkJCXZhciBzdGVwID0gKG5ldyBEYXRlKCkuZ2V0VGlt
ZSgpIC0gc3RhcnQpOwotCQkJCWlmIChzdGVwID4gNzUwKSByZXR1cm4geyd0aW1lJzogc3RlcCwg
J2ZvdW5kJzogZWxlbWVudHMubGVuZ3RofTsKLQkJCQlmb3IodmFyIGkgPSAwOyBpIDwgMjUwOyBp
KyspCi0JCQkJewotCQkJCTw/cGhwIGVjaG8gJF9HRVRbJ2Z1bmN0aW9uJ107ID8+KHNlbGVjdG9y
KTsKLQkJCQl9Ci0JCQkJdmFyIGVuZCA9IChuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIHN0YXJ0KTsK
LQkJCQlyZXR1cm4geyd0aW1lJzogTWF0aC5yb3VuZChlbmQpLCAnZm91bmQnOiBlbGVtZW50cy5s
ZW5ndGh9OwotCQkJfSBjYXRjaChlcnIpewotCQkJCWlmIChlbGVtZW50cyA9PSB1bmRlZmluZWQp
IGVsZW1lbnRzID0ge2xlbmd0aDogLTF9OwotCQkJCXJldHVybiAoeyd0aW1lJzogKG5ldyBEYXRl
KCkuZ2V0VGltZSgpIC0gc3RhcnQpLCAnZm91bmQnOiBlbGVtZW50cy5sZW5ndGgsICdlcnJvcic6
IGVycn0pOwotCQkJfQotCi0JCX07Ci0JCi0JPC9zY3JpcHQ+Ci0JCi08L2hlYWQ+Ci0KLTxib2R5
PgotCQotCTw/cGhwIGluY2x1ZGUoJy4uL3RlbXBsYXRlLmh0bWwnKTs/PgotCi08L2JvZHk+Ci08
L2h0bWw+CmRpZmYgLS1naXQgYS9XZWJzaXRlcy93ZWJraXQub3JnL3BlcmYvc2xpY2tzcGVlZC90
ZW1wbGF0ZS5odG1sIGIvV2Vic2l0ZXMvd2Via2l0Lm9yZy9wZXJmL3NsaWNrc3BlZWQvdGVtcGxh
dGUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTlhMzc4ZThmMzZmOGM3Y2Ew
ODk2NmY5NmVjMmYwZDExNDdiODgxMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9XZWJzaXRlcy93ZWJraXQub3JnL3BlcmYvc2xpY2tzcGVlZC90ZW1wbGF0
ZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTAzICswLDAgQEAKLTxkaXYgaWQ9InRlc3QiPgot
CTxkaXYgY2xhc3M9ImRpYWxvZyI+Ci0JPGgyPkFzIFlvdSBMaWtlIEl0PC9oMj4KLQk8ZGl2IGlk
PSJwbGF5d3JpZ2h0Ij4KLQotCSAgYnkgV2lsbGlhbSBTaGFrZXNwZWFyZQotCi0KLQk8L2Rpdj4K
LQk8ZGl2IGNsYXNzPSJkaWFsb2cgc2NlbmUgdGhpcmRDbGFzcyIgaWQ9InNjZW5lMSI+Ci0JICA8
aDM+QUNUIEksIFNDRU5FIElJSS4gQSByb29tIGluIHRoZSBwYWxhY2UuPC9oMz4KLQotCSAgPGRp
diBjbGFzcz0iZGlhbG9nIj4KLQkgIDxkaXYgY2xhc3M9ImRpcmVjdGlvbiI+RW50ZXIgQ0VMSUEg
YW5kIFJPU0FMSU5EPC9kaXY+Ci0KLQkgIDwvZGl2PgotCi0JICA8ZGl2IGlkPSJzcGVlY2gxIiBj
bGFzcz0iY2hhcmFjdGVyIj5DRUxJQTwvZGl2PgotCi0JICA8ZGl2IGNsYXNzPSJkaWFsb2ciPgot
CSAgPGRpdiBpZD0ic2NlbmUxLjMuMSI+V2h5LCBjb3VzaW4hIHdoeSwgUm9zYWxpbmQhIEN1cGlk
IGhhdmUgbWVyY3khIG5vdCBhIHdvcmQ/PC9kaXY+Ci0KLQkgIDwvZGl2PgotCi0JICA8ZGl2IGlk
PSJzcGVlY2gyIiBjbGFzcz0iY2hhcmFjdGVyIj5ST1NBTElORDwvZGl2PgotCi0JICA8ZGl2IGNs
YXNzPSJkaWFsb2ciPgotCSAgPGRpdiBpZD0ic2NlbmUxLjMuMiI+Tm90IG9uZSB0byB0aHJvdyBh
dCBhIGRvZy48L2Rpdj4KLQotCSAgPC9kaXY+Ci0KLQkgIDxkaXYgaWQ9InNwZWVjaDMiIGNsYXNz
PSJjaGFyYWN0ZXIiPkNFTElBPC9kaXY+Ci0KLQkgIDxkaXYgY2xhc3M9ImRpYWxvZyI+Ci0JICA8
ZGl2IGlkPSJzY2VuZTEuMy4zIj5ObywgdGh5IHdvcmRzIGFyZSB0b28gcHJlY2lvdXMgdG8gYmUg
Y2FzdCBhd2F5IHVwb248L2Rpdj4KLQotCSAgPGRpdiBpZD0ic2NlbmUxLjMuNCI+Y3VyczsgdGhy
b3cgc29tZSBvZiB0aGVtIGF0IG1lOyBjb21lLCBsYW1lIG1lIHdpdGggcmVhc29ucy48L2Rpdj4K
LQkgIDwvZGl2PgotCi0JICA8ZGl2IGlkPSJzcGVlY2g0IiBjbGFzcz0iY2hhcmFjdGVyIj5ST1NB
TElORDwvZGl2PgotCi0JICA8ZGl2IGlkPSJzcGVlY2g1IiBjbGFzcz0iY2hhcmFjdGVyIj5DRUxJ
QTwvZGl2PgotCi0JICA8ZGl2IGNsYXNzPSJkaWFsb2ciPgotCSAgPGRpdiBpZD0ic2NlbmUxLjMu
OCI+QnV0IGlzIGFsbCB0aGlzIGZvciB5b3VyIGZhdGhlcj88L2Rpdj4KLQotCSAgPC9kaXY+Ci0K
LQkgIDxkaXYgY2xhc3M9ImRpYWxvZyI+Ci0JICA8ZGl2IGlkPSJzY2VuZTEuMy41Ij5UaGVuIHRo
ZXJlIHdlcmUgdHdvIGNvdXNpbnMgbGFpZCB1cDsgd2hlbiB0aGUgb25lPC9kaXY+Ci0JICA8ZGl2
IGlkPSJzY2VuZTEuMy42Ij5zaG91bGQgYmUgbGFtZWQgd2l0aCByZWFzb25zIGFuZCB0aGUgb3Ro
ZXIgbWFkPC9kaXY+Ci0KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjciPndpdGhvdXQgYW55LjwvZGl2
PgotCSAgPC9kaXY+Ci0KLQkgIDxkaXYgaWQ9InNwZWVjaDYiIGNsYXNzPSJjaGFyYWN0ZXIiPlJP
U0FMSU5EPC9kaXY+Ci0KLQkgIDxkaXYgY2xhc3M9ImRpYWxvZyI+Ci0JICA8ZGl2IGlkPSJzY2Vu
ZTEuMy45Ij5Obywgc29tZSBvZiBpdCBpcyBmb3IgbXkgY2hpbGQncyBmYXRoZXIuIE8sIGhvdzwv
ZGl2PgotCi0JICA8ZGl2IGlkPSJzY2VuZTEuMy4xMCI+ZnVsbCBvZiBicmllcnMgaXMgdGhpcyB3
b3JraW5nLWRheSB3b3JsZCE8L2Rpdj4KLQotCSAgPC9kaXY+Ci0KLQkgIDxkaXYgaWQ9InNwZWVj
aDciIGNsYXNzPSJjaGFyYWN0ZXIiPkNFTElBPC9kaXY+Ci0KLQkgIDxkaXYgY2xhc3M9ImRpYWxv
ZyI+Ci0KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjExIj5UaGV5IGFyZSBidXQgYnVycywgY291c2lu
LCB0aHJvd24gdXBvbiB0aGVlIGluPC9kaXY+Ci0JICA8ZGl2IGlkPSJzY2VuZTEuMy4xMiI+aG9s
aWRheSBmb29sZXJ5OiBpZiB3ZSB3YWxrIG5vdCBpbiB0aGUgdHJvZGRlbjwvZGl2PgotCi0JICA8
ZGl2IGlkPSJzY2VuZTEuMy4xMyI+cGF0aHMgb3VyIHZlcnkgcGV0dGljb2F0cyB3aWxsIGNhdGNo
IHRoZW0uPC9kaXY+Ci0JICA8L2Rpdj4KLQotCSAgPGRpdiBpZD0ic3BlZWNoOCIgY2xhc3M9ImNo
YXJhY3RlciI+Uk9TQUxJTkQ8L2Rpdj4KLQotCSAgPGRpdiBjbGFzcz0iZGlhbG9nIj4KLQkgIDxk
aXYgaWQ9InNjZW5lMS4zLjE0Ij5JIGNvdWxkIHNoYWtlIHRoZW0gb2ZmIG15IGNvYXQ6IHRoZXNl
IGJ1cnMgYXJlIGluIG15IGhlYXJ0LjwvZGl2PgotCSAgPC9kaXY+Ci0KLQkgIDxkaXYgaWQ9InNw
ZWVjaDkiIGNsYXNzPSJjaGFyYWN0ZXIiPkNFTElBPC9kaXY+Ci0KLQkgIDxkaXYgY2xhc3M9ImRp
YWxvZyI+Ci0JICA8ZGl2IGlkPSJzY2VuZTEuMy4xNSI+SGVtIHRoZW0gYXdheS48L2Rpdj4KLQot
CSAgPC9kaXY+Ci0KLQkgIDxkaXYgaWQ9InNwZWVjaDEwIiBjbGFzcz0iY2hhcmFjdGVyIj5ST1NB
TElORDwvZGl2PgotCi0JICA8ZGl2IGNsYXNzPSJkaWFsb2ciPgotCi0JICA8ZGl2IGlkPSJzY2Vu
ZTEuMy4xNiI+SSB3b3VsZCB0cnksIGlmIEkgY291bGQgY3J5ICdoZW0nIGFuZCBoYXZlIGhpbS48
L2Rpdj4KLQkgIDwvZGl2PgotCi0JICA8ZGl2IGlkPSJzcGVlY2gxMSIgY2xhc3M9ImNoYXJhY3Rl
ciI+Q0VMSUE8L2Rpdj4KLQotCSAgPGRpdiBjbGFzcz0iZGlhbG9nIj4KLQkgIDxkaXYgaWQ9InNj
ZW5lMS4zLjE3Ij5Db21lLCBjb21lLCB3cmVzdGxlIHdpdGggdGh5IGFmZmVjdGlvbnMuPC9kaXY+
Ci0KLQkgIDwvZGl2PgotCi0JICA8ZGl2IGlkPSJzcGVlY2gxMiIgY2xhc3M9ImNoYXJhY3RlciI+
Uk9TQUxJTkQ8L2Rpdj4KLQkgIDxkaXYgY2xhc3M9ImRpYWxvZyI+Ci0JICA8ZGl2IGlkPSJzY2Vu
ZTEuMy4xOCI+TywgdGhleSB0YWtlIHRoZSBwYXJ0IG9mIGEgYmV0dGVyIHdyZXN0bGVyIHRoYW4g
bXlzZWxmITwvZGl2PgotCi0JICA8L2Rpdj4KLQotCSAgPGRpdiBpZD0ic3BlZWNoMTMiIGNsYXNz
PSJjaGFyYWN0ZXIiPkNFTElBPC9kaXY+Ci0KLQkgIDxkaXYgY2xhc3M9ImRpYWxvZyI+Ci0KLQkg
IDxkaXYgaWQ9InNjZW5lMS4zLjE5Ij5PLCBhIGdvb2Qgd2lzaCB1cG9uIHlvdSEgeW91IHdpbGwg
dHJ5IGluIHRpbWUsIGluPC9kaXY+Ci0JICA8ZGl2IGlkPSJzY2VuZTEuMy4yMCI+ZGVzcGl0ZSBv
ZiBhIGZhbGwuIEJ1dCwgdHVybmluZyB0aGVzZSBqZXN0cyBvdXQgb2Y8L2Rpdj4KLQkgIDxkaXYg
aWQ9InNjZW5lMS4zLjIxIj5zZXJ2aWNlLCBsZXQgdXMgdGFsayBpbiBnb29kIGVhcm5lc3Q6IGlz
IGl0PC9kaXY+Ci0KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjIyIj5wb3NzaWJsZSwgb24gc3VjaCBh
IHN1ZGRlbiwgeW91IHNob3VsZCBmYWxsIGludG8gc288L2Rpdj4KLQkgIDxkaXYgaWQ9InNjZW5l
MS4zLjIzIj5zdHJvbmcgYSBsaWtpbmcgd2l0aCBvbGQgU2lyIFJvd2xhbmQncyB5b3VuZ2VzdCBz
b24/PC9kaXY+Ci0KLQkgIDwvZGl2PgotCi0JICA8ZGl2IGlkPSJzcGVlY2gxNCIgY2xhc3M9ImNo
YXJhY3RlciI+Uk9TQUxJTkQ8L2Rpdj4KLQkgIDxkaXYgY2xhc3M9ImRpYWxvZyI+Ci0JICA8ZGl2
IGlkPSJzY2VuZTEuMy4yNCI+VGhlIGR1a2UgbXkgZmF0aGVyIGxvdmVkIGhpcyBmYXRoZXIgZGVh
cmx5LjwvZGl2PgotCi0JICA8L2Rpdj4KLQotCSAgPGRpdiBpZD0ic3BlZWNoMTUiIGNsYXNzPSJj
aGFyYWN0ZXIiPkNFTElBPC9kaXY+Ci0KLQkgIDxkaXYgY2xhc3M9ImRpYWxvZyI+Ci0KLQkgIDxk
aXYgaWQ9InNjZW5lMS4zLjI1Ij5Eb3RoIGl0IHRoZXJlZm9yZSBlbnN1ZSB0aGF0IHlvdSBzaG91
bGQgbG92ZSBoaXMgc29uPC9kaXY+Ci0KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjI2Ij5kZWFybHk/
IEJ5IHRoaXMga2luZCBvZiBjaGFzZSwgSSBzaG91bGQgaGF0ZSBoaW0sPC9kaXY+Ci0KLQkgIDxk
aXYgaWQ9InNjZW5lMS4zLjI3Ij5mb3IgbXkgZmF0aGVyIGhhdGVkIGhpcyBmYXRoZXIgZGVhcmx5
OyB5ZXQgSSBoYXRlPC9kaXY+Ci0KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjI4Ij5ub3QgT3JsYW5k
by48L2Rpdj4KLQotCSAgPC9kaXY+Ci0KLQkgIDxkaXYgaWQ9InNwZWVjaDE2IiBjbGFzcz0iY2hh
cmFjdGVyIj5ST1NBTElORDwvZGl2PgotCi0JICA8ZGl2IHRpdGxlPSJ3dGYiIGNsYXNzPSJkaWFs
b2ciPgotCi0JICA8ZGl2IGlkPSJzY2VuZTEuMy4yOSI+Tm8sIGZhaXRoLCBoYXRlIGhpbSBub3Qs
IGZvciBteSBzYWtlLjwvZGl2PgotCi0JICA8L2Rpdj4KLQotCSAgPGRpdiBpZD0ic3BlZWNoMTci
IGNsYXNzPSJjaGFyYWN0ZXIiPkNFTElBPC9kaXY+Ci0KLQkgIDxkaXYgY2xhc3M9ImRpYWxvZyI+
Ci0JICA8ZGl2IGlkPSJzY2VuZTEuMy4zMCI+V2h5IHNob3VsZCBJIG5vdD8gZG90aCBoZSBub3Qg
ZGVzZXJ2ZSB3ZWxsPzwvZGl2PgotCi0JICA8L2Rpdj4KLQotCSAgPGRpdiBpZD0ic3BlZWNoMTgi
IGNsYXNzPSJjaGFyYWN0ZXIiPlJPU0FMSU5EPC9kaXY+Ci0KLQkgIDxkaXYgY2xhc3M9ImRpYWxv
ZyI+Ci0JICA8ZGl2IGlkPSJzY2VuZTEuMy4zMSI+TGV0IG1lIGxvdmUgaGltIGZvciB0aGF0LCBh
bmQgZG8geW91IGxvdmUgaGltPC9kaXY+Ci0JICA8ZGl2IGlkPSJzY2VuZTEuMy4zMiI+YmVjYXVz
ZSBJIGRvLiBMb29rLCBoZXJlIGNvbWVzIHRoZSBkdWtlLjwvZGl2PgotCSAgPC9kaXY+Ci0KLQkg
IDxkaXYgaWQ9InNwZWVjaDE5IiBjbGFzcz0iY2hhcmFjdGVyIj5DRUxJQTwvZGl2PgotCSAgPGRp
diBjbGFzcz0iZGlhbG9nIj4KLQotCSAgPGRpdiBpZD0ic2NlbmUxLjMuMzMiPldpdGggaGlzIGV5
ZXMgZnVsbCBvZiBhbmdlci48L2Rpdj4KLQkgIDxkaXYgY2xhc3M9ImRpcmVjdGlvbiI+RW50ZXIg
RFVLRSBGUkVERVJJQ0ssIHdpdGggTG9yZHM8L2Rpdj4KLQkgIDwvZGl2PgotCi0JICA8ZGl2IGlk
PSJzcGVlY2gyMCIgY2xhc3M9ImNoYXJhY3RlciI+RFVLRSBGUkVERVJJQ0s8L2Rpdj4KLQotCSAg
PGRpdiBjbGFzcz0iZGlhbG9nIj4KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjM0Ij5NaXN0cmVzcywg
ZGlzcGF0Y2ggeW91IHdpdGggeW91ciBzYWZlc3QgaGFzdGU8L2Rpdj4KLQotCSAgPGRpdiBpZD0i
c2NlbmUxLjMuMzUiPkFuZCBnZXQgeW91IGZyb20gb3VyIGNvdXJ0LjwvZGl2PgotCSAgPC9kaXY+
Ci0KLQkgIDxkaXYgaWQ9InNwZWVjaDIxIiBjbGFzcz0iY2hhcmFjdGVyIj5ST1NBTElORDwvZGl2
PgotCi0JICA8ZGl2IGNsYXNzPSJkaWFsb2ciPgotCi0JICA8ZGl2IGlkPSJzY2VuZTEuMy4zNiI+
TWUsIHVuY2xlPzwvZGl2PgotCi0JICA8L2Rpdj4KLQotCSAgPGRpdiBpZD0ic3BlZWNoMjIiIGNs
YXNzPSJjaGFyYWN0ZXIiPkRVS0UgRlJFREVSSUNLPC9kaXY+Ci0JICA8ZGl2IGNsYXNzPSJkaWFs
b2ciPgotCSAgPGRpdiBpZD0ic2NlbmUxLjMuMzciPllvdSwgY291c2luPC9kaXY+Ci0KLQkgIDxk
aXYgaWQ9InNjZW5lMS4zLjM4Ij5XaXRoaW4gdGhlc2UgdGVuIGRheXMgaWYgdGhhdCB0aG91IGJl
J3N0IGZvdW5kPC9kaXY+Ci0KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjM5Ij5TbyBuZWFyIG91ciBw
dWJsaWMgY291cnQgYXMgdHdlbnR5IG1pbGVzLDwvZGl2PgotCi0JICA8ZGl2IGlkPSJzY2VuZTEu
My40MCI+VGhvdSBkaWVzdCBmb3IgaXQuPC9kaXY+Ci0KLQkgIDwvZGl2PgotCi0JICA8ZGl2IGlk
PSJzcGVlY2gyMyIgY2xhc3M9ImNoYXJhY3RlciI+Uk9TQUxJTkQ8L2Rpdj4KLQotCSAgPGRpdiBj
bGFzcz0iZGlhbG9nIj4KLQotCSAgPGRpdiBpZD0ic2NlbmUxLjMuNDEiPiAgICAgICAgICAgICAg
ICAgIEkgZG8gYmVzZWVjaCB5b3VyIGdyYWNlLDwvZGl2PgotCi0JICA8ZGl2IGlkPSJzY2VuZTEu
My40MiI+TGV0IG1lIHRoZSBrbm93bGVkZ2Ugb2YgbXkgZmF1bHQgYmVhciB3aXRoIG1lOjwvZGl2
PgotCSAgPGRpdiBpZD0ic2NlbmUxLjMuNDMiPklmIHdpdGggbXlzZWxmIEkgaG9sZCBpbnRlbGxp
Z2VuY2U8L2Rpdj4KLQotCSAgPGRpdiBpZD0ic2NlbmUxLjMuNDQiPk9yIGhhdmUgYWNxdWFpbnRh
bmNlIHdpdGggbWluZSBvd24gZGVzaXJlcyw8L2Rpdj4KLQotCSAgPGRpdiBpZD0ic2NlbmUxLjMu
NDUiPklmIHRoYXQgSSBkbyBub3QgZHJlYW0gb3IgYmUgbm90IGZyYW50aWMsLS08L2Rpdj4KLQot
CSAgPGRpdiBpZD0ic2NlbmUxLjMuNDYiPkFzIEkgZG8gdHJ1c3QgSSBhbSBub3QtLXRoZW4sIGRl
YXIgdW5jbGUsPC9kaXY+Ci0KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjQ3Ij5OZXZlciBzbyBtdWNo
IGFzIGluIGEgdGhvdWdodCB1bmJvcm48L2Rpdj4KLQotCSAgPGRpdiBpZD0ic2NlbmUxLjMuNDgi
PkRpZCBJIG9mZmVuZCB5b3VyIGhpZ2huZXNzLjwvZGl2PgotCi0JICA8L2Rpdj4KLQotCSAgPGRp
diBpZD0ic3BlZWNoMjQiIGNsYXNzPSJjaGFyYWN0ZXIiPkRVS0UgRlJFREVSSUNLPC9kaXY+Ci0K
LQkgIDxkaXYgY2xhc3M9ImRpYWxvZyI+Ci0JICA8ZGl2IGlkPSJzY2VuZTEuMy40OSI+VGh1cyBk
byBhbGwgdHJhaXRvcnM6PC9kaXY+Ci0KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjUwIj5JZiB0aGVp
ciBwdXJnYXRpb24gZGlkIGNvbnNpc3QgaW4gd29yZHMsPC9kaXY+Ci0KLQkgIDxkaXYgaWQ9InNj
ZW5lMS4zLjUxIj5UaGV5IGFyZSBhcyBpbm5vY2VudCBhcyBncmFjZSBpdHNlbGY6PC9kaXY+Ci0K
LQkgIDxkaXYgaWQ9InNjZW5lMS4zLjUyIj5MZXQgaXQgc3VmZmljZSB0aGVlIHRoYXQgSSB0cnVz
dCB0aGVlIG5vdC48L2Rpdj4KLQotCSAgPC9kaXY+Ci0KLQkgIDxkaXYgaWQ9InNwZWVjaDI1IiBj
bGFzcz0iY2hhcmFjdGVyIj5ST1NBTElORDwvZGl2PgotCi0JICA8ZGl2IGNsYXNzPSJkaWFsb2ci
PgotCSAgPGRpdiBpZD0ic2NlbmUxLjMuNTMiPllldCB5b3VyIG1pc3RydXN0IGNhbm5vdCBtYWtl
IG1lIGEgdHJhaXRvcjo8L2Rpdj4KLQotCSAgPGRpdiBpZD0ic2NlbmUxLjMuNTQiPlRlbGwgbWUg
d2hlcmVvbiB0aGUgbGlrZWxpaG9vZCBkZXBlbmRzLjwvZGl2PgotCi0JICA8L2Rpdj4KLQotCSAg
PGRpdiBpZD0ic3BlZWNoMjYiIGNsYXNzPSJjaGFyYWN0ZXIiPkRVS0UgRlJFREVSSUNLPC9kaXY+
Ci0JICA8ZGl2IGNsYXNzPSJkaWFsb2ciPgotCi0JICA8ZGl2IGlkPSJzY2VuZTEuMy41NSI+VGhv
dSBhcnQgdGh5IGZhdGhlcidzIGRhdWdodGVyOyB0aGVyZSdzIGVub3VnaC48L2Rpdj4KLQotCSAg
PC9kaXY+Ci0KLQkgIDxkaXYgaWQ9InNwZWVjaDI3IiBjbGFzcz0iY2hhcmFjdGVyIj5ST1NBTElO
RDwvZGl2PgotCi0JICA8ZGl2IGNsYXNzPSJkaWFsb2ciPgotCSAgPGRpdiBpZD0ic2NlbmUxLjMu
NTYiPlNvIHdhcyBJIHdoZW4geW91ciBoaWdobmVzcyB0b29rIGhpcyBkdWtlZG9tOzwvZGl2Pgot
CSAgPGRpdiBpZD0ic2NlbmUxLjMuNTciPlNvIHdhcyBJIHdoZW4geW91ciBoaWdobmVzcyBiYW5p
c2gnZCBoaW06PC9kaXY+Ci0KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjU4Ij5UcmVhc29uIGlzIG5v
dCBpbmhlcml0ZWQsIG15IGxvcmQ7PC9kaXY+Ci0KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjU5Ij5P
ciwgaWYgd2UgZGlkIGRlcml2ZSBpdCBmcm9tIG91ciBmcmllbmRzLDwvZGl2PgotCi0JICA8ZGl2
IGlkPSJzY2VuZTEuMy42MCI+V2hhdCdzIHRoYXQgdG8gbWU/IG15IGZhdGhlciB3YXMgbm8gdHJh
aXRvcjo8L2Rpdj4KLQotCSAgPGRpdiBpZD0ic2NlbmUxLjMuNjEiPlRoZW4sIGdvb2QgbXkgbGll
Z2UsIG1pc3Rha2UgbWUgbm90IHNvIG11Y2g8L2Rpdj4KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjYy
Ij5UbyB0aGluayBteSBwb3ZlcnR5IGlzIHRyZWFjaGVyb3VzLjwvZGl2PgotCi0JICA8L2Rpdj4K
LQotCSAgPGRpdiBpZD0ic3BlZWNoMjgiIGNsYXNzPSJjaGFyYWN0ZXIiPkNFTElBPC9kaXY+Ci0J
ICA8ZGl2IGNsYXNzPSJkaWFsb2ciPgotCi0JICA8ZGl2IGlkPSJzY2VuZTEuMy42MyI+RGVhciBz
b3ZlcmVpZ24sIGhlYXIgbWUgc3BlYWsuPC9kaXY+Ci0KLQkgIDwvZGl2PgotCi0JICA8ZGl2IGlk
PSJzcGVlY2gyOSIgY2xhc3M9ImNoYXJhY3RlciI+RFVLRSBGUkVERVJJQ0s8L2Rpdj4KLQotCSAg
PGRpdiBjbGFzcz0iZGlhbG9nIj4KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjY0Ij5BeSwgQ2VsaWE7
IHdlIHN0YXknZCBoZXIgZm9yIHlvdXIgc2FrZSw8L2Rpdj4KLQkgIDxkaXYgaWQ9InNjZW5lMS4z
LjY1Ij5FbHNlIGhhZCBzaGUgd2l0aCBoZXIgZmF0aGVyIHJhbmdlZCBhbG9uZy48L2Rpdj4KLQot
CSAgPC9kaXY+Ci0KLQkgIDxkaXYgaWQ9InNwZWVjaDMwIiBjbGFzcz0iY2hhcmFjdGVyIj5DRUxJ
QTwvZGl2PgotCi0JICA8ZGl2IGNsYXNzPSJkaWFsb2ciPgotCi0JICA8ZGl2IGlkPSJzY2VuZTEu
My42NiI+SSBkaWQgbm90IHRoZW4gZW50cmVhdCB0byBoYXZlIGhlciBzdGF5OzwvZGl2PgotCSAg
PGRpdiBpZD0ic2NlbmUxLjMuNjciPkl0IHdhcyB5b3VyIHBsZWFzdXJlIGFuZCB5b3VyIG93biBy
ZW1vcnNlOjwvZGl2PgotCSAgPGRpdiBpZD0ic2NlbmUxLjMuNjgiPkkgd2FzIHRvbyB5b3VuZyB0
aGF0IHRpbWUgdG8gdmFsdWUgaGVyOzwvZGl2PgotCi0JICA8ZGl2IGlkPSJzY2VuZTEuMy42OSI+
QnV0IG5vdyBJIGtub3cgaGVyOiBpZiBzaGUgYmUgYSB0cmFpdG9yLDwvZGl2PgotCi0JICA8ZGl2
IGlkPSJzY2VuZTEuMy43MCI+V2h5IHNvIGFtIEk7IHdlIHN0aWxsIGhhdmUgc2xlcHQgdG9nZXRo
ZXIsPC9kaXY+Ci0KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjcxIj5Sb3NlIGF0IGFuIGluc3RhbnQs
IGxlYXJuJ2QsIHBsYXknZCwgZWF0IHRvZ2V0aGVyLDwvZGl2PgotCSAgPGRpdiBpZD0ic2NlbmUx
LjMuNzIiPkFuZCB3aGVyZXNvZXZlciB3ZSB3ZW50LCBsaWtlIEp1bm8ncyBzd2Fucyw8L2Rpdj4K
LQotCSAgPGRpdiBpZD0ic2NlbmUxLjMuNzMiPlN0aWxsIHdlIHdlbnQgY291cGxlZCBhbmQgaW5z
ZXBhcmFibGUuPC9kaXY+Ci0JICA8L2Rpdj4KLQotCSAgPGRpdiBpZD0ic3BlZWNoMzEiIGNsYXNz
PSJjaGFyYWN0ZXIiPkRVS0UgRlJFREVSSUNLPC9kaXY+Ci0KLQkgIDxkaXYgY2xhc3M9ImRpYWxv
ZyI+Ci0JICA8ZGl2IGlkPSJzY2VuZTEuMy43NCI+U2hlIGlzIHRvbyBzdWJ0bGUgZm9yIHRoZWU7
IGFuZCBoZXIgc21vb3RobmVzcyw8L2Rpdj4KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjc1Ij5IZXIg
dmVyeSBzaWxlbmNlIGFuZCBoZXIgcGF0aWVuY2U8L2Rpdj4KLQkgIDxkaXYgaWQ9InNjZW5lMS4z
Ljc2Ij5TcGVhayB0byB0aGUgcGVvcGxlLCBhbmQgdGhleSBwaXR5IGhlci48L2Rpdj4KLQkgIDxk
aXYgaWQ9InNjZW5lMS4zLjc3Ij5UaG91IGFydCBhIGZvb2w6IHNoZSByb2JzIHRoZWUgb2YgdGh5
IG5hbWU7PC9kaXY+Ci0KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjc4Ij5BbmQgdGhvdSB3aWx0IHNo
b3cgbW9yZSBicmlnaHQgYW5kIHNlZW0gbW9yZSB2aXJ0dW91czwvZGl2PgotCi0JICA8ZGl2IGlk
PSJzY2VuZTEuMy43OSI+V2hlbiBzaGUgaXMgZ29uZS4gVGhlbiBvcGVuIG5vdCB0aHkgbGlwczo8
L2Rpdj4KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjgwIj5GaXJtIGFuZCBpcnJldm9jYWJsZSBpcyBt
eSBkb29tPC9kaXY+Ci0JICA8ZGl2IGlkPSJzY2VuZTEuMy44MSI+V2hpY2ggSSBoYXZlIHBhc3Mn
ZCB1cG9uIGhlcjsgc2hlIGlzIGJhbmlzaCdkLjwvZGl2PgotCSAgPC9kaXY+Ci0KLQkgIDxkaXYg
aWQ9InNwZWVjaDMyIiBjbGFzcz0iY2hhcmFjdGVyIj5DRUxJQTwvZGl2PgotCi0JICA8ZGl2IGNs
YXNzPSJkaWFsb2ciPgotCSAgPGRpdiBpZD0ic2NlbmUxLjMuODIiPlByb25vdW5jZSB0aGF0IHNl
bnRlbmNlIHRoZW4gb24gbWUsIG15IGxpZWdlOjwvZGl2PgotCSAgPGRpdiBpZD0ic2NlbmUxLjMu
ODMiPkkgY2Fubm90IGxpdmUgb3V0IG9mIGhlciBjb21wYW55LjwvZGl2PgotCSAgPC9kaXY+Ci0K
LQkgIDxkaXYgaWQ9InNwZWVjaDMzIiBjbGFzcz0iY2hhcmFjdGVyIj5EVUtFIEZSRURFUklDSzwv
ZGl2PgotCi0JICA8ZGl2IGNsYXNzPSJkaWFsb2ciPgotCSAgPGRpdiBpZD0ic2NlbmUxLjMuODQi
PllvdSBhcmUgYSBmb29sLiBZb3UsIG5pZWNlLCBwcm92aWRlIHlvdXJzZWxmOjwvZGl2PgotCi0J
ICA8ZGl2IGlkPSJzY2VuZTEuMy44NSI+SWYgeW91IG91dHN0YXkgdGhlIHRpbWUsIHVwb24gbWlu
ZSBob25vdXIsPC9kaXY+Ci0JICA8ZGl2IGlkPSJzY2VuZTEuMy44NiI+QW5kIGluIHRoZSBncmVh
dG5lc3Mgb2YgbXkgd29yZCwgeW91IGRpZS48L2Rpdj4KLQkgIDxkaXYgY2xhc3M9ImRpcmVjdGlv
biI+RXhldW50IERVS0UgRlJFREVSSUNLIGFuZCBMb3JkczwvZGl2PgotCSAgPC9kaXY+Ci0KLQkg
IDxkaXYgaWQ9InNwZWVjaDM0IiBjbGFzcz0iY2hhcmFjdGVyIj5DRUxJQTwvZGl2PgotCSAgPGRp
diBjbGFzcz0iZGlhbG9nIj4KLQotCSAgPGRpdiBpZD0ic2NlbmUxLjMuODciPk8gbXkgcG9vciBS
b3NhbGluZCwgd2hpdGhlciB3aWx0IHRob3UgZ28/PC9kaXY+Ci0KLQkgIDxkaXYgaWQ9InNjZW5l
MS4zLjg4Ij5XaWx0IHRob3UgY2hhbmdlIGZhdGhlcnM/IEkgd2lsbCBnaXZlIHRoZWUgbWluZS48
L2Rpdj4KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjg5Ij5JIGNoYXJnZSB0aGVlLCBiZSBub3QgdGhv
dSBtb3JlIGdyaWV2ZWQgdGhhbiBJIGFtLjwvZGl2PgotCi0JICA8L2Rpdj4KLQotCSAgPGRpdiBp
ZD0ic3BlZWNoMzUiIGNsYXNzPSJjaGFyYWN0ZXIiPlJPU0FMSU5EPC9kaXY+Ci0KLQkgIDxkaXYg
Y2xhc3M9ImRpYWxvZyI+Ci0KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjkwIj5JIGhhdmUgbW9yZSBj
YXVzZS48L2Rpdj4KLQkgIDwvZGl2PgotCi0JICA8ZGl2IGlkPSJzcGVlY2gzNiIgY2xhc3M9ImNo
YXJhY3RlciI+Q0VMSUE8L2Rpdj4KLQotCSAgPGRpdiBjbGFzcz0iZGlhbG9nIj4KLQkgIDxkaXYg
aWQ9InNjZW5lMS4zLjkxIj4gICAgICAgICAgICAgICAgICBUaG91IGhhc3Qgbm90LCBjb3VzaW47
PC9kaXY+Ci0KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjkyIj5Qcml0aGVlIGJlIGNoZWVyZnVsOiBr
bm93J3N0IHRob3Ugbm90LCB0aGUgZHVrZTwvZGl2PgotCi0JICA8ZGl2IGlkPSJzY2VuZTEuMy45
MyI+SGF0aCBiYW5pc2gnZCBtZSwgaGlzIGRhdWdodGVyPzwvZGl2PgotCSAgPC9kaXY+Ci0KLQkg
IDxkaXYgaWQ9InNwZWVjaDM3IiBjbGFzcz0iY2hhcmFjdGVyIj5ST1NBTElORDwvZGl2PgotCSAg
PGRpdiBjbGFzcz0iZGlhbG9nIj4KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjk0Ij5UaGF0IGhlIGhh
dGggbm90LjwvZGl2PgotCi0JICA8L2Rpdj4KLQotCSAgPGRpdiBpZD0ic3BlZWNoMzgiIGNsYXNz
PSJjaGFyYWN0ZXIiPkNFTElBPC9kaXY+Ci0JICA8ZGl2IGNsYXNzPSJkaWFsb2ciPgotCi0JICA8
ZGl2IGlkPSJzY2VuZTEuMy45NSI+Tm8sIGhhdGggbm90PyBSb3NhbGluZCBsYWNrcyB0aGVuIHRo
ZSBsb3ZlPC9kaXY+Ci0KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjk2Ij5XaGljaCB0ZWFjaGV0aCB0
aGVlIHRoYXQgdGhvdSBhbmQgSSBhbSBvbmU6PC9kaXY+Ci0JICA8ZGl2IGlkPSJzY2VuZTEuMy45
NyI+U2hhbGwgd2UgYmUgc3VuZGVyJ2Q/IHNoYWxsIHdlIHBhcnQsIHN3ZWV0IGdpcmw/PC9kaXY+
Ci0KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjk4Ij5ObzogbGV0IG15IGZhdGhlciBzZWVrIGFub3Ro
ZXIgaGVpci48L2Rpdj4KLQotCSAgPGRpdiBpZD0ic2NlbmUxLjMuOTkiPlRoZXJlZm9yZSBkZXZp
c2Ugd2l0aCBtZSBob3cgd2UgbWF5IGZseSw8L2Rpdj4KLQotCSAgPGRpdiBpZD0ic2NlbmUxLjMu
MTAwIj5XaGl0aGVyIHRvIGdvIGFuZCB3aGF0IHRvIGJlYXIgd2l0aCB1czs8L2Rpdj4KLQkgIDxk
aXYgaWQ9InNjZW5lMS4zLjEwMSI+QW5kIGRvIG5vdCBzZWVrIHRvIHRha2UgeW91ciBjaGFuZ2Ug
dXBvbiB5b3UsPC9kaXY+Ci0JICA8ZGl2IGlkPSJzY2VuZTEuMy4xMDIiPlRvIGJlYXIgeW91ciBn
cmllZnMgeW91cnNlbGYgYW5kIGxlYXZlIG1lIG91dDs8L2Rpdj4KLQotCSAgPGRpdiBpZD0ic2Nl
bmUxLjMuMTAzIj5Gb3IsIGJ5IHRoaXMgaGVhdmVuLCBub3cgYXQgb3VyIHNvcnJvd3MgcGFsZSw8
L2Rpdj4KLQotCSAgPGRpdiBpZD0ic2NlbmUxLjMuMTA0Ij5TYXkgd2hhdCB0aG91IGNhbnN0LCBJ
J2xsIGdvIGFsb25nIHdpdGggdGhlZS48L2Rpdj4KLQotCSAgPC9kaXY+Ci0KLQkgIDxkaXYgaWQ9
InNwZWVjaDM5IiBjbGFzcz0iY2hhcmFjdGVyIj5ST1NBTElORDwvZGl2PgotCSAgPGRpdiBjbGFz
cz0iZGlhbG9nIj4KLQotCSAgPGRpdiBpZD0ic2NlbmUxLjMuMTA1Ij5XaHksIHdoaXRoZXIgc2hh
bGwgd2UgZ28/PC9kaXY+Ci0KLQkgIDwvZGl2PgotCi0JICA8ZGl2IGlkPSJzcGVlY2g0MCIgY2xh
c3M9ImNoYXJhY3RlciI+Q0VMSUE8L2Rpdj4KLQotCSAgPGRpdiBjbGFzcz0iZGlhbG9nIj4KLQkg
IDxkaXYgaWQ9InNjZW5lMS4zLjEwNiI+VG8gc2VlayBteSB1bmNsZSBpbiB0aGUgZm9yZXN0IG9m
IEFyZGVuLjwvZGl2PgotCSAgPC9kaXY+Ci0KLQkgIDxkaXYgaWQ9InNwZWVjaDQxIiBjbGFzcz0i
Y2hhcmFjdGVyIj5ST1NBTElORDwvZGl2PgotCi0JICA8ZGl2IGNsYXNzPSJkaWFsb2ciPgotCi0J
ICA8ZGl2IGlkPSJzY2VuZTEuMy4xMDciPkFsYXMsIHdoYXQgZGFuZ2VyIHdpbGwgaXQgYmUgdG8g
dXMsPC9kaXY+Ci0KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjEwOCI+TWFpZHMgYXMgd2UgYXJlLCB0
byB0cmF2ZWwgZm9ydGggc28gZmFyITwvZGl2PgotCSAgPGRpdiBpZD0ic2NlbmUxLjMuMTA5Ij5C
ZWF1dHkgcHJvdm9rZXRoIHRoaWV2ZXMgc29vbmVyIHRoYW4gZ29sZC48L2Rpdj4KLQotCSAgPC9k
aXY+Ci0KLQkgIDxkaXYgaWQ9InNwZWVjaDQyIiBjbGFzcz0iY2hhcmFjdGVyIj5DRUxJQTwvZGl2
PgotCi0JICA8ZGl2IGNsYXNzPSJkaWFsb2ciPgotCSAgPGRpdiBpZD0ic2NlbmUxLjMuMTEwIj5J
J2xsIHB1dCBteXNlbGYgaW4gcG9vciBhbmQgbWVhbiBhdHRpcmU8L2Rpdj4KLQotCSAgPGRpdiBp
ZD0ic2NlbmUxLjMuMTExIj5BbmQgd2l0aCBhIGtpbmQgb2YgdW1iZXIgc21pcmNoIG15IGZhY2U7
PC9kaXY+Ci0JICA8ZGl2IGlkPSJzY2VuZTEuMy4xMTIiPlRoZSBsaWtlIGRvIHlvdTogc28gc2hh
bGwgd2UgcGFzcyBhbG9uZzwvZGl2PgotCi0JICA8ZGl2IGlkPSJzY2VuZTEuMy4xMTMiPkFuZCBu
ZXZlciBzdGlyIGFzc2FpbGFudHMuPC9kaXY+Ci0KLQkgIDwvZGl2PgotCi0JICA8ZGl2IGlkPSJz
cGVlY2g0MyIgY2xhc3M9ImNoYXJhY3RlciI+Uk9TQUxJTkQ8L2Rpdj4KLQkgIDxkaXYgY2xhc3M9
ImRpYWxvZyI+Ci0KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjExNCI+V2VyZSBpdCBub3QgYmV0dGVy
LDwvZGl2PgotCi0JICA8ZGl2IGlkPSJzY2VuZTEuMy4xMTUiPkJlY2F1c2UgdGhhdCBJIGFtIG1v
cmUgdGhhbiBjb21tb24gdGFsbCw8L2Rpdj4KLQotCSAgPGRpdiBpZD0ic2NlbmUxLjMuMTE2Ij5U
aGF0IEkgZGlkIHN1aXQgbWUgYWxsIHBvaW50cyBsaWtlIGEgbWFuPzwvZGl2PgotCi0JICA8ZGl2
IGlkPSJzY2VuZTEuMy4xMTciPkEgZ2FsbGFudCBjdXJ0bGUtYXhlIHVwb24gbXkgdGhpZ2gsPC9k
aXY+Ci0KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjExOCI+QSBib2FyLXNwZWFyIGluIG15IGhhbmQ7
IGFuZC0taW4gbXkgaGVhcnQ8L2Rpdj4KLQotCSAgPGRpdiBpZD0ic2NlbmUxLjMuMTE5Ij5MaWUg
dGhlcmUgd2hhdCBoaWRkZW4gd29tYW4ncyBmZWFyIHRoZXJlIHdpbGwtLTwvZGl2PgotCi0JICA8
ZGl2IGlkPSJzY2VuZTEuMy4xMjAiPldlJ2xsIGhhdmUgYSBzd2FzaGluZyBhbmQgYSBtYXJ0aWFs
IG91dHNpZGUsPC9kaXY+Ci0KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjEyMSI+QXMgbWFueSBvdGhl
ciBtYW5uaXNoIGNvd2FyZHMgaGF2ZTwvZGl2PgotCi0JICA8ZGl2IGlkPSJzY2VuZTEuMy4xMjIi
PlRoYXQgZG8gb3V0ZmFjZSBpdCB3aXRoIHRoZWlyIHNlbWJsYW5jZXMuPC9kaXY+Ci0KLQkgIDwv
ZGl2PgotCi0JICA8ZGl2IGlkPSJzcGVlY2g0NCIgY2xhc3M9ImNoYXJhY3RlciI+Q0VMSUE8L2Rp
dj4KLQotCSAgPGRpdiBjbGFzcz0iZGlhbG9nIj4KLQotCSAgPGRpdiBpZD0ic2NlbmUxLjMuMTIz
Ij5XaGF0IHNoYWxsIEkgY2FsbCB0aGVlIHdoZW4gdGhvdSBhcnQgYSBtYW4/PC9kaXY+Ci0JICA8
L2Rpdj4KLQotCSAgPGRpdiBpZD0ic3BlZWNoNDUiIGNsYXNzPSJjaGFyYWN0ZXIiPlJPU0FMSU5E
PC9kaXY+Ci0KLQkgIDxkaXYgY2xhc3M9ImRpYWxvZyI+Ci0JICA8ZGl2IGlkPSJzY2VuZTEuMy4x
MjQiPkknbGwgaGF2ZSBubyB3b3JzZSBhIG5hbWUgdGhhbiBKb3ZlJ3Mgb3duIHBhZ2U7PC9kaXY+
Ci0KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjEyNSI+QW5kIHRoZXJlZm9yZSBsb29rIHlvdSBjYWxs
IG1lIEdhbnltZWRlLjwvZGl2PgotCi0JICA8ZGl2IGlkPSJzY2VuZTEuMy4xMjYiPkJ1dCB3aGF0
IHdpbGwgeW91IGJlIGNhbGwnZD88L2Rpdj4KLQotCSAgPC9kaXY+Ci0KLQkgIDxkaXYgaWQ9InNw
ZWVjaDQ2IiBjbGFzcz0iY2hhcmFjdGVyIj5DRUxJQTwvZGl2PgotCi0JICA8ZGl2IGNsYXNzPSJk
aWFsb2ciPgotCi0JICA8ZGl2IGlkPSJzY2VuZTEuMy4xMjciPlNvbWV0aGluZyB0aGF0IGhhdGgg
YSByZWZlcmVuY2UgdG8gbXkgc3RhdGU8L2Rpdj4KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjEyOCI+
Tm8gbG9uZ2VyIENlbGlhLCBidXQgQWxpZW5hLjwvZGl2PgotCi0JICA8L2Rpdj4KLQotCSAgPGRp
diBpZD0ic3BlZWNoNDciIGNsYXNzPSJjaGFyYWN0ZXIiPlJPU0FMSU5EPC9kaXY+Ci0JICA8ZGl2
IGNsYXNzPSJkaWFsb2ciPgotCi0JICA8ZGl2IGlkPSJzY2VuZTEuMy4xMjkiPkJ1dCwgY291c2lu
LCB3aGF0IGlmIHdlIGFzc2F5J2QgdG8gc3RlYWw8L2Rpdj4KLQotCSAgPGRpdiBpZD0ic2NlbmUx
LjMuMTMwIj5UaGUgY2xvd25pc2ggZm9vbCBvdXQgb2YgeW91ciBmYXRoZXIncyBjb3VydD88L2Rp
dj4KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjEzMSI+V291bGQgaGUgbm90IGJlIGEgY29tZm9ydCB0
byBvdXIgdHJhdmVsPzwvZGl2PgotCi0JICA8L2Rpdj4KLQotCSAgPGRpdiBpZD0ic3BlZWNoNDgi
IGNsYXNzPSJjaGFyYWN0ZXIiPkNFTElBPC9kaXY+Ci0KLQkgIDxkaXYgY2xhc3M9ImRpYWxvZyI+
Ci0KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjEzMiI+SGUnbGwgZ28gYWxvbmcgbydlciB0aGUgd2lk
ZSB3b3JsZCB3aXRoIG1lOzwvZGl2PgotCi0JICA8ZGl2IGlkPSJzY2VuZTEuMy4xMzMiPkxlYXZl
IG1lIGFsb25lIHRvIHdvbyBoaW0uIExldCdzIGF3YXksPC9kaXY+Ci0JICA8ZGl2IGlkPSJzY2Vu
ZTEuMy4xMzQiPkFuZCBnZXQgb3VyIGpld2VscyBhbmQgb3VyIHdlYWx0aCB0b2dldGhlciw8L2Rp
dj4KLQotCSAgPGRpdiBpZD0ic2NlbmUxLjMuMTM1Ij5EZXZpc2UgdGhlIGZpdHRlc3QgdGltZSBh
bmQgc2FmZXN0IHdheTwvZGl2PgotCi0JICA8ZGl2IGlkPSJzY2VuZTEuMy4xMzYiPlRvIGhpZGUg
dXMgZnJvbSBwdXJzdWl0IHRoYXQgd2lsbCBiZSBtYWRlPC9kaXY+Ci0KLQkgIDxkaXYgaWQ9InNj
ZW5lMS4zLjEzNyI+QWZ0ZXIgbXkgZmxpZ2h0LiBOb3cgZ28gd2UgaW4gY29udGVudDwvZGl2Pgot
Ci0JICA8ZGl2IGlkPSJzY2VuZTEuMy4xMzgiPlRvIGxpYmVydHkgYW5kIG5vdCB0byBiYW5pc2ht
ZW50LjwvZGl2PgotCSAgPGRpdiBjbGFzcz0iZGlyZWN0aW9uIj5FeGV1bnQ8L2Rpdj4KLQotCSAg
PC9kaXY+Ci0KLQk8L2Rpdj4KLQk8L2Rpdj4KLTwvZGl2PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IGZpbGUK
</data>

          </attachment>
      

    </bug>

</bugzilla>