<?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>64208</bug_id>
          
          <creation_ts>2011-07-08 15:26:34 -0700</creation_ts>
          <short_desc>pull static dashboard files into the appengine server from the chromium repository</short_desc>
          <delta_ts>2011-07-08 17:02:16 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ojan Vafai">ojan</reporter>
          <assigned_to name="Ojan Vafai">ojan</assigned_to>
          <cc>abarth</cc>
    
    <cc>aroben</cc>
    
    <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>434333</commentid>
    <comment_count>0</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-07-08 15:26:34 -0700</bug_when>
    <thetext>pull static dashboard files into the appengine server from the chromium repository</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434334</commentid>
    <comment_count>1</comment_count>
      <attachid>100169</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-07-08 15:30:22 -0700</bug_when>
    <thetext>Created attachment 100169
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434335</commentid>
    <comment_count>2</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-07-08 15:32:13 -0700</bug_when>
    <thetext>The contents of the static-dashboards directory is copied wholesale, unmodified from http://src.chromium.org/viewvc/chrome/trunk/tools/dashboards/. I&apos;d prefer to do any style or code changes to those files in a followup patch and have this one focus on just getting the files into the tree without breaking any existing functionality.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434373</commentid>
    <comment_count>3</comment_count>
      <attachid>100169</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-07-08 16:26:41 -0700</bug_when>
    <thetext>Comment on attachment 100169
Patch

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

I mean, this is really just a rubber stamp.  This patch is too large for a real review.

&gt; Tools/TestResultServer/app.yaml:1
&gt; -application: test-results
&gt; +application: test-results-test

OOPS!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434391</commentid>
    <comment_count>4</comment_count>
      <attachid>100169</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-07-08 16:45:52 -0700</bug_when>
    <thetext>Comment on attachment 100169
Patch

looks fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434397</commentid>
    <comment_count>5</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-07-08 17:02:16 -0700</bug_when>
    <thetext>Committed r90674: &lt;http://trac.webkit.org/changeset/90674&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100169</attachid>
            <date>2011-07-08 15:30:22 -0700</date>
            <delta_ts>2011-07-08 16:45:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-64208-20110708153021.patch</filename>
            <type>text/plain</type>
            <size>277373</size>
            <attacher name="Ojan Vafai">ojan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTA2NjUKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCBmZTM2YTBlNzZmODlmNDQyNDBjYWY0ZWI3MmUzNDE2MGQw
OGRmYmEwLi5jMzM1NzBjOTNiNDNkOTBlODMwNzYyZmE3YjlmMWViMGVjMmJhNjU0IDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDUg
QEAKKzIwMTEtMDctMDggIE9qYW4gVmFmYWkgIDxvamFuQGNocm9taXVtLm9yZz4KKworICAgICAg
ICBwdWxsIHN0YXRpYyBkYXNoYm9hcmQgZmlsZXMgaW50byB0aGUgYXBwZW5naW5lIHNlcnZlciBm
cm9tIHRoZSBjaHJvbWl1bSByZXBvc2l0b3J5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02NDIwOAorCisgICAgICAgIFRoZXNlIGZpbGVzIGJlbG9uZyBp
biB0aGUgV2ViS2l0IHJlcG8gc2luY2UgdGhleSBhcmUgdGllZCBwcmltYXJpbHkgdG8gdGhlIHdl
YmtpdCB0ZXN0cy4KKyAgICAgICAgVGhleSBoYXZlIHNvbWUgZXh0cmEgYml0cyB0byBzdXBwb3J0
IGNocm9taXVtJ3MgZ3Rlc3RzLCBidXQgdGhhdCBzZWVtcyBmaW5lLgorICAgICAgICBNYWlubHks
IHRoaXMgd2lsbCBhbGxvdyBvdGhlciBXZWJLaXQgaGFja2VycyB0byBoYWNrIG9uIHRoZSBkYXNo
Ym9hcmRzLgorCisgICAgICAgIEFzIGEgbmljZSBzaWRlLWVmZmVjdCwgd2UgY2FuIG5vdyBwdXNo
IHRoZSBkYXNoYm9hcmQgZmlsZXMgd2hlbiB3ZSBkbyBhcHBlbmdpbmUgcHVzaGVzCisgICAgICAg
IGluc3RlYWQgb2YgdGhlIHdlaXJkIHRoaW5nIHdlIHVzZWQgdG8gZG8gb2YgcHVsbGluZyB0aGVt
IGZyb20gdGhlIENocm9taXVtIHJlcG9zaXRvcnkKKyAgICAgICAgYW5kIHN0b3JpbmcgdGhlbSBp
biB0aGUgYXBwZW5naW5lIGRhdGFzdG9yZS4gVGhpcyBhbGxvd3MgZm9yIGNsZWFuaW5nIHVwIGEg
bG90IG9mIGNvZGUKKyAgICAgICAgYW5kIHdpbGwgbGlrZWx5IG1ha2UgdGhlIGRhc2hib2FyZHMg
bG9hZCBhIGJpdCBmYXN0ZXIuCisKKyAgICAgICAgVGhlIG5ldyBKUyBmaWxlcyBkb24ndCBmdWxs
eSBtYXRjaCBXZWJLaXQgc3R5bGUsIGJ1dCBJJ2QgbGlrZSB0byBjbGVhbiB0aGF0IHVwIGluIGEK
KyAgICAgICAgZm9sbG93dXAgcGF0Y2ggaWYgcG9zc2libGUgdG8gbWFpbnRhaW4gbXkgc2FuaXR5
IHdpdGggdGhpcyBwYXRjaC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIFRlc3RSZXN1bHRTZXJ2ZXIvYXBwLnlhbWw6CisgICAgICAgICogVGVzdFJl
c3VsdFNlcnZlci9oYW5kbGVycy9kYXNoYm9hcmRoYW5kbGVyLnB5OiBSZW1vdmVkLgorICAgICAg
ICAqIFRlc3RSZXN1bHRTZXJ2ZXIvaGFuZGxlcnMvbWVudS5weToKKyAgICAgICAgKiBUZXN0UmVz
dWx0U2VydmVyL21haW4ucHk6CisgICAgICAgICogVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9kYXNo
Ym9hcmRmaWxlLnB5OiBSZW1vdmVkLgorICAgICAgICAqIFRlc3RSZXN1bHRTZXJ2ZXIvc3RhdGlj
LWRhc2hib2FyZHMvTElDRU5TRS5keWdyYXBoLnR4dDogQWRkZWQuCisgICAgICAgICogVGVzdFJl
c3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9SRUFETUUuZHlncmFwaC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIFRlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvUkVBRE1FLndlYnRy
ZWVtYXAudHh0OiBBZGRlZC4KKyAgICAgICAgKiBUZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNo
Ym9hcmRzL2FnZ3JlZ2F0ZV9yZXN1bHRzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIFRlc3RSZXN1
bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvYnVpbGRlcnMuanM6IEFkZGVkLgorICAgICAgICAq
IFRlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvZGFzaGJvYXJkX2Jhc2UuanM6IEFk
ZGVkLgorICAgICAgICAqIFRlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvZHlncmFw
aC1jb21iaW5lZC5qczogQWRkZWQuCisgICAgICAgICogVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMt
ZGFzaGJvYXJkcy9mbGFraW5lc3NfZGFzaGJvYXJkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIFRl
c3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvZmxha2luZXNzX2Rhc2hib2FyZF90ZXN0
cy5qczogQWRkZWQuCisgICAgICAgICogVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJk
cy90aW1lbGluZV9leHBsb3Jlci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBUZXN0UmVzdWx0U2Vy
dmVyL3N0YXRpYy1kYXNoYm9hcmRzL3RyZWVtYXAuaHRtbDogQWRkZWQuCisgICAgICAgICogVGVz
dFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy93ZWJ0cmVlbWFwLmNzczogQWRkZWQuCisg
ICAgICAgICogVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy93ZWJ0cmVlbWFwLmpz
OiBBZGRlZC4KKyAgICAgICAgKiBUZXN0UmVzdWx0U2VydmVyL3N0eWxlc2hlZXRzL2Rhc2hib2Fy
ZGZpbGUuY3NzOiBSZW1vdmVkLgorICAgICAgICAqIFRlc3RSZXN1bHRTZXJ2ZXIvc3R5bGVzaGVl
dHMvbWVudS5jc3M6CisgICAgICAgICogVGVzdFJlc3VsdFNlcnZlci90ZW1wbGF0ZXMvZGFzaGJv
YXJkZmlsZWxpc3QuaHRtbDogUmVtb3ZlZC4KKyAgICAgICAgKiBUZXN0UmVzdWx0U2VydmVyL3Rl
bXBsYXRlcy9tZW51Lmh0bWw6CisKIDIwMTEtMDctMDggIEFkYW0gQmFydGggIDxhYmFydGhAd2Vi
a2l0Lm9yZz4KIAogICAgICAgICBUZXN0UmVzdWx0c1NlcnZlciBzaG91bGQga2VlcCBvbGQgdGVz
dCByZXN1bHRzCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UmVzdWx0U2VydmVyL2FwcC55YW1sIGIv
VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9hcHAueWFtbAppbmRleCBlNTFhZjg0ZGFiNTdhMDk4MGJi
ZDg5ZTUzZTc2ODNkMjk3MjFkNTZkLi4wODdjZGYxYjI5MjViZDY4MDZlZWNiOTM4NzY1YjM0OWZl
YmRhMDljIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UmVzdWx0U2VydmVyL2FwcC55YW1sCisrKyBi
L1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvYXBwLnlhbWwKQEAgLTEsNCArMSw0IEBACi1hcHBsaWNh
dGlvbjogdGVzdC1yZXN1bHRzCithcHBsaWNhdGlvbjogdGVzdC1yZXN1bHRzLXRlc3QKIHZlcnNp
b246IDEKIHJ1bnRpbWU6IHB5dGhvbgogYXBpX3ZlcnNpb246IDEKQEAgLTcsMTEgKzcsMTAgQEAg
aGFuZGxlcnM6CiAtIHVybDogL3N0eWxlc2hlZXRzCiAgIHN0YXRpY19kaXI6IHN0eWxlc2hlZXRz
CiAKLS0gdXJsOiAvdGVzdGZpbGUvZGVsZXRlCi0gIHNjcmlwdDogbWFpbi5weQotICBsb2dpbjog
YWRtaW4KKy0gdXJsOiAvZGFzaGJvYXJkcworICBzdGF0aWNfZGlyOiBzdGF0aWMtZGFzaGJvYXJk
cwogCi0tIHVybDogL2Rhc2hib2FyZHMvZGVsZXRlCistIHVybDogL3Rlc3RmaWxlL2RlbGV0ZQog
ICBzY3JpcHQ6IG1haW4ucHkKICAgbG9naW46IGFkbWluCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RSZXN1bHRTZXJ2ZXIvaGFuZGxlcnMvZGFzaGJvYXJkaGFuZGxlci5weSBiL1Rvb2xzL1Rlc3RS
ZXN1bHRTZXJ2ZXIvaGFuZGxlcnMvZGFzaGJvYXJkaGFuZGxlci5weQpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggY2FlMmIxM2I1MmY2MTZlYzUzOTBlYzVmOGUyZjJhZTE3ZTg4ZmViNy4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9UZXN0
UmVzdWx0U2VydmVyL2hhbmRsZXJzL2Rhc2hib2FyZGhhbmRsZXIucHkKKysrIC9kZXYvbnVsbApA
QCAtMSwxMjggKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0Ogot
IwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWltcG9ydCBsb2dnaW5nCi1pbXBv
cnQgbWltZXR5cGVzCi1pbXBvcnQgdXJsbGliMgotCi1mcm9tIGdvb2dsZS5hcHBlbmdpbmUuYXBp
IGltcG9ydCB1c2VycwotZnJvbSBnb29nbGUuYXBwZW5naW5lLmV4dCBpbXBvcnQgd2ViYXBwCi1m
cm9tIGdvb2dsZS5hcHBlbmdpbmUuZXh0LndlYmFwcCBpbXBvcnQgdGVtcGxhdGUKLQotZnJvbSBt
b2RlbC5kYXNoYm9hcmRmaWxlIGltcG9ydCBEYXNoYm9hcmRGaWxlCi0KLVBBUkFNX0ZJTEUgPSAi
ZmlsZSIKLQotCi1kZWYgZ2V0X2NvbnRlbnRfdHlwZShmaWxlbmFtZSk6Ci0gICAgcmV0dXJuIG1p
bWV0eXBlcy5ndWVzc190eXBlKGZpbGVuYW1lKVswXSBvciAiYXBwbGljYXRpb24vb2N0ZXQtc3Ry
ZWFtIgotCi0KLWNsYXNzIEdldERhc2hib2FyZEZpbGUod2ViYXBwLlJlcXVlc3RIYW5kbGVyKToK
LSAgICBkZWYgZ2V0KHNlbGYsIHJlc291cmNlKToKLSAgICAgICAgaWYgbm90IHJlc291cmNlOgot
ICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygiR2V0dGluZyBkYXNoYm9hcmQgZmlsZSBsaXN0LiIp
Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2V0X2ZpbGVfbGlzdCgpCi0KLSAgICAgICAgZmls
ZW5hbWUgPSBzdHIodXJsbGliMi51bnF1b3RlKHJlc291cmNlKSkKLQotICAgICAgICBsb2dnaW5n
LmRlYnVnKCJHZXR0aW5nIGRhc2hib2FyZCBmaWxlOiAlcyIsIGZpbGVuYW1lKQotCi0gICAgICAg
IGZpbGVzID0gRGFzaGJvYXJkRmlsZS5nZXRfZmlsZXMoZmlsZW5hbWUpCi0gICAgICAgIGlmIG5v
dCBmaWxlczoKLSAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3IoIkZhaWxlZCB0byBmaW5kIGRhc2hi
b2FyZCBmaWxlOiAlcywgcmVxdWVzdDogJXMiLAotICAgICAgICAgICAgICAgIGZpbGVuYW1lLCBz
ZWxmLnJlcXVlc3QpCi0gICAgICAgICAgICBzZWxmLnJlc3BvbnNlLnNldF9zdGF0dXMoNDA0KQot
ICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgY29udGVudF90eXBlID0gIiVzOyBjaGFyc2V0
PXV0Zi04IiAlIGdldF9jb250ZW50X3R5cGUoZmlsZW5hbWUpCi0gICAgICAgIGxvZ2dpbmcuaW5m
bygiY29udGVudCB0eXBlOiAlcyIsIGNvbnRlbnRfdHlwZSkKLSAgICAgICAgc2VsZi5yZXNwb25z
ZS5oZWFkZXJzWyJDb250ZW50LVR5cGUiXSA9IGNvbnRlbnRfdHlwZQotICAgICAgICBzZWxmLnJl
c3BvbnNlLm91dC53cml0ZShmaWxlc1swXS5kYXRhKQotCi0gICAgZGVmIF9nZXRfZmlsZV9saXN0
KHNlbGYpOgotICAgICAgICBsb2dnaW5nLmluZm8oImdldHRpbmcgZGFzaGJvYXJkIGZpbGUgbGlz
dC4iKQotCi0gICAgICAgIGZpbGVzID0gRGFzaGJvYXJkRmlsZS5nZXRfZmlsZXMoIiIsIDEwMCkK
LSAgICAgICAgaWYgbm90IGZpbGVzOgotICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCJGYWlsZWQg
dG8gZmluZCBkYXNoYm9hcmQgZmlsZXMuIikKLSAgICAgICAgICAgIHNlbGYucmVzcG9uc2Uuc2V0
X3N0YXR1cyg0MDQpCi0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICB0ZW1wbGF0ZV92YWx1
ZXMgPSB7Ci0gICAgICAgICAgICAiYWRtaW4iOiB1c2Vycy5pc19jdXJyZW50X3VzZXJfYWRtaW4o
KSwKLSAgICAgICAgICAgICJmaWxlcyI6IGZpbGVzLAotICAgICAgICB9Ci0gICAgICAgIHNlbGYu
cmVzcG9uc2Uub3V0LndyaXRlKAotICAgICAgICAgICAgdGVtcGxhdGUucmVuZGVyKCJ0ZW1wbGF0
ZXMvZGFzaGJvYXJkZmlsZWxpc3QuaHRtbCIsCi0gICAgICAgICAgICAgICAgdGVtcGxhdGVfdmFs
dWVzKSkKLQotCi1jbGFzcyBVcGRhdGVEYXNoYm9hcmRGaWxlKHdlYmFwcC5SZXF1ZXN0SGFuZGxl
cik6Ci0gICAgZGVmIGdldChzZWxmKToKLSAgICAgICAgZmlsZXMgPSBzZWxmLnJlcXVlc3QuZ2V0
X2FsbChQQVJBTV9GSUxFKQotICAgICAgICBpZiBub3QgZmlsZXM6Ci0gICAgICAgICAgICAjIEZJ
WE1FOiBKdXN0IGdyYWIgdGhlIGVudGlyZSBkYXNoYm9hcmRzIGRpcmVjdG9yeS4KLSAgICAgICAg
ICAgIGZpbGVzID0gWyJhZ2dyZWdhdGVfcmVzdWx0cy5odG1sIiwKLSAgICAgICAgICAgICAgICAg
ICAgICJidWlsZGVycy5qcyIsCi0gICAgICAgICAgICAgICAgICAgICAiZGFzaGJvYXJkX2Jhc2Uu
anMiLAotICAgICAgICAgICAgICAgICAgICAgImR5Z3JhcGgtY29tYmluZWQuanMiLAotICAgICAg
ICAgICAgICAgICAgICAgImZsYWtpbmVzc19kYXNoYm9hcmQuaHRtbCIsCi0gICAgICAgICAgICAg
ICAgICAgICAidGltZWxpbmVfZXhwbG9yZXIuaHRtbCIsCi0gICAgICAgICAgICAgICAgICAgICAi
dHJlZW1hcC5odG1sIiwKLSAgICAgICAgICAgICAgICAgICAgICJ3ZWJ0cmVlbWFwLmNzcyIsCi0g
ICAgICAgICAgICAgICAgICAgICAid2VidHJlZW1hcC5qcyJdCi0KLSAgICAgICAgZXJyb3JzID0g
W10KLSAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6Ci0gICAgICAgICAgICBpZiBub3QgRGFzaGJv
YXJkRmlsZS51cGRhdGVfZmlsZShmaWxlKToKLSAgICAgICAgICAgICAgICBlcnJvcnMuYXBwZW5k
KCJGYWlsZWQgdG8gdXBkYXRlIGZpbGU6ICVzIiAlIGZpbGUpCi0KLSAgICAgICAgaWYgZXJyb3Jz
OgotICAgICAgICAgICAgbWVzc2FnZXMgPSAiOyAiLmpvaW4oZXJyb3JzKQotICAgICAgICAgICAg
bG9nZ2luZy53YXJuaW5nKG1lc3NhZ2VzKQotICAgICAgICAgICAgc2VsZi5yZXNwb25zZS5zZXRf
c3RhdHVzKDUwMCwgbWVzc2FnZXMpCi0gICAgICAgICAgICBzZWxmLnJlc3BvbnNlLm91dC53cml0
ZSgiRkFJTCIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLnJlc3BvbnNlLnNldF9z
dGF0dXMoMjAwKQotICAgICAgICAgICAgc2VsZi5yZXNwb25zZS5vdXQud3JpdGUoIk9LIikKLQot
Ci1jbGFzcyBEZWxldGVEYXNoYm9hcmRGaWxlKHdlYmFwcC5SZXF1ZXN0SGFuZGxlcik6Ci0gICAg
ZGVmIGdldChzZWxmKToKLSAgICAgICAgZmlsZXMgPSBzZWxmLnJlcXVlc3QuZ2V0X2FsbChQQVJB
TV9GSUxFKQotICAgICAgICBpZiBub3QgZmlsZXM6Ci0gICAgICAgICAgICBsb2dnaW5nLndhcm5p
bmcoIk5vIGRhc2hib2FyZCBmaWxlIHRvIGRlbGV0ZS4iKQotICAgICAgICAgICAgc2VsZi5yZXNw
b25zZS5zZXRfc3RhdHVzKDQwMCkKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgIGZvciBm
aWxlIGluIGZpbGVzOgotICAgICAgICAgICAgRGFzaGJvYXJkRmlsZS5kZWxldGVfZmlsZShmaWxl
KQotCi0gICAgICAgICMgRGlzcGxheSBkYXNoYm9hcmQgZmlsZSBsaXN0IGFmdGVyIGRlbGV0aW5n
IHRoZSBmaWxlLgotICAgICAgICBzZWxmLnJlZGlyZWN0KCIvZGFzaGJvYXJkcy8iKQpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9oYW5kbGVycy9tZW51LnB5IGIvVG9vbHMvVGVz
dFJlc3VsdFNlcnZlci9oYW5kbGVycy9tZW51LnB5CmluZGV4IGYyZjM4NTViNjcyNTMwZjQ2NDJi
MjQ5MjY3NTYwYjZjMjZlYzJlNDcuLmEwYjdhMzc1Mzk3NWY1ZGUxYzY2YmE5MGUzNDg1ZGQxZWRh
M2MxNzAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvaGFuZGxlcnMvbWVudS5w
eQorKysgYi9Ub29scy9UZXN0UmVzdWx0U2VydmVyL2hhbmRsZXJzL21lbnUucHkKQEAgLTMwLDEz
ICszMCwxOCBAQCBmcm9tIGdvb2dsZS5hcHBlbmdpbmUuYXBpIGltcG9ydCB1c2VycwogZnJvbSBn
b29nbGUuYXBwZW5naW5lLmV4dCBpbXBvcnQgd2ViYXBwCiBmcm9tIGdvb2dsZS5hcHBlbmdpbmUu
ZXh0LndlYmFwcCBpbXBvcnQgdGVtcGxhdGUKIAorZGFzaGJvYXJkcyA9IFsKKyAgICBbIlJlc3Vs
dHMiLCAiL2Rhc2hib2FyZHMvZmxha2luZXNzX2Rhc2hib2FyZC5odG1sIl0sCisgICAgWyJUaW1l
bGluZSIsICIvZGFzaGJvYXJkcy90aW1lbGluZV9leHBsb3Jlci5odG1sIl0sCisgICAgWyJUcmVl
bWFwIiwgIi9kYXNoYm9hcmRzL3RyZWVtYXAuaHRtbCJdLAorICAgIFsiU3RhdHMiLCAiL2Rhc2hi
b2FyZHMvYWdncmVnYXRlX3Jlc3VsdHMuaHRtbCJdLAorXQorCiBtZW51ID0gWwogICAgIFsiTGlz
dCBvZiB0ZXN0IGZpbGVzIiwgIi90ZXN0ZmlsZSJdLAogICAgIFsiTGlzdCBvZiByZXN1bHRzLmpz
b24gZmlsZXMiLCAiL3Rlc3RmaWxlP25hbWU9cmVzdWx0cy5qc29uIl0sCiAgICAgWyJMaXN0IG9m
IGV4cGVjdGF0aW9ucy5qc29uIGZpbGVzIiwgIi90ZXN0ZmlsZT9uYW1lPWV4cGVjdGF0aW9ucy5q
c29uIl0sCiAgICAgWyJVcGxvYWQgdGVzdCBmaWxlIiwgIi90ZXN0ZmlsZS91cGxvYWRmb3JtIl0s
Ci0gICAgWyJMaXN0IG9mIGRhc2hib2FyZCBmaWxlcyIsICIvZGFzaGJvYXJkcy8iXSwKLSAgICBb
IlVwZGF0ZSBkYXNoYm9hcmQgZmlsZXMiLCAiL2Rhc2hib2FyZHMvdXBkYXRlIl0sCiBdCiAKIApA
QCAtNTcsNiArNjIsNyBAQCBjbGFzcyBNZW51KHdlYmFwcC5SZXF1ZXN0SGFuZGxlcik6CiAgICAg
ICAgICAgICAibG9naW5fdGV4dCI6IGxvZ2luX3RleHQsCiAgICAgICAgICAgICAibG9naW5fdXJs
IjogbG9naW5fdXJsLAogICAgICAgICAgICAgIm1lbnUiOiBtZW51LAorICAgICAgICAgICAgImRh
c2hib2FyZHMiOiBkYXNoYm9hcmRzLAogICAgICAgICB9CiAKICAgICAgICAgc2VsZi5yZXNwb25z
ZS5vdXQud3JpdGUoCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UmVzdWx0U2VydmVyL21haW4ucHkg
Yi9Ub29scy9UZXN0UmVzdWx0U2VydmVyL21haW4ucHkKaW5kZXggYWE2ZTQzMjAwOWE1MTYxMGI3
YjZhMmU0MjUyMjBhZGQwMWRiNjQxMi4uMmZhNjFlNWYzNzkyZmFkODExODk0MTQ4MTU1ZjM4MjJk
NTlkYWE4OSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9tYWluLnB5CisrKyBi
L1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvbWFpbi5weQpAQCAtMzMsMTQgKzMzLDEwIEBAIHVzZV9s
aWJyYXJ5KCdkamFuZ28nLCAnMS4xJykKIGZyb20gZ29vZ2xlLmFwcGVuZ2luZS5leHQgaW1wb3J0
IHdlYmFwcAogZnJvbSBnb29nbGUuYXBwZW5naW5lLmV4dC53ZWJhcHAudXRpbCBpbXBvcnQgcnVu
X3dzZ2lfYXBwCiAKLWZyb20gaGFuZGxlcnMgaW1wb3J0IGRhc2hib2FyZGhhbmRsZXIKIGZyb20g
aGFuZGxlcnMgaW1wb3J0IG1lbnUKIGZyb20gaGFuZGxlcnMgaW1wb3J0IHRlc3RmaWxlaGFuZGxl
cgogCiByb3V0ZXMgPSBbCi0gICAgKCcvZGFzaGJvYXJkcy9kZWxldGUnLCBkYXNoYm9hcmRoYW5k
bGVyLkRlbGV0ZURhc2hib2FyZEZpbGUpLAotICAgICgnL2Rhc2hib2FyZHMvdXBkYXRlJywgZGFz
aGJvYXJkaGFuZGxlci5VcGRhdGVEYXNoYm9hcmRGaWxlKSwKLSAgICAoJy9kYXNoYm9hcmRzLyhb
Xj9dKyk/JywgZGFzaGJvYXJkaGFuZGxlci5HZXREYXNoYm9hcmRGaWxlKSwKICAgICAoJy90ZXN0
ZmlsZS9kZWxldGUnLCB0ZXN0ZmlsZWhhbmRsZXIuRGVsZXRlRmlsZSksCiAgICAgKCcvdGVzdGZp
bGUvdXBsb2FkJywgdGVzdGZpbGVoYW5kbGVyLlVwbG9hZCksCiAgICAgKCcvdGVzdGZpbGUvdXBs
b2FkZm9ybScsIHRlc3RmaWxlaGFuZGxlci5VcGxvYWRGb3JtKSwKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RSZXN1bHRTZXJ2ZXIvbW9kZWwvZGFzaGJvYXJkZmlsZS5weSBiL1Rvb2xzL1Rlc3RSZXN1
bHRTZXJ2ZXIvbW9kZWwvZGFzaGJvYXJkZmlsZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYWFkNmQ1MDk0N2UzMWUyNTIzMDY0N2RlYmFlN2Q0NjFkNWUzOTQwZS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9UZXN0UmVzdWx0U2Vy
dmVyL21vZGVsL2Rhc2hib2FyZGZpbGUucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBA
QAotIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlv
bi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0j
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
IyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0KLWZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCi1pbXBv
cnQgbG9nZ2luZwotaW1wb3J0IHVybGxpYgotaW1wb3J0IHVybGxpYjIKLQotZnJvbSBnb29nbGUu
YXBwZW5naW5lLmV4dCBpbXBvcnQgZGIKLQotU1ZOX1BBVEhfREFTSEJPQVJEID0gKCJodHRwOi8v
c3JjLmNocm9taXVtLm9yZy92aWV3dmMvY2hyb21lL3RydW5rL3Rvb2xzLyIKLSAgICAiZGFzaGJv
YXJkcy8iKQotCi0KLWNsYXNzIERhc2hib2FyZEZpbGUoZGIuTW9kZWwpOgotICAgIG5hbWUgPSBk
Yi5TdHJpbmdQcm9wZXJ0eSgpCi0gICAgZGF0YSA9IGRiLkJsb2JQcm9wZXJ0eSgpCi0gICAgZGF0
ZSA9IGRiLkRhdGVUaW1lUHJvcGVydHkoYXV0b19ub3dfYWRkPVRydWUpCi0KLSAgICBAY2xhc3Nt
ZXRob2QKLSAgICBkZWYgZ2V0X2ZpbGVzKGNscywgbmFtZSwgbGltaXQ9MSk6Ci0gICAgICAgIHF1
ZXJ5ID0gRGFzaGJvYXJkRmlsZS5hbGwoKQotICAgICAgICBpZiBuYW1lOgotICAgICAgICAgICAg
cXVlcnkgPSBxdWVyeS5maWx0ZXIoIm5hbWUgPSIsIG5hbWUpCi0gICAgICAgIHJldHVybiBxdWVy
eS5vcmRlcigiLWRhdGUiKS5mZXRjaChsaW1pdCkKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRl
ZiBhZGRfZmlsZShjbHMsIG5hbWUsIGRhdGEpOgotICAgICAgICBmaWxlID0gRGFzaGJvYXJkRmls
ZSgpCi0gICAgICAgIGZpbGUubmFtZSA9IG5hbWUKLSAgICAgICAgZmlsZS5kYXRhID0gZGIuQmxv
YihkYXRhKQotICAgICAgICBmaWxlLnB1dCgpCi0KLSAgICAgICAgbG9nZ2luZy5kZWJ1ZygiRGFz
aGJvYXJkIGZpbGUgc2F2ZWQsIG5hbWU6ICVzLiIsIG5hbWUpCi0KLSAgICAgICAgcmV0dXJuIGZp
bGUKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBncmFiX2ZpbGVfZnJvbV9zdm4oY2xzLCBu
YW1lKToKLSAgICAgICAgbG9nZ2luZy5kZWJ1ZygiR3JhYiBmaWxlIGZyb20gU1ZOLCBuYW1lOiAl
cy4iLCBuYW1lKQotCi0gICAgICAgIHVybCA9IFNWTl9QQVRIX0RBU0hCT0FSRCArIHVybGxpYi5x
dW90ZV9wbHVzKG5hbWUpCi0KLSAgICAgICAgbG9nZ2luZy5pbmZvKCJHcmFiIGZpbGUgZnJvbSBT
Vk4sIHVybDogJXMuIiwgdXJsKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmaWxlID0gdXJs
bGliMi51cmxvcGVuKHVybCkKLSAgICAgICAgICAgIGlmIG5vdCBmaWxlOgotICAgICAgICAgICAg
ICAgIGxvZ2dpbmcuZXJyb3IoIkZhaWxlZCB0byBncmFiIGRhc2hib2FyZCBmaWxlOiAlcy4iLCB1
cmwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgICAgICAgICAgcmV0dXJuIGZp
bGUucmVhZCgpCi0gICAgICAgIGV4Y2VwdCB1cmxsaWIyLkhUVFBFcnJvciwgZToKLSAgICAgICAg
ICAgIGxvZ2dpbmcuZXJyb3IoIkZhaWxlZCB0byBncmFiIGRhc2hib2FyZCBmaWxlOiAlcyIsIHN0
cihlKSkKLSAgICAgICAgZXhjZXB0IHVybGxpYjIuVVJMRXJyb3IsIGU6Ci0gICAgICAgICAgICBs
b2dnaW5nLmVycm9yKCJGYWlsZWQgdG8gZ3JhYiBkYXNoYm9hcmQgZmlsZTogJXMiLCBzdHIoZSkp
Ci0KLSAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiB1cGRh
dGVfZmlsZShjbHMsIG5hbWUpOgotICAgICAgICBkYXRhID0gY2xzLmdyYWJfZmlsZV9mcm9tX3N2
bihuYW1lKQotICAgICAgICBpZiBub3QgZGF0YToKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQot
Ci0gICAgICAgIGxvZ2dpbmcuaW5mbygiR290IGZpbGUgZnJvbSBTVk4uIikKLQotICAgICAgICBm
aWxlcyA9IGNscy5nZXRfZmlsZXMobmFtZSkKLSAgICAgICAgaWYgbm90IGZpbGVzOgotICAgICAg
ICAgICAgbG9nZ2luZy5pbmZvKCJObyBleGlzdGluZyBmaWxlLCBhZGRlZCBhcyBuZXcgZmlsZS4i
KQotICAgICAgICAgICAgaWYgY2xzLmFkZF9maWxlKG5hbWUsIGRhdGEpOgotICAgICAgICAgICAg
ICAgIHJldHVybiBUcnVlCi0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgICAgICBsb2dn
aW5nLmRlYnVnKCJVcGRhdGluZyBleGlzdGluZyBmaWxlLiIpCi0gICAgICAgIGZpbGUgPSBmaWxl
c1swXQotICAgICAgICBmaWxlLmRhdGEgPSBkYXRhCi0gICAgICAgIGZpbGUuZGF0ZSA9IGRhdGV0
aW1lLm5vdygpCi0gICAgICAgIGZpbGUucHV0KCkKLQotICAgICAgICBsb2dnaW5nLmluZm8oIkRh
c2hib2FyZCBmaWxlIHJlcGxhY2VkLCBuYW1lOiAlcy4iLCBuYW1lKQotCi0gICAgICAgIHJldHVy
biBUcnVlCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgZGVsZXRlX2ZpbGUoY2xzLCBuYW1l
KToKLSAgICAgICAgZmlsZXMgPSBjbHMuZ2V0X2ZpbGVzKG5hbWUpCi0gICAgICAgIGlmIG5vdCBm
aWxlczoKLSAgICAgICAgICAgIGxvZ2dpbmcud2FybmluZygiRmlsZSBub3QgZm91bmQsIG5hbWU6
ICVzLiIsIG5hbWUpCi0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgICAgICBmb3IgZmls
ZSBpbiBmaWxlczoKLSAgICAgICAgICAgIGZpbGUuZGVsZXRlKCkKLQotICAgICAgICByZXR1cm4g
VHJ1ZQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJk
cy9MSUNFTlNFLmR5Z3JhcGgudHh0IGIvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFz
aGJvYXJkcy9MSUNFTlNFLmR5Z3JhcGgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUzNmMwYThiZjI5MDJhMDE0
YTdlYjJhNWYyZjhmOGRjYmQ5ODFkYmYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0UmVz
dWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL0xJQ0VOU0UuZHlncmFwaC50eHQKQEAgLTAsMCAr
MSwyMiBAQAorQ29weXJpZ2h0IChjKSAyMDA5IERhbiBWYW5kZXJrYW0KKworUGVybWlzc2lvbiBp
cyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KK29idGFpbmlu
ZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCitm
aWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0City
ZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVz
ZSwKK2NvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2Us
IGFuZC9vciBzZWxsCitjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNv
bnMgdG8gd2hvbSB0aGUKK1NvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0
byB0aGUgZm9sbG93aW5nCitjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj
ZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQoraW5jbHVkZWQgaW4gYWxsIGNv
cGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZU
V0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAor
RVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJS
QU5USUVTCitPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFORAorTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBP
UiBDT1BZUklHSFQKK0hPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1Ig
T1RIRVIgTElBQklMSVRZLAorV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQg
T1IgT1RIRVJXSVNFLCBBUklTSU5HCitGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRI
IFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCitPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdB
UkUuCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRz
L1JFQURNRS5keWdyYXBoLnR4dCBiL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hi
b2FyZHMvUkVBRE1FLmR5Z3JhcGgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU4MDA2OTJiYTBmY2MxYTUxODRm
ZWU4OWQ4Yzc4NDY5ZmFiMGM0MjAKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0UmVzdWx0
U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL1JFQURNRS5keWdyYXBoLnR4dApAQCAtMCwwICsxLDU1
IEBACitkeWdyYXBocyBKYXZhU2NyaXB0IGNoYXJ0aW5nIGxpYnJhcnkKK0NvcHlyaWdodCAoYykg
MjAwNi0sIERhbiBWYW5kZXJrYW0uCisKK1N1cHBvcnQ6IGh0dHA6Ly9ncm91cHMuZ29vZ2xlLmNv
bS9ncm91cC9keWdyYXBocy11c2VycworU291cmNlOiBodHRwOi8vZ2l0aHViLmNvbS9kYW52ay9k
eWdyYXBocworSXNzdWVzOiBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvZHlncmFwaHMvCisKKwor
VGhlIGR5Z3JhcGhzIEphdmFTY3JpcHQgbGlicmFyeSBwcm9kdWNlcyBwcm9kdWNlcyBpbnRlcmFj
dGl2ZSwgem9vbWFibGUgY2hhcnRzIG9mIHRpbWUgc2VyaWVzLgorCitGZWF0dXJlcworLSBQbG90
cyB0aW1lIHNlcmllcyB3aXRob3V0IHVzaW5nIGFuIGV4dGVybmFsIHNlcnZlciBvciBGbGFzaAor
LSBTdXBwb3J0cyBtdWx0aXBsZSBkYXRhIHNlcmllcworLSBTdXBwb3J0cyBlcnJvciBiYW5kcyBh
cm91bmQgZGF0YSBzZXJpZXMKKy0gRGlzcGxheXMgdmFsdWVzIG9uIG1vdXNlb3ZlcgorLSBJbnRl
cmFjdGl2ZSB6b29tCistIEFkanVzdGFibGUgYXZlcmFnaW5nIHBlcmlvZAorLSBDdXN0b21pemFi
bGUgY2xpY2stdGhyb3VnaCBhY3Rpb25zCistIENvbXBhdGlibGUgd2l0aCB0aGUgR29vZ2xlIFZp
c3VhbGl6YXRpb24gQVBJCisKK0RlbW8KK0ZvciBhIGdhbGxlcnkgYW5kIGRvY3VtZW50YXRpb24s
IHNlZSBodHRwOi8vZGFudmsub3JnL2R5Z3JhcGhzLworCitNaW5pbWFsIEV4YW1wbGUKKzxodG1s
PgorPGhlYWQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJkeWdyYXBoLWNv
bWJpbmVkLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0iZ3JhcGhkaXYi
PjwvZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICBnID0gbmV3IER5Z3Jh
cGgoCisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncmFwaGRpdiIpLCAgLy8gY29u
dGFpbmluZyBkaXYKKyAgICAgICAgIkRhdGUsVGVtcGVyYXR1cmVcbiIgKyAgICAgICAgICAgICAg
ICAvLyB0aGUgZGF0YSBzZXJpZXMKKyAgICAgICAgIjIwMDgtMDUtMDcsNzVcbiIgKworICAgICAg
ICAiMjAwOC0wNS0wOCw3MFxuIiArCisgICAgICAgICIyMDA4LTA1LTA5LDgwXG4iCisgICAgICAp
OworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CisKK0xpY2Vuc2UocykKK2R5Z3JhcGhzIHVz
ZXM6CisgLSByZ2Jjb2xvci5qcyAoUHVibGljIERvbWFpbikKKyAtIHN0cmZ0aW1lLmpzIChCU0Qg
TGljZW5zZSkKKyAtIGV4Y2FudmFzLmpzIChBcGFjaGUgTGljZW5zZSkKKyAtIFlVSSBjb21wcmVz
c29yIChCU0QgTGljZW5zZSkKKworcmdiY29sb3I6IGh0dHA6Ly93d3cucGhwaWVkLmNvbS9yZ2It
Y29sb3ItcGFyc2VyLWluLWphdmFzY3JpcHQvCitzdHJmdGltZTogaHR0cDovL3RlY2guYmx1ZXNt
b29uLmluZm8vMjAwOC8wNC9zdHJmdGltZS1pbi1qYXZhc2NyaXB0Lmh0bWwKK2V4Y2FudmFzOiBo
dHRwOi8vY29kZS5nb29nbGUuY29tL3AvZXhwbG9yZXJjYW52YXMvCit5dWkgY29tcHJlc3Nvcjog
aHR0cDovL2RldmVsb3Blci55YWhvby5jb20veXVpL2NvbXByZXNzb3IvCisKK2R5Z3JhcGhzIGlz
IGF2YWlsYWJsZSB1bmRlciB0aGUgTUlUIGxpY2Vuc2UsIGluY2x1ZGVkIGluIExJQ0VOU0UudHh0
LgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9S
RUFETUUud2VidHJlZW1hcC50eHQgYi9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNo
Ym9hcmRzL1JFQURNRS53ZWJ0cmVlbWFwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kOWQ4ODViOTlhNDc4OTBm
YjU3YWY3YjUzNTZhMDczYjU4YWJlMTU5Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFJl
c3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9SRUFETUUud2VidHJlZW1hcC50eHQKQEAgLTAs
MCArMSw2MyBAQAorIyB3ZWJ0cmVlbWFwCisKK0Egc2ltcGxlIHRyZWVtYXAgaW1wbGVtZW50YXRp
b24gdXNpbmcgd2ViIHRlY2hub2xvZ2llcyAoRE9NIG5vZGVzLCBDU1MKK3N0eWxpbmcgYW5kIHRy
YW5zaXRpb25zKSByYXRoZXIgdGhhbiBhIGJpZyBjYW52YXMvc3ZnL3BsdWdpbi4KKworUGxheSB3
aXRoIGEgW2RlbW9dW10uCisKK1tkZW1vXTogaHR0cDovL21hcnRpbmUuZ2l0aHViLmNvbS93ZWJ0
cmVlbWFwL2RlbW8vZGVtby5odG1sCisKKyMjIENyZWF0aW5nIHlvdXIgb3duCisKKzEuIENyZWF0
ZSBhIHBhZ2Ugd2l0aCBhIERPTSBub2RlIChpLmUuIGEgYDxkaXY+YCkgdGhhdCB3aWxsIGNvbnRh
aW4KKyAgIHlvdXIgdHJlZW1hcC4KKzIuIEFkZCB0aGUgdHJlZW1hcCB0byB0aGUgbm9kZSB2aWEg
c29tZXRoaW5nIGxpa2UKKworICAgICAgICBhcHBlbmRUcmVlbWFwKGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdteW5vZGUnKSwgbXlkYXRhKTsKKzMuIFN0eWxlIHRoZSB0cmVlbWFwIHVzaW5nIENT
Uy4KKworIyMjIElucHV0IGZvcm1hdAorCitUaGUgaW5wdXQgZGF0YSAoYG15ZGF0YWAgaW4gdGhl
IG92ZXJ2aWV3IHNuaXBwZXQpIGlzIGEgdHJlZSBvZiBub2RlcywKK2xpa2VseSBpbXBvcnRlZCB2
aWEgYSBzZXBhcmF0ZSBKU09OIGZpbGUuICBFYWNoIG5vZGUgKGluY2x1ZGluZyB0aGUKK3Jvb3Qp
IHNob3VsZCBjb250YWluIGRhdGEgaW4gdGhlIGZvbGxvd2luZyBmb3JtYXQuCisKKyAgICB7Cisg
ICAgICBuYW1lOiAoSFRNTCB0aGF0IGlzIGRpc3BsYXllZCB2aWEgLmlubmVySFRNTCBvbiB0aGUg
Y2FwdGlvbiksCisgICAgICBkYXRhOiB7CisgICAgICAgICIkYXJlYSI6IChhIG51bWJlciwgaW4g
YXJiaXRyYXJ5IHVuaXRzKQorICAgICAgfSwKKyAgICAgIGNoaWxkcmVuOiAobGlzdCBvZiBjaGls
ZCB0cmVlIG5vZGVzKQorICAgIH0KKworKFRoaXMgc3RyYW5nZSBmb3JtYXQgZm9yIGRhdGEgY29t
ZXMgZnJvbSB0aGUgdGhlIFtKYXZhU2NyaXB0IEluZm9WaXMKK1Rvb2xraXRdW3RoZWppdF0uICBJ
IG1pZ2h0IGNoYW5nZSBpdCBpbiB0aGUgZnV0dXJlLikKKworVGhlIGAkYXJlYWAgb2YgYSBub2Rl
IHNob3VsZCBiZSB0aGUgc3VtIG9mIHRoZSBgJGFyZWFgIG9mIGFsbCBvZiBpdHMKK2BjaGlsZHJl
bmAuCisKKyhBdCBydW50aW1lLCB0cmVlIG5vZGVzIHdpbGwgZHluYW1pY2FsbHkgd2lsbCBnYWlu
IHR3byBleHRyYQorYXR0cmlidXRlcywgYHBhcmVudGAgYW5kIGBkb21gOyB0aGlzIGlzIG9ubHkg
d29ydGggcG9pbnRpbmcgb3V0IHNvCit0aGF0IHlvdSBkb24ndCBhY2NpZGVudGFsbHkgY29uZmxp
Y3Qgd2l0aCB0aGVtLikKKworIyMjIENTUyBzdHlsaW5nCisKK1RoZSB0cmVlbWFwIGlzIGNvbnN0
cnVjdGVkIHdpdGggb25lIGBkaXZgIHBlciByZWdpb24gd2l0aCBhIHNlcGFyYXRlCitgZGl2YCBm
b3IgdGhlIGNhcHRpb24uICBFYWNoIGRpdiBpcyBzdHlsZWFibGUgdmlhIHRoZQorYHdlYnRyZWVt
YXAtbm9kZWAgQ1NTIGNsYXNzLiAgVGhlIGNhcHRpb25zIGFyZSBzdHlsYWJsZSBhcworYHdlYnRy
ZWVtYXAtY2FwdGlvbmAuCisKK0VhY2ggbGV2ZWwgb2YgdGhlIHRyZWUgYWxzbyBnZXRzIGEgcGVy
LWxldmVsIENTUyBjbGFzcywKK2B3ZWJ0cmVlbWFwLWxldmVsMGAgdGhyb3VnaCBgd2VidHJlZW1h
cC1sZXZlbDRgLiAgVGhlc2UgY2FuIGJlCithZGp1c3RlZCB0byBlLmcuIG1hZGUgZGlmZmVyZW50
IGxldmVscyBkaWZmZXJlbnQgY29sb3JzLiAgVG8gY29udHJvbAordGhlIGNhcHRpb24gb24gYSBw
ZXItbGV2ZWwgYmFzaXMsIHVzZSBhIENTUyBzZWxlY3RvciBsaWtlCitgLndlYnRyZWVtYXAtbGV2
ZWwyID4gLndlYnRyZWVtYXAtY2FwdGlvbmAuCisKK1lvdXIgYmVzdCBiZXQgaXMgdG8gbW9kaWZ5
IHRoZSBpbmNsdWRlZCBgd2VidHJlZW1hcC5jc3NgLCB3aGljaAorY29udGFpbnMgY29tbWVudHMg
YWJvdXQgcmVxdWlyZWQgYW5kIG9wdGlvbmFsIENTUyBhdHRyaWJ1dGVzLgorCisjIyBSZWxhdGVk
IHByb2plY3RzCisKKyogW0phdmFTY3JpcHQgSW5mb1ZpcyBUb29sa2l0XVt0aGVqaXRdCisKK1t0
aGVqaXRdOiBodHRwOi8vdGhlaml0Lm9yZy8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2FnZ3Jl
Z2F0ZV9yZXN1bHRzLmh0bWwgYi9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9h
cmRzL2FnZ3JlZ2F0ZV9yZXN1bHRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTRjYjQ4MzEyMGE0NmMzYTY1
NzkzNThhMDAxY2EzMzlmNjZlMDBjNAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RSZXN1
bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvYWdncmVnYXRlX3Jlc3VsdHMuaHRtbApAQCAtMCww
ICsxLDMyMiBAQAorPCEtLSBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCittZXQ6CisKKyAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Citub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCitjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCitpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCitkaXN0cmlidXRpb24uCisgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCitj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQordGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKK09XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCitEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
K1RIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKy0tPgorPCFET0NUWVBFIEhU
TUw+Cis8aHRtbD4KKworPGhlYWQ+CisgIDx0aXRsZT5MYXlvdXQgdGVzdCBwYXNzaW5nIHN0YXR1
czwvdGl0bGU+CisgIDxzdHlsZT4KKyAgICBoMiB7CisgICAgICBtYXJnaW46IDA7CisgICAgICBm
b250LXNpemU6IDEuMmVtOworICAgIH0KKyAgICBoMyB7CisgICAgICBtYXJnaW4tYm90dG9tOiAw
OworICAgICAgZm9udC1zaXplOiAxZW07CisgICAgfQorICAgIC5jb250YWluZXIgeworICAgICAg
ZGlzcGxheTogaW5saW5lLWJsb2NrOworICAgICAgcGFkZGluZzogM3B4OworICAgIH0KKyAgICBp
bWcgeworICAgICAgYm9yZGVyOiAxcHggZG90dGVkIGdyZXk7CisgICAgICBtYXJnaW4tcmlnaHQ6
IDVweDsKKyAgICAgIHBhZGRpbmc6IDJweDsKKyAgICB9CisgIDwvc3R5bGU+CisgIDxzY3JpcHQg
c3JjPSJidWlsZGVycy5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQgc3JjPSJkYXNoYm9hcmRfYmFz
ZS5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQ+CisgIC8qKgorICAgKiBAZmlsZW92ZXJ2aWV3IENy
ZWF0ZXMgYSBkYXNoYm9hcmQgZm9yIHRyYWNraW5nIG51bWJlciBvZiBwYXNzZXMvZmFpbHVyZXMK
KyAgICogcGVyIHJ1bi4KKyAgICoKKyAgICogQ3VycmVudGx5LCBvbmx5IHdlYmtpdCB0ZXN0cyBh
cmUgc3VwcG9ydGVkLCBidXQgYWRkaW5nIG90aGVyIHRlc3QgdHlwZXMKKyAgICogc2hvdWxkIGp1
c3QgcmVxdWlyZSB0aGUgZm9sbG93aW5nIHN0ZXBzOgorICAgKiAgIC1nZW5lcmF0ZSByZXN1bHRz
Lmpzb24gZm9yIHRoZXNlIHRlc3RzCisgICAqICAgLWNvcHkgdGhlbSB0byB0aGUgYXBwcm9wcmlh
dGUgbG9jYXRpb24KKyAgICogICAtYWRkIHRoZSBidWlsZGVyIG5hbWUgdG8gdGhlIGxpc3Qgb2Yg
YnVpbGRlcnMgaW4gZGFzaGJvYXJkX2Jhc2UuanMuCisgICAqLworCisgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLworICAvLyBNZXRob2RzIGFuZCBvYmplY3RzIGZyb20gZGFzaGJvYXJkX2Jhc2UuanMg
dG8gb3ZlcnJpZGUuCisgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICBmdW5jdGlvbiBnZW5lcmF0
ZVBhZ2UoKSB7CisgICAgdmFyIGh0bWwgPSBnZXRIVE1MRm9yVGVzdFR5cGVTd2l0Y2hlcih0cnVl
KSArICc8YnI+JzsKKyAgICBmb3IgKHZhciBidWlsZGVyIGluIGJ1aWxkZXJzKSB7CisgICAgICBo
dG1sICs9IGdldEhUTUxGb3JCdWlsZGVyKGJ1aWxkZXIpOworICAgIH0KKyAgICBkb2N1bWVudC5i
b2R5LmlubmVySFRNTCA9IGh0bWw7CisgIH0KKworICBmdW5jdGlvbiBoYW5kbGVWYWxpZEhhc2hQ
YXJhbWV0ZXIoa2V5LCB2YWx1ZSkgeworICAgIHN3aXRjaChrZXkpIHsKKyAgICAgIGNhc2UgJ3Jh
d1ZhbHVlcyc6CisgICAgICAgIGN1cnJlbnRTdGF0ZVtrZXldID0gdmFsdWUgPT0gJ3RydWUnOwor
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICB9CisKKyAgZGVmYXVsdFN0YXRlVmFsdWVzID0geworICAgIHJhd1Zh
bHVlczogZmFsc2UKKyAgfTsKKworICBmdW5jdGlvbiBnZXRIVE1MRm9yQnVpbGRlcihidWlsZGVy
KSB7CisgICAgdmFyIHJlc3VsdHMgPSByZXN1bHRzQnlCdWlsZGVyW2J1aWxkZXJdOworICAgIC8v
IFNvbWUga2V5cyB3ZXJlIGFkZGVkIGxhdGVyIHRoYW4gb3RoZXJzLCBzbyB0aGV5IGRvbid0IGhh
dmUgYXMgbWFueQorICAgIC8vIGJ1aWxkcy4gVXNlIHRoZSBzaG9ydGVzdC4KKyAgICAvLyBUT0RP
KG9qYW4pOiBPbmNlIDUwMCBydW5zIGhhdmUgZmluaXNoZWQsIHdlIGNhbiBnZXQgcmlkIG9mIHBh
c3NpbmcgdGhpcworICAgIC8vIGFyb3VuZCBhbmQganVzdCBhc3N1bWUgYWxsIGtleXMgaGF2ZSB0
aGUgc2FtZSBudW1iZXIgb2YgYnVpbGRlcnMgZm9yIGEKKyAgICAvLyBnaXZlbiBidWlsZGVyLgor
ICAgIHZhciBudW1Db2x1bW5zID0gcmVzdWx0c1tBTExfRklYQUJMRV9DT1VOVF9LRVldLmxlbmd0
aDsKKyAgICB2YXIgaHRtbCA9ICc8ZGl2IGNsYXNzPWNvbnRhaW5lcj48aDI+JyArIGJ1aWxkZXIg
KyAnPC9oMj4nOworCisgICAgaWYgKGN1cnJlbnRTdGF0ZS5yYXdWYWx1ZXMpIHsKKyAgICAgIGh0
bWwgKz0gZ2V0UmF3VmFsdWVzSFRNTChyZXN1bHRzLCBudW1Db2x1bW5zKTsKKyAgICB9IGVsc2Ug
eworICAgICAgaHRtbCArPSAnPGEgaHJlZj0idGltZWxpbmVfZXhwbG9yZXIuaHRtbCcgKyAobG9j
YXRpb24uaGFzaCA/IGxvY2F0aW9uLmhhc2ggKyAnJicgOiAnIycpICsgJ2J1aWxkZXI9JyArIGJ1
aWxkZXIgKyAnIj4nICsKKyAgICAgICAgICBnZXRDaGFydEhUTUwocmVzdWx0cywgbnVtQ29sdW1u
cykgKyAnPC9hPic7CisgICAgfQorCisgICAgaHRtbCArPSAnPC9kaXY+JzsKKworICAgIHJldHVy
biBodG1sOworICB9CisKKyAgZnVuY3Rpb24gZ2V0UmF3VmFsdWVzSFRNTChyZXN1bHRzLCBudW1D
b2x1bW5zKSB7CisgICAgdmFyIGh0bWwgPSBnZXRIVE1MRm9yU3VtbWFyeVRhYmxlKHJlc3VsdHMs
IG51bUNvbHVtbnMpICsKKyAgICAgICAgZ2V0SFRNTEZvclRlc3RUeXBlKHJlc3VsdHMsIEZJWEFC
TEVfQ09VTlRTX0tFWSwgRklYQUJMRV9ERVNDUklQVElPTiwKKyAgICAgICAgICAgIG51bUNvbHVt
bnMpOworICAgIGlmIChpc0xheW91dFRlc3RSZXN1bHRzKCkpIHsKKyAgICAgIGh0bWwgKz0KKyAg
ICAgICAgICBnZXRIVE1MRm9yVGVzdFR5cGUocmVzdWx0cywgREVGRVJSRURfQ09VTlRTX0tFWSwK
KyAgICAgICAgICAgICAgREVGRVJSRURfREVTQ1JJUFRJT04sIG51bUNvbHVtbnMpICsKKyAgICAg
ICAgICBnZXRIVE1MRm9yVGVzdFR5cGUocmVzdWx0cywgV09OVEZJWF9DT1VOVFNfS0VZLCBXT05U
RklYX0RFU0NSSVBUSU9OLAorICAgICAgICAgICAgICBudW1Db2x1bW5zKTsKKyAgICB9CisgICAg
cmV0dXJuIGh0bWw7CisgIH0KKworICBmdW5jdGlvbiBnZXRDaGFydEhUTUwocmVzdWx0cywgbnVt
Q29sdW1ucykgeworICAgIHZhciBzaG91bGRTaG93V2ViS2l0UmV2aXNpb25zID0gaXNUaXBPZlRy
ZWVXZWJLaXRCdWlsZGVyKCk7CisgICAgdmFyIHJldmlzaW9uS2V5ID0gc2hvdWxkU2hvd1dlYktp
dFJldmlzaW9ucyA/IFdFQktJVF9SRVZJU0lPTlNfS0VZIDoKKyAgICAgICAgQ0hST01FX1JFVklT
SU9OU19LRVk7CisgICAgdmFyIHN0YXJ0UmV2aXNpb24gPSByZXN1bHRzW3JldmlzaW9uS2V5XVtu
dW1Db2x1bW5zIC0gMV07CisgICAgdmFyIGVuZFJldmlzaW9uID0gcmVzdWx0c1tyZXZpc2lvbktl
eV1bMF07CisgICAgdmFyIHJldmlzaW9uTGFiZWwgPSBzaG91bGRTaG93V2ViS2l0UmV2aXNpb25z
ID8gIldlYktpdCBSZXZpc2lvbiIgOgorICAgICAgICAiQ2hyb21pdW0gUmV2aXNpb24iOworCisg
ICAgdmFyIGZpeGFibGUgPSByZXN1bHRzW0ZJWEFCTEVfQ09VTlRfS0VZXS5zbGljZSgwLCBudW1D
b2x1bW5zKTsKKyAgICB2YXIgaHRtbCA9IGdldENoYXJ0KCJUb3RhbCBmYWlsaW5nIiwgeyIiOiBm
aXhhYmxlfSwgcmV2aXNpb25MYWJlbCwKKyAgICAgICAgc3RhcnRSZXZpc2lvbiwgZW5kUmV2aXNp
b24pOworCisgICAgdmFyIHZhbHVlcyA9IHZhbHVlc1BlckV4cGVjdGF0aW9uKHJlc3VsdHNbRklY
QUJMRV9DT1VOVFNfS0VZXSwgbnVtQ29sdW1ucyk7CisgICAgLy8gRG9uJ3QgY2FyZSBhYm91dCBu
dW1iZXIgb2YgcGFzc2VzIGZvciB0aGUgY2hhcnRzLgorICAgIGRlbGV0ZSh2YWx1ZXNbJ1AnXSk7
CisKKyAgICByZXR1cm4gaHRtbCArIGdldENoYXJ0KCJEZXRhaWxlZCBicmVha2Rvd24iLCB2YWx1
ZXMsIHJldmlzaW9uTGFiZWwsCisgICAgICAgIHN0YXJ0UmV2aXNpb24sIGVuZFJldmlzaW9uKTsK
KyAgfQorCisgIHZhciBMQUJFTF9DT0xPUlMgPSBbJ0ZGMDAwMCcsICcwMEZGMDAnLCAnMDAwMEZG
JywgJzAwMDAwMCcsICdGRjZFQjQnLAorICAgICAgJ0ZGQTgxMicsICc5QjMwRkYnLCAnMDBGRkND
J107CisKKyAgLy8gRklYTUU6IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIGV4Y2x1ZGUgb3V0bGllcnMu
IFRoaXMgaXMganVzdCBzbyB3ZSBleGNsdWRlCisgIC8vIHJ1bnMgd2hlcmUgZXZlcnkgdGVzdCBm
YWlsZWQuCisgIHZhciBNQVhfVkFMVUUgPSAxMDAwMDsKKworICBmdW5jdGlvbiBmaWx0ZXJlZFZh
bHVlcyh2YWx1ZXMsIGRlc2lyZWROdW1iZXJPZlBvaW50cykgeworICAgIC8vIEZpbHRlciBvdXQg
dmFsdWVzIHRvIG1ha2UgdGhlIGdyYXBoIGEgYml0IG1vcmUgcmVhZGFibGUgYW5kIHRvIGtlZXAg
VVJMcworICAgIC8vIGZyb20gZXhjZWVkaW5nIHRoZSBicm93c2VycyBtYXggbGVuZ3RoIHJlc3Ry
aWN0aW9uLgorICAgIHZhciBmaWx0ZXJBbW91bnQgPSBNYXRoLmZsb29yKHZhbHVlcy5sZW5ndGgg
LyBkZXNpcmVkTnVtYmVyT2ZQb2ludHMpOworICAgIGlmIChmaWx0ZXJBbW91bnQgPCAxKQorICAg
ICAgICByZXR1cm4gdmFsdWVzOworCisgICAgcmV0dXJuIHZhbHVlcy5maWx0ZXIoZnVuY3Rpb24o
ZWxlbWVudCwgaW5kZXgsIGFycmF5KSB7CisgICAgICAvLyBJbmNsdWRlIHRoZSBtb3N0IHJlY2Vu
dCBhbmQgb2xkZXN0IHZhbHVlcyBhbmQgZXhjbHVkZSBvdXRsaWVycy4KKyAgICAgIHJldHVybiAo
aW5kZXggJSBmaWx0ZXJBbW91bnQgPT0gMCB8fCBpbmRleCA9PSBhcnJheS5sZW5ndGggLSAxKSAm
JgorICAgICAgICAgIChhcnJheVtpbmRleF0gPCBNQVhfVkFMVUUgJiYgYXJyYXlbaW5kZXhdICE9
IDApOworICAgIH0pOworICB9CisKKyAgZnVuY3Rpb24gY2hhcnRVcmwodGl0bGUsIHZhbHVlcywg
cmV2aXNpb25MYWJlbCwgc3RhcnRSZXZpc2lvbiwgZW5kUmV2aXNpb24sCisgICAgICBkZXNpcmVk
TnVtYmVyT2ZQb2ludHMpIHsKKyAgICB2YXIgbWF4VmFsdWUgPSAwOworICAgIGZvciAodmFyIGV4
cGVjdGF0aW9uIGluIHZhbHVlcykgeworICAgICAgbWF4VmFsdWUgPSBNYXRoLm1heChtYXhWYWx1
ZSwKKyAgICAgICAgICBNYXRoLm1heC5hcHBseShudWxsLCBmaWx0ZXJlZFZhbHVlcyh2YWx1ZXNb
ZXhwZWN0YXRpb25dLAorICAgICAgICAgICAgICBkZXNpcmVkTnVtYmVyT2ZQb2ludHMpKSk7Cisg
ICAgfQorCisgICAgdmFyIGNoYXJ0RGF0YSA9ICcnOworICAgIHZhciBsYWJlbHMgPSAnJzsKKyAg
ICB2YXIgbnVtTGFiZWxzID0gMDsKKworICAgIHZhciBmaXJzdCA9IHRydWU7CisgICAgZm9yICh2
YXIgZXhwZWN0YXRpb24gaW4gdmFsdWVzKSB7CisgICAgICBjaGFydERhdGEgKz0gKGZpcnN0ID8g
J2U6JyA6ICcsJykgKworICAgICAgICAgIGV4dGVuZGVkRW5jb2RlKGZpbHRlcmVkVmFsdWVzKHZh
bHVlc1tleHBlY3RhdGlvbl0sCisgICAgICAgICAgICAgIGRlc2lyZWROdW1iZXJPZlBvaW50cyku
cmV2ZXJzZSgpLCBtYXhWYWx1ZSk7CisKKyAgICAgIGlmIChleHBlY3RhdGlvbikgeworICAgICAg
ICBudW1MYWJlbHMrKzsKKyAgICAgICAgbGFiZWxzICs9IChmaXJzdCA/ICcnIDogJ3wnKSArIGdl
dEV4cGVjdGF0aW9uc01hcCgpW2V4cGVjdGF0aW9uXTsKKyAgICAgIH0KKyAgICAgIGZpcnN0ID0g
ZmFsc2U7CisgICAgfQorCisgICAgdmFyIHVybCA9ICJodHRwOi8vY2hhcnQuYXBpcy5nb29nbGUu
Y29tL2NoYXJ0P2NodD1sYyZjaHM9NjAweDQwMCZjaGQ9IiArCisgICAgICAgIGNoYXJ0RGF0YSAr
ICImY2hnPTE1LDE1LDEsMyZjaHh0PXgseCx5JmNoeGw9MTp8fCIgKyByZXZpc2lvbkxhYmVsICsK
KyAgICAgICAgInwmY2h4cj0wLCIgKyBzdGFydFJldmlzaW9uICsgIiwiICsgZW5kUmV2aXNpb24g
KyAifDIsMCwiICsgbWF4VmFsdWUgKworICAgICAgICAiJmNodHQ9IiArIHRpdGxlOworCisKKyAg
ICBpZiAobGFiZWxzKSB7CisgICAgICB1cmwgKz0gIiZjaGRsPSIgKyBsYWJlbHMgKyAiJmNoY289
IiArCisgICAgICAgICAgTEFCRUxfQ09MT1JTLnNsaWNlKDAsIG51bUxhYmVscykuam9pbignLCcp
OworICAgIH0KKyAgICByZXR1cm4gdXJsOworICB9CisKKyAgZnVuY3Rpb24gZ2V0Q2hhcnQodGl0
bGUsIHZhbHVlcywgcmV2aXNpb25MYWJlbCwgc3RhcnRSZXZpc2lvbiwgZW5kUmV2aXNpb24pIHsK
KyAgICB2YXIgZGVzaXJlZE51bWJlck9mUG9pbnRzID0gNDAwOworICAgIHZhciB1cmwgPSBjaGFy
dFVybCh0aXRsZSwgdmFsdWVzLCByZXZpc2lvbkxhYmVsLCBzdGFydFJldmlzaW9uLCBlbmRSZXZp
c2lvbiwKKyAgICAgICAgZGVzaXJlZE51bWJlck9mUG9pbnRzKTsKKworICAgIHdoaWxlICh1cmwu
bGVuZ3RoID49IDIwNDgpIHsKKyAgICAgIC8vIERlY3JlYXNlIHRoZSBkZXNpcmVkIG51bWJlciBv
ZiBwb2ludHMgZ3JhZHVhbGx5IHVudGlsIHdlIGdldCBhIFVSTCB0aGF0CisgICAgICAvLyBkb2Vz
bid0IGV4Y2VlZCBjaGFydHNlcnZlcidzIG1heCBVUkwgbGVuZ3RoLgorICAgICAgZGVzaXJlZE51
bWJlck9mUG9pbnRzID0gMyAvIDQgKiBkZXNpcmVkTnVtYmVyT2ZQb2ludHM7CisgICAgICB1cmwg
PSBjaGFydFVybCh0aXRsZSwgdmFsdWVzLCByZXZpc2lvbkxhYmVsLCBzdGFydFJldmlzaW9uLCBl
bmRSZXZpc2lvbiwKKyAgICAgICAgICBkZXNpcmVkTnVtYmVyT2ZQb2ludHMpOworICAgIH0KKwor
ICAgIHJldHVybiAnPGltZyBzcmM9IicgKyB1cmwgKyAnIj4nOworICB9CisKKyAgZnVuY3Rpb24g
Z2V0SFRNTEZvclJldmlzaW9uUm93cyhyZXN1bHRzLCBudW1Db2x1bW5zKSB7CisgICAgcmV0dXJu
IGdldEhUTUxGb3JUYWJsZVJvdygnV2ViS2l0IFJldmlzaW9uJywKKyAgICAgICAgICAgIHJlc3Vs
dHNbV0VCS0lUX1JFVklTSU9OU19LRVldLnNsaWNlKDAsIG51bUNvbHVtbnMpKSArCisgICAgICAg
IGdldEhUTUxGb3JUYWJsZVJvdygnQ2hyb21lIFJldmlzaW9uJywKKyAgICAgICAgICAgIHJlc3Vs
dHNbQ0hST01FX1JFVklTSU9OU19LRVldLnNsaWNlKDAsIG51bUNvbHVtbnMpKTsKKyAgfQorCisg
IGZ1bmN0aW9uIHdyYXBIVE1MSW5UYWJsZShkZXNjcmlwdGlvbiwgaHRtbCkgeworICAgIHJldHVy
biAnPGgzPicgKyBkZXNjcmlwdGlvbiArICc8L2gzPjx0YWJsZT48dGJvZHk+JyArIGh0bWwgKwor
ICAgICAgICAnPC90Ym9keT48L3RhYmxlPic7CisgIH0KKworICBmdW5jdGlvbiBnZXRIVE1MRm9y
U3VtbWFyeVRhYmxlKHJlc3VsdHMsIG51bUNvbHVtbnMpIHsKKyAgICB2YXIgcGVyY2VudCA9IFtd
OworICAgIHZhciBmaXhhYmxlID0gcmVzdWx0c1tGSVhBQkxFX0NPVU5UX0tFWV0uc2xpY2UoMCwg
bnVtQ29sdW1ucyk7CisgICAgdmFyIGFsbEZpeGFibGUgPSByZXN1bHRzW0FMTF9GSVhBQkxFX0NP
VU5UX0tFWV0uc2xpY2UoMCwgbnVtQ29sdW1ucyk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBu
dW1Db2x1bW5zOyBpKyspIHsKKyAgICAgIHZhciBwZXJjZW50YWdlID0gMTAwICogKGFsbEZpeGFi
bGVbaV0gLSBmaXhhYmxlW2ldKSAvIGFsbEZpeGFibGVbaV07CisgICAgICAvLyBSb3VuZCB0byB0
aGUgbmVhcmVzdCB0ZW50aCBvZiBhIHBlcmNlbnQuCisgICAgICBwZXJjZW50LnB1c2goTWF0aC5y
b3VuZChwZXJjZW50YWdlICogMTApIC8gMTAgKyAnJScpOworICAgIH0KKyAgICB2YXIgaHRtbCA9
IGdldEhUTUxGb3JSZXZpc2lvblJvd3MocmVzdWx0cywgbnVtQ29sdW1ucykgKworICAgICAgICBn
ZXRIVE1MRm9yVGFibGVSb3coJ1BlcmNlbnQgcGFzc2VkJywgcGVyY2VudCkgKworICAgICAgICBn
ZXRIVE1MRm9yVGFibGVSb3coJ0ZhaWx1cmVzIChkZWR1cGVkKScsIGZpeGFibGUpICsKKyAgICAg
ICAgZ2V0SFRNTEZvclRhYmxlUm93KCdGaXhhYmxlIFRlc3RzJywgYWxsRml4YWJsZSk7CisgICAg
cmV0dXJuIHdyYXBIVE1MSW5UYWJsZSgnU3VtbWFyeScsIGh0bWwpOworICB9CisKKyAgZnVuY3Rp
b24gdmFsdWVzUGVyRXhwZWN0YXRpb24oY291bnRzLCBudW1Db2x1bW5zKSB7CisgICAgdmFyIHZh
bHVlcyA9IHt9OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtQ29sdW1uczsgaSsrKSB7Cisg
ICAgICBmb3IgKHZhciBleHBlY3RhdGlvbiBpbiBnZXRFeHBlY3RhdGlvbnNNYXAoKSkgeworICAg
ICAgICBpZiAoZXhwZWN0YXRpb24gaW4gY291bnRzW2ldKSB7CisgICAgICAgICAgdmFyIGNvdW50
ID0gY291bnRzW2ldW2V4cGVjdGF0aW9uXTsKKworICAgICAgICAgIGlmICghdmFsdWVzW2V4cGVj
dGF0aW9uXSkKKyAgICAgICAgICAgIHZhbHVlc1tleHBlY3RhdGlvbl0gPSBbXTsKKworICAgICAg
ICAgIHZhbHVlc1tleHBlY3RhdGlvbl0ucHVzaChjb3VudCk7CisgICAgICAgIH0KKyAgICAgIH0K
KyAgICB9CisgICAgcmV0dXJuIHZhbHVlczsKKyAgfQorCisgIGZ1bmN0aW9uIGdldEhUTUxGb3JU
ZXN0VHlwZShyZXN1bHRzLCBrZXksIGRlc2NyaXB0aW9uLCBudW1Db2x1bW5zKSB7CisgICAgdmFy
IGNvdW50cyA9IHJlc3VsdHNba2V5XTsKKyAgICB2YXIgaHRtbCA9IGdldEhUTUxGb3JSZXZpc2lv
blJvd3MocmVzdWx0cywgbnVtQ29sdW1ucyk7CisKKyAgICB2YXIgdmFsdWVzID0gdmFsdWVzUGVy
RXhwZWN0YXRpb24oY291bnRzLCBudW1Db2x1bW5zKTsKKyAgICBmb3IgKHZhciBleHBlY3RhdGlv
biBpbiB2YWx1ZXMpIHsKKyAgICAgIGh0bWwgKz0gZ2V0SFRNTEZvclRhYmxlUm93KGdldEV4cGVj
dGF0aW9uc01hcCgpW2V4cGVjdGF0aW9uXSwKKyAgICAgICAgICB2YWx1ZXNbZXhwZWN0YXRpb25d
KTsKKyAgICB9CisKKyAgICByZXR1cm4gd3JhcEhUTUxJblRhYmxlKGRlc2NyaXB0aW9uLCBodG1s
KTsKKyAgfQorCisgIGZ1bmN0aW9uIGdldEhUTUxGb3JUYWJsZVJvdyhjb2x1bW5OYW1lLCB2YWx1
ZXMpIHsKKyAgICByZXR1cm4gJzx0cj48dGQ+JyArIGNvbHVtbk5hbWUgKyAnPC90ZD48dGQ+JyAr
IHZhbHVlcy5qb2luKCc8L3RkPjx0ZD4nKSArCisgICAgICAgICc8L3RkPjwvdHI+JzsKKyAgfQor
CisgIC8vIFRha2VuIGZyb20gaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9hcGlzL2NoYXJ0L2RvY3Mv
ZGF0YV9mb3JtYXRzLmh0bWwuCisgIGZ1bmN0aW9uIGV4dGVuZGVkRW5jb2RlKGFyclZhbHMsIG1h
eFZhbCkgeworICAgIHZhciBtYXAgPQorICAgICAgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFla
YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5LS4nOworICAgIHZhciBtYXBMZW5n
dGggPSBtYXAubGVuZ3RoOworICAgIHZhciBtYXBMZW5ndGhTcXVhcmVkID0gbWFwTGVuZ3RoICog
bWFwTGVuZ3RoOworCisgICAgdmFyIGNoYXJ0RGF0YSA9ICcnOworCisgICAgZm9yKHZhciBpID0g
MCwgbGVuID0gYXJyVmFscy5sZW5ndGg7IGkgPCBsZW47IGkrKykgeworICAgICAgLy8gSW4gY2Fz
ZSB0aGUgYXJyYXkgdmFscyB3ZXJlIHRyYW5zbGF0ZWQgdG8gc3RyaW5ncy4KKyAgICAgIHZhciBu
dW1lcmljVmFsID0gbmV3IE51bWJlcihhcnJWYWxzW2ldKTsKKyAgICAgIC8vIFNjYWxlIHRoZSB2
YWx1ZSB0byBtYXhWYWwuCisgICAgICB2YXIgc2NhbGVkVmFsID0gTWF0aC5mbG9vcihtYXBMZW5n
dGhTcXVhcmVkICogbnVtZXJpY1ZhbCAvIG1heFZhbCk7CisKKyAgICAgIGlmKHNjYWxlZFZhbCA+
IG1hcExlbmd0aFNxdWFyZWQgLSAxKQorICAgICAgICBjaGFydERhdGEgKz0gIi4uIjsKKyAgICAg
IGVsc2UgaWYgKHNjYWxlZFZhbCA8IDApCisgICAgICAgIGNoYXJ0RGF0YSArPSAnX18nOworICAg
ICAgZWxzZSB7CisgICAgICAgIC8vIENhbGN1bGF0ZSBmaXJzdCBhbmQgc2Vjb25kIGRpZ2l0cyBh
bmQgYWRkIHRoZW0gdG8gdGhlIG91dHB1dC4KKyAgICAgICAgdmFyIHF1b3RpZW50ID0gTWF0aC5m
bG9vcihzY2FsZWRWYWwgLyBtYXBMZW5ndGgpOworICAgICAgICB2YXIgcmVtYWluZGVyID0gc2Nh
bGVkVmFsIC0gbWFwTGVuZ3RoICogcXVvdGllbnQ7CisgICAgICAgIGNoYXJ0RGF0YSArPSBtYXAu
Y2hhckF0KHF1b3RpZW50KSArIG1hcC5jaGFyQXQocmVtYWluZGVyKTsKKyAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gY2hhcnREYXRhOworICB9CisgIDwvc2NyaXB0PgorICA8L2hlYWQ+Cisg
IDxib2R5PjwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2
ZXIvc3RhdGljLWRhc2hib2FyZHMvYnVpbGRlcnMuanMgYi9Ub29scy9UZXN0UmVzdWx0U2VydmVy
L3N0YXRpYy1kYXNoYm9hcmRzL2J1aWxkZXJzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMxMTM5MmVmYjc1NjA1
ZTM3YjlmZGNhYzcwYTI0ODMzMDVmNDVlMDAKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0
UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2J1aWxkZXJzLmpzCkBAIC0wLDAgKzEsMjQ5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IEZpbGUgdGhhdCBsaXN0cyBidWlsZGVycywgdGhlaXIg
bWFzdGVycywgYW5kIGxvZ2ljYWwgZ3JvdXBpbmdzCisgKiBvZiB0aGVtLgorICovCisKK2Z1bmN0
aW9uIEJ1aWxkZXJNYXN0ZXIobmFtZSwgYmFzZVBhdGgpIHsKKyAgdGhpcy5uYW1lID0gbmFtZTsK
KyAgdGhpcy5iYXNlUGF0aCA9IGJhc2VQYXRoOworfQorCitCdWlsZGVyTWFzdGVyLnByb3RvdHlw
ZS5nZXRMb2dQYXRoID0gZnVuY3Rpb24oYnVpbGRlciwgYnVpbGROdW1iZXIpIHsKKyAgcmV0dXJu
IHRoaXMuYmFzZVBhdGggKyBidWlsZGVyICsgJy9idWlsZHMvJyArIGJ1aWxkTnVtYmVyOworfTsK
KworQ0hST01JVU1fQlVJTERFUl9NQVNURVIgPSBuZXcgQnVpbGRlck1hc3RlcigKKyAgICAnQ2hy
b21pdW0nLCAnaHR0cDovL2J1aWxkLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2J1aWxkZXJzLycp
OworQ0hST01JVU1fV0VCS0lUX0JVSUxERVJfTUFTVEVSID0gbmV3IEJ1aWxkZXJNYXN0ZXIoCisg
ICAgJ0Nocm9taXVtV2Via2l0JywgJ2h0dHA6Ly9idWlsZC5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1
bS53ZWJraXQvYnVpbGRlcnMvJyk7CitDSFJPTUlVTV9HUFVfQlVJTERFUl9NQVNURVIgPSBuZXcg
QnVpbGRlck1hc3RlcigKKyAgICAnQ2hyb21pdW1HUFUnLCAnaHR0cDovL2J1aWxkLmNocm9taXVt
Lm9yZy9wL2Nocm9taXVtLmdwdS9idWlsZGVycy8nKTsKK1dFQktJVF9CVUlMREVSX01BU1RFUiA9
IG5ldyBCdWlsZGVyTWFzdGVyKAorICAgICd3ZWJraXQub3JnJywgJ2h0dHA6Ly9idWlsZC53ZWJr
aXQub3JnL2J1aWxkZXJzLycpOworCitmdW5jdGlvbiBCdWlsZGVyR3JvdXAoaXNUb1RXZWJLaXQs
IGJ1aWxkZXJzKSB7CisgIHRoaXMuaXNUb1RXZWJLaXQgPSBpc1RvVFdlYktpdDsKKyAgLy8gTWFw
IG9mIGJ1aWxkZXJOYW1lICh0aGUgbmFtZSBzaG93biBpbiB0aGUgd2F0ZXJmYWxsKSB0byBidWls
ZGVyUGF0aCAodGhlCisgIC8vIHBhdGggdXNlZCBpbiB0aGUgYnVpbGRlcidzIFVSTCkKKyAgdGhp
cy5idWlsZGVycyA9IHt9OworICBidWlsZGVycy5mb3JFYWNoKGZ1bmN0aW9uKGJ1aWxkZXJBbmRG
bGFncykgeworICAgIHZhciBidWlsZGVyID0gYnVpbGRlckFuZEZsYWdzWzBdOworICAgIHZhciBm
bGFncyA9IGJ1aWxkZXJBbmRGbGFnc1sxXTsKKworICAgIHRoaXMuYnVpbGRlcnNbYnVpbGRlcl0g
PSBidWlsZGVyLnJlcGxhY2UoL1sgLigpXS9nLCAnXycpOworICAgIGlmIChmbGFncyAmIEJ1aWxk
ZXJHcm91cC5ERUZBVUxUX0JVSUxERVIpIHsKKyAgICAgIHRoaXMuZGVmYXVsdEJ1aWxkZXIgPSBi
dWlsZGVyOworICAgIH0KKyAgICBpZiAoZmxhZ3MgJiBCdWlsZGVyR3JvdXAuRVhQRUNUQVRJT05T
X0JVSUxERVIpIHsKKyAgICAgIHRoaXMuZXhwZWN0YXRpb25zQnVpbGRlciA9IGJ1aWxkZXI7Cisg
ICAgfQorICB9LCB0aGlzKTsKK30KKworQnVpbGRlckdyb3VwLnByb3RvdHlwZS5zZXR1cCA9IGZ1
bmN0aW9uKCkgeworICAvLyBUT0RPKG1paGFpcCk6IGluc3RlYWQgb2YgY29weWluZyB0aGVzZSB0
byBnbG9iYWxzLCBpdCB3b3VsZCBiZSBiZXR0ZXIgaWYKKyAgLy8gdGhlIHJlc3Qgb2YgdGhlIGNv
ZGUgcmVhZCB0aGluZ3MgZnJvbSB0aGUgQnVpbGRlckdyb3VwIGluc3RhbmNlIGRpcmVjdGx5Cisg
IGRlZmF1bHRCdWlsZGVyTmFtZSA9IHRoaXMuZGVmYXVsdEJ1aWxkZXI7CisgIGV4cGVjdGF0aW9u
c0J1aWxkZXIgPSB0aGlzLmV4cGVjdGF0aW9uc0J1aWxkZXI7CisgIGJ1aWxkZXJzID0gdGhpcy5i
dWlsZGVyczsKK307CisKK0J1aWxkZXJHcm91cC5UT1RfV0VCS0lUID0gdHJ1ZTsKK0J1aWxkZXJH
cm91cC5ERVBTX1dFQktJVCA9IGZhbHNlOworCitCdWlsZGVyR3JvdXAuREVGQVVMVF9CVUlMREVS
ID0gMSA8PCAxOworLy8gRm9yIGV4cGVjdGF0aW9ucyBidWlsZGVyLCBsaXN0IHRoZSBmYXN0ZXN0
IGJ1aWxkZXIgc28gdGhhdCB3ZSBhbHdheXMgaGF2ZSB0aGUKKy8vIG1vc3QgdXAgdG8gZGF0ZSBl
eHBlY3RhdGlvbnMuCitCdWlsZGVyR3JvdXAuRVhQRUNUQVRJT05TX0JVSUxERVIgPSAxIDw8IDI7
CisKK3ZhciBCVUlMREVSX1RPX01BU1RFUiA9IHt9OworZnVuY3Rpb24gYXNzb2NpYXRlQnVpbGRl
cnNXaXRoTWFzdGVyKGJ1aWxkZXJzLCBtYXN0ZXIpIHsKKyAgYnVpbGRlcnMuZm9yRWFjaChmdW5j
dGlvbihidWlsZGVyQW5kRmxhZ3MpIHsKKyAgICB2YXIgYnVpbGRlciA9IGJ1aWxkZXJBbmRGbGFn
c1swXTsKKyAgICBCVUlMREVSX1RPX01BU1RFUltidWlsZGVyXSA9IG1hc3RlcjsKKyAgfSk7Cit9
CisKK3ZhciBDSFJPTUlVTV9ERVBTX0JVSUxERVJTID0gWworICBbJ1dlYmtpdCBXaW4gKGRlcHMp
JywgQnVpbGRlckdyb3VwLkRFRkFVTFRfQlVJTERFUl0sCisgIFsnV2Via2l0IFdpbiAoZGVwcyko
ZGJnKSgxKSddLAorICBbJ1dlYmtpdCBXaW4gKGRlcHMpKGRiZykoMiknXSwKKyAgWydXZWJraXQg
TGludXggKGRlcHMpJywgQnVpbGRlckdyb3VwLkVYUEVDVEFUSU9OU19CVUlMREVSXSwKKyAgWydX
ZWJraXQgTGludXggKGRlcHMpKGRiZykoMSknXSwKKyAgWydXZWJraXQgTGludXggKGRlcHMpKGRi
ZykoMiknXSwKKyAgWydXZWJraXQgTWFjMTAuNiAoZGVwcyknXSwKKyAgWydXZWJraXQgTWFjMTAu
NiAoZGVwcykoZGJnKSgxKSddLAorICBbJ1dlYmtpdCBNYWMxMC42IChkZXBzKShkYmcpKDIpJ10K
K107Cithc3NvY2lhdGVCdWlsZGVyc1dpdGhNYXN0ZXIoQ0hST01JVU1fREVQU19CVUlMREVSUywg
Q0hST01JVU1fV0VCS0lUX0JVSUxERVJfTUFTVEVSKTsKKwordmFyIENIUk9NSVVNX1RPVF9CVUlM
REVSUyA9IFsKKyAgWydXZWJraXQgV2luJywgQnVpbGRlckdyb3VwLkRFRkFVTFRfQlVJTERFUl0s
CisgIFsnV2Via2l0IFZpc3RhJ10sCisgIFsnV2Via2l0IFdpbjcnXSwKKyAgWydXZWJraXQgV2lu
IChkYmcpKDEpJ10sCisgIFsnV2Via2l0IFdpbiAoZGJnKSgyKSddLAorICBbJ1dlYmtpdCBMaW51
eCcsIEJ1aWxkZXJHcm91cC5FWFBFQ1RBVElPTlNfQlVJTERFUl0sCisgIFsnV2Via2l0IExpbnV4
IDMyJ10sCisgIFsnV2Via2l0IExpbnV4IChkYmcpKDEpJ10sCisgIFsnV2Via2l0IExpbnV4IChk
YmcpKDIpJ10sCisgIFsnV2Via2l0IE1hYzEwLjUnXSwKKyAgWydXZWJraXQgTWFjMTAuNSAoZGJn
KSgxKSddLAorICBbJ1dlYmtpdCBNYWMxMC41IChkYmcpKDIpJ10sCisgIFsnV2Via2l0IE1hYzEw
LjYnXSwKKyAgWydXZWJraXQgTWFjMTAuNiAoZGJnKSddCitdOworYXNzb2NpYXRlQnVpbGRlcnNX
aXRoTWFzdGVyKENIUk9NSVVNX1RPVF9CVUlMREVSUywgQ0hST01JVU1fV0VCS0lUX0JVSUxERVJf
TUFTVEVSKTsKKwordmFyIFdFQktJVF9UT1RfQlVJTERFUlMgPSBbCisgIFsnQ2hyb21pdW0gV2lu
IFJlbGVhc2UgKFRlc3RzKScsIEJ1aWxkZXJHcm91cC5ERUZBVUxUX0JVSUxERVJdLAorICBbJ0No
cm9taXVtIExpbnV4IFJlbGVhc2UgKFRlc3RzKScsIEJ1aWxkZXJHcm91cC5FWFBFQ1RBVElPTlNf
QlVJTERFUl0sCisgIFsnQ2hyb21pdW0gTWFjIFJlbGVhc2UgKFRlc3RzKSddCitdOworYXNzb2Np
YXRlQnVpbGRlcnNXaXRoTWFzdGVyKFdFQktJVF9UT1RfQlVJTERFUlMsIFdFQktJVF9CVUlMREVS
X01BU1RFUik7CisKK3ZhciBDSFJPTUlVTV9HUFVfTUVTQV9CVUlMREVSUyA9IFsKKyAgWydXZWJr
aXQgV2luIC0gR1BVJywgQnVpbGRlckdyb3VwLkRFRkFVTFRfQlVJTERFUl0sCisgIFsnV2Via2l0
IFZpc3RhIC0gR1BVJ10sCisgIFsnV2Via2l0IFdpbjcgLSBHUFUnXSwKKyAgWydXZWJraXQgV2lu
IChkYmcpKDEpIC0gR1BVJ10sCisgIFsnV2Via2l0IFdpbiAoZGJnKSgyKSAtIEdQVSddLAorICBb
J1dlYmtpdCBMaW51eCAtIEdQVScsIEJ1aWxkZXJHcm91cC5FWFBFQ1RBVElPTlNfQlVJTERFUl0s
CisgIFsnV2Via2l0IExpbnV4IDMyIC0gR1BVJ10sCisgIFsnV2Via2l0IExpbnV4IChkYmcpKDEp
IC0gR1BVJ10sCisgIFsnV2Via2l0IExpbnV4IChkYmcpKDIpIC0gR1BVJ10sCisgIFsnV2Via2l0
IE1hYzEwLjUgLSBHUFUnXSwKKyAgWydXZWJraXQgTWFjMTAuNSAoZGJnKSgxKSAtIEdQVSddLAor
ICBbJ1dlYmtpdCBNYWMxMC41IChkYmcpKDIpIC0gR1BVJ10sCisgIFsnV2Via2l0IE1hYzEwLjYg
LSBHUFUnXSwKKyAgWydXZWJraXQgTWFjMTAuNiAoZGJnKSAtIEdQVSddCitdOworYXNzb2NpYXRl
QnVpbGRlcnNXaXRoTWFzdGVyKENIUk9NSVVNX0dQVV9NRVNBX0JVSUxERVJTLCBDSFJPTUlVTV9X
RUJLSVRfQlVJTERFUl9NQVNURVIpOworCit2YXIgQ0hST01JVU1fR1BVX0hBUkRXQVJFX0JVSUxE
RVJTID0gWworICBbJ0dQVSBXaW43IFRlc3RzIC0gR1BVJywgQnVpbGRlckdyb3VwLkRFRkFVTFRf
QlVJTERFUiB8IEJ1aWxkZXJHcm91cC5FWFBFQ1RBVElPTlNfQlVJTERFUl0sCisgIFsnR1BVIFdp
bjcgVGVzdHMgKGRiZykoMSkgLSBHUFUnXSwKKyAgWydHUFUgV2luNyBUZXN0cyAoZGJnKSgyKSAt
IEdQVSddLAorICBbJ0dQVSBXaW43IHg2NCBUZXN0cyAoZGJnKSgxKSAtIEdQVSddLAorICBbJ0dQ
VSBXaW43IHg2NCBUZXN0cyAoZGJnKSgyKSAtIEdQVSddLAorICAKKyAgWydHUFUgVmlzdGEgVGVz
dHMgKGRiZykoMSkgLSBHUFUnXSwKKyAgWydHUFUgVmlzdGEgVGVzdHMgKGRiZykoMikgLSBHUFUn
XSwKKyAgWydHUFUgVmlzdGEgeDY0IFRlc3RzIChkYmcpIC0gR1BVJ10sCisgIAorICBbJ0dQVSBN
YWMgMTAuNiBUZXN0cyAtIEdQVSddLAorICBbJ0dQVSBNYWMgMTAuNiBUZXN0cyAoZGJnKSAtIEdQ
VSddLAorICBbJ0dQVSBNYWMgMTAuNSBUZXN0cyAoZGJnKSAtIEdQVSddLAorICAKKyAgWydHUFUg
TGludXggVGVzdHMgKGRiZykoMSkgLSBHUFUnXSwKKyAgWydHUFUgTGludXggVGVzdHMgKGRiZyko
MikgLSBHUFUnXSwKKyAgCisgIFsnR1BVIFdpbjcgVGVzdHMgKGRiZykoMSkgLSBHUFUnXSwKKyAg
WydHUFUgV2luNyBUZXN0cyAoZGJnKSgyKSAtIEdQVSddLAorICBbJ0dQVSBMaW51eCBUZXN0cyB4
NjQgLSBHUFUnXQorXTsKK2Fzc29jaWF0ZUJ1aWxkZXJzV2l0aE1hc3RlcihDSFJPTUlVTV9HUFVf
SEFSRFdBUkVfQlVJTERFUlMsIENIUk9NSVVNX0dQVV9CVUlMREVSX01BU1RFUik7CisKK3ZhciBM
QVlPVVRfVEVTVFNfQlVJTERFUl9HUk9VUFMgPSB7CisgICdAREVQUyAtIGNocm9taXVtLm9yZyc6
ICAgICAgICAgICAgIG5ldyBCdWlsZGVyR3JvdXAoQnVpbGRlckdyb3VwLkRFUFNfV0VCS0lULCBD
SFJPTUlVTV9ERVBTX0JVSUxERVJTKSwKKyAgJ0BUb1QgLSBjaHJvbWl1bS5vcmcnOiAgICAgICAg
ICAgICAgbmV3IEJ1aWxkZXJHcm91cChCdWlsZGVyR3JvdXAuVE9UX1dFQktJVCwgIENIUk9NSVVN
X1RPVF9CVUlMREVSUyksCisgICdAVG9UIC0gd2Via2l0Lm9yZyc6ICAgICAgICAgICAgICAgIG5l
dyBCdWlsZGVyR3JvdXAoQnVpbGRlckdyb3VwLlRPVF9XRUJLSVQsICBXRUJLSVRfVE9UX0JVSUxE
RVJTKSwKKyAgJ0BUb1QgR1BVIE1lc2EgLSBjaHJvbWl1bS5vcmcnOiAgICAgbmV3IEJ1aWxkZXJH
cm91cChCdWlsZGVyR3JvdXAuVE9UX1dFQktJVCwgIENIUk9NSVVNX0dQVV9NRVNBX0JVSUxERVJT
KSwKKyAgJ0BUb1QgR1BVIEhhcmR3YXJlIC0gY2hyb21pdW0ub3JnJzogbmV3IEJ1aWxkZXJHcm91
cChCdWlsZGVyR3JvdXAuVE9UX1dFQktJVCwgIENIUk9NSVVNX0dQVV9IQVJEV0FSRV9CVUlMREVS
UykKK307CisKK3ZhciBMRUdBQ1lfQlVJTERFUl9NQVNURVJTX1RPX0dST1VQUyA9IHsKKyAgJ0No
cm9taXVtJzogJ0BERVBTIC0gY2hyb21pdW0ub3JnJywKKyAgJ0Nocm9taXVtV2Via2l0JzogJ0BU
b1QgLSBjaHJvbWl1bS5vcmcnLAorICAnd2Via2l0Lm9yZyc6ICdAVG9UIC0gd2Via2l0Lm9yZycK
K307CisKK3ZhciBHX1RFU1RTX0JVSUxERVJTID0gWworICBbJ1dpbicsIEJ1aWxkZXJHcm91cC5E
RUZBVUxUX0JVSUxERVJdLAorICBbJ01hYyddLAorICBbJ0xpbnV4J10sCisgIFsnTGludXggeDY0
J10sCisgIFsnWFAgVGVzdHMgKDEpJ10sCisgIFsnWFAgVGVzdHMgKDIpJ10sCisgIFsnWFAgVGVz
dHMgKDMpJ10sCisgIFsnVmlzdGEgVGVzdHMgKDEpJ10sCisgIFsnVmlzdGEgVGVzdHMgKDIpJ10s
CisgIFsnVmlzdGEgVGVzdHMgKDMpJ10sCisgIFsnV2luNyBTeW5jJ10sCisgIFsnWFAgVGVzdHMg
KGRiZykoMSknXSwKKyAgWydYUCBUZXN0cyAoZGJnKSgyKSddLAorICBbJ1hQIFRlc3RzIChkYmcp
KDMpJ10sCisgIFsnWFAgVGVzdHMgKGRiZykoNCknXSwKKyAgWydYUCBUZXN0cyAoZGJnKSg1KSdd
LAorICBbJ1hQIFRlc3RzIChkYmcpKDYpJ10sCisgIFsnVmlzdGEgVGVzdHMgKGRiZykoMSknXSwK
KyAgWydWaXN0YSBUZXN0cyAoZGJnKSgyKSddLAorICBbJ1Zpc3RhIFRlc3RzIChkYmcpKDMpJ10s
CisgIFsnVmlzdGEgVGVzdHMgKGRiZykoNCknXSwKKyAgWydWaXN0YSBUZXN0cyAoZGJnKSg1KSdd
LAorICBbJ1Zpc3RhIFRlc3RzIChkYmcpKDYpJ10sCisgIFsnSW50ZXJhY3RpdmUgVGVzdHMgKGRi
ZyknXSwKKyAgWydNYWMxMC41IFRlc3RzICgxKSddLAorICBbJ01hYzEwLjUgVGVzdHMgKDIpJ10s
CisgIFsnTWFjMTAuNSBUZXN0cyAoMyknXSwKKyAgWydNYWMxMC42IFRlc3RzICgxKSddLAorICBb
J01hYzEwLjYgVGVzdHMgKDIpJ10sCisgIFsnTWFjMTAuNiBUZXN0cyAoMyknXSwKKyAgWydNYWMx
MC42IFN5bmMnXSwKKyAgWydNYWMgMTAuNSBUZXN0cyAoZGJnKSgxKSddLAorICBbJ01hYyAxMC41
IFRlc3RzIChkYmcpKDIpJ10sCisgIFsnTWFjIDEwLjUgVGVzdHMgKGRiZykoMyknXSwKKyAgWydN
YWMgMTAuNSBUZXN0cyAoZGJnKSg0KSddLAorICBbJ01hYyAxMC42IFRlc3RzIChkYmcpKDEpJ10s
CisgIFsnTWFjIDEwLjYgVGVzdHMgKGRiZykoMiknXSwKKyAgWydNYWMgMTAuNiBUZXN0cyAoZGJn
KSgzKSddLAorICBbJ01hYyAxMC42IFRlc3RzIChkYmcpKDQpJ10sCisgIFsnTGludXggVGVzdHMg
eDY0J10sCisgIFsnTGludXggVGVzdHMgKGRiZykoMSknXSwKKyAgWydMaW51eCBUZXN0cyAoZGJn
KSgyKSddLAorICBbJ0xpbnV4IFRlc3RzIChkYmcpKHNoYXJlZCknXSwKKyAgWydMaW51eCBTeW5j
J10sCisgIFsnTGludXggQnVpbGRlciAoQ2hyb21pdW1PUyknXSwKKyAgWydMaW51eCBCdWlsZGVy
IChDaHJvbWl1bU9TIGRiZyknXSwKKyAgWydMaW51eCBUZXN0cyAoQ2hyb21pdW1PUyBkYmcpKDEp
J10sCisgIFsnTGludXggVGVzdHMgKENocm9taXVtT1MgZGJnKSgyKSddLAorICBbJ0xpbnV4IFRl
c3RzIChDaHJvbWl1bU9TIGRiZykoMyknXSwKKyAgWydMaW51eCBCdWlsZGVyIChDaHJvbWl1bU9T
IGRiZyknXSwKKyAgWydMaW51eCBCdWlsZGVyIChWaWV3cyBkYmcpJ10sCisgIFsnTGludXggVGVz
dHMgKFZpZXdzIGRiZykoMSknXSwKKyAgWydMaW51eCBUZXN0cyAoVmlld3MgZGJnKSgyKSddLAor
ICBbJ0xpbnV4IFRlc3RzIChWaWV3cyBkYmcpKDMpJ10sCitdOworYXNzb2NpYXRlQnVpbGRlcnNX
aXRoTWFzdGVyKEdfVEVTVFNfQlVJTERFUlMsIENIUk9NSVVNX0JVSUxERVJfTUFTVEVSKTsKKwor
dmFyIEdfVEVTVFNfQlVJTERFUl9HUk9VUCA9IG5ldyBCdWlsZGVyR3JvdXAoQnVpbGRlckdyb3Vw
LkRFUFNfV0VCS0lULCBHX1RFU1RTX0JVSUxERVJTKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RS
ZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvZGFzaGJvYXJkX2Jhc2UuanMgYi9Ub29scy9U
ZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2Rhc2hib2FyZF9iYXNlLmpzCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjMwYzAwNGM4NmI2YjM1ZWM4ZDE4ZGUxYjEzMWM3ZGMyYjE5YTUyNzQKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2Rhc2hi
b2FyZF9iYXNlLmpzCkBAIC0wLDAgKzEsMTA2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGVvdmVydmlldyBCYXNl
IEpTIGZpbGUgZm9yIHBhZ2VzIHRoYXQgd2FudCB0byBwYXJzZSB0aGUgcmVzdWx0cyBKU09OCisg
KiBmcm9tIHRoZSB0ZXN0aW5nIGJvdHMuIFRoaXMgZGVhbHMgd2l0aCBnZW5lcmljIHV0aWxpdHkg
ZnVuY3Rpb25zLCB2aXNpYmxlCisgKiBoaXN0b3J5LCBwb3B1cHMgYW5kIGFwcGVuZGluZyB0aGUg
c2NyaXB0IGVsZW1lbnRzIGZvciB0aGUgSlNPTiBmaWxlcy4KKyAqCisgKiBUaGUgY2FsbGluZyBw
YWdlIGlzIGV4cGVjdGVkIHRvIGltcGxlbWVudCB0aGUgZm9sbG93aW5nICJhYnN0cmFjdCIKKyAq
IGZ1bmN0aW9ucy9vYmplY3RzOgorICovCit2YXIgcGFnZUxvYWRTdGFydFRpbWUgPSBEYXRlLm5v
dygpOworCisvKioKKyAqIEdlbmVyYXRlcyB0aGUgY29udGVudHMgb2YgdGhlIGRhc2hib2FyZC4g
VGhlIHBhZ2Ugc2hvdWxkIG92ZXJyaWRlIHRoaXMgd2l0aAorICogYSBmdW5jdGlvbiB0aGF0IGdl
bmVyYXRlcyB0aGUgcGFnZSBhc3N1bWluZyBhbGwgcmVzb3VyY2VzIGhhdmUgbG9hZGVkLgorICov
CitmdW5jdGlvbiBnZW5lcmF0ZVBhZ2UoKSB7Cit9CisKKy8qKgorICogVGFrZXMgYSBrZXkgYW5k
IGEgdmFsdWUgYW5kIHNldHMgdGhlIGN1cnJlbnRTdGF0ZVtrZXldID0gdmFsdWUgaWZmIGtleSBp
cworICogYSB2YWxpZCBoYXNoIHBhcmFtZXRlciBhbmQgdGhlIHZhbHVlIGlzIGEgdmFsaWQgdmFs
dWUgZm9yIHRoYXQga2V5LgorICoKKyAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGtl
eSB3aGF0IGluc2VydGVkIGludG8gdGhlIGN1cnJlbnRTdGF0ZS4KKyAqLworZnVuY3Rpb24gaGFu
ZGxlVmFsaWRIYXNoUGFyYW1ldGVyKGtleSwgdmFsdWUpIHsKKyAgcmV0dXJuIGZhbHNlOworfQor
CisvKioKKyAqIERlZmF1bHQgaGFzaCBwYXJhbWV0ZXJzIGZvciB0aGUgcGFnZS4gVGhlIHBhZ2Ug
c2hvdWxkIG92ZXJyaWRlIHRoaXMgdG8gY3JlYXRlCisgKiBkZWZhdWx0IHN0YXRlcy4KKyAqLwor
dmFyIGRlZmF1bHRTdGF0ZVZhbHVlcyA9IHt9OworCisKKy8qKgorICogVGhlIHBhZ2Ugc2hvdWxk
IG92ZXJyaWRlIHRoaXMgdG8gbW9kaWZ5IHBhZ2Ugc3RhdGUgZHVlIHRvCisgKiBjaGFuZ2luZyBx
dWVyeSBwYXJhbWV0ZXJzLgorICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyBOZXcgb3IgbW9kaWZp
ZWQgcXVlcnkgcGFyYW1zIGFzIGtleTogdmFsdWUuCisgKiBAcmV0dXJuIHtib29sZWFufSBXaGV0
aGVyIGNoYW5naW5nIHRoaXMgcGFyYW1ldGVyIHNob3VsZCBjYXVzZSBnZW5lcmF0ZVBhZ2UgdG8g
YmUgY2FsbGVkLgorICovCitmdW5jdGlvbiBoYW5kbGVRdWVyeVBhcmFtZXRlckNoYW5nZShwYXJh
bXMpIHsKKyAgcmV0dXJuIHRydWU7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gQ09O
U1RBTlRTCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK3ZhciBHVEVTVF9FWFBFQ1RBVElPTlNfTUFQ
XyA9IHsKKyAgJ1AnOiAnUEFTUycsCisgICdGJzogJ0ZBSUwnLAorICAnTCc6ICdGTEFLWScsCisg
ICdOJzogJ05PIERBVEEnLAorICAnWCc6ICdESVNBQkxFRCcKK307CisKK3ZhciBMQVlPVVRfVEVT
VF9FWFBFQ1RBVElPTlNfTUFQXyA9IHsKKyAgJ1AnOiAnUEFTUycsCisgICdOJzogJ05PIERBVEEn
LAorICAnWCc6ICdTS0lQJywKKyAgJ1QnOiAnVElNRU9VVCcsCisgICdGJzogJ1RFWFQnLAorICAn
Qyc6ICdDUkFTSCcsCisgICdJJzogJ0lNQUdFJywKKyAgJ1onOiAnSU1BR0UrVEVYVCcsCisgIC8v
IFdlIHVzZWQgdG8gZ2xvYiBhIGJ1bmNoIG9mIGV4cGVjdGF0aW9ucyBpbnRvICJPIiBhcyBPVEhF
Ui4gRXhwZWN0YXRpb25zCisgIC8vIGFyZSBtb3JlIHByZWNpc2Ugbm93IHRob3VnaCBhbmQgaXQg
anVzdCBtZWFucyBNSVNTSU5HLgorICAnTyc6ICdNSVNTSU5HJworfTsKKwordmFyIEZBSUxVUkVf
RVhQRUNUQVRJT05TXyA9IHsKKyAgJ1QnOiAxLAorICAnRic6IDEsCisgICdDJzogMSwKKyAgJ0kn
OiAxLAorICAnWic6IDEKK307CisKKy8vIEtleXMgaW4gdGhlIEpTT04gZmlsZXMuCit2YXIgV09O
VEZJWF9DT1VOVFNfS0VZID0gJ3dvbnRmaXhDb3VudHMnOwordmFyIEZJWEFCTEVfQ09VTlRTX0tF
WSA9ICdmaXhhYmxlQ291bnRzJzsKK3ZhciBERUZFUlJFRF9DT1VOVFNfS0VZID0gJ2RlZmVycmVk
Q291bnRzJzsKK3ZhciBXT05URklYX0RFU0NSSVBUSU9OID0gJ1Rlc3RzIG5ldmVyIHRvIGJlIGZp
eGVkIChXT05URklYKSc7Cit2YXIgRklYQUJMRV9ERVNDUklQVElPTiA9ICdBbGwgdGVzdHMgZm9y
IHRoaXMgcmVsZWFzZSc7Cit2YXIgREVGRVJSRURfREVTQ1JJUFRJT04gPSAnQWxsIGRlZmVycmVk
IHRlc3RzIChERUZFUiknOwordmFyIEZJWEFCTEVfQ09VTlRfS0VZID0gJ2ZpeGFibGVDb3VudCc7
Cit2YXIgQUxMX0ZJWEFCTEVfQ09VTlRfS0VZID0gJ2FsbEZpeGFibGVDb3VudCc7Cit2YXIgQ0hS
T01FX1JFVklTSU9OU19LRVkgPSAnY2hyb21lUmV2aXNpb24nOwordmFyIFdFQktJVF9SRVZJU0lP
TlNfS0VZID0gJ3dlYmtpdFJldmlzaW9uJzsKK3ZhciBUSU1FU1RBTVBTX0tFWSA9ICdzZWNvbmRz
U2luY2VFcG9jaCc7Cit2YXIgQlVJTERfTlVNQkVSU19LRVkgPSAnYnVpbGROdW1iZXJzJzsKK3Zh
ciBURVNUU19LRVkgPSAndGVzdHMnOworCisvLyBUaGVzZSBzaG91bGQgbWF0Y2ggdGhlIHRlc3R0
eXBlIHVwbG9hZGVkIHRvIHRlc3QtcmVzdWx0cy5hcHBzcG90LmNvbS4KKy8vIFNlZSBodHRwOi8v
dGVzdC1yZXN1bHRzLmFwcHNwb3QuY29tL3Rlc3RmaWxlLgordmFyIFRFU1RfVFlQRVMgPSBbJ2Fw
cF91bml0dGVzdHMnLCAnYmFzZV91bml0dGVzdHMnLCAnYnJvd3Nlcl90ZXN0cycsCisgICAgJ2Nh
Y2hlX2ludmFsaWRhdGlvbl91bml0dGVzdHMnLCAnY291cmdldHRlX3VuaXR0ZXN0cycsCisgICAg
J2NyeXB0b191bml0dGVzdHMnLCAnZ29vZ2xldXJsX3VuaXR0ZXN0cycsICdncHVfdW5pdHRlc3Rz
JywKKyAgICAnaW5zdGFsbGVyX3V0aWxfdW5pdHRlc3RzJywgJ2ludGVyYWN0aXZlX3VpX3Rlc3Rz
JywgJ2lwY190ZXN0cycsCisgICAgJ2ppbmdsZV91bml0dGVzdHMnLCAnbGF5b3V0LXRlc3RzJywg
J21lZGlhX3VuaXR0ZXN0cycsCisgICAgJ21pbmlfaW5zdGFsbGVyX3Rlc3QnLCAnbmFjbF91aV90
ZXN0cycsICduZXRfdW5pdHRlc3RzJywKKyAgICAncHJpbnRpbmdfdW5pdHRlc3RzJywgJ3JlbW90
aW5nX3VuaXR0ZXN0cycsICdzYWZlX2Jyb3dzaW5nX3Rlc3RzJywKKyAgICAnc3luY191bml0X3Rl
c3RzJywgJ3N5bmNfaW50ZWdyYXRpb25fdGVzdHMnLAorICAgICd0ZXN0X3NoZWxsX3Rlc3RzJywg
J3VpX3Rlc3RzJywgJ3VuaXRfdGVzdHMnXTsKKwordmFyIFJFTE9BRF9SRVFVSVJJTkdfUEFSQU1F
VEVSUyA9IFsnc2hvd0FsbFJ1bnMnLCAnZ3JvdXAnLCAndGVzdFR5cGUnXTsKKworLy8gRW51bSBm
b3IgaW5kZXhpbmcgaW50byB0aGUgcnVuLWxlbmd0aCBlbmNvZGVkIHJlc3VsdHMgaW4gdGhlIEpT
T04gZmlsZXMuCisvLyAwIGlzIHdoZXJlIHRoZSBjb3VudCBpcyBsZW5ndGggaXMgc3RvcmVkLiAx
IGlzIHRoZSB2YWx1ZS4KK3ZhciBSTEUgPSB7CisgIExFTkdUSDogMCwKKyAgVkFMVUU6IDEKK30K
KworLy8gVGhlIHNlcnZlciB0aGF0IGhvc3RzIHRoZSBidWlsZGVyIHJlc3VsdHMganNvbiBmaWxl
cy4KK3ZhciBURVNUX1JFU1VMVFNfU0VSVkVSID0gJ2h0dHA6Ly90ZXN0LXJlc3VsdHMuYXBwc3Bv
dC5jb20vJzsKKworLyoqCisgKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB2YWx1ZSBy
ZXByZXNlbnRzIGEgZmFpbGluZyByZXN1bHQuCisgKi8KK2Z1bmN0aW9uIGlzRmFpbGluZ1Jlc3Vs
dCh2YWx1ZSkgeworICByZXR1cm4gJ0ZTVE9DSVonLmluZGV4T2YodmFsdWUpICE9IC0xOworfQor
CisvKioKKyAqIFRha2VzIGEga2V5IGFuZCBhIHZhbHVlIGFuZCBzZXRzIHRoZSBjdXJyZW50U3Rh
dGVba2V5XSA9IHZhbHVlIGlmZiBrZXkgaXMKKyAqIGEgdmFsaWQgaGFzaCBwYXJhbWV0ZXIgYW5k
IHRoZSB2YWx1ZSBpcyBhIHZhbGlkIHZhbHVlIGZvciB0aGF0IGtleS4gSGFuZGxlcworICogY3Jv
c3MtZGFzaGJvYXJkIHBhcmFtZXRlcnMgdGhlbiBmYWxscyBiYWNrIHRvIGNhbGxpbmcKKyAqIGhh
bmRsZVZhbGlkSGFzaFBhcmFtZXRlciBmb3IgZGFzaGJvYXJkLXNwZWNpZmljIHBhcmFtZXRlcnMu
CisgKgorICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUga2V5IHdoYXQgaW5zZXJ0ZWQg
aW50byB0aGUgY3VycmVudFN0YXRlLgorICovCitmdW5jdGlvbiBoYW5kbGVWYWxpZEhhc2hQYXJh
bWV0ZXJXcmFwcGVyKGtleSwgdmFsdWUpIHsKKyAgc3dpdGNoKGtleSkgeworICAgIGNhc2UgJ3Rl
c3RUeXBlJzoKKyAgICAgIHZhbGlkYXRlUGFyYW1ldGVyKGN1cnJlbnRTdGF0ZSwga2V5LCB2YWx1
ZSwKKyAgICAgICAgICBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHJldHVybiBURVNUX1RZUEVT
LmluZGV4T2YodmFsdWUpICE9IC0xOworICAgICAgICAgIH0pOworICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICBjYXNlICdncm91cCc6CisgICAgICB2YWxpZGF0ZVBhcmFtZXRlcihjdXJyZW50U3Rh
dGUsIGtleSwgdmFsdWUsCisgICAgICAgICAgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICByZXR1
cm4gdmFsdWUgaW4gTEFZT1VUX1RFU1RTX0JVSUxERVJfR1JPVVBTOworICAgICAgICAgIH0pOwor
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBGSVhNRTogcmVtb3ZlIHN1cHBvcnQgZm9yIHRo
aXMgcGFyYW1ldGVyIG9uY2UgdGhlIHdhdGVyZmFsbCBzdGFydHMgdG8KKyAgICAvLyBwYXNzIGlu
IHRoZSBidWlsZGVyIG5hbWUgaW5zdGVhZC4KKyAgICBjYXNlICdtYXN0ZXInOgorICAgICAgdmFs
aWRhdGVQYXJhbWV0ZXIoY3VycmVudFN0YXRlLCBrZXksIHZhbHVlLAorICAgICAgICAgIGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgcmV0dXJuIHZhbHVlIGluIExFR0FDWV9CVUlMREVSX01BU1RF
UlNfVE9fR1JPVVBTOworICAgICAgICAgIH0pOworICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBj
YXNlICdidWlsZGVyJzoKKyAgICAgIHZhbGlkYXRlUGFyYW1ldGVyKGN1cnJlbnRTdGF0ZSwga2V5
LCB2YWx1ZSwKKyAgICAgICAgICBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHJldHVybiB2YWx1
ZSBpbiBidWlsZGVyczsKKyAgICAgICAgICB9KTsKKyAgICAgIHJldHVybiB0cnVlOworCisgICAg
Y2FzZSAndXNlVGVzdERhdGEnOgorICAgIGNhc2UgJ3Nob3dBbGxSdW5zJzoKKyAgICAgIGN1cnJl
bnRTdGF0ZVtrZXldID0gdmFsdWUgPT0gJ3RydWUnOworICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICBjYXNlICdidWlsZERpcic6CisgICAgICBjdXJyZW50U3RhdGVbJ3Rlc3RUeXBlJ10gPSAnbGF5
b3V0LXRlc3QtcmVzdWx0cyc7CisgICAgICBpZiAodmFsdWUgPT09ICdEZWJ1ZycgfHwgdmFsdWUg
PT0gJ1JlbGVhc2UnKSB7CisgICAgICAgIGN1cnJlbnRTdGF0ZVtrZXldID0gdmFsdWU7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgfQorCisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiBoYW5kbGVWYWxpZEhhc2hQYXJh
bWV0ZXIoa2V5LCB2YWx1ZSk7CisgIH0KK30KKwordmFyIGRlZmF1bHRDcm9zc0Rhc2hib2FyZFN0
YXRlVmFsdWVzID0geworICBncm91cDogJ0BERVBTIC0gY2hyb21pdW0ub3JnJywKKyAgc2hvd0Fs
bFJ1bnM6IGZhbHNlLAorICB0ZXN0VHlwZTogJ2xheW91dC10ZXN0cycsCisgIGJ1aWxkRGlyIDog
JycKK30KKworLy8gR2VuZXJpYyB1dGlsaXR5IGZ1bmN0aW9ucy4KK2Z1bmN0aW9uICQoaWQpIHsK
KyAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKK30KKworZnVuY3Rpb24gc3Ry
aW5nQ29udGFpbnMoYSwgYikgeworICByZXR1cm4gYS5pbmRleE9mKGIpICE9IC0xOworfQorCitm
dW5jdGlvbiBjYXNlSW5zZW5zaXRpdmVDb250YWlucyhhLCBiKSB7CisgIHJldHVybiBhLm1hdGNo
KG5ldyBSZWdFeHAoYiwgJ2knKSk7Cit9CisKK2Z1bmN0aW9uIHN0YXJ0c1dpdGgoYSwgYikgewor
ICByZXR1cm4gYS5pbmRleE9mKGIpID09IDA7Cit9CisKK2Z1bmN0aW9uIGVuZHNXaXRoKGEsIGIp
IHsKKyAgcmV0dXJuIGEubGFzdEluZGV4T2YoYikgPT0gYS5sZW5ndGggLSBiLmxlbmd0aDsKK30K
KworZnVuY3Rpb24gaXNWYWxpZE5hbWUoc3RyKSB7CisgIHJldHVybiBzdHIubWF0Y2goL1tBLVph
LXowLTlcLVxfLF0vKTsKK30KKworZnVuY3Rpb24gdHJpbVN0cmluZyhzdHIpIHsKKyAgcmV0dXJu
IHN0ci5yZXBsYWNlKC9eXHMrfFxzKyQvZywgJycpOworfQorCitmdW5jdGlvbiByZXF1ZXN0KHVy
bCwgc3VjY2VzcywgZXJyb3IsIG9wdF9pc0JpbmFyeURhdGEpIHsKKyAgY29uc29sZS5sb2coJ1hN
TEh0dHBSZXF1ZXN0OiAnICsgdXJsKTsKKyAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgp
OworICB4aHIub3BlbignR0VUJywgdXJsLCB0cnVlKTsKKyAgaWYgKG9wdF9pc0JpbmFyeURhdGEp
CisgICAgeGhyLm92ZXJyaWRlTWltZVR5cGUoJ3RleHQvcGxhaW47IGNoYXJzZXQ9eC11c2VyLWRl
ZmluZWQnKTsKKyAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKGUpIHsKKyAgICBp
ZiAoeGhyLnJlYWR5U3RhdGUgPT0gNCkgeworICAgICAgaWYgKHhoci5zdGF0dXMgPT0gMjAwKQor
ICAgICAgICBzdWNjZXNzKHhocik7CisgICAgICBlbHNlCisgICAgICAgIGVycm9yKHhocik7Cisg
ICAgfQorICB9CisgIHhoci5zZW5kKCk7Cit9CisKK2Z1bmN0aW9uIHZhbGlkYXRlUGFyYW1ldGVy
KHN0YXRlLCBrZXksIHZhbHVlLCB2YWxpZGF0ZUZuKSB7CisgIGlmICh2YWxpZGF0ZUZuKCkpIHsK
KyAgICBzdGF0ZVtrZXldID0gdmFsdWU7CisgIH0gZWxzZSB7CisgICAgY29uc29sZS5sb2coa2V5
ICsgJyB2YWx1ZSBpcyBub3QgdmFsaWQ6ICcgKyB2YWx1ZSk7CisgIH0KK30KKworLyoqCisgKiBQ
YXJzZXMgd2luZG93LmxvY2F0aW9uLmhhc2ggYW5kIHNldCB0aGUgY3VycmVudFN0YXRlIHZhbHVl
cyBhcHByb3ByaWF0ZWx5LgorICovCitmdW5jdGlvbiBwYXJzZVBhcmFtZXRlcnMocGFyYW1ldGVy
U3RyKSB7CisgIG9sZFN0YXRlID0gY3VycmVudFN0YXRlOworICBjdXJyZW50U3RhdGUgPSB7fTsK
KworICB2YXIgaGFzaCA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoOworICB2YXIgcGFyYW1zTGlzdCA9
IGhhc2ggPyBoYXNoLnN1YnN0cmluZygxKS5zcGxpdCgnJicpIDogW107CisgIHZhciBwYXJhbXNN
YXAgPSB7fTsKKyAgdmFyIGludmFsaWRLZXlzID0gW107CisgIGZvciAodmFyIGkgPSAwOyBpIDwg
cGFyYW1zTGlzdC5sZW5ndGg7IGkrKykgeworICAgIHZhciB0aGlzUGFyYW0gPSBwYXJhbXNMaXN0
W2ldLnNwbGl0KCc9Jyk7CisgICAgaWYgKHRoaXNQYXJhbS5sZW5ndGggIT0gMikgeworICAgICAg
Y29uc29sZS5sb2coJ0ludmFsaWQgcXVlcnkgcGFyYW1ldGVyOiAnICsgcGFyYW1zW2ldKTsKKyAg
ICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIHBhcmFtc01hcFt0aGlzUGFyYW1bMF1dID0gZGVj
b2RlVVJJQ29tcG9uZW50KHRoaXNQYXJhbVsxXSk7CisgIH0KKworICBmdW5jdGlvbiBwYXJzZVBh
cmFtKGtleSkgeworICAgIHZhciB2YWx1ZSA9IHBhcmFtc01hcFtrZXldOworICAgIGlmICghaGFu
ZGxlVmFsaWRIYXNoUGFyYW1ldGVyV3JhcHBlcihrZXksIHZhbHVlKSkKKyAgICAgIGludmFsaWRL
ZXlzLnB1c2goa2V5ICsgJz0nICsgdmFsdWUpOworICB9CisKKyAgLy8gUGFyc2UgYnVpbGRlciBw
YXJhbSBsYXN0LCBzaW5jZSB0aGUgbGlzdCBvZiB2YWxpZCBidWlsZGVycyBkZXBlbmRzIG9uIHRo
ZQorICAvLyBvdGhlciBwYXJhbWV0ZXJzLgorICBmb3IgKHZhciBrZXkgaW4gcGFyYW1zTWFwKSB7
CisgICAgaWYgKGtleSAhPSAnYnVpbGRlcicpCisgICAgICBwYXJzZVBhcmFtKGtleSk7CisgIH0K
KyAgaWYgKCdidWlsZGVyJyBpbiBwYXJhbXNNYXApIHsKKyAgICBpZiAoIWJ1aWxkZXJzKSB7Cisg
ICAgICB2YXIgdGVtcFN0YXRlID0ge307CisgICAgICBmb3IgKHZhciBrZXkgaW4gY3VycmVudFN0
YXRlKSB7CisgICAgICAgIHRlbXBTdGF0ZVtrZXldID0gY3VycmVudFN0YXRlW2tleV07CisgICAg
ICB9CisgICAgICBmaWxsTWlzc2luZ1ZhbHVlcyh0ZW1wU3RhdGUsIGRlZmF1bHRDcm9zc0Rhc2hi
b2FyZFN0YXRlVmFsdWVzKTsKKyAgICAgIGZpbGxNaXNzaW5nVmFsdWVzKHRlbXBTdGF0ZSwgZGVm
YXVsdFN0YXRlVmFsdWVzKTsKKyAgICAgIGluaXRCdWlsZGVycyh0ZW1wU3RhdGUpOworICAgIH0K
KyAgICBwYXJzZVBhcmFtKCdidWlsZGVyJyk7CisgIH0KKworICBpZiAoaW52YWxpZEtleXMubGVu
Z3RoKQorICAgIGNvbnNvbGUubG9nKCJJbnZhbGlkIHF1ZXJ5IHBhcmFtZXRlcnM6ICIgKyBpbnZh
bGlkS2V5cy5qb2luKCcsJykpOworCisgIHZhciBkaWZmU3RhdGUgPSBkaWZmU3RhdGVzKCk7CisK
KyAgZmlsbE1pc3NpbmdWYWx1ZXMoY3VycmVudFN0YXRlLCBkZWZhdWx0Q3Jvc3NEYXNoYm9hcmRT
dGF0ZVZhbHVlcyk7CisgIGZpbGxNaXNzaW5nVmFsdWVzKGN1cnJlbnRTdGF0ZSwgZGVmYXVsdFN0
YXRlVmFsdWVzKTsKKworICAvLyBTb21lIHBhcmFtZXRlcnMgcmVxdWlyZSBsb2FkaW5nIGRpZmZl
cmVudCBKU09OIGZpbGVzIHdoZW4gdGhlIHZhbHVlIGNoYW5nZXMuIERvIGEgcmVsb2FkLgorICBp
ZiAob2xkU3RhdGUpIHsKKyAgICBmb3IgKHZhciBrZXkgaW4gY3VycmVudFN0YXRlKSB7CisgICAg
ICBpZiAob2xkU3RhdGVba2V5XSAhPSBjdXJyZW50U3RhdGVba2V5XSAmJiBSRUxPQURfUkVRVUlS
SU5HX1BBUkFNRVRFUlMuaW5kZXhPZihrZXkpICE9IC0xKQorICAgICAgICB3aW5kb3cubG9jYXRp
b24ucmVsb2FkKCk7CisgICAgfQorICB9CisKKyAgcmV0dXJuIGRpZmZTdGF0ZTsKK30KKworLyoq
CisgKiBGaW5kIHRoZSBkaWZmZXJlbmNlIG9mIGN1cnJlbnRTdGF0ZSB3aXRoIG9sZFN0YXRlLgor
ICogQHJldHVybiB7T2JqZWN0fSBrZXk6dmFsdWVzIG9mIHRoZSBuZXcgb3IgY2hhbmdlZCBwYXJh
bXMuCisgKi8KK2Z1bmN0aW9uIGRpZmZTdGF0ZXMoKSB7CisgIC8vIElmIHRoZXJlIGlzIG5vIG9s
ZCBzdGF0ZSwgZXZlcnl0aGluZyBpbiB0aGUgY3VycmVudCBzdGF0ZSBpcyBuZXcuCisgIGlmICgh
b2xkU3RhdGUpIHsKKyAgICByZXR1cm4gY3VycmVudFN0YXRlOworICB9CisKKyAgdmFyIGNoYW5n
ZWRQYXJhbXMgPSB7fTsKKyAgZm9yIChjdXJLZXkgaW4gY3VycmVudFN0YXRlKSB7CisgICAgdmFy
IG9sZFZhbCA9IG9sZFN0YXRlW2N1cktleV07CisgICAgdmFyIG5ld1ZhbCA9IGN1cnJlbnRTdGF0
ZVtjdXJLZXldOworICAgIC8vIEFkZCBuZXcga2V5cyBvciBjaGFuZ2VkIHZhbHVlcy4KKyAgICBp
ZiAoIW9sZFZhbCB8fCBvbGRWYWwgIT0gbmV3VmFsKSB7CisgICAgICBjaGFuZ2VkUGFyYW1zW2N1
cktleV0gPSBuZXdWYWw7CisgICAgfQorICB9CisgIHJldHVybiBjaGFuZ2VkUGFyYW1zOworfQor
CitmdW5jdGlvbiBnZXREZWZhdWx0VmFsdWUoa2V5KSB7CisgIGlmIChrZXkgaW4gZGVmYXVsdFN0
YXRlVmFsdWVzKQorICAgIHJldHVybiBkZWZhdWx0U3RhdGVWYWx1ZXNba2V5XTsKKyAgcmV0dXJu
IGRlZmF1bHRDcm9zc0Rhc2hib2FyZFN0YXRlVmFsdWVzW2tleV07Cit9CisKK2Z1bmN0aW9uIGZp
bGxNaXNzaW5nVmFsdWVzKHRvLCBmcm9tKSB7CisgIGZvciAodmFyIHN0YXRlIGluIGZyb20pIHsK
KyAgICBpZiAoIShzdGF0ZSBpbiB0bykpCisgICAgICB0b1tzdGF0ZV0gPSBmcm9tW3N0YXRlXTsK
KyAgfQorfQorCisvKioKKyAqIExvYWQgYSBzY3JpcHQuCisgKiBAcGFyYW0ge3N0cmluZ30gcGF0
aCBQYXRoIHRvIHRoZSBzY3JpcHQgdG8gbG9hZC4KKyAqIEBwYXJhbSB7RnVuY3Rpb249fSBvcHRf
b25FcnJvciBPcHRpb25hbCBmdW5jdGlvbiB0byBjYWxsIGlmIHRoZSBzY3JpcHQKKyAqICAgICBk
b2VzIG5vdCBsb2FkLgorICogQHBhcmFtIHtGdW5jdGlvbj19IG9wdF9vbkxvYWQgT3B0aW9uYWwg
ZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBzY3JpcHQKKyAqICAgICBpcyBsb2FkZWQuICBDYWxs
ZWQgd2l0aCB0aGUgc2NyaXB0IGVsZW1lbnQgYXMgaXRzIDFzdCBhcmd1bWVudC4KKyAqLworZnVu
Y3Rpb24gYXBwZW5kU2NyaXB0KHBhdGgsIG9wdF9vbkVycm9yLCBvcHRfb25Mb2FkKSB7CisgIHZh
ciBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKKyAgc2NyaXB0LnNy
YyA9IHBhdGg7CisgIGlmIChvcHRfb25Mb2FkKSB7CisgICAgc2NyaXB0Lm9ucmVhZHlzdGF0ZWNo
YW5nZSA9IGZ1bmN0aW9uKCkgeworICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSAnY29tcGxl
dGUnKSBvcHRfb25Mb2FkKHNjcmlwdCk7CisgICAgfTsKKyAgICBzY3JpcHQub25sb2FkID0gZnVu
Y3Rpb24oKSB7IG9wdF9vbkxvYWQoc2NyaXB0KTsgfTsKKyAgfQorICBpZiAob3B0X29uRXJyb3Ip
IHsKKyAgICBzY3JpcHQub25lcnJvciA9IG9wdF9vbkVycm9yOworICB9CisgIGRvY3VtZW50Lmdl
dEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0uYXBwZW5kQ2hpbGQoc2NyaXB0KTsKK30KKwor
Ly8gUGVybWFsaW5rYWJsZSBzdGF0ZSBvZiB0aGUgcGFnZS4KK3ZhciBjdXJyZW50U3RhdGU7CisK
Ky8vIFNhdmVkIHZhbHVlIG9mIHByZXZpb3VzIGN1cnJlbnRTdGF0ZS4gVGhpcyBpcyB1c2VkIHRv
IGRldGVjdCBjaGFuZ2luZyBmcm9tCisvLyBvbmUgc2V0IG9mIGJ1aWxkZXJzIHRvIGFub3RoZXIs
IHdoaWNoIHJlcXVpcmVzIHJlbG9hZGluZyB0aGUgcGFnZS4KK3ZhciBvbGRTdGF0ZTsKKworLy8g
UGFyc2UgY3Jvc3MtZGFzaGJvYXJkIHBhcmFtZXRlcnMgYmVmb3JlIHVzaW5nIHRoZW0uCitwYXJz
ZVBhcmFtZXRlcnMoKTsKKworZnVuY3Rpb24gaXNMYXlvdXRUZXN0UmVzdWx0cygpIHsKKyAgcmV0
dXJuIGN1cnJlbnRTdGF0ZS50ZXN0VHlwZSA9PSAnbGF5b3V0LXRlc3RzJzsKK30KKworZnVuY3Rp
b24gZ2V0Q3VycmVudEJ1aWxkZXJHcm91cChvcHRfc3RhdGUpIHsKKyAgdmFyIHN0YXRlID0gb3B0
X3N0YXRlIHx8IGN1cnJlbnRTdGF0ZTsKKyAgc3dpdGNoIChzdGF0ZS50ZXN0VHlwZSkgeworICAg
IGNhc2UgJ2xheW91dC10ZXN0cyc6CisgICAgICByZXR1cm4gTEFZT1VUX1RFU1RTX0JVSUxERVJf
R1JPVVBTW3N0YXRlLmdyb3VwXQorICAgICAgYnJlYWs7CisgICAgY2FzZSAnYXBwX3VuaXR0ZXN0
cyc6CisgICAgY2FzZSAnYmFzZV91bml0dGVzdHMnOgorICAgIGNhc2UgJ2Jyb3dzZXJfdGVzdHMn
OgorICAgIGNhc2UgJ2NhY2hlaW52YWxpZGF0aW9uX3VuaXR0ZXN0cyc6CisgICAgY2FzZSAnY291
cmdldHRlX3VuaXR0ZXN0cyc6CisgICAgY2FzZSAnY3J5cHRvX3VuaXR0ZXN0cyc6CisgICAgY2Fz
ZSAnZ29vZ2xldXJsX3VuaXR0ZXN0cyc6CisgICAgY2FzZSAnZ3B1X3VuaXR0ZXN0cyc6CisgICAg
Y2FzZSAnaW5zdGFsbGVyX3V0aWxfdW5pdHRlc3RzJzoKKyAgICBjYXNlICdpbnRlcmFjdGl2ZV91
aV90ZXN0cyc6CisgICAgY2FzZSAnaXBjX3Rlc3RzJzoKKyAgICBjYXNlICdqaW5nbGVfdW5pdHRl
c3RzJzoKKyAgICBjYXNlICdtZWRpYV91bml0dGVzdHMnOgorICAgIGNhc2UgJ21pbmlfaW5zdGFs
bGVyX3Rlc3QnOgorICAgIGNhc2UgJ25hY2xfdWlfdGVzdHMnOgorICAgIGNhc2UgJ25ldF91bml0
dGVzdHMnOgorICAgIGNhc2UgJ3ByaW50aW5nX3VuaXR0ZXN0cyc6CisgICAgY2FzZSAncmVtb3Rp
bmdfdW5pdHRlc3RzJzoKKyAgICBjYXNlICdzYWZlX2Jyb3dzaW5nX3Rlc3RzJzoKKyAgICBjYXNl
ICdzeW5jX3VuaXRfdGVzdHMnOgorICAgIGNhc2UgJ3N5bmNfaW50ZWdyYXRpb25fdGVzdHMnOgor
ICAgIGNhc2UgJ3Rlc3Rfc2hlbGxfdGVzdHMnOgorICAgIGNhc2UgJ3VpX3Rlc3RzJzoKKyAgICBj
YXNlICd1bml0X3Rlc3RzJzoKKyAgICAgIHJldHVybiBHX1RFU1RTX0JVSUxERVJfR1JPVVA7Cisg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgY29uc29sZS5sb2coJ2ludmFsaWQgdGVz
dFR5cGUgcGFyYW1ldGVyOiAnICsgc3RhdGUudGVzdFR5cGUpOworICB9Cit9CisKK2Z1bmN0aW9u
IGdldEJ1aWxkZXJNYXN0ZXIoYnVpbGRlck5hbWUpIHsKKyAgcmV0dXJuIEJVSUxERVJfVE9fTUFT
VEVSW2J1aWxkZXJOYW1lXTsKK30KKworZnVuY3Rpb24gaXNUaXBPZlRyZWVXZWJLaXRCdWlsZGVy
KCkgeworICByZXR1cm4gZ2V0Q3VycmVudEJ1aWxkZXJHcm91cCgpLmlzVG9UV2ViS2l0OworfQor
Cit2YXIgZGVmYXVsdEJ1aWxkZXJOYW1lLCBidWlsZGVycywgZXhwZWN0YXRpb25zQnVpbGRlcjsK
K2Z1bmN0aW9uIGluaXRCdWlsZGVycyhzdGF0ZSkgeworICBpZiAoc3RhdGUuYnVpbGREaXIpIHsK
KyAgICAvLyBJZiBidWlsZERpciBpcyBzZXQsIHBvaW50IHRvIHRoZSByZXN1bHRzLmpzb24gYW5k
IGV4cGVjdGF0aW9ucy5qc29uIGluIHRoZQorICAgIC8vIGxvY2FsIHRyZWUuIFVzZWZ1bCBmb3Ig
ZGVidWdnaW5nIGNoYW5nZXMgdG8gdGhlIHB5dGhvbiBKU09OIGdlbmVyYXRvci4KKyAgICBkZWZh
dWx0QnVpbGRlck5hbWUgPSAnRFVNTVlfQlVJTERFUl9OQU1FJzsKKyAgICBidWlsZGVycyA9IHsn
RFVNTVlfQlVJTERFUl9OQU1FJzogJyd9OworICAgIHZhciBsb2MgPSBkb2N1bWVudC5sb2NhdGlv
bi50b1N0cmluZygpOworICAgIHZhciBvZmZzZXQgPSBsb2MuaW5kZXhPZignd2Via2l0LycpOwor
ICB9IGVsc2UgeworICAgIC8vIEZJWE1FOiByZW1vdmUgc3VwcG9ydCBmb3IgbWFwcGluZyBmcm9t
IHRoZSBtYXN0ZXIgcGFyYW1ldGVyIHRvIHRoZSBncm91cAorICAgIC8vIG9uZSBvbmNlIHRoZSB3
YXRlcmZhbGwgc3RhcnRzIHRvIHBhc3MgaW4gdGhlIGJ1aWxkZXIgbmFtZSBpbnN0ZWFkLgorICAg
IGlmIChzdGF0ZS5tYXN0ZXIpIHsKKyAgICAgIHN0YXRlLmdyb3VwID0gTEVHQUNZX0JVSUxERVJf
TUFTVEVSU19UT19HUk9VUFNbc3RhdGUubWFzdGVyXTsKKyAgICAgIHdpbmRvdy5sb2NhdGlvbi5o
YXNoID0gd2luZG93LmxvY2F0aW9uLmhhc2gucmVwbGFjZSgnbWFzdGVyPScgKyBzdGF0ZS5tYXN0
ZXIsICdncm91cD0nICsgc3RhdGUuZ3JvdXApOworICAgICAgZGVsZXRlIHN0YXRlLm1hc3RlcjsK
KyAgICB9CisgICAgZ2V0Q3VycmVudEJ1aWxkZXJHcm91cChzdGF0ZSkuc2V0dXAoKTsKKyAgfQor
fQoraW5pdEJ1aWxkZXJzKGN1cnJlbnRTdGF0ZSk7CisKKy8vIEFwcGVuZCBKU09OIHNjcmlwdCBl
bGVtZW50cy4KK3ZhciByZXN1bHRzQnlCdWlsZGVyID0ge307Cit2YXIgZXhwZWN0YXRpb25zQnlU
ZXN0ID0ge307CitmdW5jdGlvbiBBRERfUkVTVUxUUyhidWlsZHMpIHsKKyAgZm9yICh2YXIgYnVp
bGRlck5hbWUgaW4gYnVpbGRzKSB7CisgICAgaWYgKGJ1aWxkZXJOYW1lICE9ICd2ZXJzaW9uJykK
KyAgICAgIHJlc3VsdHNCeUJ1aWxkZXJbYnVpbGRlck5hbWVdID0gYnVpbGRzW2J1aWxkZXJOYW1l
XTsKKyAgfQorCisgIGhhbmRsZVJlc291cmNlTG9hZCgpOworfQorCitmdW5jdGlvbiBnZXRQYXRo
VG9CdWlsZGVyUmVzdWx0c0ZpbGUoYnVpbGRlck5hbWUpIHsKKyAgcmV0dXJuIFRFU1RfUkVTVUxU
U19TRVJWRVIgKyAndGVzdGZpbGU/YnVpbGRlcj0nICsgYnVpbGRlck5hbWUgKworICAgICAgJyZt
YXN0ZXI9JyArIGdldEJ1aWxkZXJNYXN0ZXIoYnVpbGRlck5hbWUpLm5hbWUgKworICAgICAgJyZ0
ZXN0dHlwZT0nICsgY3VycmVudFN0YXRlLnRlc3RUeXBlICsgJyZuYW1lPSc7Cit9CisKKy8vIE9u
bHkgd2Via2l0IHRlc3RzIGhhdmUgYSBzZW5zZSBvZiB0ZXN0IGV4cGVjdGF0aW9ucy4KK3ZhciB3
YWl0aW5nT25FeHBlY3RhdGlvbnMgPSBpc0xheW91dFRlc3RSZXN1bHRzKCkgJiYgIWlzVHJlZU1h
cCgpOworaWYgKHdhaXRpbmdPbkV4cGVjdGF0aW9ucykgeworICBmdW5jdGlvbiBBRERfRVhQRUNU
QVRJT05TKGV4cGVjdGF0aW9ucykgeworICAgIHdhaXRpbmdPbkV4cGVjdGF0aW9ucyA9IGZhbHNl
OworICAgIGV4cGVjdGF0aW9uc0J5VGVzdCA9IGV4cGVjdGF0aW9uczsKKyAgICBoYW5kbGVSZXNv
dXJjZUxvYWQoKTsKKyAgfQorfQorCitmdW5jdGlvbiBpc1RyZWVNYXAoKSB7CisgIHJldHVybiBl
bmRzV2l0aCh3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUsICd0cmVlbWFwLmh0bWwnKTsKK30KKwor
ZnVuY3Rpb24gYXBwZW5kSlNPTlNjcmlwdEVsZW1lbnRGb3IoYnVpbGRlck5hbWUpIHsKKyAgdmFy
IHJlc3VsdHNGaWxlbmFtZTsKKyAgaWYgKGlzVHJlZU1hcCgpKQorICAgIHJlc3VsdHNGaWxlbmFt
ZSA9ICd0aW1lc19tcy5qc29uJzsKKyAgZWxzZSBpZiAoY3VycmVudFN0YXRlLnNob3dBbGxSdW5z
KQorICAgIHJlc3VsdHNGaWxlbmFtZSA9ICdyZXN1bHRzLmpzb24nOworICBlbHNlCisgICAgcmVz
dWx0c0ZpbGVuYW1lID0gJ3Jlc3VsdHMtc21hbGwuanNvbic7CisKKyAgYXBwZW5kU2NyaXB0KGdl
dFBhdGhUb0J1aWxkZXJSZXN1bHRzRmlsZShidWlsZGVyTmFtZSkgKyByZXN1bHRzRmlsZW5hbWUs
CisgICAgICBwYXJ0aWFsKGhhbmRsZVJlc291cmNlTG9hZEVycm9yLCBidWlsZGVyTmFtZSksCisg
ICAgICBwYXJ0aWFsKGhhbmRsZVNjcmlwdExvYWRlZCwgYnVpbGRlck5hbWUpKTsKK30KKworZnVu
Y3Rpb24gYXBwZW5kSlNPTlNjcmlwdEVsZW1lbnRzKCkgeworICBjbGVhckVycm9ycygpOworCisg
IGlmIChpc1RyZWVNYXAoKSkKKyAgICByZXR1cm47CisKKyAgcGFyc2VQYXJhbWV0ZXJzKCk7CisK
KyAgaWYgKGN1cnJlbnRTdGF0ZS51c2VUZXN0RGF0YSkgeworICAgIGFwcGVuZFNjcmlwdCgnZmxh
a2luZXNzX2Rhc2hib2FyZF90ZXN0cy5qcycpOworICAgIHJldHVybjsKKyAgfQorCisgIGZvciAo
dmFyIGJ1aWxkZXJOYW1lIGluIGJ1aWxkZXJzKSB7CisgICAgYXBwZW5kSlNPTlNjcmlwdEVsZW1l
bnRGb3IoYnVpbGRlck5hbWUpOworICB9CisKKyAgLy8gR3JhYiBleHBlY3RhdGlvbnMgZmlsZSBm
cm9tIHRoZSBmYXN0ZXN0IGJ1aWxkZXIsIHdoaWNoIGlzIExpbnV4IHJlbGVhc2UKKyAgLy8gcmln
aHQgbm93LiAgQ291bGQgYmUgY2hhbmdlZCB0byBhbnkgb3RoZXIgYnVpbGRlciBpZiBuZWVkZWQu
CisgIGlmICh3YWl0aW5nT25FeHBlY3RhdGlvbnMpIHsKKyAgICBhcHBlbmRTY3JpcHQoZ2V0UGF0
aFRvQnVpbGRlclJlc3VsdHNGaWxlKGV4cGVjdGF0aW9uc0J1aWxkZXIpICsKKyAgICAgICAgJ2V4
cGVjdGF0aW9ucy5qc29uJyk7CisgIH0KK30KKwordmFyIGhhc0RvbmVJbml0aWFsUGFnZUdlbmVy
YXRpb24gPSBmYWxzZTsKKy8vIFN0cmluZyBvZiBlcnJvciBtZXNzYWdlcyB0byBkaXNwbGF5IHRv
IHRoZSB1c2VyLgordmFyIGVycm9yTWVzc2FnZXMgPSAnJzsKKworZnVuY3Rpb24gaGFuZGxlUmVz
b3VyY2VMb2FkKCkgeworICAvLyBJbiBjYXNlIHdlIGxvYWQgYSByZXN1bHRzLmpzb24gdGhhdCdz
IG5vdCBpbiB0aGUgbGlzdCBvZiBidWlsZGVycywKKyAgLy8gbWFrZSBzdXJlIHRvIG9ubHkgY2Fs
bCBoYW5kbGVMb2NhdGlvbkNoYW5nZSBvbmNlIGZyb20gdGhlIHJlc291cmNlIGxvYWRzLgorICBp
ZiAoIWhhc0RvbmVJbml0aWFsUGFnZUdlbmVyYXRpb24pCisgICAgaGFuZGxlTG9jYXRpb25DaGFu
Z2UoKTsKK30KKworZnVuY3Rpb24gaGFuZGxlU2NyaXB0TG9hZGVkKGJ1aWxkZXJOYW1lLCBzY3Jp
cHQpIHsKKyAgLy8gV2UgbmVlZCB0aGlzIHdvcmstYXJvdW5kIGZvciB3ZWJraXQub3JnL2IvNTA1
ODkuCisgIGlmICghcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyTmFtZV0pIHsKKyAgICB2YXIgZXJy
b3IgPSBuZXcgRXJyb3IoIkJ1aWxkZXIgZGF0YSB3YXMgZW1wdHkiKTsKKyAgICBlcnJvci50YXJn
ZXQgPSBzY3JpcHQ7CisgICAgaGFuZGxlUmVzb3VyY2VMb2FkRXJyb3IoYnVpbGRlck5hbWUsIGVy
cm9yKTsKKyAgfQorfQorCisvKioKKyAqIEhhbmRsZSByZXNvdXJjZSBsb2FkaW5nIGVycm9ycyAt
IDQwNHMsIDUwMHMsIGV0Yy4gIFJlY292ZXIgZnJvbSB0aGUgZXJyb3IgdG8KKyAqIHN0aWxsIHNo
b3cgYXMgbXVjaCBkYXRhIGFzIHBvc3NpYmxlLCBidXQgc2hvdyBzb21lIFVJIGFib3V0IHRoZSBm
YWlsdXJlLCBhbmQKKyAqIGRvIG5vdCB0cnkgdXNpbmcgdGhpcyByZXNvdXJjZSBhZ2FpbiB1bnRp
bCB1c2VyIHJlZnJlc2hlcy4KKyAqCisgKiBAcGFyYW0ge3N0cmluZ30gYnVpbGRlck5hbWUgTmFt
ZSBvZiBidWlsZGVyIHRoYXQgdGhlIHJlc291cmNlIGZhaWxlZCBmb3IuCisgKiBAcGFyYW0ge0V2
ZW50fSBlIFRoZSBlcnJvciBldmVudC4KKyAqLworZnVuY3Rpb24gaGFuZGxlUmVzb3VyY2VMb2Fk
RXJyb3IoYnVpbGRlck5hbWUsIGUpIHsKKyAgdmFyIGVycm9yID0gZS50YXJnZXQuc3JjICsgJyBm
YWlsZWQgdG8gbG9hZCBmb3IgJyArIGJ1aWxkZXJOYW1lICsgJy4nOworCisgIGlmIChpc0xheW91
dFRlc3RSZXN1bHRzKCkpIHsKKyAgICBjb25zb2xlLmVycm9yKGVycm9yKTsKKyAgICBhZGRFcnJv
cihlcnJvcik7CisgIH0gZWxzZSB7CisgICAgLy8gQXZvaWQgdG8gc2hvdyBlcnJvci93YXJuaW5n
IG1lc3NhZ2VzIGZvciBub24tbGF5b3V0IHRlc3RzLiBXZSBtYXkgYmUKKyAgICAvLyBjaGVja2lu
ZyB0aGUgYnVpbGRlcnMgdGhhdCBhcmUgbm90IHJ1bm5pbmcgdGhlIHRlc3RzLgorICAgIGNvbnNv
bGUuaW5mbygnaW5mbzonICsgZXJyb3IpOworICB9CisKKyAgLy8gUmVtb3ZlIHRoaXMgYnVpbGRl
ciBmcm9tIGJ1aWxkZXJzLCBzbyB3ZSBkb24ndCB0cnkgdG8gdXNlIHRoZQorICAvLyBkYXRhIHRo
YXQgaXNuJ3QgdGhlcmUuCisgIGRlbGV0ZSBidWlsZGVyc1tidWlsZGVyTmFtZV07CisKKyAgLy8g
Q2hhbmdlIHRoZSBkZWZhdWx0IGJ1aWxkZXIgbmFtZSBpZiBpdCBoYXMgYmVlbiBkZWxldGVkLgor
ICBpZiAoZGVmYXVsdEJ1aWxkZXJOYW1lID09IGJ1aWxkZXJOYW1lKSB7CisgICAgZGVmYXVsdEJ1
aWxkZXJOYW1lID0gbnVsbDsKKyAgICBmb3IgKHZhciBhdmFpbGFibGVCdWlsZGVyTmFtZSBpbiBi
dWlsZGVycykgeworICAgICAgZGVmYXVsdEJ1aWxkZXJOYW1lID0gYXZhaWxhYmxlQnVpbGRlck5h
bWU7CisgICAgICBkZWZhdWx0U3RhdGVWYWx1ZXMuYnVpbGRlciA9IGF2YWlsYWJsZUJ1aWxkZXJO
YW1lOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmICghZGVmYXVsdEJ1aWxkZXJOYW1lKSB7
CisgICAgICB2YXIgZXJyb3IgPSAnTm8gdGVzdHMgcmVzdWx0cyBmb3VuZCBmb3IgJyArIGN1cnJl
bnRTdGF0ZS50ZXN0VHlwZSArCisgICAgICAgICAgJy4gUmVsb2FkIHRoZSBwYWdlIHRvIHRyeSBm
ZXRjaGluZyBpdCBhZ2Fpbi4nOworICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7CisgICAgICBh
ZGRFcnJvcihlcnJvcik7CisgICAgfQorICB9CisKKyAgLy8gUHJvY2VlZCBhcyBpZiB0aGUgcmVz
b3VyY2UgaGFkIGxvYWRlZC4KKyAgaGFuZGxlUmVzb3VyY2VMb2FkKCk7Cit9CisKKworLyoqCisg
KiBSZWNvcmQgYSBuZXcgZXJyb3IgbWVzc2FnZS4KKyAqIEBwYXJhbSB7c3RyaW5nfSBlcnJvck1z
ZyBUaGUgbWVzc2FnZSB0byBzaG93IHRvIHRoZSB1c2VyLgorICovCitmdW5jdGlvbiBhZGRFcnJv
cihlcnJvck1zZykgeworICBlcnJvck1lc3NhZ2VzICs9IGVycm9yTXNnICsgJzxiciAvPic7Cit9
CisKKy8qKgorICogQ2xlYXIgb3V0IGVycm9yIGFuZCB3YXJuaW5nIG1lc3NhZ2VzLgorICovCitm
dW5jdGlvbiBjbGVhckVycm9ycygpIHsKKyAgZXJyb3JNZXNzYWdlcyA9ICcnOworfQorCisvKioK
KyAqIElmIHRoZXJlIGFyZSBlcnJvcnMsIHNob3cgYmlnIGFuZCByZWQgVUkgZm9yIGVycm9ycyBz
byBhcyB0byBiZSBub3RpY2VkLgorICovCitmdW5jdGlvbiBzaG93RXJyb3JzKCkgeworICB2YXIg
ZXJyb3JzID0gJCgnZXJyb3JzJyk7CisKKyAgaWYgKCFlcnJvck1lc3NhZ2VzKSB7CisgICAgaWYg
KGVycm9ycykKKyAgICAgIGVycm9ycy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVycm9ycyk7Cisg
ICAgcmV0dXJuOworICB9CisKKyAgaWYgKCFlcnJvcnMpIHsKKyAgICBlcnJvcnMgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCdIMicpOworICAgIGVycm9ycy5zdHlsZS5jb2xvciA9ICdyZWQnOwor
ICAgIGVycm9ycy5pZCA9ICdlcnJvcnMnOworICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQo
ZXJyb3JzKTsKKyAgfQorCisgIGVycm9ycy5pbm5lckhUTUwgPSBlcnJvck1lc3NhZ2VzOworfQor
CisvKioKKyAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGpzb24gZmlsZXMgaGF2ZSBh
bGwgY29tcGxldGVkIGxvYWRpbmcuCisgKi8KK2Z1bmN0aW9uIGhhdmVKc29uRmlsZXNMb2FkZWQo
KSB7CisgIGlmICh3YWl0aW5nT25FeHBlY3RhdGlvbnMpCisgICAgcmV0dXJuIGZhbHNlOworCisg
IGlmIChpc1RyZWVNYXAoKSkKKyAgICByZXR1cm4gdHJ1ZTsKKworICBmb3IgKHZhciBidWlsZGVy
IGluIGJ1aWxkZXJzKSB7CisgICAgaWYgKCFyZXN1bHRzQnlCdWlsZGVyW2J1aWxkZXJdKQorICAg
ICAgcmV0dXJuIGZhbHNlOworICB9CisgIHJldHVybiB0cnVlOworfQorCitmdW5jdGlvbiBoYW5k
bGVMb2NhdGlvbkNoYW5nZSgpIHsKKyAgaWYoIWhhdmVKc29uRmlsZXNMb2FkZWQoKSkgeworICAg
IHJldHVybjsKKyAgfQorCisgIGhhc0RvbmVJbml0aWFsUGFnZUdlbmVyYXRpb24gPSB0cnVlOwor
CisgIHZhciBwYXJhbXMgPSBwYXJzZVBhcmFtZXRlcnMoKTsKKyAgdmFyIHNob3VsZEdlbmVyYXRl
UGFnZSA9IHRydWU7CisgIGlmIChPYmplY3Qua2V5cyhwYXJhbXMpLmxlbmd0aCkKKyAgICBzaG91
bGRHZW5lcmF0ZVBhZ2UgPSBoYW5kbGVRdWVyeVBhcmFtZXRlckNoYW5nZShwYXJhbXMpOworCisg
IHZhciBuZXdIYXNoID0gZ2V0UGVybWFMaW5rVVJMSGFzaCgpOworICB2YXIgd2luSGFzaCA9IHdp
bmRvdy5sb2NhdGlvbi5oYXNoIHx8ICIjIjsKKyAgLy8gTWFrZSBzdXJlIHRoZSBsb2NhdGlvbiBp
cyB0aGUgc2FtZSBhcyB0aGUgc3RhdGUgd2UgYXJlIHVzaW5nIGludGVybmFsbHkuCisgIC8vIFRo
ZXNlIGdldCBvdXQgb2Ygc3luYyBpZiBwcm9jZXNzUXVlcnlQYXJhbUNoYW5nZSBjaGFuZ2VkIHN0
YXRlLgorICBpZiAobmV3SGFzaCAhPSB3aW5IYXNoKSB7CisgICAgLy8gVGhpcyB3aWxsIGNhdXNl
IGFub3RoZXIgaGFzaGNoYW5nZSwgYW5kIHdoZW4gd2UgbG9vcAorICAgIC8vIGJhY2sgdGhyb3Vn
aCBoZXJlIG5leHQgdGltZSwgd2UnbGwgZ28gdGhyb3VnaCBnZW5lcmF0ZVBhZ2UuCisgICAgd2lu
ZG93LmxvY2F0aW9uLmhhc2ggPSBuZXdIYXNoOworICB9IGVsc2UgaWYgKHNob3VsZEdlbmVyYXRl
UGFnZSkgeworICAgIGdlbmVyYXRlUGFnZSgpOworICB9Cit9CisKK3dpbmRvdy5vbmhhc2hjaGFu
Z2UgPSBoYW5kbGVMb2NhdGlvbkNoYW5nZTsKKworLyoqCisgKiBTZXRzIHRoZSBwYWdlIHN0YXRl
LiBUYWtlcyB2YXJhcmdzIG9mIGtleSwgdmFsdWUgcGFpcnMuCisgKi8KK2Z1bmN0aW9uIHNldFF1
ZXJ5UGFyYW1ldGVyKHZhcl9hcmdzKSB7CisgIHZhciBzdGF0ZSA9IE9iamVjdC5jcmVhdGUoY3Vy
cmVudFN0YXRlKTsKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpICs9
IDIpIHsKKyAgICB2YXIga2V5ID0gYXJndW1lbnRzW2ldOworICAgIHN0YXRlW2tleV0gPSBhcmd1
bWVudHNbaSArIDFdOworICB9CisgIC8vIE5vdGU6IFdlIHVzZSB3aW5kb3cubG9jYXRpb24uaGFz
aCByYXRoZXIgdGhhdCB3aW5kb3cubG9jYXRpb24ucmVwbGFjZQorICAvLyBiZWNhdXNlIG9mIGJ1
Z3MgaW4gQ2hyb21lIHdoZXJlIGV4dHJhIGVudHJpZXMgd2VyZSBnZXR0aW5nIGNyZWF0ZWQKKyAg
Ly8gd2hlbiBiYWNrIGJ1dHRvbiB3YXMgcHJlc3NlZCBhbmQgZnVsbCBwYWdlIG5hdmlnYXRpb24g
d2FzIG9jY3VyaW5nLgorICAvLyBUT0RPOiBmaWxlIHRob3NlIGJ1Z3MuCisgIHdpbmRvdy5sb2Nh
dGlvbi5oYXNoID0gZ2V0UGVybWFMaW5rVVJMSGFzaChzdGF0ZSk7Cit9CisKK2Z1bmN0aW9uIGdl
dFBlcm1hTGlua1VSTEhhc2gob3B0X3N0YXRlKSB7CisgIHZhciBzdGF0ZSA9IG9wdF9zdGF0ZSB8
fCBjdXJyZW50U3RhdGU7CisgIHJldHVybiAnIycgKyBqb2luUGFyYW1ldGVycyhzdGF0ZSk7Cit9
CisKK2Z1bmN0aW9uIGpvaW5QYXJhbWV0ZXJzKHN0YXRlT2JqZWN0KSB7CisgIHZhciBzdGF0ZSA9
IFtdOworICBmb3IgKHZhciBrZXkgaW4gc3RhdGVPYmplY3QpIHsKKyAgICB2YXIgdmFsdWUgPSBz
dGF0ZU9iamVjdFtrZXldOworICAgIGlmICh2YWx1ZSAhPSBnZXREZWZhdWx0VmFsdWUoa2V5KSkK
KyAgICAgIHN0YXRlLnB1c2goa2V5ICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKSk7
CisgIH0KKyAgcmV0dXJuIHN0YXRlLmpvaW4oJyYnKTsKK30KKworZnVuY3Rpb24gbG9nVGltZSht
c2csIHN0YXJ0VGltZSkgeworICBjb25zb2xlLmxvZyhtc2cgKyAnOiAnICsgKERhdGUubm93KCkg
LSBzdGFydFRpbWUpKTsKK30KKworZnVuY3Rpb24gaGlkZVBvcHVwKCkgeworICB2YXIgcG9wdXAg
PSAkKCdwb3B1cCcpOworICBpZiAocG9wdXApCisgICAgcG9wdXAucGFyZW50Tm9kZS5yZW1vdmVD
aGlsZChwb3B1cCk7Cit9CisKK2Z1bmN0aW9uIHNob3dQb3B1cChlLCBodG1sKSB7CisgIHZhciBw
b3B1cCA9ICQoJ3BvcHVwJyk7CisgIGlmICghcG9wdXApIHsKKyAgICBwb3B1cCA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgIHBvcHVwLmlkID0gJ3BvcHVwJzsKKyAgICBkb2N1
bWVudC5ib2R5LmFwcGVuZENoaWxkKHBvcHVwKTsKKyAgfQorCisgIC8vIFNldCBodG1sIGZpcnN0
IHNvIHRoYXQgd2UgY2FuIGdldCBhY2N1cmF0ZSBzaXplIG1ldHJpY3Mgb24gdGhlIHBvcHVwLgor
ICBwb3B1cC5pbm5lckhUTUwgPSBodG1sOworCisgIHZhciB0YXJnZXRSZWN0ID0gZS50YXJnZXQu
Z2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CisKKyAgdmFyIHggPSBNYXRoLm1pbih0YXJnZXRSZWN0
LmxlZnQgLSAxMCwKKyAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCAt
IHBvcHVwLm9mZnNldFdpZHRoKTsKKyAgeCA9IE1hdGgubWF4KDAsIHgpOworICBwb3B1cC5zdHls
ZS5sZWZ0ID0geCArIGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCArICdweCc7CisKKyAgdmFyIHkg
PSB0YXJnZXRSZWN0LnRvcCArIHRhcmdldFJlY3QuaGVpZ2h0OworICBpZiAoeSArIHBvcHVwLm9m
ZnNldEhlaWdodCA+IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpIHsKKyAg
ICB5ID0gdGFyZ2V0UmVjdC50b3AgLSBwb3B1cC5vZmZzZXRIZWlnaHQ7CisgIH0KKyAgeSA9IE1h
dGgubWF4KDAsIHkpOworICBwb3B1cC5zdHlsZS50b3AgPSB5ICsgZG9jdW1lbnQuYm9keS5zY3Jv
bGxUb3AgKyAncHgnOworfQorCisvKioKKyAqIENyZWF0ZSBhIG5ldyBmdW5jdGlvbiB3aXRoIHNv
bWUgb2YgaXRzIGFyZ3VlbWVudHMKKyAqIHByZS1maWxsZWQuCisgKiBUYWtlbiBmcm9tIGdvb2cu
cGFydGlhbCBpbiB0aGUgQ2xvc3VyZSBsaWJyYXJ5LgorICogQHBhcmFtIHtGdW5jdGlvbn0gZm4g
QSBmdW5jdGlvbiB0byBwYXJ0aWFsbHkgYXBwbHkuCisgKiBAcGFyYW0gey4uLip9IHZhcl9hcmdz
IEFkZGl0aW9uYWwgYXJndW1lbnRzIHRoYXQgYXJlIHBhcnRpYWxseQorICogICAgIGFwcGxpZWQg
dG8gZm4uCisgKiBAcmV0dXJuIHshRnVuY3Rpb259IEEgcGFydGlhbGx5LWFwcGxpZWQgZm9ybSBv
ZiB0aGUgZnVuY3Rpb24gYmluZCgpIHdhcworICogICAgIGludm9rZWQgYXMgYSBtZXRob2Qgb2Yu
CisgKi8KK2Z1bmN0aW9uIHBhcnRpYWwoZm4sIHZhcl9hcmdzKSB7CisgIHZhciBhcmdzID0gQXJy
YXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTsKKyAgcmV0dXJuIGZ1bmN0aW9u
KCkgeworICAgIC8vIFByZXBlbmQgdGhlIGJvdW5kIGFyZ3VtZW50cyB0byB0aGUgY3VycmVudCBh
cmd1bWVudHMuCisgICAgdmFyIG5ld0FyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChh
cmd1bWVudHMpOworICAgIG5ld0FyZ3MudW5zaGlmdC5hcHBseShuZXdBcmdzLCBhcmdzKTsKKyAg
ICByZXR1cm4gZm4uYXBwbHkodGhpcywgbmV3QXJncyk7CisgIH07Cit9OworCisvKioKKyAqIFJl
dHVybnMgdGhlIGtleXMgb2YgdGhlIG9iamVjdC9tYXAvaGFzaC4KKyAqIFRha2VuIGZyb20gZ29v
Zy5vYmplY3QuZ2V0S2V5cyBpbiB0aGUgQ2xvc3VyZSBsaWJyYXJ5LgorICoKKyAqIEBwYXJhbSB7
T2JqZWN0fSBvYmogVGhlIG9iamVjdCBmcm9tIHdoaWNoIHRvIGdldCB0aGUga2V5cy4KKyAqIEBy
ZXR1cm4geyFBcnJheS48c3RyaW5nPn0gQXJyYXkgb2YgcHJvcGVydHkga2V5cy4KKyAqLworZnVu
Y3Rpb24gZ2V0S2V5cyhvYmopIHsKKyAgdmFyIHJlcyA9IFtdOworICBmb3IgKHZhciBrZXkgaW4g
b2JqKSB7CisgICAgcmVzLnB1c2goa2V5KTsKKyAgfQorICByZXR1cm4gcmVzOworfQorCisvKioK
KyAqIFJldHVybnMgdGhlIGFwcHJvcHJpYXRlIGV4cGVjdGF0aW9zbiBtYXAgZm9yIHRoZSBjdXJy
ZW50IHRlc3RUeXBlLgorICovCitmdW5jdGlvbiBnZXRFeHBlY3RhdGlvbnNNYXAoKSB7CisgIHJl
dHVybiBpc0xheW91dFRlc3RSZXN1bHRzKCkgPyBMQVlPVVRfVEVTVF9FWFBFQ1RBVElPTlNfTUFQ
XyA6CisgICAgICBHVEVTVF9FWFBFQ1RBVElPTlNfTUFQXzsKK30KKworZnVuY3Rpb24gdG9nZ2xl
UXVlcnlQYXJhbWV0ZXIocGFyYW0pIHsKKyAgc2V0UXVlcnlQYXJhbWV0ZXIocGFyYW0sICFjdXJy
ZW50U3RhdGVbcGFyYW1dKTsKK30KKworZnVuY3Rpb24gY2hlY2tib3hIVE1MKHF1ZXJ5UGFyYW1l
dGVyLCBsYWJlbCwgaXNDaGVja2VkLCBvcHRfZXh0cmFKYXZhU2NyaXB0KSB7CisgIHZhciBqcyA9
IG9wdF9leHRyYUphdmFTY3JpcHQgfHwgJyc7CisgIHJldHVybiAnPGxhYmVsIHN0eWxlPSJwYWRk
aW5nLWxlZnQ6IDJlbSI+JyArCisgICAgICAnPGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbmNoYW5n
ZT0idG9nZ2xlUXVlcnlQYXJhbWV0ZXIoXCcnICsgcXVlcnlQYXJhbWV0ZXIgKyAnXCcpOycgKyBq
cyArICciICcgKworICAgICAgICAgIChpc0NoZWNrZWQgPyAnY2hlY2tlZCcgOiAnJykgKyAnPicg
KyBsYWJlbCArCisgICAgICAnPC9sYWJlbD4nOworfQorCitmdW5jdGlvbiBzZWxlY3RIVE1MKGxh
YmVsLCBxdWVyeVBhcmFtZXRlciwgb3B0aW9ucykgeworICB2YXIgaHRtbCA9ICc8bGFiZWwgc3R5
bGU9InBhZGRpbmctbGVmdDogMmVtIj4nICsKKyAgICAgIGxhYmVsICsgJzogJyArCisgICAgICAn
PHNlbGVjdCBvbmNoYW5nZT0ic2V0UXVlcnlQYXJhbWV0ZXIoXCcnICsKKyAgICAgICAgICBxdWVy
eVBhcmFtZXRlciArICdcJywgdGhpc1t0aGlzLnNlbGVjdGVkSW5kZXhdLnZhbHVlKSI+JzsKKwor
ICBmb3IgKHZhciBpID0gMDsgaSA8IG9wdGlvbnMubGVuZ3RoOyBpKyspIHsKKyAgICB2YXIgdmFs
dWUgPSBvcHRpb25zW2ldOworICAgIGh0bWwgKz0gJzxvcHRpb24gdmFsdWU9IicgKyB2YWx1ZSAr
ICciICcgKworICAgICAgKGN1cnJlbnRTdGF0ZVtxdWVyeVBhcmFtZXRlcl0gPT0gdmFsdWUgPyAn
c2VsZWN0ZWQnIDogJycpICsKKyAgICAgICc+JyArIHZhbHVlICsgJzwvb3B0aW9uPicKKyAgfQor
ICBodG1sICs9ICc8L3NlbGVjdD48bGFiZWw+JzsKKyAgcmV0dXJuIGh0bWw7Cit9CisKKy8qKgor
ICogUmV0dXJucyB0aGUgSFRNTCBmb3IgdGhlIHNlbGVjdCBlbGVtZW50IHRvIHN3aXRjaCB0byBk
aWZmZXJlbnQgdGVzdFR5cGVzLgorICovCitmdW5jdGlvbiBnZXRIVE1MRm9yVGVzdFR5cGVTd2l0
Y2hlcihvcHRfbm9CdWlsZGVyTWVudSwgb3B0X2V4dHJhSHRtbCwgb3B0X2luY2x1ZGVOb25lQnVp
bGRlcikgeworICB2YXIgaHRtbCA9ICc8ZGl2IHN0eWxlPSJib3JkZXItYm90dG9tOjFweCBkYXNo
ZWQiPic7CisgIGh0bWwgKz0gJycgKworICAgICAgaHRtbEZvckRhc2hib2FyZExpbmsoJ1N0YXRz
JywgJ2FnZ3JlZ2F0ZV9yZXN1bHRzLmh0bWwnKSArCisgICAgICBodG1sRm9yRGFzaGJvYXJkTGlu
aygnVGltZWxpbmUnLCAndGltZWxpbmVfZXhwbG9yZXIuaHRtbCcpICsKKyAgICAgIGh0bWxGb3JE
YXNoYm9hcmRMaW5rKCdSZXN1bHRzJywgJ2ZsYWtpbmVzc19kYXNoYm9hcmQuaHRtbCcpICsKKyAg
ICAgIGh0bWxGb3JEYXNoYm9hcmRMaW5rKCdUcmVlbWFwJywgJ3RyZWVtYXAuaHRtbCcpOworCisg
IGh0bWwgKz0gc2VsZWN0SFRNTCgnVGVzdCB0eXBlJywgJ3Rlc3RUeXBlJywgVEVTVF9UWVBFUyk7
CisKKyAgaWYgKCFvcHRfbm9CdWlsZGVyTWVudSkgeworICAgIHZhciBidWlsZGVyc0Zvck1lbnUg
PSBPYmplY3Qua2V5cyhidWlsZGVycyk7CisgICAgaWYgKG9wdF9pbmNsdWRlTm9uZUJ1aWxkZXIp
CisgICAgICBidWlsZGVyc0Zvck1lbnUudW5zaGlmdCgnLS0tLS0tLS0tLS0tLS0nKTsKKyAgICBo
dG1sICs9IHNlbGVjdEhUTUwoJ0J1aWxkZXInLCAnYnVpbGRlcicsIGJ1aWxkZXJzRm9yTWVudSk7
CisgIH0KKworICBpZiAoaXNMYXlvdXRUZXN0UmVzdWx0cygpKSB7CisgICAgaHRtbCArPSBzZWxl
Y3RIVE1MKCdHcm91cCcsICdncm91cCcsIGdldEtleXMoTEFZT1VUX1RFU1RTX0JVSUxERVJfR1JP
VVBTKSk7CisgIH0KKworICBpZiAoIWlzVHJlZU1hcCgpKSB7CisgICAgaHRtbCArPSBjaGVja2Jv
eEhUTUwoJ3Nob3dBbGxSdW5zJywgJ1Nob3cgYWxsIHJ1bnMnLCBjdXJyZW50U3RhdGUuc2hvd0Fs
bFJ1bnMpOworICB9CisKKyAgaWYgKG9wdF9leHRyYUh0bWwpIHsKKyAgICBodG1sICs9IG9wdF9l
eHRyYUh0bWw7CisgIH0KKyAgcmV0dXJuIGh0bWwgKyAnPC9kaXY+JzsKK30KKworZnVuY3Rpb24g
c2VsZWN0QnVpbGRlcihidWlsZGVyKSB7CisgIHNldFF1ZXJ5UGFyYW1ldGVyKCdidWlsZGVyJywg
YnVpbGRlcik7Cit9CisKK2Z1bmN0aW9uIGxvYWREYXNoYm9hcmQoZmlsZU5hbWUpIHsKKyAgdmFy
IHBhdGhOYW1lID0gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lOworICBwYXRoTmFtZSA9IHBhdGhO
YW1lLnN1YnN0cmluZygwLCBwYXRoTmFtZS5sYXN0SW5kZXhPZignLycpICsgMSk7CisgIHdpbmRv
dy5sb2NhdGlvbiA9IHBhdGhOYW1lICsgZmlsZU5hbWUgKyB3aW5kb3cubG9jYXRpb24uaGFzaDsK
K30KKworZnVuY3Rpb24gaHRtbEZvclRvcExpbmsoaHRtbCwgb25DbGljaywgaXNTZWxlY3RlZCkg
eworICB2YXIgY3NzVGV4dCA9IGlzU2VsZWN0ZWQgPyAnZm9udC13ZWlnaHQ6IGJvbGQ7JyA6Cisg
ICAgICAnY29sb3I6Ymx1ZTt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO2N1cnNvcjpwb2ludGVy
Oyc7CisgIGNzc1RleHQgKz0gJ21hcmdpbjogMCA1cHg7JzsKKyAgcmV0dXJuICc8c3BhbiBzdHls
ZT0iJyArIGNzc1RleHQgKworICAgICAgJyIgb25jbGljaz0iJyArIG9uQ2xpY2sgKyAnIj4nICsg
aHRtbCArICc8L3NwYW4+JzsKK30KKworZnVuY3Rpb24gaHRtbEZvckRhc2hib2FyZExpbmsoaHRt
bCwgZmlsZU5hbWUpIHsKKyAgdmFyIHBhdGhOYW1lID0gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1l
OworICB2YXIgY3VycmVudEZpbGVOYW1lID0gcGF0aE5hbWUuc3Vic3RyaW5nKHBhdGhOYW1lLmxh
c3RJbmRleE9mKCcvJykgKyAxKTsKKyAgdmFyIGlzU2VsZWN0ZWQgPSBjdXJyZW50RmlsZU5hbWUg
PT0gZmlsZU5hbWU7CisgIHZhciBvbkNsaWNrID0gJ2xvYWREYXNoYm9hcmQoXCcnICsgZmlsZU5h
bWUgKyAnXCcpJzsKKyAgcmV0dXJuIGh0bWxGb3JUb3BMaW5rKGh0bWwsIG9uQ2xpY2ssIGlzU2Vs
ZWN0ZWQpOworfQorCitmdW5jdGlvbiBnZXRSZXZpc2lvbkxpbmsocmVzdWx0cywgaW5kZXgsIGtl
eSwgc2luZ2xlVXJsVGVtcGxhdGUsIHJhbmdlVXJsVGVtcGxhdGUpIHsKKyAgdmFyIGN1cnJlbnRS
ZXZpc2lvbiA9IHBhcnNlSW50KHJlc3VsdHNba2V5XVtpbmRleF0sIDEwKTsKKyAgdmFyIHByZXZp
b3VzUmV2aXNpb24gPSBwYXJzZUludChyZXN1bHRzW2tleV1baW5kZXggKyAxXSwgMTApOworCisg
IGZ1bmN0aW9uIGdldFNpbmdsZVVybCgpIHsKKyAgICByZXR1cm4gc2luZ2xlVXJsVGVtcGxhdGUu
cmVwbGFjZSgnPHJldj4nLCBjdXJyZW50UmV2aXNpb24pOworICB9CisKKyAgZnVuY3Rpb24gZ2V0
UmFuZ2VVcmwoKSB7CisgICAgcmV0dXJuIHJhbmdlVXJsVGVtcGxhdGUucmVwbGFjZSgnPHJldjE+
JywgY3VycmVudFJldmlzaW9uKS4KKyAgICAgICAgcmVwbGFjZSgnPHJldjI+JywgcHJldmlvdXNS
ZXZpc2lvbiArIDEpOworICB9CisKKyAgaWYgKGN1cnJlbnRSZXZpc2lvbiA9PSBwcmV2aW91c1Jl
dmlzaW9uKSB7CisgICAgcmV0dXJuICdBdCA8YSBocmVmPSInICsgZ2V0U2luZ2xlVXJsKCkgKyAn
Ij5yJyArIGN1cnJlbnRSZXZpc2lvbiAgKyAnPC9hPic7CisgIH0gZWxzZSBpZiAoY3VycmVudFJl
dmlzaW9uIC0gcHJldmlvdXNSZXZpc2lvbiA9PSAxKSB7CisgICAgcmV0dXJuICc8YSBocmVmPSIn
ICsgZ2V0U2luZ2xlVXJsKCkgKyAnIj5yJyArIGN1cnJlbnRSZXZpc2lvbiAgKyAnPC9hPic7Cisg
IH0gZWxzZSB7CisgICAgcmV0dXJuICc8YSBocmVmPSInICsgZ2V0UmFuZ2VVcmwoKSArICciPnIn
ICsKKyAgICAgICAgKHByZXZpb3VzUmV2aXNpb24gKyAxKSArICcgdG8gcicgKworICAgICAgICBj
dXJyZW50UmV2aXNpb24gKyAnPC9hPic7CisgIH0KK30KKworZnVuY3Rpb24gZ2V0Q2hyb21pdW1S
ZXZpc2lvbkxpbmsocmVzdWx0cywgaW5kZXgpIHsKKyAgcmV0dXJuIGdldFJldmlzaW9uTGluaygK
KyAgICAgIHJlc3VsdHMsCisgICAgICBpbmRleCwKKyAgICAgIENIUk9NRV9SRVZJU0lPTlNfS0VZ
LAorICAgICAgJ2h0dHA6Ly9zcmMuY2hyb21pdW0ub3JnL3ZpZXd2Yy9jaHJvbWU/dmlldz1yZXYm
cmV2aXNpb249PHJldj4nLAorICAgICAgJ2h0dHA6Ly9idWlsZC5jaHJvbWl1bS5vcmcvZi9jaHJv
bWl1bS9wZXJmL2Rhc2hib2FyZC91aS9jaGFuZ2Vsb2cuaHRtbD91cmw9L3RydW5rL3NyYyZyYW5n
ZT08cmV2Mj46PHJldjE+Jm1vZGU9aHRtbCcpOworfQorCitmdW5jdGlvbiBnZXRXZWJLaXRSZXZp
c2lvbkxpbmsocmVzdWx0cywgaW5kZXgpIHsKKyAgcmV0dXJuIGdldFJldmlzaW9uTGluaygKKyAg
ICAgIHJlc3VsdHMsCisgICAgICBpbmRleCwKKyAgICAgIFdFQktJVF9SRVZJU0lPTlNfS0VZLAor
ICAgICAgJ2h0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzxyZXY+JywKKyAgICAgICdo
dHRwOi8vdHJhYy53ZWJraXQub3JnL2xvZy90cnVuay8/cmV2PTxyZXYxPiZzdG9wX3Jldj08cmV2
Mj4mbGltaXQ9MTAwJnZlcmJvc2U9b24nKTsKK30KKworLyoqCisgKiAiRGVjb21wcmVzc2VzIiB0
aGUgUkxFLWVuY29kaW5nIG9mIHRlc3QgcmVzdWx0cyBzbyB0aGF0IHdlIGNhbiBxdWVyeSBpdAor
ICogYnkgYnVpbGQgaW5kZXggYW5kIHRlc3QgbmFtZS4KKyAqCisgKiBAcGFyYW0ge09iamVjdH0g
cmVzdWx0cyByZXN1bHRzIGZvciB0aGUgY3VycmVudCBidWlsZGVyCisgKiBAcmV0dXJuIE9iamVj
dCB3aXRoIHRoZXNlIHByb3BlcnRpZXM6CisgKiAgIC0gdGVzdE5hbWVzOiBhcnJheSBtYXBwaW5n
IHRlc3QgaW5kZXggdG8gdGVzdCBuYW1lcy4KKyAqICAgLSByZXN1bHRzQnlCdWlsZDogYXJyYXkg
b2YgYnVpbGRzLCBmb3IgZWFjaCBidWlsZCBhIChzcGFyc2UpIGFycmF5IG9mIHRlc3QKKyAqICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0cyBieSB0ZXN0IGluZGV4LgorICogICAtIGZsYWt5VGVz
dHM6IGFycmF5IHdpdGggdGhlIGJvb2xlYW4gdmFsdWUgdHJ1ZSBhdCB0ZXN0IGluZGljZXMgdGhh
dCBhcmUKKyAqICAgICAgICAgICAgICAgICBjb25zaWRlcmVkIGZsYWt5IChtb3JlIHRoYW4gb25l
IHNpbmdsZS1idWlsZCBmYWlsdXJlKS4KKyAqICAgLSBmbGFreURlbHRhc0J5QnVpbGQ6IGFycmF5
IG9mIGJ1aWxkcywgZm9yIGVhY2ggYnVpbGQgYSBjb3VudCBvZiBmbGFreQorICogICAgICAgICAg
ICAgICAgICAgICAgICAgdGVzdCByZXN1bHRzIGJ5IGV4cGVjdGF0aW9uLCBhcyB3ZWxsIGFzIGEg
dG90YWwuCisgKi8KK2Z1bmN0aW9uIGdldFRlc3RSZXN1bHRzQnlCdWlsZChidWlsZGVyUmVzdWx0
cykgeworICB2YXIgYnVpbGRlclRlc3RSZXN1bHRzID0gYnVpbGRlclJlc3VsdHNbVEVTVFNfS0VZ
XTsKKyAgdmFyIGJ1aWxkQ291bnQgPSBidWlsZGVyUmVzdWx0c1tGSVhBQkxFX0NPVU5UU19LRVld
Lmxlbmd0aDsKKyAgdmFyIHRlc3RSZXN1bHRzQnlCdWlsZCA9IG5ldyBBcnJheShidWlsZENvdW50
KTsKKyAgdmFyIGZsYWt5RGVsdGFzQnlCdWlsZCA9IG5ldyBBcnJheShidWlsZENvdW50KTsKKwor
ICAvLyBQcmUtc2l6aW5nIHRoZSB0ZXN0IHJlc3VsdCBhcnJheXMgZm9yIGVhY2ggYnVpbGQgc2F2
ZXMgdXMgfjI1MG1zCisgIHZhciB0ZXN0Q291bnQgPSAwOworICBmb3IgKHZhciB0ZXN0TmFtZSBp
biBidWlsZGVyVGVzdFJlc3VsdHMpIHsKKyAgICB0ZXN0Q291bnQrKzsKKyAgfQorICBmb3IgKHZh
ciBpID0gMDsgaSA8IGJ1aWxkQ291bnQ7IGkrKykgeworICAgIHRlc3RSZXN1bHRzQnlCdWlsZFtp
XSA9IG5ldyBBcnJheSh0ZXN0Q291bnQpOworICAgIHRlc3RSZXN1bHRzQnlCdWlsZFtpXVt0ZXN0
Q291bnQgLSAxXSA9IHVuZGVmaW5lZDsKKworICAgIGZsYWt5RGVsdGFzQnlCdWlsZFtpXSA9IHt9
OworICB9CisKKyAgLy8gVXNpbmcgaW5kaWNlcyBpbnN0ZWFkIG9mIHRoZSBmdWxsIHRlc3QgbmFt
ZXMgZm9yIGVhY2ggYnVpbGQgc2F2ZXMgdXMKKyAgLy8gfjE1MDBtcworICB2YXIgdGVzdEluZGV4
ID0gMDsKKyAgdmFyIHRlc3ROYW1lcyA9IG5ldyBBcnJheSh0ZXN0Q291bnQpOworICB2YXIgZmxh
a3lUZXN0cyA9IG5ldyBBcnJheSh0ZXN0Q291bnQpOworCisgIC8vIERlY29tcHJlc3MgYW5kICJp
bnZlcnQiIHRlc3QgcmVzdWx0cyAoYnkgYnVpbGQgaW5zdGVhZCBvZiBieSB0ZXN0KSBhbmQKKyAg
Ly8gZGV0ZXJtaW5lIHdoaWNoIGFyZSBmbGFreS4KKyAgZm9yICh2YXIgdGVzdE5hbWUgaW4gYnVp
bGRlclRlc3RSZXN1bHRzKSB7CisgICAgdmFyIG9uZUJ1aWxkRmFpbHVyZUNvdW50ID0gMDsKKwor
ICAgIHRlc3ROYW1lc1t0ZXN0SW5kZXhdID0gdGVzdE5hbWU7CisgICAgdmFyIHRlc3RSZXN1bHRz
ID0gYnVpbGRlclRlc3RSZXN1bHRzW3Rlc3ROYW1lXS5yZXN1bHRzOworICAgIGZvciAodmFyIGkg
PSAwLCBybGVSZXN1bHQsIGN1cnJlbnRCdWlsZEluZGV4ID0gMDsKKyAgICAgICAgIChybGVSZXN1
bHQgPSB0ZXN0UmVzdWx0c1tpXSkgJiYgY3VycmVudEJ1aWxkSW5kZXggPCBidWlsZENvdW50Owor
ICAgICAgICAgaSsrKSB7CisgICAgICB2YXIgY291bnQgPSBybGVSZXN1bHRbUkxFLkxFTkdUSF07
CisgICAgICB2YXIgdmFsdWUgPSBybGVSZXN1bHRbUkxFLlZBTFVFXTsKKworICAgICAgaWYgKGNv
dW50ID09IDEgJiYgdmFsdWUgaW4gRkFJTFVSRV9FWFBFQ1RBVElPTlNfKSB7CisgICAgICAgIG9u
ZUJ1aWxkRmFpbHVyZUNvdW50Kys7CisgICAgICB9CisKKyAgICAgIGZvciAodmFyIGogPSAwOyBq
IDwgY291bnQ7IGorKykgeworICAgICAgICB0ZXN0UmVzdWx0c0J5QnVpbGRbY3VycmVudEJ1aWxk
SW5kZXgrK11bdGVzdEluZGV4XSA9IHZhbHVlOworICAgICAgICBpZiAoY3VycmVudEJ1aWxkSW5k
ZXggPT0gYnVpbGRDb3VudCkgeworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9
CisgICAgfQorCisgICAgaWYgKG9uZUJ1aWxkRmFpbHVyZUNvdW50ID4gMikgeworICAgICAgZmxh
a3lUZXN0c1t0ZXN0SW5kZXhdID0gdHJ1ZTsKKyAgICB9CisKKyAgICB0ZXN0SW5kZXgrKzsKKyAg
fQorCisgIC8vIE5vdyB0aGF0IHdlIGtub3cgd2hpY2ggdGVzdHMgYXJlIGZsYWt5LCBjb3VudCB0
aGUgdGVzdCByZXN1bHRzIHRoYXQgYXJlCisgIC8vIGZyb20gZmxha3kgdGVzdHMgZm9yIGVhY2gg
YnVpbGQuCisgIHRlc3RJbmRleCA9IDA7CisgIGZvciAodmFyIHRlc3ROYW1lIGluIGJ1aWxkZXJU
ZXN0UmVzdWx0cykgeworICAgIGlmICghZmxha3lUZXN0c1t0ZXN0SW5kZXgrK10pIHsKKyAgICAg
IGNvbnRpbnVlOworICAgIH0KKworICAgIHZhciB0ZXN0UmVzdWx0cyA9IGJ1aWxkZXJUZXN0UmVz
dWx0c1t0ZXN0TmFtZV0ucmVzdWx0czsKKyAgICBmb3IgKHZhciBpID0gMCwgcmxlUmVzdWx0LCBj
dXJyZW50QnVpbGRJbmRleCA9IDA7CisgICAgICAgIChybGVSZXN1bHQgPSB0ZXN0UmVzdWx0c1tp
XSkgJiYgY3VycmVudEJ1aWxkSW5kZXggPCBidWlsZENvdW50OworICAgICAgICBpKyspIHsKKyAg
ICAgIHZhciBjb3VudCA9IHJsZVJlc3VsdFtSTEUuTEVOR1RIXTsKKyAgICAgIHZhciB2YWx1ZSA9
IHJsZVJlc3VsdFtSTEUuVkFMVUVdOworCisgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvdW50
OyBqKyspIHsKKyAgICAgICAgdmFyIGJ1aWxkVGVzdFJlc3VsdHMgPSBmbGFreURlbHRhc0J5QnVp
bGRbY3VycmVudEJ1aWxkSW5kZXgrK107CisgICAgICAgIGZ1bmN0aW9uIGFkZEZsYWt5RGVsdGEo
a2V5KSB7CisgICAgICAgICAgaWYgKCEoa2V5IGluIGJ1aWxkVGVzdFJlc3VsdHMpKSB7CisgICAg
ICAgICAgICBidWlsZFRlc3RSZXN1bHRzW2tleV0gPSAwOworICAgICAgICAgIH0KKyAgICAgICAg
ICBidWlsZFRlc3RSZXN1bHRzW2tleV0rKzsKKyAgICAgICAgfQorICAgICAgICBhZGRGbGFreURl
bHRhKHZhbHVlKTsKKyAgICAgICAgaWYgKHZhbHVlICE9ICdQJyAmJiB2YWx1ZSAhPSAnTicpIHsK
KyAgICAgICAgICBhZGRGbGFreURlbHRhKCd0b3RhbCcpOworICAgICAgICB9CisgICAgICAgIGlm
IChjdXJyZW50QnVpbGRJbmRleCA9PSBidWlsZENvdW50KSB7CisgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4geworICAgIHRlc3ROYW1l
czogdGVzdE5hbWVzLAorICAgIHJlc3VsdHNCeUJ1aWxkOiB0ZXN0UmVzdWx0c0J5QnVpbGQsCisg
ICAgZmxha3lUZXN0czogZmxha3lUZXN0cywKKyAgICBmbGFreURlbHRhc0J5QnVpbGQ6IGZsYWt5
RGVsdGFzQnlCdWlsZAorICB9OworfQorCisKK2FwcGVuZEpTT05TY3JpcHRFbGVtZW50cygpOwor
Citkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBmdW5jdGlvbihlKSB7Cisg
ICAgICAvLyBDbGVhciB0aGUgb3BlbiBwb3B1cCwgdW5sZXNzIHRoZSBjbGljayB3YXMgaW5zaWRl
IHRoZSBwb3B1cC4KKyAgICAgIHZhciBwb3B1cCA9ICQoJ3BvcHVwJyk7CisgICAgICBpZiAocG9w
dXAgJiYgZS50YXJnZXQgIT0gcG9wdXAgJiYKKyAgICAgICAgICAhKHBvcHVwLmNvbXBhcmVEb2N1
bWVudFBvc2l0aW9uKGUudGFyZ2V0KSAmIDE2KSkgeworICAgICAgICBoaWRlUG9wdXAoKTsKKyAg
ICAgIH0KKyAgICB9LCBmYWxzZSk7CisKK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywg
ZnVuY3Rpb24oKSB7CisgICAgICAvLyBUaGlzIGRvZXNuJ3Qgc2VlbSB0b3RhbGx5IGFjY3VyYXRl
IGFzIHRoZXJlIGlzIGEgcmFjZSBiZXR3ZWVuCisgICAgICAvLyBvbmxvYWQgZmlyaW5nIGFuZCB0
aGUgbGFzdCBzY3JpcHQgdGFnIGJlaW5nIGV4ZWN1dGVkLgorICAgICAgbG9nVGltZSgnVGltZSB0
byBsb2FkIEpTJywgcGFnZUxvYWRTdGFydFRpbWUpOworICAgIH0sIGZhbHNlKTsKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvZHlncmFwaC1jb21i
aW5lZC5qcyBiL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvZHlncmFw
aC1jb21iaW5lZC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YTg4MDU5ZTQyYTE2MDBmZmQwNWNlZTljYTFlNWMw
NmFhNjRmMjcwCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0
aWMtZGFzaGJvYXJkcy9keWdyYXBoLWNvbWJpbmVkLmpzCkBAIC0wLDAgKzEgQEAKK0R5Z3JhcGhM
YXlvdXQ9ZnVuY3Rpb24oYixhKXt0aGlzLmR5Z3JhcGhfPWI7dGhpcy5vcHRpb25zPXt9O0R5Z3Jh
cGgudXBkYXRlKHRoaXMub3B0aW9ucyxhP2E6e30pO3RoaXMuZGF0YXNldHM9bmV3IEFycmF5KCk7
dGhpcy5hbm5vdGF0aW9ucz1uZXcgQXJyYXkoKX07RHlncmFwaExheW91dC5wcm90b3R5cGUuYXR0
cl89ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZHlncmFwaF8uYXR0cl8oYSl9O0R5Z3JhcGhMYXlv
dXQucHJvdG90eXBlLmFkZERhdGFzZXQ9ZnVuY3Rpb24oYSxiKXt0aGlzLmRhdGFzZXRzW2FdPWJ9
O0R5Z3JhcGhMYXlvdXQucHJvdG90eXBlLnNldEFubm90YXRpb25zPWZ1bmN0aW9uKGQpe3ZhciBl
PXRoaXMuYXR0cl8oInhWYWx1ZVBhcnNlciIpO2Zvcih2YXIgYz0wO2M8ZC5sZW5ndGg7YysrKXt2
YXIgYj17fTtpZighZFtjXS54dmFsJiYhZFtjXS54KXt0aGlzLmR5Z3JhcGhfLmVycm9yKCJBbm5v
dGF0aW9ucyBtdXN0IGhhdmUgYW4gJ3gnIHByb3BlcnR5Iik7cmV0dXJufWlmKGRbY10uaWNvbiYm
IShkW2NdLmhhc093blByb3BlcnR5KCJ3aWR0aCIpJiZkW2NdLmhhc093blByb3BlcnR5KCJoZWln
aHQiKSkpe3RoaXMuZHlncmFwaF8uZXJyb3IoIk11c3Qgc2V0IHdpZHRoIGFuZCBoZWlnaHQgd2hl
biBzZXR0aW5nIGFubm90YXRpb24uaWNvbiBwcm9wZXJ0eSIpO3JldHVybn1EeWdyYXBoLnVwZGF0
ZShiLGRbY10pO2lmKCFiLnh2YWwpe2IueHZhbD1lKGIueCl9dGhpcy5hbm5vdGF0aW9ucy5wdXNo
KGIpfX07RHlncmFwaExheW91dC5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24oKXt0aGlzLl9l
dmFsdWF0ZUxpbWl0cygpO3RoaXMuX2V2YWx1YXRlTGluZUNoYXJ0cygpO3RoaXMuX2V2YWx1YXRl
TGluZVRpY2tzKCk7dGhpcy5fZXZhbHVhdGVBbm5vdGF0aW9ucygpfTtEeWdyYXBoTGF5b3V0LnBy
b3RvdHlwZS5fZXZhbHVhdGVMaW1pdHM9ZnVuY3Rpb24oKXt0aGlzLm1pbnh2YWw9dGhpcy5tYXh4
dmFsPW51bGw7aWYodGhpcy5vcHRpb25zLmRhdGVXaW5kb3cpe3RoaXMubWlueHZhbD10aGlzLm9w
dGlvbnMuZGF0ZVdpbmRvd1swXTt0aGlzLm1heHh2YWw9dGhpcy5vcHRpb25zLmRhdGVXaW5kb3db
MV19ZWxzZXtmb3IodmFyIGMgaW4gdGhpcy5kYXRhc2V0cyl7aWYoIXRoaXMuZGF0YXNldHMuaGFz
T3duUHJvcGVydHkoYykpe2NvbnRpbnVlfXZhciBkPXRoaXMuZGF0YXNldHNbY107dmFyIGI9ZFsw
XVswXTtpZighdGhpcy5taW54dmFsfHxiPHRoaXMubWlueHZhbCl7dGhpcy5taW54dmFsPWJ9dmFy
IGE9ZFtkLmxlbmd0aC0xXVswXTtpZighdGhpcy5tYXh4dmFsfHxhPnRoaXMubWF4eHZhbCl7dGhp
cy5tYXh4dmFsPWF9fX10aGlzLnhyYW5nZT10aGlzLm1heHh2YWwtdGhpcy5taW54dmFsO3RoaXMu
eHNjYWxlPSh0aGlzLnhyYW5nZSE9MD8xL3RoaXMueHJhbmdlOjEpO3RoaXMubWlueXZhbD10aGlz
Lm9wdGlvbnMueUF4aXNbMF07dGhpcy5tYXh5dmFsPXRoaXMub3B0aW9ucy55QXhpc1sxXTt0aGlz
LnlyYW5nZT10aGlzLm1heHl2YWwtdGhpcy5taW55dmFsO3RoaXMueXNjYWxlPSh0aGlzLnlyYW5n
ZSE9MD8xL3RoaXMueXJhbmdlOjEpfTtEeWdyYXBoTGF5b3V0LnByb3RvdHlwZS5fZXZhbHVhdGVM
aW5lQ2hhcnRzPWZ1bmN0aW9uKCl7dGhpcy5wb2ludHM9bmV3IEFycmF5KCk7Zm9yKHZhciBlIGlu
IHRoaXMuZGF0YXNldHMpe2lmKCF0aGlzLmRhdGFzZXRzLmhhc093blByb3BlcnR5KGUpKXtjb250
aW51ZX12YXIgZD10aGlzLmRhdGFzZXRzW2VdO2Zvcih2YXIgYj0wO2I8ZC5sZW5ndGg7YisrKXt2
YXIgYz1kW2JdO3ZhciBhPXt4OigocGFyc2VGbG9hdChjWzBdKS10aGlzLm1pbnh2YWwpKnRoaXMu
eHNjYWxlKSx5OjEtKChwYXJzZUZsb2F0KGNbMV0pLXRoaXMubWlueXZhbCkqdGhpcy55c2NhbGUp
LHh2YWw6cGFyc2VGbG9hdChjWzBdKSx5dmFsOnBhcnNlRmxvYXQoY1sxXSksbmFtZTplfTtpZihh
Lnk8PTApe2EueT0wfWlmKGEueT49MSl7YS55PTF9dGhpcy5wb2ludHMucHVzaChhKX19fTtEeWdy
YXBoTGF5b3V0LnByb3RvdHlwZS5fZXZhbHVhdGVMaW5lVGlja3M9ZnVuY3Rpb24oKXt0aGlzLnh0
aWNrcz1uZXcgQXJyYXkoKTtmb3IodmFyIGM9MDtjPHRoaXMub3B0aW9ucy54VGlja3MubGVuZ3Ro
O2MrKyl7dmFyIGI9dGhpcy5vcHRpb25zLnhUaWNrc1tjXTt2YXIgYT1iLmxhYmVsO3ZhciBkPXRo
aXMueHNjYWxlKihiLnYtdGhpcy5taW54dmFsKTtpZigoZD49MCkmJihkPD0xKSl7dGhpcy54dGlj
a3MucHVzaChbZCxhXSl9fXRoaXMueXRpY2tzPW5ldyBBcnJheSgpO2Zvcih2YXIgYz0wO2M8dGhp
cy5vcHRpb25zLnlUaWNrcy5sZW5ndGg7YysrKXt2YXIgYj10aGlzLm9wdGlvbnMueVRpY2tzW2Nd
O3ZhciBhPWIubGFiZWw7dmFyIGQ9MS0odGhpcy55c2NhbGUqKGIudi10aGlzLm1pbnl2YWwpKTtp
ZigoZD49MCkmJihkPD0xKSl7dGhpcy55dGlja3MucHVzaChbZCxhXSl9fX07RHlncmFwaExheW91
dC5wcm90b3R5cGUuZXZhbHVhdGVXaXRoRXJyb3I9ZnVuY3Rpb24oKXt0aGlzLmV2YWx1YXRlKCk7
aWYoIXRoaXMub3B0aW9ucy5lcnJvckJhcnMpe3JldHVybn12YXIgZD0wO2Zvcih2YXIgZyBpbiB0
aGlzLmRhdGFzZXRzKXtpZighdGhpcy5kYXRhc2V0cy5oYXNPd25Qcm9wZXJ0eShnKSl7Y29udGlu
dWV9dmFyIGM9MDt2YXIgZj10aGlzLmRhdGFzZXRzW2ddO2Zvcih2YXIgYz0wO2M8Zi5sZW5ndGg7
YysrLGQrKyl7dmFyIGU9ZltjXTt2YXIgYT1wYXJzZUZsb2F0KGVbMF0pO3ZhciBiPXBhcnNlRmxv
YXQoZVsxXSk7aWYoYT09dGhpcy5wb2ludHNbZF0ueHZhbCYmYj09dGhpcy5wb2ludHNbZF0ueXZh
bCl7dGhpcy5wb2ludHNbZF0uZXJyb3JNaW51cz1wYXJzZUZsb2F0KGVbMl0pO3RoaXMucG9pbnRz
W2RdLmVycm9yUGx1cz1wYXJzZUZsb2F0KGVbM10pfX19fTtEeWdyYXBoTGF5b3V0LnByb3RvdHlw
ZS5fZXZhbHVhdGVBbm5vdGF0aW9ucz1mdW5jdGlvbigpe3ZhciBmPXt9O2Zvcih2YXIgZD0wO2Q8
dGhpcy5hbm5vdGF0aW9ucy5sZW5ndGg7ZCsrKXt2YXIgYj10aGlzLmFubm90YXRpb25zW2RdO2Zb
Yi54dmFsKyIsIitiLnNlcmllc109Yn10aGlzLmFubm90YXRlZF9wb2ludHM9W107Zm9yKHZhciBk
PTA7ZDx0aGlzLnBvaW50cy5sZW5ndGg7ZCsrKXt2YXIgZT10aGlzLnBvaW50c1tkXTt2YXIgYz1l
Lnh2YWwrIiwiK2UubmFtZTtpZihjIGluIGYpe2UuYW5ub3RhdGlvbj1mW2NdO3RoaXMuYW5ub3Rh
dGVkX3BvaW50cy5wdXNoKGUpfX19O0R5Z3JhcGhMYXlvdXQucHJvdG90eXBlLnJlbW92ZUFsbERh
dGFzZXRzPWZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXMuZGF0YXNldHM7dGhpcy5kYXRhc2V0cz1uZXcg
QXJyYXkoKX07RHlncmFwaExheW91dC5wcm90b3R5cGUudXBkYXRlT3B0aW9ucz1mdW5jdGlvbihh
KXtEeWdyYXBoLnVwZGF0ZSh0aGlzLm9wdGlvbnMsYT9hOnt9KX07RHlncmFwaENhbnZhc1JlbmRl
cmVyPWZ1bmN0aW9uKGMsYixkLGEpe3RoaXMuZHlncmFwaF89Yzt0aGlzLm9wdGlvbnM9e3N0cm9r
ZVdpZHRoOjAuNSxkcmF3WEF4aXM6dHJ1ZSxkcmF3WUF4aXM6dHJ1ZSxheGlzTGluZUNvbG9yOiJi
bGFjayIsYXhpc0xpbmVXaWR0aDowLjUsYXhpc1RpY2tTaXplOjMsYXhpc0xhYmVsQ29sb3I6ImJs
YWNrIixheGlzTGFiZWxGb250OiJBcmlhbCIsYXhpc0xhYmVsRm9udFNpemU6OSxheGlzTGFiZWxX
aWR0aDo1MCxkcmF3WUdyaWQ6dHJ1ZSxkcmF3WEdyaWQ6dHJ1ZSxncmlkTGluZUNvbG9yOiJyZ2Io
MTI4LDEyOCwxMjgpIixmaWxsQWxwaGE6MC4xNSx1bmRlcmxheUNhbGxiYWNrOm51bGx9O0R5Z3Jh
cGgudXBkYXRlKHRoaXMub3B0aW9ucyxhKTt0aGlzLmxheW91dD1kO3RoaXMuZWxlbWVudD1iO3Ro
aXMuY29udGFpbmVyPXRoaXMuZWxlbWVudC5wYXJlbnROb2RlO3RoaXMuaGVpZ2h0PXRoaXMuZWxl
bWVudC5oZWlnaHQ7dGhpcy53aWR0aD10aGlzLmVsZW1lbnQud2lkdGg7aWYoIXRoaXMuaXNJRSYm
IShEeWdyYXBoQ2FudmFzUmVuZGVyZXIuaXNTdXBwb3J0ZWQodGhpcy5lbGVtZW50KSkpe3Rocm93
IkNhbnZhcyBpcyBub3Qgc3VwcG9ydGVkLiJ9dGhpcy54bGFiZWxzPW5ldyBBcnJheSgpO3RoaXMu
eWxhYmVscz1uZXcgQXJyYXkoKTt0aGlzLmFubm90YXRpb25zPW5ldyBBcnJheSgpO3RoaXMuYXJl
YT17eDp0aGlzLm9wdGlvbnMueUF4aXNMYWJlbFdpZHRoKzIqdGhpcy5vcHRpb25zLmF4aXNUaWNr
U2l6ZSx5OjB9O3RoaXMuYXJlYS53PXRoaXMud2lkdGgtdGhpcy5hcmVhLngtdGhpcy5vcHRpb25z
LnJpZ2h0R2FwO3RoaXMuYXJlYS5oPXRoaXMuaGVpZ2h0LXRoaXMub3B0aW9ucy5heGlzTGFiZWxG
b250U2l6ZS0yKnRoaXMub3B0aW9ucy5heGlzVGlja1NpemU7dGhpcy5jb250YWluZXIuc3R5bGUu
cG9zaXRpb249InJlbGF0aXZlIjt0aGlzLmNvbnRhaW5lci5zdHlsZS53aWR0aD10aGlzLndpZHRo
KyJweCJ9O0R5Z3JhcGhDYW52YXNSZW5kZXJlci5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXtp
Zih0aGlzLmlzSUUpe3RyeXtpZih0aGlzLmNsZWFyRGVsYXkpe3RoaXMuY2xlYXJEZWxheS5jYW5j
ZWwoKTt0aGlzLmNsZWFyRGVsYXk9bnVsbH12YXIgYj10aGlzLmVsZW1lbnQuZ2V0Q29udGV4dCgi
MmQiKX1jYXRjaChkKXt0aGlzLmNsZWFyRGVsYXk9TW9jaGlLaXQuQXN5bmMud2FpdCh0aGlzLklF
RGVsYXkpO3RoaXMuY2xlYXJEZWxheS5hZGRDYWxsYmFjayhiaW5kKHRoaXMuY2xlYXIsdGhpcykp
O3JldHVybn19dmFyIGI9dGhpcy5lbGVtZW50LmdldENvbnRleHQoIjJkIik7Yi5jbGVhclJlY3Qo
MCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpO2Zvcih2YXIgYT0wO2E8dGhpcy54bGFiZWxzLmxl
bmd0aDthKyspe3ZhciBjPXRoaXMueGxhYmVsc1thXTtjLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQo
Yyl9Zm9yKHZhciBhPTA7YTx0aGlzLnlsYWJlbHMubGVuZ3RoO2ErKyl7dmFyIGM9dGhpcy55bGFi
ZWxzW2FdO2MucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjKX1mb3IodmFyIGE9MDthPHRoaXMuYW5u
b3RhdGlvbnMubGVuZ3RoO2ErKyl7dmFyIGM9dGhpcy5hbm5vdGF0aW9uc1thXTtjLnBhcmVudE5v
ZGUucmVtb3ZlQ2hpbGQoYyl9dGhpcy54bGFiZWxzPW5ldyBBcnJheSgpO3RoaXMueWxhYmVscz1u
ZXcgQXJyYXkoKTt0aGlzLmFubm90YXRpb25zPW5ldyBBcnJheSgpfTtEeWdyYXBoQ2FudmFzUmVu
ZGVyZXIuaXNTdXBwb3J0ZWQ9ZnVuY3Rpb24oZyl7dmFyIGI9bnVsbDt0cnl7aWYodHlwZW9mKGcp
PT0idW5kZWZpbmVkInx8Zz09bnVsbCl7Yj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMi
KX1lbHNle2I9Z312YXIgYz1iLmdldENvbnRleHQoIjJkIil9Y2F0Y2goZCl7dmFyIGY9bmF2aWdh
dG9yLmFwcFZlcnNpb24ubWF0Y2goL01TSUUgKFxkXC5cZCkvKTt2YXIgYT0obmF2aWdhdG9yLnVz
ZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoIm9wZXJhIikhPS0xKTtpZigoIWYpfHwoZlsx
XTw2KXx8KGEpKXtyZXR1cm4gZmFsc2V9cmV0dXJuIHRydWV9cmV0dXJuIHRydWV9O0R5Z3JhcGhD
YW52YXNSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5lbGVt
ZW50LmdldENvbnRleHQoIjJkIik7aWYodGhpcy5vcHRpb25zLnVuZGVybGF5Q2FsbGJhY2spe3Ro
aXMub3B0aW9ucy51bmRlcmxheUNhbGxiYWNrKGIsdGhpcy5hcmVhLHRoaXMubGF5b3V0LHRoaXMu
ZHlncmFwaF8pfWlmKHRoaXMub3B0aW9ucy5kcmF3WUdyaWQpe3ZhciBkPXRoaXMubGF5b3V0Lnl0
aWNrcztiLnNhdmUoKTtiLnN0cm9rZVN0eWxlPXRoaXMub3B0aW9ucy5ncmlkTGluZUNvbG9yO2Iu
bGluZVdpZHRoPXRoaXMub3B0aW9ucy5heGlzTGluZVdpZHRoO2Zvcih2YXIgYz0wO2M8ZC5sZW5n
dGg7YysrKXt2YXIgYT10aGlzLmFyZWEueDt2YXIgZT10aGlzLmFyZWEueStkW2NdWzBdKnRoaXMu
YXJlYS5oO2IuYmVnaW5QYXRoKCk7Yi5tb3ZlVG8oYSxlKTtiLmxpbmVUbyhhK3RoaXMuYXJlYS53
LGUpO2IuY2xvc2VQYXRoKCk7Yi5zdHJva2UoKX19aWYodGhpcy5vcHRpb25zLmRyYXdYR3JpZCl7
dmFyIGQ9dGhpcy5sYXlvdXQueHRpY2tzO2Iuc2F2ZSgpO2Iuc3Ryb2tlU3R5bGU9dGhpcy5vcHRp
b25zLmdyaWRMaW5lQ29sb3I7Yi5saW5lV2lkdGg9dGhpcy5vcHRpb25zLmF4aXNMaW5lV2lkdGg7
Zm9yKHZhciBjPTA7YzxkLmxlbmd0aDtjKyspe3ZhciBhPXRoaXMuYXJlYS54K2RbY11bMF0qdGhp
cy5hcmVhLnc7dmFyIGU9dGhpcy5hcmVhLnkrdGhpcy5hcmVhLmg7Yi5iZWdpblBhdGgoKTtiLm1v
dmVUbyhhLGUpO2IubGluZVRvKGEsdGhpcy5hcmVhLnkpO2IuY2xvc2VQYXRoKCk7Yi5zdHJva2Uo
KX19dGhpcy5fcmVuZGVyTGluZUNoYXJ0KCk7dGhpcy5fcmVuZGVyQXhpcygpO3RoaXMuX3JlbmRl
ckFubm90YXRpb25zKCl9O0R5Z3JhcGhDYW52YXNSZW5kZXJlci5wcm90b3R5cGUuX3JlbmRlckF4
aXM9ZnVuY3Rpb24oKXtpZighdGhpcy5vcHRpb25zLmRyYXdYQXhpcyYmIXRoaXMub3B0aW9ucy5k
cmF3WUF4aXMpe3JldHVybn12YXIgYj10aGlzLmVsZW1lbnQuZ2V0Q29udGV4dCgiMmQiKTt2YXIg
Zz17cG9zaXRpb246ImFic29sdXRlIixmb250U2l6ZTp0aGlzLm9wdGlvbnMuYXhpc0xhYmVsRm9u
dFNpemUrInB4Iix6SW5kZXg6MTAsY29sb3I6dGhpcy5vcHRpb25zLmF4aXNMYWJlbENvbG9yLHdp
ZHRoOnRoaXMub3B0aW9ucy5heGlzTGFiZWxXaWR0aCsicHgiLG92ZXJmbG93OiJoaWRkZW4ifTt2
YXIgZD1mdW5jdGlvbihvKXt2YXIgcT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtmb3Io
dmFyIHAgaW4gZyl7aWYoZy5oYXNPd25Qcm9wZXJ0eShwKSl7cS5zdHlsZVtwXT1nW3BdfX1xLmFw
cGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG8pKTtyZXR1cm4gcX07Yi5zYXZlKCk7
Yi5zdHJva2VTdHlsZT10aGlzLm9wdGlvbnMuYXhpc0xpbmVDb2xvcjtiLmxpbmVXaWR0aD10aGlz
Lm9wdGlvbnMuYXhpc0xpbmVXaWR0aDtpZih0aGlzLm9wdGlvbnMuZHJhd1lBeGlzKXtpZih0aGlz
LmxheW91dC55dGlja3MmJnRoaXMubGF5b3V0Lnl0aWNrcy5sZW5ndGg+MCl7Zm9yKHZhciBlPTA7
ZTx0aGlzLmxheW91dC55dGlja3MubGVuZ3RoO2UrKyl7dmFyIGY9dGhpcy5sYXlvdXQueXRpY2tz
W2VdO2lmKHR5cGVvZihmKT09ImZ1bmN0aW9uIil7cmV0dXJufXZhciBsPXRoaXMuYXJlYS54O3Zh
ciBqPXRoaXMuYXJlYS55K2ZbMF0qdGhpcy5hcmVhLmg7Yi5iZWdpblBhdGgoKTtiLm1vdmVUbyhs
LGopO2IubGluZVRvKGwtdGhpcy5vcHRpb25zLmF4aXNUaWNrU2l6ZSxqKTtiLmNsb3NlUGF0aCgp
O2Iuc3Ryb2tlKCk7dmFyIGs9ZChmWzFdKTt2YXIgaD0oai10aGlzLm9wdGlvbnMuYXhpc0xhYmVs
Rm9udFNpemUvMik7aWYoaDwwKXtoPTB9aWYoaCt0aGlzLm9wdGlvbnMuYXhpc0xhYmVsRm9udFNp
emUrMz50aGlzLmhlaWdodCl7ay5zdHlsZS5ib3R0b209IjBweCJ9ZWxzZXtrLnN0eWxlLnRvcD1o
KyJweCJ9ay5zdHlsZS5sZWZ0PSIwcHgiO2suc3R5bGUudGV4dEFsaWduPSJyaWdodCI7ay5zdHls
ZS53aWR0aD10aGlzLm9wdGlvbnMueUF4aXNMYWJlbFdpZHRoKyJweCI7dGhpcy5jb250YWluZXIu
YXBwZW5kQ2hpbGQoayk7dGhpcy55bGFiZWxzLnB1c2goayl9dmFyIG09dGhpcy55bGFiZWxzWzBd
O3ZhciBuPXRoaXMub3B0aW9ucy5heGlzTGFiZWxGb250U2l6ZTt2YXIgYT1wYXJzZUludChtLnN0
eWxlLnRvcCkrbjtpZihhPnRoaXMuaGVpZ2h0LW4pe20uc3R5bGUudG9wPShwYXJzZUludChtLnN0
eWxlLnRvcCktbi8yKSsicHgifX1iLmJlZ2luUGF0aCgpO2IubW92ZVRvKHRoaXMuYXJlYS54LHRo
aXMuYXJlYS55KTtiLmxpbmVUbyh0aGlzLmFyZWEueCx0aGlzLmFyZWEueSt0aGlzLmFyZWEuaCk7
Yi5jbG9zZVBhdGgoKTtiLnN0cm9rZSgpfWlmKHRoaXMub3B0aW9ucy5kcmF3WEF4aXMpe2lmKHRo
aXMubGF5b3V0Lnh0aWNrcyl7Zm9yKHZhciBlPTA7ZTx0aGlzLmxheW91dC54dGlja3MubGVuZ3Ro
O2UrKyl7dmFyIGY9dGhpcy5sYXlvdXQueHRpY2tzW2VdO2lmKHR5cGVvZihkYXRhc2V0KT09ImZ1
bmN0aW9uIil7cmV0dXJufXZhciBsPXRoaXMuYXJlYS54K2ZbMF0qdGhpcy5hcmVhLnc7dmFyIGo9
dGhpcy5hcmVhLnkrdGhpcy5hcmVhLmg7Yi5iZWdpblBhdGgoKTtiLm1vdmVUbyhsLGopO2IubGlu
ZVRvKGwsait0aGlzLm9wdGlvbnMuYXhpc1RpY2tTaXplKTtiLmNsb3NlUGF0aCgpO2Iuc3Ryb2tl
KCk7dmFyIGs9ZChmWzFdKTtrLnN0eWxlLnRleHRBbGlnbj0iY2VudGVyIjtrLnN0eWxlLmJvdHRv
bT0iMHB4Ijt2YXIgYz0obC10aGlzLm9wdGlvbnMuYXhpc0xhYmVsV2lkdGgvMik7aWYoYyt0aGlz
Lm9wdGlvbnMuYXhpc0xhYmVsV2lkdGg+dGhpcy53aWR0aCl7Yz10aGlzLndpZHRoLXRoaXMub3B0
aW9ucy54QXhpc0xhYmVsV2lkdGg7ay5zdHlsZS50ZXh0QWxpZ249InJpZ2h0In1pZihjPDApe2M9
MDtrLnN0eWxlLnRleHRBbGlnbj0ibGVmdCJ9ay5zdHlsZS5sZWZ0PWMrInB4IjtrLnN0eWxlLndp
ZHRoPXRoaXMub3B0aW9ucy54QXhpc0xhYmVsV2lkdGgrInB4Ijt0aGlzLmNvbnRhaW5lci5hcHBl
bmRDaGlsZChrKTt0aGlzLnhsYWJlbHMucHVzaChrKX19Yi5iZWdpblBhdGgoKTtiLm1vdmVUbyh0
aGlzLmFyZWEueCx0aGlzLmFyZWEueSt0aGlzLmFyZWEuaCk7Yi5saW5lVG8odGhpcy5hcmVhLngr
dGhpcy5hcmVhLncsdGhpcy5hcmVhLnkrdGhpcy5hcmVhLmgpO2IuY2xvc2VQYXRoKCk7Yi5zdHJv
a2UoKX1iLnJlc3RvcmUoKX07RHlncmFwaENhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5fcmVuZGVy
QW5ub3RhdGlvbnM9ZnVuY3Rpb24oKXt2YXIgaD17cG9zaXRpb246ImFic29sdXRlIixmb250U2l6
ZTp0aGlzLm9wdGlvbnMuYXhpc0xhYmVsRm9udFNpemUrInB4Iix6SW5kZXg6MTAsb3ZlcmZsb3c6
ImhpZGRlbiJ9O3ZhciBqPWZ1bmN0aW9uKHEscixzLGEpe3JldHVybiBmdW5jdGlvbih0KXt2YXIg
cD1zLmFubm90YXRpb247aWYocC5oYXNPd25Qcm9wZXJ0eShxKSl7cFtxXShwLHMsYS5keWdyYXBo
Xyx0KX1lbHNle2lmKGEuZHlncmFwaF8uYXR0cl8ocikpe2EuZHlncmFwaF8uYXR0cl8ocikocCxz
LGEuZHlncmFwaF8sdCl9fX19O3ZhciBtPXRoaXMubGF5b3V0LmFubm90YXRlZF9wb2ludHM7Zm9y
KHZhciBnPTA7ZzxtLmxlbmd0aDtnKyspe3ZhciBlPW1bZ107aWYoZS5jYW52YXN4PHRoaXMuYXJl
YS54fHxlLmNhbnZhc3g+dGhpcy5hcmVhLngrdGhpcy5hcmVhLncpe2NvbnRpbnVlfXZhciBrPWUu
YW5ub3RhdGlvbjt2YXIgbD02O2lmKGsuaGFzT3duUHJvcGVydHkoInRpY2tIZWlnaHQiKSl7bD1r
LnRpY2tIZWlnaHR9dmFyIGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Zm9yKHZhciBi
IGluIGgpe2lmKGguaGFzT3duUHJvcGVydHkoYikpe2Muc3R5bGVbYl09aFtiXX19aWYoIWsuaGFz
T3duUHJvcGVydHkoImljb24iKSl7Yy5jbGFzc05hbWU9ImR5Z3JhcGhEZWZhdWx0QW5ub3RhdGlv
biJ9aWYoay5oYXNPd25Qcm9wZXJ0eSgiY3NzQ2xhc3MiKSl7Yy5jbGFzc05hbWUrPSIgIitrLmNz
c0NsYXNzfXZhciBkPWsuaGFzT3duUHJvcGVydHkoIndpZHRoIik/ay53aWR0aDoxNjt2YXIgbj1r
Lmhhc093blByb3BlcnR5KCJoZWlnaHQiKT9rLmhlaWdodDoxNjtpZihrLmhhc093blByb3BlcnR5
KCJpY29uIikpe3ZhciBmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImltZyIpO2Yuc3JjPWsuaWNv
bjtmLndpZHRoPWQ7Zi5oZWlnaHQ9bjtjLmFwcGVuZENoaWxkKGYpfWVsc2V7aWYoZS5hbm5vdGF0
aW9uLmhhc093blByb3BlcnR5KCJzaG9ydFRleHQiKSl7Yy5hcHBlbmRDaGlsZChkb2N1bWVudC5j
cmVhdGVUZXh0Tm9kZShlLmFubm90YXRpb24uc2hvcnRUZXh0KSl9fWMuc3R5bGUubGVmdD0oZS5j
YW52YXN4LWQvMikrInB4IjtpZihrLmF0dGFjaEF0Qm90dG9tKXtjLnN0eWxlLnRvcD0odGhpcy5h
cmVhLmgtbi1sKSsicHgifWVsc2V7Yy5zdHlsZS50b3A9KGUuY2FudmFzeS1uLWwpKyJweCJ9Yy5z
dHlsZS53aWR0aD1kKyJweCI7Yy5zdHlsZS5oZWlnaHQ9bisicHgiO2MudGl0bGU9ZS5hbm5vdGF0
aW9uLnRleHQ7Yy5zdHlsZS5jb2xvcj10aGlzLmNvbG9yc1tlLm5hbWVdO2Muc3R5bGUuYm9yZGVy
Q29sb3I9dGhpcy5jb2xvcnNbZS5uYW1lXTtrLmRpdj1jO0R5Z3JhcGguYWRkRXZlbnQoYywiY2xp
Y2siLGooImNsaWNrSGFuZGxlciIsImFubm90YXRpb25DbGlja0hhbmRsZXIiLGUsdGhpcykpO0R5
Z3JhcGguYWRkRXZlbnQoYywibW91c2VvdmVyIixqKCJtb3VzZU92ZXJIYW5kbGVyIiwiYW5ub3Rh
dGlvbk1vdXNlT3ZlckhhbmRsZXIiLGUsdGhpcykpO0R5Z3JhcGguYWRkRXZlbnQoYywibW91c2Vv
dXQiLGooIm1vdXNlT3V0SGFuZGxlciIsImFubm90YXRpb25Nb3VzZU91dEhhbmRsZXIiLGUsdGhp
cykpO0R5Z3JhcGguYWRkRXZlbnQoYywiZGJsY2xpY2siLGooImRibENsaWNrSGFuZGxlciIsImFu
bm90YXRpb25EYmxDbGlja0hhbmRsZXIiLGUsdGhpcykpO3RoaXMuY29udGFpbmVyLmFwcGVuZENo
aWxkKGMpO3RoaXMuYW5ub3RhdGlvbnMucHVzaChjKTt2YXIgbz10aGlzLmVsZW1lbnQuZ2V0Q29u
dGV4dCgiMmQiKTtvLnN0cm9rZVN0eWxlPXRoaXMuY29sb3JzW2UubmFtZV07by5iZWdpblBhdGgo
KTtpZighay5hdHRhY2hBdEJvdHRvbSl7by5tb3ZlVG8oZS5jYW52YXN4LGUuY2FudmFzeSk7by5s
aW5lVG8oZS5jYW52YXN4LGUuY2FudmFzeS0yLWwpfWVsc2V7by5tb3ZlVG8oZS5jYW52YXN4LHRo
aXMuYXJlYS5oKTtvLmxpbmVUbyhlLmNhbnZhc3gsdGhpcy5hcmVhLmgtMi1sKX1vLmNsb3NlUGF0
aCgpO28uc3Ryb2tlKCl9fTtEeWdyYXBoQ2FudmFzUmVuZGVyZXIucHJvdG90eXBlLl9yZW5kZXJM
aW5lQ2hhcnQ9ZnVuY3Rpb24oKXt2YXIgYz10aGlzLmVsZW1lbnQuZ2V0Q29udGV4dCgiMmQiKTt2
YXIgZj10aGlzLm9wdGlvbnMuY29sb3JTY2hlbWUubGVuZ3RoO3ZhciBvPXRoaXMub3B0aW9ucy5j
b2xvclNjaGVtZTt2YXIgej10aGlzLm9wdGlvbnMuZmlsbEFscGhhO3ZhciBFPXRoaXMubGF5b3V0
Lm9wdGlvbnMuZXJyb3JCYXJzO3ZhciB0PXRoaXMubGF5b3V0Lm9wdGlvbnMuZmlsbEdyYXBoO3Zh
ciBkPXRoaXMubGF5b3V0Lm9wdGlvbnMuc3RhY2tlZEdyYXBoO3ZhciBsPXRoaXMubGF5b3V0Lm9w
dGlvbnMuc3RlcFBsb3Q7dmFyIEc9W107Zm9yKHZhciBIIGluIHRoaXMubGF5b3V0LmRhdGFzZXRz
KXtpZih0aGlzLmxheW91dC5kYXRhc2V0cy5oYXNPd25Qcm9wZXJ0eShIKSl7Ry5wdXNoKEgpfX12
YXIgQT1HLmxlbmd0aDt0aGlzLmNvbG9ycz17fTtmb3IodmFyIEM9MDtDPEE7QysrKXt0aGlzLmNv
bG9yc1tHW0NdXT1vW0MlZl19Zm9yKHZhciBDPTA7Qzx0aGlzLmxheW91dC5wb2ludHMubGVuZ3Ro
O0MrKyl7dmFyIHY9dGhpcy5sYXlvdXQucG9pbnRzW0NdO3YuY2FudmFzeD10aGlzLmFyZWEudyp2
LngrdGhpcy5hcmVhLng7di5jYW52YXN5PXRoaXMuYXJlYS5oKnYueSt0aGlzLmFyZWEueX12YXIg
cD1mdW5jdGlvbihqKXtyZXR1cm4gaiYmIWlzTmFOKGopfTt2YXIgdT1jO2lmKEUpe2lmKHQpe3Ro
aXMuZHlncmFwaF8ud2FybigiQ2FuJ3QgdXNlIGZpbGxHcmFwaCBvcHRpb24gd2l0aCBlcnJvciBi
YXJzIil9Zm9yKHZhciBDPTA7QzxBO0MrKyl7dmFyIGs9R1tDXTt2YXIgeD10aGlzLmNvbG9yc1tr
XTt1LnNhdmUoKTt2YXIgaD1OYU47dmFyIGU9TmFOO3ZhciBnPVstMSwtMV07dmFyIEQ9dGhpcy5s
YXlvdXQueXNjYWxlO3ZhciBhPW5ldyBSR0JDb2xvcih4KTt2YXIgRj0icmdiYSgiK2EucisiLCIr
YS5nKyIsIithLmIrIiwiK3orIikiO3UuZmlsbFN0eWxlPUY7dS5iZWdpblBhdGgoKTtmb3IodmFy
IHk9MDt5PHRoaXMubGF5b3V0LnBvaW50cy5sZW5ndGg7eSsrKXt2YXIgdj10aGlzLmxheW91dC5w
b2ludHNbeV07aWYodi5uYW1lPT1rKXtpZighcCh2LnkpKXtoPU5hTjtjb250aW51ZX1pZihsKXt2
YXIgcj1bZS12LmVycm9yUGx1cypELGUrdi5lcnJvck1pbnVzKkRdO2U9di55fWVsc2V7dmFyIHI9
W3YueS12LmVycm9yUGx1cypELHYueSt2LmVycm9yTWludXMqRF19clswXT10aGlzLmFyZWEuaCpy
WzBdK3RoaXMuYXJlYS55O3JbMV09dGhpcy5hcmVhLmgqclsxXSt0aGlzLmFyZWEueTtpZighaXNO
YU4oaCkpe2lmKGwpe3UubW92ZVRvKGgsclswXSl9ZWxzZXt1Lm1vdmVUbyhoLGdbMF0pfXUubGlu
ZVRvKHYuY2FudmFzeCxyWzBdKTt1LmxpbmVUbyh2LmNhbnZhc3gsclsxXSk7aWYobCl7dS5saW5l
VG8oaCxyWzFdKX1lbHNle3UubGluZVRvKGgsZ1sxXSl9dS5jbG9zZVBhdGgoKX1nPXI7aD12LmNh
bnZhc3h9fXUuZmlsbCgpfX1lbHNle2lmKHQpe3ZhciBiPTErdGhpcy5sYXlvdXQubWlueXZhbCp0
aGlzLmxheW91dC55c2NhbGU7aWYoYjwwKXtiPTB9ZWxzZXtpZihiPjEpe2I9MX19Yj10aGlzLmFy
ZWEuaCpiK3RoaXMuYXJlYS55O3ZhciBxPVtdO2Zvcih2YXIgQz1BLTE7Qz49MDtDLS0pe3ZhciBr
PUdbQ107dmFyIHg9dGhpcy5jb2xvcnNba107dS5zYXZlKCk7dmFyIGg9TmFOO3ZhciBnPVstMSwt
MV07dmFyIEQ9dGhpcy5sYXlvdXQueXNjYWxlO3ZhciBhPW5ldyBSR0JDb2xvcih4KTt2YXIgRj0i
cmdiYSgiK2EucisiLCIrYS5nKyIsIithLmIrIiwiK3orIikiO3UuZmlsbFN0eWxlPUY7dS5iZWdp
blBhdGgoKTtmb3IodmFyIHk9MDt5PHRoaXMubGF5b3V0LnBvaW50cy5sZW5ndGg7eSsrKXt2YXIg
dj10aGlzLmxheW91dC5wb2ludHNbeV07aWYodi5uYW1lPT1rKXtpZighcCh2LnkpKXtoPU5hTjtj
b250aW51ZX12YXIgcjtpZihkKXtsYXN0WT1xW3YuY2FudmFzeF07aWYobGFzdFk9PT11bmRlZmlu
ZWQpe2xhc3RZPWJ9cVt2LmNhbnZhc3hdPXYuY2FudmFzeTtyPVt2LmNhbnZhc3ksbGFzdFldfWVs
c2V7cj1bdi5jYW52YXN5LGJdfWlmKCFpc05hTihoKSl7dS5tb3ZlVG8oaCxnWzBdKTtpZihsKXt1
LmxpbmVUbyh2LmNhbnZhc3gsZ1swXSl9ZWxzZXt1LmxpbmVUbyh2LmNhbnZhc3gsclswXSl9dS5s
aW5lVG8odi5jYW52YXN4LHJbMV0pO3UubGluZVRvKGgsZ1sxXSk7dS5jbG9zZVBhdGgoKX1nPXI7
aD12LmNhbnZhc3h9fXUuZmlsbCgpfX19Zm9yKHZhciBDPTA7QzxBO0MrKyl7dmFyIGs9R1tDXTt2
YXIgeD10aGlzLmNvbG9yc1trXTt2YXIgcz10aGlzLmR5Z3JhcGhfLmF0dHJfKCJzdHJva2VXaWR0
aCIsayk7Yy5zYXZlKCk7dmFyIHY9dGhpcy5sYXlvdXQucG9pbnRzWzBdO3ZhciBtPXRoaXMuZHln
cmFwaF8uYXR0cl8oInBvaW50U2l6ZSIsayk7dmFyIGg9bnVsbCxlPW51bGw7dmFyIHc9dGhpcy5k
eWdyYXBoXy5hdHRyXygiZHJhd1BvaW50cyIsayk7dmFyIEI9dGhpcy5sYXlvdXQucG9pbnRzO2Zv
cih2YXIgeT0wO3k8Qi5sZW5ndGg7eSsrKXt2YXIgdj1CW3ldO2lmKHYubmFtZT09ayl7aWYoIXAo
di5jYW52YXN5KSl7aD1lPW51bGx9ZWxzZXt2YXIgbj0oIWgmJih5PT1CLmxlbmd0aC0xfHwhcChC
W3krMV0uY2FudmFzeSkpKTtpZighaCl7aD12LmNhbnZhc3g7ZT12LmNhbnZhc3l9ZWxzZXtpZihz
KXt1LmJlZ2luUGF0aCgpO3Uuc3Ryb2tlU3R5bGU9eDt1LmxpbmVXaWR0aD1zO3UubW92ZVRvKGgs
ZSk7aWYobCl7dS5saW5lVG8odi5jYW52YXN4LGUpfWg9di5jYW52YXN4O2U9di5jYW52YXN5O3Uu
bGluZVRvKGgsZSk7dS5zdHJva2UoKX19aWYod3x8bil7dS5iZWdpblBhdGgoKTt1LmZpbGxTdHls
ZT14O3UuYXJjKHYuY2FudmFzeCx2LmNhbnZhc3ksbSwwLDIqTWF0aC5QSSxmYWxzZSk7dS5maWxs
KCl9fX19fWMucmVzdG9yZSgpfTtEeWdyYXBoPWZ1bmN0aW9uKGMsYixhKXtpZihhcmd1bWVudHMu
bGVuZ3RoPjApe2lmKGFyZ3VtZW50cy5sZW5ndGg9PTQpe3RoaXMud2FybigiVXNpbmcgZGVwcmVj
YXRlZCBmb3VyLWFyZ3VtZW50IGR5Z3JhcGggY29uc3RydWN0b3IiKTt0aGlzLl9fb2xkX2luaXRf
XyhjLGIsYXJndW1lbnRzWzJdLGFyZ3VtZW50c1szXSl9ZWxzZXt0aGlzLl9faW5pdF9fKGMsYixh
KX19fTtEeWdyYXBoLk5BTUU9IkR5Z3JhcGgiO0R5Z3JhcGguVkVSU0lPTj0iMS4yIjtEeWdyYXBo
Ll9fcmVwcl9fPWZ1bmN0aW9uKCl7cmV0dXJuIlsiK3RoaXMuTkFNRSsiICIrdGhpcy5WRVJTSU9O
KyJdIn07RHlncmFwaC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9fcmVwcl9fKCl9
O0R5Z3JhcGguREVGQVVMVF9ST0xMX1BFUklPRD0xO0R5Z3JhcGguREVGQVVMVF9XSURUSD00ODA7
RHlncmFwaC5ERUZBVUxUX0hFSUdIVD0zMjA7RHlncmFwaC5BWElTX0xJTkVfV0lEVEg9MC4zO0R5
Z3JhcGguREVGQVVMVF9BVFRSUz17aGlnaGxpZ2h0Q2lyY2xlU2l6ZTozLHBpeGVsc1BlclhMYWJl
bDo2MCxwaXhlbHNQZXJZTGFiZWw6MzAsbGFiZWxzRGl2V2lkdGg6MjUwLGxhYmVsc0RpdlN0eWxl
czp7fSxsYWJlbHNTZXBhcmF0ZUxpbmVzOmZhbHNlLGxhYmVsc1Nob3daZXJvVmFsdWVzOnRydWUs
bGFiZWxzS01COmZhbHNlLGxhYmVsc0tNRzI6ZmFsc2Usc2hvd0xhYmVsc09uSGlnaGxpZ2h0OnRy
dWUseVZhbHVlRm9ybWF0dGVyOmZ1bmN0aW9uKGEpe3JldHVybiBEeWdyYXBoLnJvdW5kXyhhLDIp
fSxzdHJva2VXaWR0aDoxLGF4aXNUaWNrU2l6ZTozLGF4aXNMYWJlbEZvbnRTaXplOjE0LHhBeGlz
TGFiZWxXaWR0aDo1MCx5QXhpc0xhYmVsV2lkdGg6NTAseEF4aXNMYWJlbEZvcm1hdHRlcjpEeWdy
YXBoLmRhdGVBeGlzRm9ybWF0dGVyLHJpZ2h0R2FwOjUsc2hvd1JvbGxlcjpmYWxzZSx4VmFsdWVG
b3JtYXR0ZXI6RHlncmFwaC5kYXRlU3RyaW5nXyx4VmFsdWVQYXJzZXI6RHlncmFwaC5kYXRlUGFy
c2VyLHhUaWNrZXI6RHlncmFwaC5kYXRlVGlja2VyLGRlbGltaXRlcjoiLCIsbG9nU2NhbGU6ZmFs
c2Usc2lnbWE6MixlcnJvckJhcnM6ZmFsc2UsZnJhY3Rpb25zOmZhbHNlLHdpbHNvbkludGVydmFs
OnRydWUsY3VzdG9tQmFyczpmYWxzZSxmaWxsR3JhcGg6ZmFsc2UsZmlsbEFscGhhOjAuMTUsY29u
bmVjdFNlcGFyYXRlZFBvaW50czpmYWxzZSxzdGFja2VkR3JhcGg6ZmFsc2UsaGlkZU92ZXJsYXlP
bk1vdXNlT3V0OnRydWUsc3RlcFBsb3Q6ZmFsc2V9O0R5Z3JhcGguREVCVUc9MTtEeWdyYXBoLklO
Rk89MjtEeWdyYXBoLldBUk5JTkc9MztEeWdyYXBoLkVSUk9SPTM7RHlncmFwaC5hZGRlZEFubm90
YXRpb25DU1M9ZmFsc2U7RHlncmFwaC5wcm90b3R5cGUuX19vbGRfaW5pdF9fPWZ1bmN0aW9uKGYs
ZCxlLGIpe2lmKGUhPW51bGwpe3ZhciBhPVsiRGF0ZSJdO2Zvcih2YXIgYz0wO2M8ZS5sZW5ndGg7
YysrKXthLnB1c2goZVtjXSl9RHlncmFwaC51cGRhdGUoYix7bGFiZWxzOmF9KX10aGlzLl9faW5p
dF9fKGYsZCxiKX07RHlncmFwaC5wcm90b3R5cGUuX19pbml0X189ZnVuY3Rpb24oYyxiLGEpe2lm
KGE9PW51bGwpe2E9e319dGhpcy5tYWluZGl2Xz1jO3RoaXMuZmlsZV89Yjt0aGlzLnJvbGxQZXJp
b2RfPWEucm9sbFBlcmlvZHx8RHlncmFwaC5ERUZBVUxUX1JPTExfUEVSSU9EO3RoaXMucHJldmlv
dXNWZXJ0aWNhbFhfPS0xO3RoaXMuZnJhY3Rpb25zXz1hLmZyYWN0aW9uc3x8ZmFsc2U7dGhpcy5k
YXRlV2luZG93Xz1hLmRhdGVXaW5kb3d8fG51bGw7dGhpcy52YWx1ZVJhbmdlXz1hLnZhbHVlUmFu
Z2V8fG51bGw7dGhpcy53aWxzb25JbnRlcnZhbF89YS53aWxzb25JbnRlcnZhbHx8dHJ1ZTt0aGlz
LmlzX2luaXRpYWxfZHJhd189dHJ1ZTt0aGlzLmFubm90YXRpb25zXz1bXTtjLmlubmVySFRNTD0i
IjtpZihjLnN0eWxlLndpZHRoPT0iIil7Yy5zdHlsZS53aWR0aD1hLndpZHRofHxEeWdyYXBoLkRF
RkFVTFRfV0lEVEgrInB4In1pZihjLnN0eWxlLmhlaWdodD09IiIpe2Muc3R5bGUuaGVpZ2h0PWEu
aGVpZ2h0fHxEeWdyYXBoLkRFRkFVTFRfSEVJR0hUKyJweCJ9dGhpcy53aWR0aF89cGFyc2VJbnQo
Yy5zdHlsZS53aWR0aCwxMCk7dGhpcy5oZWlnaHRfPXBhcnNlSW50KGMuc3R5bGUuaGVpZ2h0LDEw
KTtpZihjLnN0eWxlLndpZHRoLmluZGV4T2YoIiUiKT09Yy5zdHlsZS53aWR0aC5sZW5ndGgtMSl7
dGhpcy53aWR0aF89Yy5vZmZzZXRXaWR0aH1pZihjLnN0eWxlLmhlaWdodC5pbmRleE9mKCIlIik9
PWMuc3R5bGUuaGVpZ2h0Lmxlbmd0aC0xKXt0aGlzLmhlaWdodF89Yy5vZmZzZXRIZWlnaHR9aWYo
dGhpcy53aWR0aF89PTApe3RoaXMuZXJyb3IoImR5Z3JhcGggaGFzIHplcm8gd2lkdGguIFBsZWFz
ZSBzcGVjaWZ5IGEgd2lkdGggaW4gcGl4ZWxzLiIpfWlmKHRoaXMuaGVpZ2h0Xz09MCl7dGhpcy5l
cnJvcigiZHlncmFwaCBoYXMgemVybyBoZWlnaHQuIFBsZWFzZSBzcGVjaWZ5IGEgaGVpZ2h0IGlu
IHBpeGVscy4iKX1pZihhLnN0YWNrZWRHcmFwaCl7YS5maWxsR3JhcGg9dHJ1ZX10aGlzLnVzZXJf
YXR0cnNfPXt9O0R5Z3JhcGgudXBkYXRlKHRoaXMudXNlcl9hdHRyc18sYSk7dGhpcy5hdHRyc189
e307RHlncmFwaC51cGRhdGUodGhpcy5hdHRyc18sRHlncmFwaC5ERUZBVUxUX0FUVFJTKTt0aGlz
LmJvdW5kYXJ5SWRzXz1bXTt0aGlzLmxhYmVsc0Zyb21DU1ZfPSh0aGlzLmF0dHJfKCJsYWJlbHMi
KT09bnVsbCk7RHlncmFwaC5hZGRBbm5vdGF0aW9uUnVsZSgpO3RoaXMuY3JlYXRlSW50ZXJmYWNl
XygpO3RoaXMuc3RhcnRfKCl9O0R5Z3JhcGgucHJvdG90eXBlLmF0dHJfPWZ1bmN0aW9uKGIsYSl7
aWYoYSYmdHlwZW9mKHRoaXMudXNlcl9hdHRyc19bYV0pIT0idW5kZWZpbmVkIiYmdGhpcy51c2Vy
X2F0dHJzX1thXSE9bnVsbCYmdHlwZW9mKHRoaXMudXNlcl9hdHRyc19bYV1bYl0pIT0idW5kZWZp
bmVkIil7cmV0dXJuIHRoaXMudXNlcl9hdHRyc19bYV1bYl19ZWxzZXtpZih0eXBlb2YodGhpcy51
c2VyX2F0dHJzX1tiXSkhPSJ1bmRlZmluZWQiKXtyZXR1cm4gdGhpcy51c2VyX2F0dHJzX1tiXX1l
bHNle2lmKHR5cGVvZih0aGlzLmF0dHJzX1tiXSkhPSJ1bmRlZmluZWQiKXtyZXR1cm4gdGhpcy5h
dHRyc19bYl19ZWxzZXtyZXR1cm4gbnVsbH19fX07RHlncmFwaC5wcm90b3R5cGUubG9nPWZ1bmN0
aW9uKGEsYil7aWYodHlwZW9mKGNvbnNvbGUpIT0idW5kZWZpbmVkIil7c3dpdGNoKGEpe2Nhc2Ug
RHlncmFwaC5ERUJVRzpjb25zb2xlLmRlYnVnKCJkeWdyYXBoczogIitiKTticmVhaztjYXNlIER5
Z3JhcGguSU5GTzpjb25zb2xlLmluZm8oImR5Z3JhcGhzOiAiK2IpO2JyZWFrO2Nhc2UgRHlncmFw
aC5XQVJOSU5HOmNvbnNvbGUud2FybigiZHlncmFwaHM6ICIrYik7YnJlYWs7Y2FzZSBEeWdyYXBo
LkVSUk9SOmNvbnNvbGUuZXJyb3IoImR5Z3JhcGhzOiAiK2IpO2JyZWFrfX19O0R5Z3JhcGgucHJv
dG90eXBlLmluZm89ZnVuY3Rpb24oYSl7dGhpcy5sb2coRHlncmFwaC5JTkZPLGEpfTtEeWdyYXBo
LnByb3RvdHlwZS53YXJuPWZ1bmN0aW9uKGEpe3RoaXMubG9nKER5Z3JhcGguV0FSTklORyxhKX07
RHlncmFwaC5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24oYSl7dGhpcy5sb2coRHlncmFwaC5FUlJP
UixhKX07RHlncmFwaC5wcm90b3R5cGUucm9sbFBlcmlvZD1mdW5jdGlvbigpe3JldHVybiB0aGlz
LnJvbGxQZXJpb2RffTtEeWdyYXBoLnByb3RvdHlwZS54QXhpc1JhbmdlPWZ1bmN0aW9uKCl7aWYo
dGhpcy5kYXRlV2luZG93Xyl7cmV0dXJuIHRoaXMuZGF0ZVdpbmRvd199dmFyIGI9dGhpcy5yYXdE
YXRhX1swXVswXTt2YXIgYT10aGlzLnJhd0RhdGFfW3RoaXMucmF3RGF0YV8ubGVuZ3RoLTFdWzBd
O3JldHVybltiLGFdfTtEeWdyYXBoLnByb3RvdHlwZS55QXhpc1JhbmdlPWZ1bmN0aW9uKCl7cmV0
dXJuIHRoaXMuZGlzcGxheWVkWVJhbmdlX307RHlncmFwaC5wcm90b3R5cGUudG9Eb21Db29yZHM9
ZnVuY3Rpb24oYixmKXt2YXIgYz1bbnVsbCxudWxsXTt2YXIgZD10aGlzLnBsb3R0ZXJfLmFyZWE7
aWYoYiE9PW51bGwpe3ZhciBhPXRoaXMueEF4aXNSYW5nZSgpO2NbMF09ZC54KyhiLWFbMF0pLyhh
WzFdLWFbMF0pKmQud31pZihmIT09bnVsbCl7dmFyIGU9dGhpcy55QXhpc1JhbmdlKCk7Y1sxXT1k
LnkrKGVbMV0tZikvKGVbMV0tZVswXSkqZC5ofXJldHVybiBjfTtEeWdyYXBoLnByb3RvdHlwZS50
b0RhdGFDb29yZHM9ZnVuY3Rpb24oYixmKXt2YXIgYz1bbnVsbCxudWxsXTt2YXIgZD10aGlzLnBs
b3R0ZXJfLmFyZWE7aWYoYiE9PW51bGwpe3ZhciBhPXRoaXMueEF4aXNSYW5nZSgpO2NbMF09YVsw
XSsoYi1kLngpL2QudyooYVsxXS1hWzBdKX1pZihmIT09bnVsbCl7dmFyIGU9dGhpcy55QXhpc1Jh
bmdlKCk7Y1sxXT1lWzBdKyhkLmgtZikvZC5oKihlWzFdLWVbMF0pfXJldHVybiBjfTtEeWdyYXBo
LnByb3RvdHlwZS5udW1Db2x1bW5zPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmF3RGF0YV9bMF0u
bGVuZ3RofTtEeWdyYXBoLnByb3RvdHlwZS5udW1Sb3dzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMu
cmF3RGF0YV8ubGVuZ3RofTtEeWdyYXBoLnByb3RvdHlwZS5nZXRWYWx1ZT1mdW5jdGlvbihiLGEp
e2lmKGI8MHx8Yj50aGlzLnJhd0RhdGFfLmxlbmd0aCl7cmV0dXJuIG51bGx9aWYoYTwwfHxhPnRo
aXMucmF3RGF0YV9bYl0ubGVuZ3RoKXtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5yYXdEYXRhX1ti
XVthXX07RHlncmFwaC5hZGRFdmVudD1mdW5jdGlvbihjLGEsYil7dmFyIGQ9ZnVuY3Rpb24oZil7
aWYoIWYpe3ZhciBmPXdpbmRvdy5ldmVudH1iKGYpfTtpZih3aW5kb3cuYWRkRXZlbnRMaXN0ZW5l
cil7Yy5hZGRFdmVudExpc3RlbmVyKGEsZCxmYWxzZSl9ZWxzZXtjLmF0dGFjaEV2ZW50KCJvbiIr
YSxkKX19O0R5Z3JhcGguY2xpcENhbnZhc189ZnVuY3Rpb24oYixjKXt2YXIgYT1iLmdldENvbnRl
eHQoIjJkIik7YS5iZWdpblBhdGgoKTthLnJlY3QoYy5sZWZ0LGMudG9wLGMud2lkdGgsYy5oZWln
aHQpO2EuY2xpcCgpfTtEeWdyYXBoLnByb3RvdHlwZS5jcmVhdGVJbnRlcmZhY2VfPWZ1bmN0aW9u
KCl7dmFyIGE9dGhpcy5tYWluZGl2Xzt0aGlzLmdyYXBoRGl2PWRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoImRpdiIpO3RoaXMuZ3JhcGhEaXYuc3R5bGUud2lkdGg9dGhpcy53aWR0aF8rInB4Ijt0aGlz
LmdyYXBoRGl2LnN0eWxlLmhlaWdodD10aGlzLmhlaWdodF8rInB4IjthLmFwcGVuZENoaWxkKHRo
aXMuZ3JhcGhEaXYpO3ZhciBjPXt0b3A6MCxsZWZ0OnRoaXMuYXR0cl8oInlBeGlzTGFiZWxXaWR0
aCIpKzIqdGhpcy5hdHRyXygiYXhpc1RpY2tTaXplIil9O2Mud2lkdGg9dGhpcy53aWR0aF8tYy5s
ZWZ0LXRoaXMuYXR0cl8oInJpZ2h0R2FwIik7Yy5oZWlnaHQ9dGhpcy5oZWlnaHRfLXRoaXMuYXR0
cl8oImF4aXNMYWJlbEZvbnRTaXplIiktMip0aGlzLmF0dHJfKCJheGlzVGlja1NpemUiKTt0aGlz
LmNsaXBwaW5nQXJlYV89Yzt0aGlzLmNhbnZhc189RHlncmFwaC5jcmVhdGVDYW52YXMoKTt0aGlz
LmNhbnZhc18uc3R5bGUucG9zaXRpb249ImFic29sdXRlIjt0aGlzLmNhbnZhc18ud2lkdGg9dGhp
cy53aWR0aF87dGhpcy5jYW52YXNfLmhlaWdodD10aGlzLmhlaWdodF87dGhpcy5jYW52YXNfLnN0
eWxlLndpZHRoPXRoaXMud2lkdGhfKyJweCI7dGhpcy5jYW52YXNfLnN0eWxlLmhlaWdodD10aGlz
LmhlaWdodF8rInB4Ijt0aGlzLmhpZGRlbl89dGhpcy5jcmVhdGVQbG90S2l0Q2FudmFzXyh0aGlz
LmNhbnZhc18pO3RoaXMuZ3JhcGhEaXYuYXBwZW5kQ2hpbGQodGhpcy5oaWRkZW5fKTt0aGlzLmdy
YXBoRGl2LmFwcGVuZENoaWxkKHRoaXMuY2FudmFzXyk7dGhpcy5tb3VzZUV2ZW50RWxlbWVudF89
dGhpcy5jYW52YXNfO0R5Z3JhcGguY2xpcENhbnZhc18odGhpcy5oaWRkZW5fLHRoaXMuY2xpcHBp
bmdBcmVhXyk7RHlncmFwaC5jbGlwQ2FudmFzXyh0aGlzLmNhbnZhc18sdGhpcy5jbGlwcGluZ0Fy
ZWFfKTt2YXIgYj10aGlzO0R5Z3JhcGguYWRkRXZlbnQodGhpcy5tb3VzZUV2ZW50RWxlbWVudF8s
Im1vdXNlbW92ZSIsZnVuY3Rpb24oZCl7Yi5tb3VzZU1vdmVfKGQpfSk7RHlncmFwaC5hZGRFdmVu
dCh0aGlzLm1vdXNlRXZlbnRFbGVtZW50XywibW91c2VvdXQiLGZ1bmN0aW9uKGQpe2IubW91c2VP
dXRfKGQpfSk7dGhpcy5sYXlvdXRPcHRpb25zXz17eE9yaWdpbklzWmVybzpmYWxzZX07RHlncmFw
aC51cGRhdGUodGhpcy5sYXlvdXRPcHRpb25zXyx0aGlzLmF0dHJzXyk7RHlncmFwaC51cGRhdGUo
dGhpcy5sYXlvdXRPcHRpb25zXyx0aGlzLnVzZXJfYXR0cnNfKTtEeWdyYXBoLnVwZGF0ZSh0aGlz
LmxheW91dE9wdGlvbnNfLHtlcnJvckJhcnM6KHRoaXMuYXR0cl8oImVycm9yQmFycyIpfHx0aGlz
LmF0dHJfKCJjdXN0b21CYXJzIikpfSk7dGhpcy5sYXlvdXRfPW5ldyBEeWdyYXBoTGF5b3V0KHRo
aXMsdGhpcy5sYXlvdXRPcHRpb25zXyk7dGhpcy5yZW5kZXJPcHRpb25zXz17Y29sb3JTY2hlbWU6
dGhpcy5jb2xvcnNfLHN0cm9rZUNvbG9yOm51bGwsYXhpc0xpbmVXaWR0aDpEeWdyYXBoLkFYSVNf
TElORV9XSURUSH07RHlncmFwaC51cGRhdGUodGhpcy5yZW5kZXJPcHRpb25zXyx0aGlzLmF0dHJz
Xyk7RHlncmFwaC51cGRhdGUodGhpcy5yZW5kZXJPcHRpb25zXyx0aGlzLnVzZXJfYXR0cnNfKTt0
aGlzLnBsb3R0ZXJfPW5ldyBEeWdyYXBoQ2FudmFzUmVuZGVyZXIodGhpcyx0aGlzLmhpZGRlbl8s
dGhpcy5sYXlvdXRfLHRoaXMucmVuZGVyT3B0aW9uc18pO3RoaXMuY3JlYXRlU3RhdHVzTWVzc2Fn
ZV8oKTt0aGlzLmNyZWF0ZVJvbGxJbnRlcmZhY2VfKCk7dGhpcy5jcmVhdGVEcmFnSW50ZXJmYWNl
XygpfTtEeWdyYXBoLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dmFyIGE9ZnVuY3Rpb24o
Yyl7d2hpbGUoYy5oYXNDaGlsZE5vZGVzKCkpe2EoYy5maXJzdENoaWxkKTtjLnJlbW92ZUNoaWxk
KGMuZmlyc3RDaGlsZCl9fTthKHRoaXMubWFpbmRpdl8pO3ZhciBiPWZ1bmN0aW9uKGMpe2Zvcih2
YXIgZCBpbiBjKXtpZih0eXBlb2YoY1tkXSk9PT0ib2JqZWN0Iil7Y1tkXT1udWxsfX19O2IodGhp
cy5sYXlvdXRfKTtiKHRoaXMucGxvdHRlcl8pO2IodGhpcyl9O0R5Z3JhcGgucHJvdG90eXBlLmNy
ZWF0ZVBsb3RLaXRDYW52YXNfPWZ1bmN0aW9uKGEpe3ZhciBiPUR5Z3JhcGguY3JlYXRlQ2FudmFz
KCk7Yi5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiO2Iuc3R5bGUudG9wPWEuc3R5bGUudG9wO2Iu
c3R5bGUubGVmdD1hLnN0eWxlLmxlZnQ7Yi53aWR0aD10aGlzLndpZHRoXztiLmhlaWdodD10aGlz
LmhlaWdodF87Yi5zdHlsZS53aWR0aD10aGlzLndpZHRoXysicHgiO2Iuc3R5bGUuaGVpZ2h0PXRo
aXMuaGVpZ2h0XysicHgiO3JldHVybiBifTtEeWdyYXBoLmhzdlRvUkdCPWZ1bmN0aW9uKGgsZyxr
KXt2YXIgYzt2YXIgZDt2YXIgbDtpZihnPT09MCl7Yz1rO2Q9aztsPWt9ZWxzZXt2YXIgZT1NYXRo
LmZsb29yKGgqNik7dmFyIGo9KGgqNiktZTt2YXIgYj1rKigxLWcpO3ZhciBhPWsqKDEtKGcqaikp
O3ZhciBtPWsqKDEtKGcqKDEtaikpKTtzd2l0Y2goZSl7Y2FzZSAxOmM9YTtkPWs7bD1iO2JyZWFr
O2Nhc2UgMjpjPWI7ZD1rO2w9bTticmVhaztjYXNlIDM6Yz1iO2Q9YTtsPWs7YnJlYWs7Y2FzZSA0
OmM9bTtkPWI7bD1rO2JyZWFrO2Nhc2UgNTpjPWs7ZD1iO2w9YTticmVhaztjYXNlIDY6Y2FzZSAw
OmM9aztkPW07bD1iO2JyZWFrfX1jPU1hdGguZmxvb3IoMjU1KmMrMC41KTtkPU1hdGguZmxvb3Io
MjU1KmQrMC41KTtsPU1hdGguZmxvb3IoMjU1KmwrMC41KTtyZXR1cm4icmdiKCIrYysiLCIrZCsi
LCIrbCsiKSJ9O0R5Z3JhcGgucHJvdG90eXBlLnNldENvbG9yc189ZnVuY3Rpb24oKXt2YXIgZT10
aGlzLmF0dHJfKCJsYWJlbHMiKS5sZW5ndGgtMTt0aGlzLmNvbG9yc189W107dmFyIGE9dGhpcy5h
dHRyXygiY29sb3JzIik7aWYoIWEpe3ZhciBjPXRoaXMuYXR0cl8oImNvbG9yU2F0dXJhdGlvbiIp
fHwxO3ZhciBiPXRoaXMuYXR0cl8oImNvbG9yVmFsdWUiKXx8MC41O3ZhciBqPU1hdGguY2VpbChl
LzIpO2Zvcih2YXIgZD0xO2Q8PWU7ZCsrKXtpZighdGhpcy52aXNpYmlsaXR5KClbZC0xXSl7Y29u
dGludWV9dmFyIGc9ZCUyP01hdGguY2VpbChkLzIpOihqK2QvMik7dmFyIGY9KDEqZy8oMStlKSk7
dGhpcy5jb2xvcnNfLnB1c2goRHlncmFwaC5oc3ZUb1JHQihmLGMsYikpfX1lbHNle2Zvcih2YXIg
ZD0wO2Q8ZTtkKyspe2lmKCF0aGlzLnZpc2liaWxpdHkoKVtkXSl7Y29udGludWV9dmFyIGg9YVtk
JWEubGVuZ3RoXTt0aGlzLmNvbG9yc18ucHVzaChoKX19dGhpcy5yZW5kZXJPcHRpb25zXy5jb2xv
clNjaGVtZT10aGlzLmNvbG9yc187RHlncmFwaC51cGRhdGUodGhpcy5wbG90dGVyXy5vcHRpb25z
LHRoaXMucmVuZGVyT3B0aW9uc18pO0R5Z3JhcGgudXBkYXRlKHRoaXMubGF5b3V0T3B0aW9uc18s
dGhpcy51c2VyX2F0dHJzXyk7RHlncmFwaC51cGRhdGUodGhpcy5sYXlvdXRPcHRpb25zXyx0aGlz
LmF0dHJzXyl9O0R5Z3JhcGgucHJvdG90eXBlLmdldENvbG9ycz1mdW5jdGlvbigpe3JldHVybiB0
aGlzLmNvbG9yc199O0R5Z3JhcGguZmluZFBvc1g9ZnVuY3Rpb24oYSl7dmFyIGI9MDtpZihhLm9m
ZnNldFBhcmVudCl7d2hpbGUoMSl7Yis9YS5vZmZzZXRMZWZ0O2lmKCFhLm9mZnNldFBhcmVudCl7
YnJlYWt9YT1hLm9mZnNldFBhcmVudH19ZWxzZXtpZihhLngpe2IrPWEueH19cmV0dXJuIGJ9O0R5
Z3JhcGguZmluZFBvc1k9ZnVuY3Rpb24oYil7dmFyIGE9MDtpZihiLm9mZnNldFBhcmVudCl7d2hp
bGUoMSl7YSs9Yi5vZmZzZXRUb3A7aWYoIWIub2Zmc2V0UGFyZW50KXticmVha31iPWIub2Zmc2V0
UGFyZW50fX1lbHNle2lmKGIueSl7YSs9Yi55fX1yZXR1cm4gYX07RHlncmFwaC5wcm90b3R5cGUu
Y3JlYXRlU3RhdHVzTWVzc2FnZV89ZnVuY3Rpb24oKXt2YXIgZD10aGlzLnVzZXJfYXR0cnNfLmxh
YmVsc0RpdjtpZihkJiZudWxsIT1kJiYodHlwZW9mKGQpPT0ic3RyaW5nInx8ZCBpbnN0YW5jZW9m
IFN0cmluZykpe3RoaXMudXNlcl9hdHRyc18ubGFiZWxzRGl2PWRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKGQpfWlmKCF0aGlzLmF0dHJfKCJsYWJlbHNEaXYiKSl7dmFyIGE9dGhpcy5hdHRyXygibGFi
ZWxzRGl2V2lkdGgiKTt2YXIgYz17cG9zaXRpb246ImFic29sdXRlIixmb250U2l6ZToiMTRweCIs
ekluZGV4OjEwLHdpZHRoOmErInB4Iix0b3A6IjBweCIsbGVmdDoodGhpcy53aWR0aF8tYS0yKSsi
cHgiLGJhY2tncm91bmQ6IndoaXRlIix0ZXh0QWxpZ246ImxlZnQiLG92ZXJmbG93OiJoaWRkZW4i
fTtEeWdyYXBoLnVwZGF0ZShjLHRoaXMuYXR0cl8oImxhYmVsc0RpdlN0eWxlcyIpKTt2YXIgZT1k
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtmb3IodmFyIGIgaW4gYyl7aWYoYy5oYXNPd25Q
cm9wZXJ0eShiKSl7ZS5zdHlsZVtiXT1jW2JdfX10aGlzLmdyYXBoRGl2LmFwcGVuZENoaWxkKGUp
O3RoaXMuYXR0cnNfLmxhYmVsc0Rpdj1lfX07RHlncmFwaC5wcm90b3R5cGUuY3JlYXRlUm9sbElu
dGVyZmFjZV89ZnVuY3Rpb24oKXt2YXIgZj10aGlzLmF0dHJfKCJzaG93Um9sbGVyIik/ImJsb2Nr
Ijoibm9uZSI7dmFyIGI9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsekluZGV4OjEwLHRvcDoodGhpcy5w
bG90dGVyXy5hcmVhLmgtMjUpKyJweCIsbGVmdDoodGhpcy5wbG90dGVyXy5hcmVhLngrMSkrInB4
IixkaXNwbGF5OmZ9O3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7ZS50eXBl
PSJ0ZXh0IjtlLnNpemU9IjIiO2UudmFsdWU9dGhpcy5yb2xsUGVyaW9kXztmb3IodmFyIGEgaW4g
Yil7aWYoYi5oYXNPd25Qcm9wZXJ0eShhKSl7ZS5zdHlsZVthXT1iW2FdfX12YXIgZD10aGlzLmdy
YXBoRGl2O2QuYXBwZW5kQ2hpbGQoZSk7dmFyIGM9dGhpcztlLm9uY2hhbmdlPWZ1bmN0aW9uKCl7
Yy5hZGp1c3RSb2xsKGUudmFsdWUpfTtyZXR1cm4gZX07RHlncmFwaC5wYWdlWD1mdW5jdGlvbihj
KXtpZihjLnBhZ2VYKXtyZXR1cm4oIWMucGFnZVh8fGMucGFnZVg8MCk/MDpjLnBhZ2VYfWVsc2V7
dmFyIGQ9ZG9jdW1lbnQ7dmFyIGE9ZG9jdW1lbnQuYm9keTtyZXR1cm4gYy5jbGllbnRYKyhkLnNj
cm9sbExlZnR8fGEuc2Nyb2xsTGVmdCktKGQuY2xpZW50TGVmdHx8MCl9fTtEeWdyYXBoLnBhZ2VZ
PWZ1bmN0aW9uKGMpe2lmKGMucGFnZVkpe3JldHVybighYy5wYWdlWXx8Yy5wYWdlWTwwKT8wOmMu
cGFnZVl9ZWxzZXt2YXIgZD1kb2N1bWVudDt2YXIgYT1kb2N1bWVudC5ib2R5O3JldHVybiBjLmNs
aWVudFkrKGQuc2Nyb2xsVG9wfHxhLnNjcm9sbFRvcCktKGQuY2xpZW50VG9wfHwwKX19O0R5Z3Jh
cGgucHJvdG90eXBlLmNyZWF0ZURyYWdJbnRlcmZhY2VfPWZ1bmN0aW9uKCl7dmFyIG89dGhpczt2
YXIgYz1mYWxzZTt2YXIgZT1mYWxzZTt2YXIgYj1udWxsO3ZhciBhPW51bGw7dmFyIG49bnVsbDt2
YXIgbD1udWxsO3ZhciBmPW51bGw7dmFyIG09bnVsbDt2YXIgaz1udWxsO3ZhciBnPTA7dmFyIGQ9
MDt2YXIgaj1mdW5jdGlvbihwKXtyZXR1cm4gRHlncmFwaC5wYWdlWChwKS1nfTt2YXIgaD1mdW5j
dGlvbihwKXtyZXR1cm4gRHlncmFwaC5wYWdlWShwKS1kfTtEeWdyYXBoLmFkZEV2ZW50KHRoaXMu
bW91c2VFdmVudEVsZW1lbnRfLCJtb3VzZW1vdmUiLGZ1bmN0aW9uKHApe2lmKGMpe249aihwKTts
PWgocCk7by5kcmF3Wm9vbVJlY3RfKGIsbixmKTtmPW59ZWxzZXtpZihlKXtuPWoocCk7bD1oKHAp
O28uZGF0ZVdpbmRvd19bMF09bS0obi9vLndpZHRoXykqaztvLmRhdGVXaW5kb3dfWzFdPW8uZGF0
ZVdpbmRvd19bMF0raztvLmRyYXdHcmFwaF8oby5yYXdEYXRhXyl9fX0pO0R5Z3JhcGguYWRkRXZl
bnQodGhpcy5tb3VzZUV2ZW50RWxlbWVudF8sIm1vdXNlZG93biIsZnVuY3Rpb24ocCl7Zz1EeWdy
YXBoLmZpbmRQb3NYKG8uY2FudmFzXyk7ZD1EeWdyYXBoLmZpbmRQb3NZKG8uY2FudmFzXyk7Yj1q
KHApO2E9aChwKTtpZihwLmFsdEtleXx8cC5zaGlmdEtleSl7aWYoIW8uZGF0ZVdpbmRvd18pe3Jl
dHVybn1lPXRydWU7az1vLmRhdGVXaW5kb3dfWzFdLW8uZGF0ZVdpbmRvd19bMF07bT0oYi9vLndp
ZHRoXykqaytvLmRhdGVXaW5kb3dfWzBdfWVsc2V7Yz10cnVlfX0pO0R5Z3JhcGguYWRkRXZlbnQo
ZG9jdW1lbnQsIm1vdXNldXAiLGZ1bmN0aW9uKHApe2lmKGN8fGUpe2M9ZmFsc2U7Yj1udWxsO2E9
bnVsbH1pZihlKXtlPWZhbHNlO209bnVsbDtrPW51bGx9fSk7RHlncmFwaC5hZGRFdmVudCh0aGlz
Lm1vdXNlRXZlbnRFbGVtZW50XywibW91c2VvdXQiLGZ1bmN0aW9uKHApe2lmKGMpe249bnVsbDts
PW51bGx9fSk7RHlncmFwaC5hZGRFdmVudCh0aGlzLm1vdXNlRXZlbnRFbGVtZW50XywibW91c2V1
cCIsZnVuY3Rpb24ocil7aWYoYyl7Yz1mYWxzZTtuPWoocik7bD1oKHIpO3ZhciB1PU1hdGguYWJz
KG4tYik7dmFyIHM9TWF0aC5hYnMobC1hKTtpZih1PDImJnM8MiYmby5sYXN0eF8hPXVuZGVmaW5l
ZCYmby5sYXN0eF8hPS0xKXtpZihvLmF0dHJfKCJjbGlja0NhbGxiYWNrIikhPW51bGwpe28uYXR0
cl8oImNsaWNrQ2FsbGJhY2siKShyLG8ubGFzdHhfLG8uc2VsUG9pbnRzXyl9aWYoby5hdHRyXygi
cG9pbnRDbGlja0NhbGxiYWNrIikpe3ZhciB4PS0xO3ZhciB5PTA7Zm9yKHZhciB2PTA7djxvLnNl
bFBvaW50c18ubGVuZ3RoO3YrKyl7dmFyIHQ9by5zZWxQb2ludHNfW3ZdO3ZhciBxPU1hdGgucG93
KHQuY2FudmFzeC1uLDIpK01hdGgucG93KHQuY2FudmFzeS1sLDIpO2lmKHg9PS0xfHxxPHkpe3k9
cTt4PXZ9fXZhciB3PW8uYXR0cl8oImhpZ2hsaWdodENpcmNsZVNpemUiKSsyO2lmKHk8PTUqNSl7
by5hdHRyXygicG9pbnRDbGlja0NhbGxiYWNrIikocixvLnNlbFBvaW50c19beF0pfX19aWYodT49
MTApe28uZG9ab29tXyhNYXRoLm1pbihiLG4pLE1hdGgubWF4KGIsbikpfWVsc2V7by5jYW52YXNf
LmdldENvbnRleHQoIjJkIikuY2xlYXJSZWN0KDAsMCxvLmNhbnZhc18ud2lkdGgsby5jYW52YXNf
LmhlaWdodCl9Yj1udWxsO2E9bnVsbH1pZihlKXtlPWZhbHNlO209bnVsbDtrPW51bGx9fSk7RHln
cmFwaC5hZGRFdmVudCh0aGlzLm1vdXNlRXZlbnRFbGVtZW50XywiZGJsY2xpY2siLGZ1bmN0aW9u
KHApe2lmKG8uZGF0ZVdpbmRvd189PW51bGwpe3JldHVybn1vLmRhdGVXaW5kb3dfPW51bGw7by5k
cmF3R3JhcGhfKG8ucmF3RGF0YV8pO3ZhciBxPW8ucmF3RGF0YV9bMF1bMF07dmFyIHI9by5yYXdE
YXRhX1tvLnJhd0RhdGFfLmxlbmd0aC0xXVswXTtpZihvLmF0dHJfKCJ6b29tQ2FsbGJhY2siKSl7
by5hdHRyXygiem9vbUNhbGxiYWNrIikocSxyKX19KX07RHlncmFwaC5wcm90b3R5cGUuZHJhd1pv
b21SZWN0Xz1mdW5jdGlvbihjLGQsYil7dmFyIGE9dGhpcy5jYW52YXNfLmdldENvbnRleHQoIjJk
Iik7aWYoYil7YS5jbGVhclJlY3QoTWF0aC5taW4oYyxiKSwwLE1hdGguYWJzKGMtYiksdGhpcy5o
ZWlnaHRfKX1pZihkJiZjKXthLmZpbGxTdHlsZT0icmdiYSgxMjgsMTI4LDEyOCwwLjMzKSI7YS5m
aWxsUmVjdChNYXRoLm1pbihjLGQpLDAsTWF0aC5hYnMoZC1jKSx0aGlzLmhlaWdodF8pfX07RHln
cmFwaC5wcm90b3R5cGUuZG9ab29tXz1mdW5jdGlvbihkLGEpe3ZhciBiPXRoaXMudG9EYXRhQ29v
cmRzKGQsbnVsbCk7dmFyIGM9YlswXTtiPXRoaXMudG9EYXRhQ29vcmRzKGEsbnVsbCk7dmFyIGU9
YlswXTt0aGlzLmRhdGVXaW5kb3dfPVtjLGVdO3RoaXMuZHJhd0dyYXBoXyh0aGlzLnJhd0RhdGFf
KTtpZih0aGlzLmF0dHJfKCJ6b29tQ2FsbGJhY2siKSl7dGhpcy5hdHRyXygiem9vbUNhbGxiYWNr
IikoYyxlKX19O0R5Z3JhcGgucHJvdG90eXBlLm1vdXNlTW92ZV89ZnVuY3Rpb24oYil7dmFyIGE9
RHlncmFwaC5wYWdlWChiKS1EeWdyYXBoLmZpbmRQb3NYKHRoaXMubW91c2VFdmVudEVsZW1lbnRf
KTt2YXIgcj10aGlzLmxheW91dF8ucG9pbnRzO3ZhciBtPS0xO3ZhciBqPS0xO3ZhciBvPTFlKzEw
MDt2YXIgcT0tMTtmb3IodmFyIGY9MDtmPHIubGVuZ3RoO2YrKyl7dmFyIGg9TWF0aC5hYnMocltm
XS5jYW52YXN4LWEpO2lmKGg+byl7Y29udGludWV9bz1oO3E9Zn1pZihxPj0wKXttPXJbcV0ueHZh
bH1pZihhPnJbci5sZW5ndGgtMV0uY2FudmFzeCl7bT1yW3IubGVuZ3RoLTFdLnh2YWx9dGhpcy5z
ZWxQb2ludHNfPVtdO3ZhciBkPXIubGVuZ3RoO2lmKCF0aGlzLmF0dHJfKCJzdGFja2VkR3JhcGgi
KSl7Zm9yKHZhciBmPTA7ZjxkO2YrKyl7aWYocltmXS54dmFsPT1tKXt0aGlzLnNlbFBvaW50c18u
cHVzaChyW2ZdKX19fWVsc2V7dmFyIGc9MDtmb3IodmFyIGY9ZC0xO2Y+PTA7Zi0tKXtpZihyW2Zd
Lnh2YWw9PW0pe3ZhciBjPXt9O2Zvcih2YXIgZSBpbiByW2ZdKXtjW2VdPXJbZl1bZV19Yy55dmFs
LT1nO2crPWMueXZhbDt0aGlzLnNlbFBvaW50c18ucHVzaChjKX19dGhpcy5zZWxQb2ludHNfLnJl
dmVyc2UoKX1pZih0aGlzLmF0dHJfKCJoaWdobGlnaHRDYWxsYmFjayIpKXt2YXIgbj10aGlzLmxh
c3R4XztpZihuIT09bnVsbCYmbSE9bil7dGhpcy5hdHRyXygiaGlnaGxpZ2h0Q2FsbGJhY2siKShi
LG0sdGhpcy5zZWxQb2ludHNfKX19dGhpcy5sYXN0eF89bTt0aGlzLnVwZGF0ZVNlbGVjdGlvbl8o
KX07RHlncmFwaC5wcm90b3R5cGUudXBkYXRlU2VsZWN0aW9uXz1mdW5jdGlvbigpe3ZhciBxPXRo
aXMuY2FudmFzXy5nZXRDb250ZXh0KCIyZCIpO2lmKHRoaXMucHJldmlvdXNWZXJ0aWNhbFhfPj0w
KXt2YXIgaD0wO3ZhciBqPXRoaXMuYXR0cl8oImxhYmVscyIpO2Zvcih2YXIgZz0xO2c8ai5sZW5n
dGg7ZysrKXt2YXIgYj10aGlzLmF0dHJfKCJoaWdobGlnaHRDaXJjbGVTaXplIixqW2ddKTtpZihi
Pmgpe2g9Yn19dmFyIG89dGhpcy5wcmV2aW91c1ZlcnRpY2FsWF87cS5jbGVhclJlY3Qoby1oLTEs
MCwyKmgrMix0aGlzLmhlaWdodF8pfXZhciBwPWZ1bmN0aW9uKGMpe3JldHVybiBjJiYhaXNOYU4o
Yyl9O2lmKHRoaXMuc2VsUG9pbnRzXy5sZW5ndGg+MCl7dmFyIGQ9dGhpcy5zZWxQb2ludHNfWzBd
LmNhbnZhc3g7dmFyIGU9dGhpcy5hdHRyXygieFZhbHVlRm9ybWF0dGVyIikodGhpcy5sYXN0eF8s
dGhpcykrIjoiO3ZhciBmPXRoaXMuYXR0cl8oInlWYWx1ZUZvcm1hdHRlciIpO3ZhciBtPXRoaXMu
Y29sb3JzXy5sZW5ndGg7aWYodGhpcy5hdHRyXygic2hvd0xhYmVsc09uSGlnaGxpZ2h0Iikpe2Zv
cih2YXIgZz0wO2c8dGhpcy5zZWxQb2ludHNfLmxlbmd0aDtnKyspe2lmKCF0aGlzLmF0dHJfKCJs
YWJlbHNTaG93WmVyb1ZhbHVlcyIpJiZ0aGlzLnNlbFBvaW50c19bZ10ueXZhbD09MCl7Y29udGlu
dWV9aWYoIXAodGhpcy5zZWxQb2ludHNfW2ddLmNhbnZhc3kpKXtjb250aW51ZX1pZih0aGlzLmF0
dHJfKCJsYWJlbHNTZXBhcmF0ZUxpbmVzIikpe2UrPSI8YnIvPiJ9dmFyIG49dGhpcy5zZWxQb2lu
dHNfW2ddO3ZhciBsPW5ldyBSR0JDb2xvcih0aGlzLmNvbG9yc19bZyVtXSk7dmFyIGs9ZihuLnl2
YWwpO2UrPSIgPGI+PGZvbnQgY29sb3I9JyIrbC50b0hleCgpKyInPiIrbi5uYW1lKyI8L2ZvbnQ+
PC9iPjoiK2t9dGhpcy5hdHRyXygibGFiZWxzRGl2IikuaW5uZXJIVE1MPWV9cS5zYXZlKCk7Zm9y
KHZhciBnPTA7Zzx0aGlzLnNlbFBvaW50c18ubGVuZ3RoO2crKyl7aWYoIXAodGhpcy5zZWxQb2lu
dHNfW2ddLmNhbnZhc3kpKXtjb250aW51ZX12YXIgYT10aGlzLmF0dHJfKCJoaWdobGlnaHRDaXJj
bGVTaXplIix0aGlzLnNlbFBvaW50c19bZ10ubmFtZSk7cS5iZWdpblBhdGgoKTtxLmZpbGxTdHls
ZT10aGlzLnBsb3R0ZXJfLmNvbG9yc1t0aGlzLnNlbFBvaW50c19bZ10ubmFtZV07cS5hcmMoZCx0
aGlzLnNlbFBvaW50c19bZ10uY2FudmFzeSxhLDAsMipNYXRoLlBJLGZhbHNlKTtxLmZpbGwoKX1x
LnJlc3RvcmUoKTt0aGlzLnByZXZpb3VzVmVydGljYWxYXz1kfX07RHlncmFwaC5wcm90b3R5cGUu
c2V0U2VsZWN0aW9uPWZ1bmN0aW9uKGIpe3RoaXMuc2VsUG9pbnRzXz1bXTt2YXIgYz0wO2lmKGIh
PT1mYWxzZSl7Yj1iLXRoaXMuYm91bmRhcnlJZHNfWzBdWzBdfWlmKGIhPT1mYWxzZSYmYj49MCl7
Zm9yKHZhciBhIGluIHRoaXMubGF5b3V0Xy5kYXRhc2V0cyl7aWYoYjx0aGlzLmxheW91dF8uZGF0
YXNldHNbYV0ubGVuZ3RoKXt0aGlzLnNlbFBvaW50c18ucHVzaCh0aGlzLmxheW91dF8ucG9pbnRz
W2MrYl0pfWMrPXRoaXMubGF5b3V0Xy5kYXRhc2V0c1thXS5sZW5ndGh9fWlmKHRoaXMuc2VsUG9p
bnRzXy5sZW5ndGgpe3RoaXMubGFzdHhfPXRoaXMuc2VsUG9pbnRzX1swXS54dmFsO3RoaXMudXBk
YXRlU2VsZWN0aW9uXygpfWVsc2V7dGhpcy5sYXN0eF89LTE7dGhpcy5jbGVhclNlbGVjdGlvbigp
fX07RHlncmFwaC5wcm90b3R5cGUubW91c2VPdXRfPWZ1bmN0aW9uKGEpe2lmKHRoaXMuYXR0cl8o
InVuaGlnaGxpZ2h0Q2FsbGJhY2siKSl7dGhpcy5hdHRyXygidW5oaWdobGlnaHRDYWxsYmFjayIp
KGEpfWlmKHRoaXMuYXR0cl8oImhpZGVPdmVybGF5T25Nb3VzZU91dCIpKXt0aGlzLmNsZWFyU2Vs
ZWN0aW9uKCl9fTtEeWdyYXBoLnByb3RvdHlwZS5jbGVhclNlbGVjdGlvbj1mdW5jdGlvbigpe3Zh
ciBhPXRoaXMuY2FudmFzXy5nZXRDb250ZXh0KCIyZCIpO2EuY2xlYXJSZWN0KDAsMCx0aGlzLndp
ZHRoXyx0aGlzLmhlaWdodF8pO3RoaXMuYXR0cl8oImxhYmVsc0RpdiIpLmlubmVySFRNTD0iIjt0
aGlzLnNlbFBvaW50c189W107dGhpcy5sYXN0eF89LTF9O0R5Z3JhcGgucHJvdG90eXBlLmdldFNl
bGVjdGlvbj1mdW5jdGlvbigpe2lmKCF0aGlzLnNlbFBvaW50c198fHRoaXMuc2VsUG9pbnRzXy5s
ZW5ndGg8MSl7cmV0dXJuIC0xfWZvcih2YXIgYT0wO2E8dGhpcy5sYXlvdXRfLnBvaW50cy5sZW5n
dGg7YSsrKXtpZih0aGlzLmxheW91dF8ucG9pbnRzW2FdLng9PXRoaXMuc2VsUG9pbnRzX1swXS54
KXtyZXR1cm4gYSt0aGlzLmJvdW5kYXJ5SWRzX1swXVswXX19cmV0dXJuIC0xfTtEeWdyYXBoLnpl
cm9wYWQ9ZnVuY3Rpb24oYSl7aWYoYTwxMCl7cmV0dXJuIjAiK2F9ZWxzZXtyZXR1cm4iIithfX07
RHlncmFwaC5obXNTdHJpbmdfPWZ1bmN0aW9uKGEpe3ZhciBjPUR5Z3JhcGguemVyb3BhZDt2YXIg
Yj1uZXcgRGF0ZShhKTtpZihiLmdldFNlY29uZHMoKSl7cmV0dXJuIGMoYi5nZXRIb3VycygpKSsi
OiIrYyhiLmdldE1pbnV0ZXMoKSkrIjoiK2MoYi5nZXRTZWNvbmRzKCkpfWVsc2V7cmV0dXJuIGMo
Yi5nZXRIb3VycygpKSsiOiIrYyhiLmdldE1pbnV0ZXMoKSl9fTtEeWdyYXBoLmRhdGVBeGlzRm9y
bWF0dGVyPWZ1bmN0aW9uKGIsYyl7aWYoYz49RHlncmFwaC5NT05USExZKXtyZXR1cm4gYi5zdHJm
dGltZSgiJWIgJXkiKX1lbHNle3ZhciBhPWIuZ2V0SG91cnMoKSozNjAwK2IuZ2V0TWludXRlcygp
KjYwK2IuZ2V0U2Vjb25kcygpK2IuZ2V0TWlsbGlzZWNvbmRzKCk7aWYoYT09MHx8Yz49RHlncmFw
aC5EQUlMWSl7cmV0dXJuIG5ldyBEYXRlKGIuZ2V0VGltZSgpKzM2MDAqMTAwMCkuc3RyZnRpbWUo
IiVkJWIiKX1lbHNle3JldHVybiBEeWdyYXBoLmhtc1N0cmluZ18oYi5nZXRUaW1lKCkpfX19O0R5
Z3JhcGguZGF0ZVN0cmluZ189ZnVuY3Rpb24oYixrKXt2YXIgYz1EeWdyYXBoLnplcm9wYWQ7dmFy
IGc9bmV3IERhdGUoYik7dmFyIGg9IiIrZy5nZXRGdWxsWWVhcigpO3ZhciBlPWMoZy5nZXRNb250
aCgpKzEpO3ZhciBqPWMoZy5nZXREYXRlKCkpO3ZhciBmPSIiO3ZhciBhPWcuZ2V0SG91cnMoKSoz
NjAwK2cuZ2V0TWludXRlcygpKjYwK2cuZ2V0U2Vjb25kcygpO2lmKGEpe2Y9IiAiK0R5Z3JhcGgu
aG1zU3RyaW5nXyhiKX1yZXR1cm4gaCsiLyIrZSsiLyIraitmfTtEeWdyYXBoLnJvdW5kXz1mdW5j
dGlvbihjLGIpe3ZhciBhPU1hdGgucG93KDEwLGIpO3JldHVybiBNYXRoLnJvdW5kKGMqYSkvYX07
RHlncmFwaC5wcm90b3R5cGUubG9hZGVkRXZlbnRfPWZ1bmN0aW9uKGEpe3RoaXMucmF3RGF0YV89
dGhpcy5wYXJzZUNTVl8oYSk7dGhpcy5kcmF3R3JhcGhfKHRoaXMucmF3RGF0YV8pfTtEeWdyYXBo
LnByb3RvdHlwZS5tb250aHM9WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJK
dWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXTtEeWdyYXBoLnByb3RvdHlwZS5xdWFy
dGVycz1bIkphbiIsIkFwciIsIkp1bCIsIk9jdCJdO0R5Z3JhcGgucHJvdG90eXBlLmFkZFhUaWNr
c189ZnVuY3Rpb24oKXt2YXIgYSxjO2lmKHRoaXMuZGF0ZVdpbmRvd18pe2E9dGhpcy5kYXRlV2lu
ZG93X1swXTtjPXRoaXMuZGF0ZVdpbmRvd19bMV19ZWxzZXthPXRoaXMucmF3RGF0YV9bMF1bMF07
Yz10aGlzLnJhd0RhdGFfW3RoaXMucmF3RGF0YV8ubGVuZ3RoLTFdWzBdfXZhciBiPXRoaXMuYXR0
cl8oInhUaWNrZXIiKShhLGMsdGhpcyk7dGhpcy5sYXlvdXRfLnVwZGF0ZU9wdGlvbnMoe3hUaWNr
czpifSl9O0R5Z3JhcGguU0VDT05ETFk9MDtEeWdyYXBoLlRXT19TRUNPTkRMWT0xO0R5Z3JhcGgu
RklWRV9TRUNPTkRMWT0yO0R5Z3JhcGguVEVOX1NFQ09ORExZPTM7RHlncmFwaC5USElSVFlfU0VD
T05ETFk9NDtEeWdyYXBoLk1JTlVURUxZPTU7RHlncmFwaC5UV09fTUlOVVRFTFk9NjtEeWdyYXBo
LkZJVkVfTUlOVVRFTFk9NztEeWdyYXBoLlRFTl9NSU5VVEVMWT04O0R5Z3JhcGguVEhJUlRZX01J
TlVURUxZPTk7RHlncmFwaC5IT1VSTFk9MTA7RHlncmFwaC5UV09fSE9VUkxZPTExO0R5Z3JhcGgu
U0lYX0hPVVJMWT0xMjtEeWdyYXBoLkRBSUxZPTEzO0R5Z3JhcGguV0VFS0xZPTE0O0R5Z3JhcGgu
TU9OVEhMWT0xNTtEeWdyYXBoLlFVQVJURVJMWT0xNjtEeWdyYXBoLkJJQU5OVUFMPTE3O0R5Z3Jh
cGguQU5OVUFMPTE4O0R5Z3JhcGguREVDQURBTD0xOTtEeWdyYXBoLk5VTV9HUkFOVUxBUklUSUVT
PTIwO0R5Z3JhcGguU0hPUlRfU1BBQ0lOR1M9W107RHlncmFwaC5TSE9SVF9TUEFDSU5HU1tEeWdy
YXBoLlNFQ09ORExZXT0xMDAwKjE7RHlncmFwaC5TSE9SVF9TUEFDSU5HU1tEeWdyYXBoLlRXT19T
RUNPTkRMWV09MTAwMCoyO0R5Z3JhcGguU0hPUlRfU1BBQ0lOR1NbRHlncmFwaC5GSVZFX1NFQ09O
RExZXT0xMDAwKjU7RHlncmFwaC5TSE9SVF9TUEFDSU5HU1tEeWdyYXBoLlRFTl9TRUNPTkRMWV09
MTAwMCoxMDtEeWdyYXBoLlNIT1JUX1NQQUNJTkdTW0R5Z3JhcGguVEhJUlRZX1NFQ09ORExZXT0x
MDAwKjMwO0R5Z3JhcGguU0hPUlRfU1BBQ0lOR1NbRHlncmFwaC5NSU5VVEVMWV09MTAwMCo2MDtE
eWdyYXBoLlNIT1JUX1NQQUNJTkdTW0R5Z3JhcGguVFdPX01JTlVURUxZXT0xMDAwKjYwKjI7RHln
cmFwaC5TSE9SVF9TUEFDSU5HU1tEeWdyYXBoLkZJVkVfTUlOVVRFTFldPTEwMDAqNjAqNTtEeWdy
YXBoLlNIT1JUX1NQQUNJTkdTW0R5Z3JhcGguVEVOX01JTlVURUxZXT0xMDAwKjYwKjEwO0R5Z3Jh
cGguU0hPUlRfU1BBQ0lOR1NbRHlncmFwaC5USElSVFlfTUlOVVRFTFldPTEwMDAqNjAqMzA7RHln
cmFwaC5TSE9SVF9TUEFDSU5HU1tEeWdyYXBoLkhPVVJMWV09MTAwMCozNjAwO0R5Z3JhcGguU0hP
UlRfU1BBQ0lOR1NbRHlncmFwaC5UV09fSE9VUkxZXT0xMDAwKjM2MDAqMjtEeWdyYXBoLlNIT1JU
X1NQQUNJTkdTW0R5Z3JhcGguU0lYX0hPVVJMWV09MTAwMCozNjAwKjY7RHlncmFwaC5TSE9SVF9T
UEFDSU5HU1tEeWdyYXBoLkRBSUxZXT0xMDAwKjg2NDAwO0R5Z3JhcGguU0hPUlRfU1BBQ0lOR1Nb
RHlncmFwaC5XRUVLTFldPTEwMDAqNjA0ODAwO0R5Z3JhcGgucHJvdG90eXBlLk51bVhUaWNrcz1m
dW5jdGlvbihlLGIsZyl7aWYoZzxEeWdyYXBoLk1PTlRITFkpe3ZhciBoPUR5Z3JhcGguU0hPUlRf
U1BBQ0lOR1NbZ107cmV0dXJuIE1hdGguZmxvb3IoMC41KzEqKGItZSkvaCl9ZWxzZXt2YXIgZj0x
O3ZhciBkPTEyO2lmKGc9PUR5Z3JhcGguUVVBUlRFUkxZKXtkPTN9aWYoZz09RHlncmFwaC5CSUFO
TlVBTCl7ZD0yfWlmKGc9PUR5Z3JhcGguQU5OVUFMKXtkPTF9aWYoZz09RHlncmFwaC5ERUNBREFM
KXtkPTE7Zj0xMH12YXIgYz0zNjUuMjUyNCoyNCozNjAwKjEwMDA7dmFyIGE9MSooYi1lKS9jO3Jl
dHVybiBNYXRoLmZsb29yKDAuNSsxKmEqZC9mKX19O0R5Z3JhcGgucHJvdG90eXBlLkdldFhBeGlz
PWZ1bmN0aW9uKG0saCxhKXt2YXIgcj10aGlzLmF0dHJfKCJ4QXhpc0xhYmVsRm9ybWF0dGVyIik7
dmFyIHk9W107aWYoYTxEeWdyYXBoLk1PTlRITFkpe3ZhciBjPUR5Z3JhcGguU0hPUlRfU1BBQ0lO
R1NbYV07dmFyIHU9IiVkJWIiO3ZhciB2PWMvMTAwMDt2YXIgdz1uZXcgRGF0ZShtKTtpZih2PD02
MCl7dmFyIGY9dy5nZXRTZWNvbmRzKCk7dy5zZXRTZWNvbmRzKGYtZiV2KX1lbHNle3cuc2V0U2Vj
b25kcygwKTt2Lz02MDtpZih2PD02MCl7dmFyIGY9dy5nZXRNaW51dGVzKCk7dy5zZXRNaW51dGVz
KGYtZiV2KX1lbHNle3cuc2V0TWludXRlcygwKTt2Lz02MDtpZih2PD0yNCl7dmFyIGY9dy5nZXRI
b3VycygpO3cuc2V0SG91cnMoZi1mJXYpfWVsc2V7dy5zZXRIb3VycygwKTt2Lz0yNDtpZih2PT03
KXt3LnNldERhdGUody5nZXREYXRlKCktdy5nZXREYXkoKSl9fX19bT13LmdldFRpbWUoKTtmb3Io
dmFyIGs9bTtrPD1oO2srPWMpe3kucHVzaCh7djprLGxhYmVsOnIobmV3IERhdGUoayksYSl9KX19
ZWxzZXt2YXIgZTt2YXIgbj0xO2lmKGE9PUR5Z3JhcGguTU9OVEhMWSl7ZT1bMCwxLDIsMyw0LDUs
Niw3LDgsOSwxMCwxMSwxMl19ZWxzZXtpZihhPT1EeWdyYXBoLlFVQVJURVJMWSl7ZT1bMCwzLDYs
OV19ZWxzZXtpZihhPT1EeWdyYXBoLkJJQU5OVUFMKXtlPVswLDZdfWVsc2V7aWYoYT09RHlncmFw
aC5BTk5VQUwpe2U9WzBdfWVsc2V7aWYoYT09RHlncmFwaC5ERUNBREFMKXtlPVswXTtuPTEwfX19
fX12YXIgcT1uZXcgRGF0ZShtKS5nZXRGdWxsWWVhcigpO3ZhciBvPW5ldyBEYXRlKGgpLmdldEZ1
bGxZZWFyKCk7dmFyIGI9RHlncmFwaC56ZXJvcGFkO2Zvcih2YXIgcz1xO3M8PW87cysrKXtpZihz
JW4hPTApe2NvbnRpbnVlfWZvcih2YXIgcD0wO3A8ZS5sZW5ndGg7cCsrKXt2YXIgbD1zKyIvIiti
KDErZVtwXSkrIi8wMSI7dmFyIGs9RGF0ZS5wYXJzZShsKTtpZihrPG18fGs+aCl7Y29udGludWV9
eS5wdXNoKHt2OmssbGFiZWw6cihuZXcgRGF0ZShrKSxhKX0pfX19cmV0dXJuIHl9O0R5Z3JhcGgu
ZGF0ZVRpY2tlcj1mdW5jdGlvbihhLGYsZCl7dmFyIGI9LTE7Zm9yKHZhciBlPTA7ZTxEeWdyYXBo
Lk5VTV9HUkFOVUxBUklUSUVTO2UrKyl7dmFyIGM9ZC5OdW1YVGlja3MoYSxmLGUpO2lmKGQud2lk
dGhfL2M+PWQuYXR0cl8oInBpeGVsc1BlclhMYWJlbCIpKXtiPWU7YnJlYWt9fWlmKGI+PTApe3Jl
dHVybiBkLkdldFhBeGlzKGEsZixiKX1lbHNle319O0R5Z3JhcGgubnVtZXJpY1RpY2tzPWZ1bmN0
aW9uKHYsdSxsKXtpZihsLmF0dHJfKCJsYWJlbHNLTUcyIikpe3ZhciBmPVsxLDIsNCw4XX1lbHNl
e3ZhciBmPVsxLDIsNV19dmFyIHgscCxhLHE7dmFyIGg9bC5hdHRyXygicGl4ZWxzUGVyWUxhYmVs
Iik7Zm9yKHZhciB0PS0xMDt0PDUwO3QrKyl7aWYobC5hdHRyXygibGFiZWxzS01HMiIpKXt2YXIg
Yz1NYXRoLnBvdygxNix0KX1lbHNle3ZhciBjPU1hdGgucG93KDEwLHQpfWZvcih2YXIgcz0wO3M8
Zi5sZW5ndGg7cysrKXt4PWMqZltzXTtwPU1hdGguZmxvb3Iodi94KSp4O2E9TWF0aC5jZWlsKHUv
eCkqeDtxPU1hdGguYWJzKGEtcCkveDt2YXIgZD1sLmhlaWdodF8vcTtpZihkPmgpe2JyZWFrfX1p
ZihkPmgpe2JyZWFrfX12YXIgdz1bXTt2YXIgcjt2YXIgbz1bXTtpZihsLmF0dHJfKCJsYWJlbHNL
TUIiKSl7cj0xMDAwO289WyJLIiwiTSIsIkIiLCJUIl19aWYobC5hdHRyXygibGFiZWxzS01HMiIp
KXtpZihyKXtsLndhcm4oIlNldHRpbmcgYm90aCBsYWJlbHNLTUIgYW5kIGxhYmVsc0tNRzIuIFBp
Y2sgb25lISIpfXI9MTAyNDtvPVsiayIsIk0iLCJHIiwiVCJdfWlmKHA+YSl7eCo9LTF9Zm9yKHZh
ciB0PTA7dDxxO3QrKyl7dmFyIGc9cCt0Kng7dmFyIGI9TWF0aC5hYnMoZyk7dmFyIGU9RHlncmFw
aC5yb3VuZF8oZywyKTtpZihvLmxlbmd0aCl7dmFyIG09cipyKnIqcjtmb3IodmFyIHM9MztzPj0w
O3MtLSxtLz1yKXtpZihiPj1tKXtlPUR5Z3JhcGgucm91bmRfKGcvbSwxKStvW3NdO2JyZWFrfX19
dy5wdXNoKHtsYWJlbDplLHY6Z30pfXJldHVybiB3fTtEeWdyYXBoLnByb3RvdHlwZS5hZGRZVGlj
a3NfPWZ1bmN0aW9uKGMsYil7dmFyIGE9RHlncmFwaC5udW1lcmljVGlja3MoYyxiLHRoaXMpO3Ro
aXMubGF5b3V0Xy51cGRhdGVPcHRpb25zKHt5QXhpczpbYyxiXSx5VGlja3M6YX0pfTtEeWdyYXBo
LnByb3RvdHlwZS5leHRyZW1lVmFsdWVzXz1mdW5jdGlvbihkKXt2YXIgaD1udWxsLGY9bnVsbDt2
YXIgYj10aGlzLmF0dHJfKCJlcnJvckJhcnMiKXx8dGhpcy5hdHRyXygiY3VzdG9tQmFycyIpO2lm
KGIpe2Zvcih2YXIgYz0wO2M8ZC5sZW5ndGg7YysrKXt2YXIgZz1kW2NdWzFdWzBdO2lmKCFnKXtj
b250aW51ZX12YXIgYT1nLWRbY11bMV1bMV07dmFyIGU9ZytkW2NdWzFdWzJdO2lmKGE+Zyl7YT1n
fWlmKGU8Zyl7ZT1nfWlmKGY9PW51bGx8fGU+Zil7Zj1lfWlmKGg9PW51bGx8fGE8aCl7aD1hfX19
ZWxzZXtmb3IodmFyIGM9MDtjPGQubGVuZ3RoO2MrKyl7dmFyIGc9ZFtjXVsxXTtpZihnPT09bnVs
bHx8aXNOYU4oZykpe2NvbnRpbnVlfWlmKGY9PW51bGx8fGc+Zil7Zj1nfWlmKGg9PW51bGx8fGc8
aCl7aD1nfX19cmV0dXJuW2gsZl19O0R5Z3JhcGgucHJvdG90eXBlLmRyYXdHcmFwaF89ZnVuY3Rp
b24oRCl7dmFyIG49dGhpcy5pc19pbml0aWFsX2RyYXdfO3RoaXMuaXNfaW5pdGlhbF9kcmF3Xz1m
YWxzZTt2YXIgej1udWxsLHk9bnVsbDt0aGlzLmxheW91dF8ucmVtb3ZlQWxsRGF0YXNldHMoKTt0
aGlzLnNldENvbG9yc18oKTt0aGlzLmF0dHJzXy5wb2ludFNpemU9MC41KnRoaXMuYXR0cl8oImhp
Z2hsaWdodENpcmNsZVNpemUiKTt2YXIgZD1bXTt2YXIgZj1bXTtmb3IodmFyIHc9RFswXS5sZW5n
dGgtMTt3Pj0xO3ctLSl7aWYoIXRoaXMudmlzaWJpbGl0eSgpW3ctMV0pe2NvbnRpbnVlfXZhciBi
PXRoaXMuYXR0cl8oImNvbm5lY3RTZXBhcmF0ZWRQb2ludHMiLHcpO3ZhciBtPVtdO2Zvcih2YXIg
dT0wO3U8RC5sZW5ndGg7dSsrKXtpZihEW3VdW3ddIT1udWxsfHwhYil7dmFyIEE9RFt1XVswXTtt
LnB1c2goW0EsRFt1XVt3XV0pfX1tPXRoaXMucm9sbGluZ0F2ZXJhZ2UobSx0aGlzLnJvbGxQZXJp
b2RfKTt2YXIgcD10aGlzLmF0dHJfKCJlcnJvckJhcnMiKXx8dGhpcy5hdHRyXygiY3VzdG9tQmFy
cyIpO2lmKHRoaXMuZGF0ZVdpbmRvd18pe3ZhciBGPXRoaXMuZGF0ZVdpbmRvd19bMF07dmFyIGc9
dGhpcy5kYXRlV2luZG93X1sxXTt2YXIgcT1bXTt2YXIgZT1udWxsLEU9bnVsbDtmb3IodmFyIHQ9
MDt0PG0ubGVuZ3RoO3QrKyl7aWYobVt0XVswXT49RiYmZT09PW51bGwpe2U9dH1pZihtW3RdWzBd
PD1nKXtFPXR9fWlmKGU9PT1udWxsKXtlPTB9aWYoZT4wKXtlLS19aWYoRT09PW51bGwpe0U9bS5s
ZW5ndGgtMX1pZihFPG0ubGVuZ3RoLTEpe0UrK310aGlzLmJvdW5kYXJ5SWRzX1t3LTFdPVtlLEVd
O2Zvcih2YXIgdD1lO3Q8PUU7dCsrKXtxLnB1c2gobVt0XSl9bT1xfWVsc2V7dGhpcy5ib3VuZGFy
eUlkc19bdy0xXT1bMCxtLmxlbmd0aC0xXX12YXIgYT10aGlzLmV4dHJlbWVWYWx1ZXNfKG0pO3Zh
ciByPWFbMF07dmFyIG89YVsxXTtpZih6PT09bnVsbHx8cjx6KXt6PXJ9aWYoeT09PW51bGx8fG8+
eSl7eT1vfWlmKHApe2Zvcih2YXIgdT0wO3U8bS5sZW5ndGg7dSsrKXt2YWw9W21bdV1bMF0sbVt1
XVsxXVswXSxtW3VdWzFdWzFdLG1bdV1bMV1bMl1dO21bdV09dmFsfX1lbHNle2lmKHRoaXMuYXR0
cl8oInN0YWNrZWRHcmFwaCIpKXt2YXIgcz1tLmxlbmd0aDt2YXIgQjtmb3IodmFyIHU9MDt1PHM7
dSsrKXt2YXIgaD1tW3VdWzBdO2lmKGRbaF09PT11bmRlZmluZWQpe2RbaF09MH1CPW1bdV1bMV07
ZFtoXSs9QjttW3VdPVtoLGRbaF1dO2lmKCF5fHxkW2hdPnkpe3k9ZFtoXX19fX1mW3ddPW19Zm9y
KHZhciB3PTE7dzxmLmxlbmd0aDt3Kyspe2lmKCF0aGlzLnZpc2liaWxpdHkoKVt3LTFdKXtjb250
aW51ZX10aGlzLmxheW91dF8uYWRkRGF0YXNldCh0aGlzLmF0dHJfKCJsYWJlbHMiKVt3XSxmW3dd
KX1pZih0aGlzLnZhbHVlUmFuZ2VfIT1udWxsKXt0aGlzLmFkZFlUaWNrc18odGhpcy52YWx1ZVJh
bmdlX1swXSx0aGlzLnZhbHVlUmFuZ2VfWzFdKTt0aGlzLmRpc3BsYXllZFlSYW5nZV89dGhpcy52
YWx1ZVJhbmdlX31lbHNle2lmKHRoaXMuYXR0cl8oImluY2x1ZGVaZXJvIikmJno+MCl7ej0wfXZh
ciB2PXktejtpZih2PT0wKXt2PXl9dmFyIGM9eSswLjEqdjt2YXIgQz16LTAuMSp2O2lmKEM8MCYm
ej49MCl7Qz0wfWlmKGM+MCYmeTw9MCl7Yz0wfWlmKHRoaXMuYXR0cl8oImluY2x1ZGVaZXJvIikp
e2lmKHk8MCl7Yz0wfWlmKHo+MCl7Qz0wfX10aGlzLmFkZFlUaWNrc18oQyxjKTt0aGlzLmRpc3Bs
YXllZFlSYW5nZV89W0MsY119dGhpcy5hZGRYVGlja3NfKCk7dGhpcy5sYXlvdXRfLnVwZGF0ZU9w
dGlvbnMoe2RhdGVXaW5kb3c6dGhpcy5kYXRlV2luZG93X30pO3RoaXMubGF5b3V0Xy5ldmFsdWF0
ZVdpdGhFcnJvcigpO3RoaXMucGxvdHRlcl8uY2xlYXIoKTt0aGlzLnBsb3R0ZXJfLnJlbmRlcigp
O3RoaXMuY2FudmFzXy5nZXRDb250ZXh0KCIyZCIpLmNsZWFyUmVjdCgwLDAsdGhpcy5jYW52YXNf
LndpZHRoLHRoaXMuY2FudmFzXy5oZWlnaHQpO2lmKHRoaXMuYXR0cl8oImRyYXdDYWxsYmFjayIp
IT09bnVsbCl7dGhpcy5hdHRyXygiZHJhd0NhbGxiYWNrIikodGhpcyxuKX19O0R5Z3JhcGgucHJv
dG90eXBlLnJvbGxpbmdBdmVyYWdlPWZ1bmN0aW9uKG0sZCl7aWYobS5sZW5ndGg8Mil7cmV0dXJu
IG19dmFyIGQ9TWF0aC5taW4oZCxtLmxlbmd0aC0xKTt2YXIgYj1bXTt2YXIgcz10aGlzLmF0dHJf
KCJzaWdtYSIpO2lmKHRoaXMuZnJhY3Rpb25zXyl7dmFyIGs9MDt2YXIgaD0wO3ZhciBlPTEwMDtm
b3IodmFyIHg9MDt4PG0ubGVuZ3RoO3grKyl7ays9bVt4XVsxXVswXTtoKz1tW3hdWzFdWzFdO2lm
KHgtZD49MCl7ay09bVt4LWRdWzFdWzBdO2gtPW1beC1kXVsxXVsxXX12YXIgQj1tW3hdWzBdO3Zh
ciB2PWg/ay9oOjA7aWYodGhpcy5hdHRyXygiZXJyb3JCYXJzIikpe2lmKHRoaXMud2lsc29uSW50
ZXJ2YWxfKXtpZihoKXt2YXIgdD12PDA/MDp2LHU9aDt2YXIgQT1zKk1hdGguc3FydCh0KigxLXQp
L3UrcypzLyg0KnUqdSkpO3ZhciBhPTErcypzL2g7dmFyIEY9KHQrcypzLygyKmgpLUEpL2E7dmFy
IG89KHQrcypzLygyKmgpK0EpL2E7Ylt4XT1bQixbdCplLCh0LUYpKmUsKG8tdCkqZV1dfWVsc2V7
Ylt4XT1bQixbMCwwLDBdXX19ZWxzZXt2YXIgej1oP3MqTWF0aC5zcXJ0KHYqKDEtdikvaCk6MTti
W3hdPVtCLFtlKnYsZSp6LGUqel1dfX1lbHNle2JbeF09W0IsZSp2XX19fWVsc2V7aWYodGhpcy5h
dHRyXygiY3VzdG9tQmFycyIpKXt2YXIgRj0wO3ZhciBDPTA7dmFyIG89MDt2YXIgZz0wO2Zvcih2
YXIgeD0wO3g8bS5sZW5ndGg7eCsrKXt2YXIgRT1tW3hdWzFdO3ZhciBsPUVbMV07Ylt4XT1bbVt4
XVswXSxbbCxsLUVbMF0sRVsyXS1sXV07aWYobCE9bnVsbCYmIWlzTmFOKGwpKXtGKz1FWzBdO0Mr
PWw7bys9RVsyXTtnKz0xfWlmKHgtZD49MCl7dmFyIHI9bVt4LWRdO2lmKHJbMV1bMV0hPW51bGwm
JiFpc05hTihyWzFdWzFdKSl7Ri09clsxXVswXTtDLT1yWzFdWzFdO28tPXJbMV1bMl07Zy09MX19
Ylt4XT1bbVt4XVswXSxbMSpDL2csMSooQy1GKS9nLDEqKG8tQykvZ11dfX1lbHNle3ZhciBxPU1h
dGgubWluKGQtMSxtLmxlbmd0aC0yKTtpZighdGhpcy5hdHRyXygiZXJyb3JCYXJzIikpe2lmKGQ9
PTEpe3JldHVybiBtfWZvcih2YXIgeD0wO3g8bS5sZW5ndGg7eCsrKXt2YXIgYz0wO3ZhciBEPTA7
Zm9yKHZhciB3PU1hdGgubWF4KDAseC1kKzEpO3c8eCsxO3crKyl7dmFyIGw9bVt3XVsxXTtpZihs
PT1udWxsfHxpc05hTihsKSl7Y29udGludWV9RCsrO2MrPW1bd11bMV19aWYoRCl7Ylt4XT1bbVt4
XVswXSxjL0RdfWVsc2V7Ylt4XT1bbVt4XVswXSxudWxsXX19fWVsc2V7Zm9yKHZhciB4PTA7eDxt
Lmxlbmd0aDt4Kyspe3ZhciBjPTA7dmFyIGY9MDt2YXIgRD0wO2Zvcih2YXIgdz1NYXRoLm1heCgw
LHgtZCsxKTt3PHgrMTt3Kyspe3ZhciBsPW1bd11bMV1bMF07aWYobD09bnVsbHx8aXNOYU4obCkp
e2NvbnRpbnVlfUQrKztjKz1tW3ddWzFdWzBdO2YrPU1hdGgucG93KG1bd11bMV1bMV0sMil9aWYo
RCl7dmFyIHo9TWF0aC5zcXJ0KGYpL0Q7Ylt4XT1bbVt4XVswXSxbYy9ELHMqeixzKnpdXX1lbHNl
e2JbeF09W21beF1bMF0sW251bGwsbnVsbCxudWxsXV19fX19fXJldHVybiBifTtEeWdyYXBoLmRh
dGVQYXJzZXI9ZnVuY3Rpb24oYixhKXt2YXIgYzt2YXIgZTtpZihiLnNlYXJjaCgiLSIpIT0tMSl7
Yz1iLnJlcGxhY2UoIi0iLCIvIiwiZyIpO3doaWxlKGMuc2VhcmNoKCItIikhPS0xKXtjPWMucmVw
bGFjZSgiLSIsIi8iKX1lPURhdGUucGFyc2UoYyl9ZWxzZXtpZihiLmxlbmd0aD09OCl7Yz1iLnN1
YnN0cigwLDQpKyIvIitiLnN1YnN0cig0LDIpKyIvIitiLnN1YnN0cig2LDIpO2U9RGF0ZS5wYXJz
ZShjKX1lbHNle2U9RGF0ZS5wYXJzZShiKX19aWYoIWV8fGlzTmFOKGUpKXthLmVycm9yKCJDb3Vs
ZG4ndCBwYXJzZSAiK2IrIiBhcyBhIGRhdGUiKX1yZXR1cm4gZX07RHlncmFwaC5wcm90b3R5cGUu
ZGV0ZWN0VHlwZUZyb21TdHJpbmdfPWZ1bmN0aW9uKGIpe3ZhciBhPWZhbHNlO2lmKGIuaW5kZXhP
ZigiLSIpPj0wfHxiLmluZGV4T2YoIi8iKT49MHx8aXNOYU4ocGFyc2VGbG9hdChiKSkpe2E9dHJ1
ZX1lbHNle2lmKGIubGVuZ3RoPT04JiZiPiIxOTcwMDEwMSImJmI8IjIwMzcxMjMxIil7YT10cnVl
fX1pZihhKXt0aGlzLmF0dHJzXy54VmFsdWVGb3JtYXR0ZXI9RHlncmFwaC5kYXRlU3RyaW5nXzt0
aGlzLmF0dHJzXy54VmFsdWVQYXJzZXI9RHlncmFwaC5kYXRlUGFyc2VyO3RoaXMuYXR0cnNfLnhU
aWNrZXI9RHlncmFwaC5kYXRlVGlja2VyO3RoaXMuYXR0cnNfLnhBeGlzTGFiZWxGb3JtYXR0ZXI9
RHlncmFwaC5kYXRlQXhpc0Zvcm1hdHRlcn1lbHNle3RoaXMuYXR0cnNfLnhWYWx1ZUZvcm1hdHRl
cj1mdW5jdGlvbihjKXtyZXR1cm4gY307dGhpcy5hdHRyc18ueFZhbHVlUGFyc2VyPWZ1bmN0aW9u
KGMpe3JldHVybiBwYXJzZUZsb2F0KGMpfTt0aGlzLmF0dHJzXy54VGlja2VyPUR5Z3JhcGgubnVt
ZXJpY1RpY2tzO3RoaXMuYXR0cnNfLnhBeGlzTGFiZWxGb3JtYXR0ZXI9dGhpcy5hdHRyc18ueFZh
bHVlRm9ybWF0dGVyfX07RHlncmFwaC5wcm90b3R5cGUucGFyc2VDU1ZfPWZ1bmN0aW9uKGgpe3Zh
ciBuPVtdO3ZhciByPWguc3BsaXQoIlxuIik7dmFyIGI9dGhpcy5hdHRyXygiZGVsaW1pdGVyIik7
aWYoclswXS5pbmRleE9mKGIpPT0tMSYmclswXS5pbmRleE9mKCJcdCIpPj0wKXtiPSJcdCJ9dmFy
IGE9MDtpZih0aGlzLmxhYmVsc0Zyb21DU1ZfKXthPTE7dGhpcy5hdHRyc18ubGFiZWxzPXJbMF0u
c3BsaXQoYil9dmFyIGs9ZnVuY3Rpb24oail7dmFyIHM9cGFyc2VGbG9hdChqKTtyZXR1cm4gaXNO
YU4ocyk/bnVsbDpzfTt2YXIgYzt2YXIgcD1mYWxzZTt2YXIgZD10aGlzLmF0dHJfKCJsYWJlbHMi
KS5sZW5ndGg7dmFyIG09ZmFsc2U7Zm9yKHZhciBnPWE7ZzxyLmxlbmd0aDtnKyspe3ZhciBxPXJb
Z107aWYocS5sZW5ndGg9PTApe2NvbnRpbnVlfWlmKHFbMF09PSIjIil7Y29udGludWV9dmFyIGY9
cS5zcGxpdChiKTtpZihmLmxlbmd0aDwyKXtjb250aW51ZX12YXIgbD1bXTtpZighcCl7dGhpcy5k
ZXRlY3RUeXBlRnJvbVN0cmluZ18oZlswXSk7Yz10aGlzLmF0dHJfKCJ4VmFsdWVQYXJzZXIiKTtw
PXRydWV9bFswXT1jKGZbMF0sdGhpcyk7aWYodGhpcy5mcmFjdGlvbnNfKXtmb3IodmFyIGU9MTtl
PGYubGVuZ3RoO2UrKyl7dmFyIG89ZltlXS5zcGxpdCgiLyIpO2xbZV09W2sob1swXSksayhvWzFd
KV19fWVsc2V7aWYodGhpcy5hdHRyXygiZXJyb3JCYXJzIikpe2Zvcih2YXIgZT0xO2U8Zi5sZW5n
dGg7ZSs9Mil7bFsoZSsxKS8yXT1bayhmW2VdKSxrKGZbZSsxXSldfX1lbHNle2lmKHRoaXMuYXR0
cl8oImN1c3RvbUJhcnMiKSl7Zm9yKHZhciBlPTE7ZTxmLmxlbmd0aDtlKyspe3ZhciBvPWZbZV0u
c3BsaXQoIjsiKTtsW2VdPVtrKG9bMF0pLGsob1sxXSksayhvWzJdKV19fWVsc2V7Zm9yKHZhciBl
PTE7ZTxmLmxlbmd0aDtlKyspe2xbZV09ayhmW2VdKX19fX1pZihuLmxlbmd0aD4wJiZsWzBdPG5b
bi5sZW5ndGgtMV1bMF0pe209dHJ1ZX1uLnB1c2gobCk7aWYobC5sZW5ndGghPWQpe3RoaXMuZXJy
b3IoIk51bWJlciBvZiBjb2x1bW5zIGluIGxpbmUgIitnKyIgKCIrbC5sZW5ndGgrIikgZG9lcyBu
b3QgYWdyZWUgd2l0aCBudW1iZXIgb2YgbGFiZWxzICgiK2QrIikgIitxKX19aWYobSl7dGhpcy53
YXJuKCJDU1YgaXMgb3V0IG9mIG9yZGVyOyBvcmRlciBpdCBjb3JyZWN0bHkgdG8gc3BlZWQgbG9h
ZGluZy4iKTtuLnNvcnQoZnVuY3Rpb24ocyxqKXtyZXR1cm4gc1swXS1qWzBdfSl9cmV0dXJuIG59
O0R5Z3JhcGgucHJvdG90eXBlLnBhcnNlQXJyYXlfPWZ1bmN0aW9uKGIpe2lmKGIubGVuZ3RoPT0w
KXt0aGlzLmVycm9yKCJDYW4ndCBwbG90IGVtcHR5IGRhdGEgc2V0Iik7cmV0dXJuIG51bGx9aWYo
YlswXS5sZW5ndGg9PTApe3RoaXMuZXJyb3IoIkRhdGEgc2V0IGNhbm5vdCBjb250YWluIGFuIGVt
cHR5IHJvdyIpO3JldHVybiBudWxsfWlmKHRoaXMuYXR0cl8oImxhYmVscyIpPT1udWxsKXt0aGlz
Lndhcm4oIlVzaW5nIGRlZmF1bHQgbGFiZWxzLiBTZXQgbGFiZWxzIGV4cGxpY2l0bHkgdmlhICds
YWJlbHMnIGluIHRoZSBvcHRpb25zIHBhcmFtZXRlciIpO3RoaXMuYXR0cnNfLmxhYmVscz1bIlgi
XTtmb3IodmFyIGE9MTthPGJbMF0ubGVuZ3RoO2ErKyl7dGhpcy5hdHRyc18ubGFiZWxzLnB1c2go
IlkiK2EpfX1pZihEeWdyYXBoLmlzRGF0ZUxpa2UoYlswXVswXSkpe3RoaXMuYXR0cnNfLnhWYWx1
ZUZvcm1hdHRlcj1EeWdyYXBoLmRhdGVTdHJpbmdfO3RoaXMuYXR0cnNfLnhBeGlzTGFiZWxGb3Jt
YXR0ZXI9RHlncmFwaC5kYXRlQXhpc0Zvcm1hdHRlcjt0aGlzLmF0dHJzXy54VGlja2VyPUR5Z3Jh
cGguZGF0ZVRpY2tlcjt2YXIgYz1EeWdyYXBoLmNsb25lKGIpO2Zvcih2YXIgYT0wO2E8Yi5sZW5n
dGg7YSsrKXtpZihjW2FdLmxlbmd0aD09MCl7dGhpcy5lcnJvcigiUm93ICIrKDErYSkrIiBvZiBk
YXRhIGlzIGVtcHR5Iik7cmV0dXJuIG51bGx9aWYoY1thXVswXT09bnVsbHx8dHlwZW9mKGNbYV1b
MF0uZ2V0VGltZSkhPSJmdW5jdGlvbiJ8fGlzTmFOKGNbYV1bMF0uZ2V0VGltZSgpKSl7dGhpcy5l
cnJvcigieCB2YWx1ZSBpbiByb3cgIisoMSthKSsiIGlzIG5vdCBhIERhdGUiKTtyZXR1cm4gbnVs
bH1jW2FdWzBdPWNbYV1bMF0uZ2V0VGltZSgpfXJldHVybiBjfWVsc2V7dGhpcy5hdHRyc18ueFZh
bHVlRm9ybWF0dGVyPWZ1bmN0aW9uKGQpe3JldHVybiBkfTt0aGlzLmF0dHJzXy54VGlja2VyPUR5
Z3JhcGgubnVtZXJpY1RpY2tzO3JldHVybiBifX07RHlncmFwaC5wcm90b3R5cGUucGFyc2VEYXRh
VGFibGVfPWZ1bmN0aW9uKHYpe3ZhciBnPXYuZ2V0TnVtYmVyT2ZDb2x1bW5zKCk7dmFyIGY9di5n
ZXROdW1iZXJPZlJvd3MoKTt2YXIgZT12LmdldENvbHVtblR5cGUoMCk7aWYoZT09ImRhdGUifHxl
PT0iZGF0ZXRpbWUiKXt0aGlzLmF0dHJzXy54VmFsdWVGb3JtYXR0ZXI9RHlncmFwaC5kYXRlU3Ry
aW5nXzt0aGlzLmF0dHJzXy54VmFsdWVQYXJzZXI9RHlncmFwaC5kYXRlUGFyc2VyO3RoaXMuYXR0
cnNfLnhUaWNrZXI9RHlncmFwaC5kYXRlVGlja2VyO3RoaXMuYXR0cnNfLnhBeGlzTGFiZWxGb3Jt
YXR0ZXI9RHlncmFwaC5kYXRlQXhpc0Zvcm1hdHRlcn1lbHNle2lmKGU9PSJudW1iZXIiKXt0aGlz
LmF0dHJzXy54VmFsdWVGb3JtYXR0ZXI9ZnVuY3Rpb24oail7cmV0dXJuIGp9O3RoaXMuYXR0cnNf
LnhWYWx1ZVBhcnNlcj1mdW5jdGlvbihqKXtyZXR1cm4gcGFyc2VGbG9hdChqKX07dGhpcy5hdHRy
c18ueFRpY2tlcj1EeWdyYXBoLm51bWVyaWNUaWNrczt0aGlzLmF0dHJzXy54QXhpc0xhYmVsRm9y
bWF0dGVyPXRoaXMuYXR0cnNfLnhWYWx1ZUZvcm1hdHRlcn1lbHNle3RoaXMuZXJyb3IoIm9ubHkg
J2RhdGUnLCAnZGF0ZXRpbWUnIGFuZCAnbnVtYmVyJyB0eXBlcyBhcmUgc3VwcG9ydGVkIGZvciBj
b2x1bW4gMSBvZiBEYXRhVGFibGUgaW5wdXQgKEdvdCAnIitlKyInKSIpO3JldHVybiBudWxsfX12
YXIgbD1bXTt2YXIgcz17fTt2YXIgcj1mYWxzZTtmb3IodmFyIHA9MTtwPGc7cCsrKXt2YXIgYj12
LmdldENvbHVtblR5cGUocCk7aWYoYj09Im51bWJlciIpe2wucHVzaChwKX1lbHNle2lmKGI9PSJz
dHJpbmciJiZ0aGlzLmF0dHJfKCJkaXNwbGF5QW5ub3RhdGlvbnMiKSl7dmFyIHE9bFtsLmxlbmd0
aC0xXTtpZighcy5oYXNPd25Qcm9wZXJ0eShxKSl7c1txXT1bcF19ZWxzZXtzW3FdLnB1c2gocCl9
cj10cnVlfWVsc2V7dGhpcy5lcnJvcigiT25seSAnbnVtYmVyJyBpcyBzdXBwb3J0ZWQgYXMgYSBk
ZXBlbmRlbnQgdHlwZSB3aXRoIEd2aXouICdzdHJpbmcnIGlzIG9ubHkgc3VwcG9ydGVkIGlmIGRp
c3BsYXlBbm5vdGF0aW9ucyBpcyB0cnVlIil9fX12YXIgdD1bdi5nZXRDb2x1bW5MYWJlbCgwKV07
Zm9yKHZhciBwPTA7cDxsLmxlbmd0aDtwKyspe3QucHVzaCh2LmdldENvbHVtbkxhYmVsKGxbcF0p
KX10aGlzLmF0dHJzXy5sYWJlbHM9dDtnPXQubGVuZ3RoO3ZhciB1PVtdO3ZhciBoPWZhbHNlO3Zh
ciBhPVtdO2Zvcih2YXIgcD0wO3A8ZjtwKyspe3ZhciBkPVtdO2lmKHR5cGVvZih2LmdldFZhbHVl
KHAsMCkpPT09InVuZGVmaW5lZCJ8fHYuZ2V0VmFsdWUocCwwKT09PW51bGwpe3RoaXMud2Fybigi
SWdub3Jpbmcgcm93ICIrcCsiIG9mIERhdGFUYWJsZSBiZWNhdXNlIG9mIHVuZGVmaW5lZCBvciBu
dWxsIGZpcnN0IGNvbHVtbi4iKTtjb250aW51ZX1pZihlPT0iZGF0ZSJ8fGU9PSJkYXRldGltZSIp
e2QucHVzaCh2LmdldFZhbHVlKHAsMCkuZ2V0VGltZSgpKX1lbHNle2QucHVzaCh2LmdldFZhbHVl
KHAsMCkpfWlmKCF0aGlzLmF0dHJfKCJlcnJvckJhcnMiKSl7Zm9yKHZhciBuPTA7bjxsLmxlbmd0
aDtuKyspe3ZhciBjPWxbbl07ZC5wdXNoKHYuZ2V0VmFsdWUocCxjKSk7aWYociYmcy5oYXNPd25Q
cm9wZXJ0eShjKSYmdi5nZXRWYWx1ZShwLHNbY11bMF0pIT1udWxsKXt2YXIgbz17fTtvLnNlcmll
cz12LmdldENvbHVtbkxhYmVsKGMpO28ueHZhbD1kWzBdO28uc2hvcnRUZXh0PVN0cmluZy5mcm9t
Q2hhckNvZGUoNjUrYS5sZW5ndGgpO28udGV4dD0iIjtmb3IodmFyIG09MDttPHNbY10ubGVuZ3Ro
O20rKyl7aWYobSl7by50ZXh0Kz0iXG4ifW8udGV4dCs9di5nZXRWYWx1ZShwLHNbY11bbV0pfWEu
cHVzaChvKX19fWVsc2V7Zm9yKHZhciBuPTA7bjxnLTE7bisrKXtkLnB1c2goW3YuZ2V0VmFsdWUo
cCwxKzIqbiksdi5nZXRWYWx1ZShwLDIrMipuKV0pfX1pZih1Lmxlbmd0aD4wJiZkWzBdPHVbdS5s
ZW5ndGgtMV1bMF0pe2g9dHJ1ZX11LnB1c2goZCl9aWYoaCl7dGhpcy53YXJuKCJEYXRhVGFibGUg
aXMgb3V0IG9mIG9yZGVyOyBvcmRlciBpdCBjb3JyZWN0bHkgdG8gc3BlZWQgbG9hZGluZy4iKTt1
LnNvcnQoZnVuY3Rpb24oayxqKXtyZXR1cm4ga1swXS1qWzBdfSl9dGhpcy5yYXdEYXRhXz11O2lm
KGEubGVuZ3RoPjApe3RoaXMuc2V0QW5ub3RhdGlvbnMoYSx0cnVlKX19O0R5Z3JhcGgudXBkYXRl
PWZ1bmN0aW9uKGIsYyl7aWYodHlwZW9mKGMpIT0idW5kZWZpbmVkIiYmYyE9PW51bGwpe2Zvcih2
YXIgYSBpbiBjKXtpZihjLmhhc093blByb3BlcnR5KGEpKXtiW2FdPWNbYV19fX1yZXR1cm4gYn07
RHlncmFwaC5pc0FycmF5TGlrZT1mdW5jdGlvbihiKXt2YXIgYT10eXBlb2YoYik7aWYoKGEhPSJv
YmplY3QiJiYhKGE9PSJmdW5jdGlvbiImJnR5cGVvZihiLml0ZW0pPT0iZnVuY3Rpb24iKSl8fGI9
PT1udWxsfHx0eXBlb2YoYi5sZW5ndGgpIT0ibnVtYmVyInx8Yi5ub2RlVHlwZT09PTMpe3JldHVy
biBmYWxzZX1yZXR1cm4gdHJ1ZX07RHlncmFwaC5pc0RhdGVMaWtlPWZ1bmN0aW9uKGEpe2lmKHR5
cGVvZihhKSE9Im9iamVjdCJ8fGE9PT1udWxsfHx0eXBlb2YoYS5nZXRUaW1lKSE9ImZ1bmN0aW9u
Iil7cmV0dXJuIGZhbHNlfXJldHVybiB0cnVlfTtEeWdyYXBoLmNsb25lPWZ1bmN0aW9uKGMpe3Zh
ciBiPVtdO2Zvcih2YXIgYT0wO2E8Yy5sZW5ndGg7YSsrKXtpZihEeWdyYXBoLmlzQXJyYXlMaWtl
KGNbYV0pKXtiLnB1c2goRHlncmFwaC5jbG9uZShjW2FdKSl9ZWxzZXtiLnB1c2goY1thXSl9fXJl
dHVybiBifTtEeWdyYXBoLnByb3RvdHlwZS5zdGFydF89ZnVuY3Rpb24oKXtpZih0eXBlb2YgdGhp
cy5maWxlXz09ImZ1bmN0aW9uIil7dGhpcy5sb2FkZWRFdmVudF8odGhpcy5maWxlXygpKX1lbHNl
e2lmKER5Z3JhcGguaXNBcnJheUxpa2UodGhpcy5maWxlXykpe3RoaXMucmF3RGF0YV89dGhpcy5w
YXJzZUFycmF5Xyh0aGlzLmZpbGVfKTt0aGlzLmRyYXdHcmFwaF8odGhpcy5yYXdEYXRhXyl9ZWxz
ZXtpZih0eXBlb2YgdGhpcy5maWxlXz09Im9iamVjdCImJnR5cGVvZiB0aGlzLmZpbGVfLmdldENv
bHVtblJhbmdlPT0iZnVuY3Rpb24iKXt0aGlzLnBhcnNlRGF0YVRhYmxlXyh0aGlzLmZpbGVfKTt0
aGlzLmRyYXdHcmFwaF8odGhpcy5yYXdEYXRhXyl9ZWxzZXtpZih0eXBlb2YgdGhpcy5maWxlXz09
InN0cmluZyIpe2lmKHRoaXMuZmlsZV8uaW5kZXhPZigiXG4iKT49MCl7dGhpcy5sb2FkZWRFdmVu
dF8odGhpcy5maWxlXyl9ZWxzZXt2YXIgYj1uZXcgWE1MSHR0cFJlcXVlc3QoKTt2YXIgYT10aGlz
O2Iub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7aWYoYi5yZWFkeVN0YXRlPT00KXtpZihi
LnN0YXR1cz09MjAwKXthLmxvYWRlZEV2ZW50XyhiLnJlc3BvbnNlVGV4dCl9fX07Yi5vcGVuKCJH
RVQiLHRoaXMuZmlsZV8sdHJ1ZSk7Yi5zZW5kKG51bGwpfX1lbHNle3RoaXMuZXJyb3IoIlVua25v
d24gZGF0YSBmb3JtYXQ6ICIrKHR5cGVvZiB0aGlzLmZpbGVfKSl9fX19fTtEeWdyYXBoLnByb3Rv
dHlwZS51cGRhdGVPcHRpb25zPWZ1bmN0aW9uKGEpe2lmKGEucm9sbFBlcmlvZCl7dGhpcy5yb2xs
UGVyaW9kXz1hLnJvbGxQZXJpb2R9aWYoYS5kYXRlV2luZG93KXt0aGlzLmRhdGVXaW5kb3dfPWEu
ZGF0ZVdpbmRvd31pZihhLnZhbHVlUmFuZ2Upe3RoaXMudmFsdWVSYW5nZV89YS52YWx1ZVJhbmdl
fUR5Z3JhcGgudXBkYXRlKHRoaXMudXNlcl9hdHRyc18sYSk7RHlncmFwaC51cGRhdGUodGhpcy5y
ZW5kZXJPcHRpb25zXyxhKTt0aGlzLmxhYmVsc0Zyb21DU1ZfPSh0aGlzLmF0dHJfKCJsYWJlbHMi
KT09bnVsbCk7dGhpcy5sYXlvdXRfLnVwZGF0ZU9wdGlvbnMoe2Vycm9yQmFyczp0aGlzLmF0dHJf
KCJlcnJvckJhcnMiKX0pO2lmKGEuZmlsZSl7dGhpcy5maWxlXz1hLmZpbGU7dGhpcy5zdGFydF8o
KX1lbHNle3RoaXMuZHJhd0dyYXBoXyh0aGlzLnJhd0RhdGFfKX19O0R5Z3JhcGgucHJvdG90eXBl
LnJlc2l6ZT1mdW5jdGlvbihiLGEpe2lmKHRoaXMucmVzaXplX2xvY2spe3JldHVybn10aGlzLnJl
c2l6ZV9sb2NrPXRydWU7aWYoKGI9PT1udWxsKSE9KGE9PT1udWxsKSl7dGhpcy53YXJuKCJEeWdy
YXBoLnJlc2l6ZSgpIHNob3VsZCBiZSBjYWxsZWQgd2l0aCB6ZXJvIHBhcmFtZXRlcnMgb3IgdHdv
IG5vbi1OVUxMIHBhcmFtZXRlcnMuIFByZXRlbmRpbmcgaXQgd2FzIHplcm8uIik7Yj1hPW51bGx9
dGhpcy5tYWluZGl2Xy5pbm5lckhUTUw9IiI7dGhpcy5hdHRyc18ubGFiZWxzRGl2PW51bGw7aWYo
Yil7dGhpcy5tYWluZGl2Xy5zdHlsZS53aWR0aD1iKyJweCI7dGhpcy5tYWluZGl2Xy5zdHlsZS5o
ZWlnaHQ9YSsicHgiO3RoaXMud2lkdGhfPWI7dGhpcy5oZWlnaHRfPWF9ZWxzZXt0aGlzLndpZHRo
Xz10aGlzLm1haW5kaXZfLm9mZnNldFdpZHRoO3RoaXMuaGVpZ2h0Xz10aGlzLm1haW5kaXZfLm9m
ZnNldEhlaWdodH10aGlzLmNyZWF0ZUludGVyZmFjZV8oKTt0aGlzLmRyYXdHcmFwaF8odGhpcy5y
YXdEYXRhXyk7dGhpcy5yZXNpemVfbG9jaz1mYWxzZX07RHlncmFwaC5wcm90b3R5cGUuYWRqdXN0
Um9sbD1mdW5jdGlvbihhKXt0aGlzLnJvbGxQZXJpb2RfPWE7dGhpcy5kcmF3R3JhcGhfKHRoaXMu
cmF3RGF0YV8pfTtEeWdyYXBoLnByb3RvdHlwZS52aXNpYmlsaXR5PWZ1bmN0aW9uKCl7aWYoIXRo
aXMuYXR0cl8oInZpc2liaWxpdHkiKSl7dGhpcy5hdHRyc18udmlzaWJpbGl0eT1bXX13aGlsZSh0
aGlzLmF0dHJfKCJ2aXNpYmlsaXR5IikubGVuZ3RoPHRoaXMucmF3RGF0YV9bMF0ubGVuZ3RoLTEp
e3RoaXMuYXR0cl8oInZpc2liaWxpdHkiKS5wdXNoKHRydWUpfXJldHVybiB0aGlzLmF0dHJfKCJ2
aXNpYmlsaXR5Iil9O0R5Z3JhcGgucHJvdG90eXBlLnNldFZpc2liaWxpdHk9ZnVuY3Rpb24oYixj
KXt2YXIgYT10aGlzLnZpc2liaWxpdHkoKTtpZihiPDAmJmI+PWEubGVuZ3RoKXt0aGlzLndhcm4o
ImludmFsaWQgc2VyaWVzIG51bWJlciBpbiBzZXRWaXNpYmlsaXR5OiAiK2IpfWVsc2V7YVtiXT1j
O3RoaXMuZHJhd0dyYXBoXyh0aGlzLnJhd0RhdGFfKX19O0R5Z3JhcGgucHJvdG90eXBlLnNldEFu
bm90YXRpb25zPWZ1bmN0aW9uKGIsYSl7dGhpcy5hbm5vdGF0aW9uc189Yjt0aGlzLmxheW91dF8u
c2V0QW5ub3RhdGlvbnModGhpcy5hbm5vdGF0aW9uc18pO2lmKCFhKXt0aGlzLmRyYXdHcmFwaF8o
dGhpcy5yYXdEYXRhXyl9fTtEeWdyYXBoLnByb3RvdHlwZS5hbm5vdGF0aW9ucz1mdW5jdGlvbigp
e3JldHVybiB0aGlzLmFubm90YXRpb25zX307RHlncmFwaC5wcm90b3R5cGUuaW5kZXhGcm9tU2V0
TmFtZT1mdW5jdGlvbihhKXt2YXIgYz10aGlzLmF0dHJfKCJsYWJlbHMiKTtmb3IodmFyIGI9MDti
PGMubGVuZ3RoO2IrKyl7aWYoY1tiXT09YSl7cmV0dXJuIGJ9fXJldHVybiBudWxsfTtEeWdyYXBo
LmFkZEFubm90YXRpb25SdWxlPWZ1bmN0aW9uKCl7aWYoRHlncmFwaC5hZGRlZEFubm90YXRpb25D
U1Mpe3JldHVybn12YXIgYTtpZihkb2N1bWVudC5zdHlsZVNoZWV0cy5sZW5ndGg+MCl7YT1kb2N1
bWVudC5zdHlsZVNoZWV0c1swXX1lbHNle3ZhciBjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0
eWxlIik7Yy50eXBlPSJ0ZXh0L2NzcyI7ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhl
YWQiKVswXS5hcHBlbmRDaGlsZChjKTtmb3IoaT0wO2k8ZG9jdW1lbnQuc3R5bGVTaGVldHMubGVu
Z3RoO2krKyl7aWYoZG9jdW1lbnQuc3R5bGVTaGVldHNbaV0uZGlzYWJsZWQpe2NvbnRpbnVlfWE9
ZG9jdW1lbnQuc3R5bGVTaGVldHNbaV19fXZhciBiPSJib3JkZXI6IDFweCBzb2xpZCBibGFjazsg
YmFja2dyb3VuZC1jb2xvcjogd2hpdGU7IHRleHQtYWxpZ246IGNlbnRlcjsiO2lmKGEuaW5zZXJ0
UnVsZSl7YS5pbnNlcnRSdWxlKCIuZHlncmFwaERlZmF1bHRBbm5vdGF0aW9uIHsgIitiKyIgfSIs
MCl9ZWxzZXtpZihhLmFkZFJ1bGUpe2EuYWRkUnVsZSgiLmR5Z3JhcGhEZWZhdWx0QW5ub3RhdGlv
biIsYil9fUR5Z3JhcGguYWRkZWRBbm5vdGF0aW9uQ1NTPXRydWV9O0R5Z3JhcGguY3JlYXRlQ2Fu
dmFzPWZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7aXNJ
RT0oL01TSUUvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiF3aW5kb3cub3BlcmEpO2lmKGlz
SUUpe2E9R192bWxDYW52YXNNYW5hZ2VyLmluaXRFbGVtZW50KGEpfXJldHVybiBhfTtEeWdyYXBo
LkdWaXpDaGFydD1mdW5jdGlvbihhKXt0aGlzLmNvbnRhaW5lcj1hfTtEeWdyYXBoLkdWaXpDaGFy
dC5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbihiLGEpe3RoaXMuY29udGFpbmVyLmlubmVySFRNTD0i
Ijt0aGlzLmRhdGVfZ3JhcGg9bmV3IER5Z3JhcGgodGhpcy5jb250YWluZXIsYixhKX07RHlncmFw
aC5HVml6Q2hhcnQucHJvdG90eXBlLnNldFNlbGVjdGlvbj1mdW5jdGlvbihiKXt2YXIgYT1mYWxz
ZTtpZihiLmxlbmd0aCl7YT1iWzBdLnJvd310aGlzLmRhdGVfZ3JhcGguc2V0U2VsZWN0aW9uKGEp
fTtEeWdyYXBoLkdWaXpDaGFydC5wcm90b3R5cGUuZ2V0U2VsZWN0aW9uPWZ1bmN0aW9uKCl7dmFy
IGI9W107dmFyIGM9dGhpcy5kYXRlX2dyYXBoLmdldFNlbGVjdGlvbigpO2lmKGM8MCl7cmV0dXJu
IGJ9Y29sPTE7Zm9yKHZhciBhIGluIHRoaXMuZGF0ZV9ncmFwaC5sYXlvdXRfLmRhdGFzZXRzKXti
LnB1c2goe3JvdzpjLGNvbHVtbjpjb2x9KTtjb2wrK31yZXR1cm4gYn07RGF0ZUdyYXBoPUR5Z3Jh
cGg7ZnVuY3Rpb24gUkdCQ29sb3IoZyl7dGhpcy5vaz1mYWxzZTtpZihnLmNoYXJBdCgwKT09IiMi
KXtnPWcuc3Vic3RyKDEsNil9Zz1nLnJlcGxhY2UoLyAvZywiIik7Zz1nLnRvTG93ZXJDYXNlKCk7
dmFyIGE9e2FsaWNlYmx1ZToiZjBmOGZmIixhbnRpcXVld2hpdGU6ImZhZWJkNyIsYXF1YToiMDBm
ZmZmIixhcXVhbWFyaW5lOiI3ZmZmZDQiLGF6dXJlOiJmMGZmZmYiLGJlaWdlOiJmNWY1ZGMiLGJp
c3F1ZToiZmZlNGM0IixibGFjazoiMDAwMDAwIixibGFuY2hlZGFsbW9uZDoiZmZlYmNkIixibHVl
OiIwMDAwZmYiLGJsdWV2aW9sZXQ6IjhhMmJlMiIsYnJvd246ImE1MmEyYSIsYnVybHl3b29kOiJk
ZWI4ODciLGNhZGV0Ymx1ZToiNWY5ZWEwIixjaGFydHJldXNlOiI3ZmZmMDAiLGNob2NvbGF0ZToi
ZDI2OTFlIixjb3JhbDoiZmY3ZjUwIixjb3JuZmxvd2VyYmx1ZToiNjQ5NWVkIixjb3Juc2lsazoi
ZmZmOGRjIixjcmltc29uOiJkYzE0M2MiLGN5YW46IjAwZmZmZiIsZGFya2JsdWU6IjAwMDA4YiIs
ZGFya2N5YW46IjAwOGI4YiIsZGFya2dvbGRlbnJvZDoiYjg4NjBiIixkYXJrZ3JheToiYTlhOWE5
IixkYXJrZ3JlZW46IjAwNjQwMCIsZGFya2toYWtpOiJiZGI3NmIiLGRhcmttYWdlbnRhOiI4YjAw
OGIiLGRhcmtvbGl2ZWdyZWVuOiI1NTZiMmYiLGRhcmtvcmFuZ2U6ImZmOGMwMCIsZGFya29yY2hp
ZDoiOTkzMmNjIixkYXJrcmVkOiI4YjAwMDAiLGRhcmtzYWxtb246ImU5OTY3YSIsZGFya3NlYWdy
ZWVuOiI4ZmJjOGYiLGRhcmtzbGF0ZWJsdWU6IjQ4M2Q4YiIsZGFya3NsYXRlZ3JheToiMmY0ZjRm
IixkYXJrdHVycXVvaXNlOiIwMGNlZDEiLGRhcmt2aW9sZXQ6Ijk0MDBkMyIsZGVlcHBpbms6ImZm
MTQ5MyIsZGVlcHNreWJsdWU6IjAwYmZmZiIsZGltZ3JheToiNjk2OTY5Iixkb2RnZXJibHVlOiIx
ZTkwZmYiLGZlbGRzcGFyOiJkMTkyNzUiLGZpcmVicmljazoiYjIyMjIyIixmbG9yYWx3aGl0ZToi
ZmZmYWYwIixmb3Jlc3RncmVlbjoiMjI4YjIyIixmdWNoc2lhOiJmZjAwZmYiLGdhaW5zYm9ybzoi
ZGNkY2RjIixnaG9zdHdoaXRlOiJmOGY4ZmYiLGdvbGQ6ImZmZDcwMCIsZ29sZGVucm9kOiJkYWE1
MjAiLGdyYXk6IjgwODA4MCIsZ3JlZW46IjAwODAwMCIsZ3JlZW55ZWxsb3c6ImFkZmYyZiIsaG9u
ZXlkZXc6ImYwZmZmMCIsaG90cGluazoiZmY2OWI0IixpbmRpYW5yZWQ6ImNkNWM1YyIsaW5kaWdv
OiI0YjAwODIiLGl2b3J5OiJmZmZmZjAiLGtoYWtpOiJmMGU2OGMiLGxhdmVuZGVyOiJlNmU2ZmEi
LGxhdmVuZGVyYmx1c2g6ImZmZjBmNSIsbGF3bmdyZWVuOiI3Y2ZjMDAiLGxlbW9uY2hpZmZvbjoi
ZmZmYWNkIixsaWdodGJsdWU6ImFkZDhlNiIsbGlnaHRjb3JhbDoiZjA4MDgwIixsaWdodGN5YW46
ImUwZmZmZiIsbGlnaHRnb2xkZW5yb2R5ZWxsb3c6ImZhZmFkMiIsbGlnaHRncmV5OiJkM2QzZDMi
LGxpZ2h0Z3JlZW46IjkwZWU5MCIsbGlnaHRwaW5rOiJmZmI2YzEiLGxpZ2h0c2FsbW9uOiJmZmEw
N2EiLGxpZ2h0c2VhZ3JlZW46IjIwYjJhYSIsbGlnaHRza3libHVlOiI4N2NlZmEiLGxpZ2h0c2xh
dGVibHVlOiI4NDcwZmYiLGxpZ2h0c2xhdGVncmF5OiI3Nzg4OTkiLGxpZ2h0c3RlZWxibHVlOiJi
MGM0ZGUiLGxpZ2h0eWVsbG93OiJmZmZmZTAiLGxpbWU6IjAwZmYwMCIsbGltZWdyZWVuOiIzMmNk
MzIiLGxpbmVuOiJmYWYwZTYiLG1hZ2VudGE6ImZmMDBmZiIsbWFyb29uOiI4MDAwMDAiLG1lZGl1
bWFxdWFtYXJpbmU6IjY2Y2RhYSIsbWVkaXVtYmx1ZToiMDAwMGNkIixtZWRpdW1vcmNoaWQ6ImJh
NTVkMyIsbWVkaXVtcHVycGxlOiI5MzcwZDgiLG1lZGl1bXNlYWdyZWVuOiIzY2IzNzEiLG1lZGl1
bXNsYXRlYmx1ZToiN2I2OGVlIixtZWRpdW1zcHJpbmdncmVlbjoiMDBmYTlhIixtZWRpdW10dXJx
dW9pc2U6IjQ4ZDFjYyIsbWVkaXVtdmlvbGV0cmVkOiJjNzE1ODUiLG1pZG5pZ2h0Ymx1ZToiMTkx
OTcwIixtaW50Y3JlYW06ImY1ZmZmYSIsbWlzdHlyb3NlOiJmZmU0ZTEiLG1vY2Nhc2luOiJmZmU0
YjUiLG5hdmFqb3doaXRlOiJmZmRlYWQiLG5hdnk6IjAwMDA4MCIsb2xkbGFjZToiZmRmNWU2Iixv
bGl2ZToiODA4MDAwIixvbGl2ZWRyYWI6IjZiOGUyMyIsb3JhbmdlOiJmZmE1MDAiLG9yYW5nZXJl
ZDoiZmY0NTAwIixvcmNoaWQ6ImRhNzBkNiIscGFsZWdvbGRlbnJvZDoiZWVlOGFhIixwYWxlZ3Jl
ZW46Ijk4ZmI5OCIscGFsZXR1cnF1b2lzZToiYWZlZWVlIixwYWxldmlvbGV0cmVkOiJkODcwOTMi
LHBhcGF5YXdoaXA6ImZmZWZkNSIscGVhY2hwdWZmOiJmZmRhYjkiLHBlcnU6ImNkODUzZiIscGlu
azoiZmZjMGNiIixwbHVtOiJkZGEwZGQiLHBvd2RlcmJsdWU6ImIwZTBlNiIscHVycGxlOiI4MDAw
ODAiLHJlZDoiZmYwMDAwIixyb3N5YnJvd246ImJjOGY4ZiIscm95YWxibHVlOiI0MTY5ZTEiLHNh
ZGRsZWJyb3duOiI4YjQ1MTMiLHNhbG1vbjoiZmE4MDcyIixzYW5keWJyb3duOiJmNGE0NjAiLHNl
YWdyZWVuOiIyZThiNTciLHNlYXNoZWxsOiJmZmY1ZWUiLHNpZW5uYToiYTA1MjJkIixzaWx2ZXI6
ImMwYzBjMCIsc2t5Ymx1ZToiODdjZWViIixzbGF0ZWJsdWU6IjZhNWFjZCIsc2xhdGVncmF5OiI3
MDgwOTAiLHNub3c6ImZmZmFmYSIsc3ByaW5nZ3JlZW46IjAwZmY3ZiIsc3RlZWxibHVlOiI0Njgy
YjQiLHRhbjoiZDJiNDhjIix0ZWFsOiIwMDgwODAiLHRoaXN0bGU6ImQ4YmZkOCIsdG9tYXRvOiJm
ZjYzNDciLHR1cnF1b2lzZToiNDBlMGQwIix2aW9sZXQ6ImVlODJlZSIsdmlvbGV0cmVkOiJkMDIw
OTAiLHdoZWF0OiJmNWRlYjMiLHdoaXRlOiJmZmZmZmYiLHdoaXRlc21va2U6ImY1ZjVmNSIseWVs
bG93OiJmZmZmMDAiLHllbGxvd2dyZWVuOiI5YWNkMzIifTtmb3IodmFyIGMgaW4gYSl7aWYoZz09
Yyl7Zz1hW2NdfX12YXIgaD1be3JlOi9ecmdiXCgoXGR7MSwzfSksXHMqKFxkezEsM30pLFxzKihc
ZHsxLDN9KVwpJC8sZXhhbXBsZTpbInJnYigxMjMsIDIzNCwgNDUpIiwicmdiKDI1NSwyMzQsMjQ1
KSJdLHByb2Nlc3M6ZnVuY3Rpb24oail7cmV0dXJuW3BhcnNlSW50KGpbMV0pLHBhcnNlSW50KGpb
Ml0pLHBhcnNlSW50KGpbM10pXX19LHtyZTovXihcd3syfSkoXHd7Mn0pKFx3ezJ9KSQvLGV4YW1w
bGU6WyIjMDBmZjAwIiwiMzM2Njk5Il0scHJvY2VzczpmdW5jdGlvbihqKXtyZXR1cm5bcGFyc2VJ
bnQoalsxXSwxNikscGFyc2VJbnQoalsyXSwxNikscGFyc2VJbnQoalszXSwxNildfX0se3JlOi9e
KFx3ezF9KShcd3sxfSkoXHd7MX0pJC8sZXhhbXBsZTpbIiNmYjAiLCJmMGYiXSxwcm9jZXNzOmZ1
bmN0aW9uKGope3JldHVybltwYXJzZUludChqWzFdK2pbMV0sMTYpLHBhcnNlSW50KGpbMl0ralsy
XSwxNikscGFyc2VJbnQoalszXStqWzNdLDE2KV19fV07Zm9yKHZhciBiPTA7YjxoLmxlbmd0aDti
Kyspe3ZhciBlPWhbYl0ucmU7dmFyIGQ9aFtiXS5wcm9jZXNzO3ZhciBmPWUuZXhlYyhnKTtpZihm
KXtjaGFubmVscz1kKGYpO3RoaXMucj1jaGFubmVsc1swXTt0aGlzLmc9Y2hhbm5lbHNbMV07dGhp
cy5iPWNoYW5uZWxzWzJdO3RoaXMub2s9dHJ1ZX19dGhpcy5yPSh0aGlzLnI8MHx8aXNOYU4odGhp
cy5yKSk/MDooKHRoaXMucj4yNTUpPzI1NTp0aGlzLnIpO3RoaXMuZz0odGhpcy5nPDB8fGlzTmFO
KHRoaXMuZykpPzA6KCh0aGlzLmc+MjU1KT8yNTU6dGhpcy5nKTt0aGlzLmI9KHRoaXMuYjwwfHxp
c05hTih0aGlzLmIpKT8wOigodGhpcy5iPjI1NSk/MjU1OnRoaXMuYik7dGhpcy50b1JHQj1mdW5j
dGlvbigpe3JldHVybiJyZ2IoIit0aGlzLnIrIiwgIit0aGlzLmcrIiwgIit0aGlzLmIrIikifTt0
aGlzLnRvSGV4PWZ1bmN0aW9uKCl7dmFyIGw9dGhpcy5yLnRvU3RyaW5nKDE2KTt2YXIgaz10aGlz
LmcudG9TdHJpbmcoMTYpO3ZhciBqPXRoaXMuYi50b1N0cmluZygxNik7aWYobC5sZW5ndGg9PTEp
e2w9IjAiK2x9aWYoay5sZW5ndGg9PTEpe2s9IjAiK2t9aWYoai5sZW5ndGg9PTEpe2o9IjAiK2p9
cmV0dXJuIiMiK2wraytqfX1EYXRlLmV4dD17fTtEYXRlLmV4dC51dGlsPXt9O0RhdGUuZXh0LnV0
aWwueFBhZD1mdW5jdGlvbihhLGMsYil7aWYodHlwZW9mKGIpPT0idW5kZWZpbmVkIil7Yj0xMH1m
b3IoO3BhcnNlSW50KGEsMTApPGImJmI+MTtiLz0xMCl7YT1jLnRvU3RyaW5nKCkrYX1yZXR1cm4g
YS50b1N0cmluZygpfTtEYXRlLnByb3RvdHlwZS5sb2NhbGU9ImVuLUdCIjtpZihkb2N1bWVudC5n
ZXRFbGVtZW50c0J5VGFnTmFtZSgiaHRtbCIpJiZkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFt
ZSgiaHRtbCIpWzBdLmxhbmcpe0RhdGUucHJvdG90eXBlLmxvY2FsZT1kb2N1bWVudC5nZXRFbGVt
ZW50c0J5VGFnTmFtZSgiaHRtbCIpWzBdLmxhbmd9RGF0ZS5leHQubG9jYWxlcz17fTtEYXRlLmV4
dC5sb2NhbGVzLmVuPXthOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0
Il0sQTpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIs
IkZyaWRheSIsIlNhdHVyZGF5Il0sYjpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1
biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLEI6WyJKYW51YXJ5IiwiRmVi
cnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0
ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLGM6IiVhICVkICViICVZICVU
ICVaIixwOlsiQU0iLCJQTSJdLFA6WyJhbSIsInBtIl0seDoiJWQvJW0vJXkiLFg6IiVUIn07RGF0
ZS5leHQubG9jYWxlc1siZW4tVVMiXT1EYXRlLmV4dC5sb2NhbGVzLmVuO0RhdGUuZXh0LmxvY2Fs
ZXNbImVuLVVTIl0uYz0iJWEgJWQgJWIgJVkgJXIgJVoiO0RhdGUuZXh0LmxvY2FsZXNbImVuLVVT
Il0ueD0iJUQiO0RhdGUuZXh0LmxvY2FsZXNbImVuLVVTIl0uWD0iJXIiO0RhdGUuZXh0LmxvY2Fs
ZXNbImVuLUdCIl09RGF0ZS5leHQubG9jYWxlcy5lbjtEYXRlLmV4dC5sb2NhbGVzWyJlbi1BVSJd
PURhdGUuZXh0LmxvY2FsZXNbImVuLUdCIl07RGF0ZS5leHQuZm9ybWF0cz17YTpmdW5jdGlvbihh
KXtyZXR1cm4gRGF0ZS5leHQubG9jYWxlc1thLmxvY2FsZV0uYVthLmdldERheSgpXX0sQTpmdW5j
dGlvbihhKXtyZXR1cm4gRGF0ZS5leHQubG9jYWxlc1thLmxvY2FsZV0uQVthLmdldERheSgpXX0s
YjpmdW5jdGlvbihhKXtyZXR1cm4gRGF0ZS5leHQubG9jYWxlc1thLmxvY2FsZV0uYlthLmdldE1v
bnRoKCldfSxCOmZ1bmN0aW9uKGEpe3JldHVybiBEYXRlLmV4dC5sb2NhbGVzW2EubG9jYWxlXS5C
W2EuZ2V0TW9udGgoKV19LGM6InRvTG9jYWxlU3RyaW5nIixDOmZ1bmN0aW9uKGEpe3JldHVybiBE
YXRlLmV4dC51dGlsLnhQYWQocGFyc2VJbnQoYS5nZXRGdWxsWWVhcigpLzEwMCwxMCksMCl9LGQ6
WyJnZXREYXRlIiwiMCJdLGU6WyJnZXREYXRlIiwiICJdLGc6ZnVuY3Rpb24oYSl7cmV0dXJuIERh
dGUuZXh0LnV0aWwueFBhZChwYXJzZUludChEYXRlLmV4dC51dGlsLkcoYSkvMTAwLDEwKSwwKX0s
RzpmdW5jdGlvbihjKXt2YXIgZT1jLmdldEZ1bGxZZWFyKCk7dmFyIGI9cGFyc2VJbnQoRGF0ZS5l
eHQuZm9ybWF0cy5WKGMpLDEwKTt2YXIgYT1wYXJzZUludChEYXRlLmV4dC5mb3JtYXRzLlcoYyks
MTApO2lmKGE+Yil7ZSsrfWVsc2V7aWYoYT09PTAmJmI+PTUyKXtlLS19fXJldHVybiBlfSxIOlsi
Z2V0SG91cnMiLCIwIl0sSTpmdW5jdGlvbihiKXt2YXIgYT1iLmdldEhvdXJzKCklMTI7cmV0dXJu
IERhdGUuZXh0LnV0aWwueFBhZChhPT09MD8xMjphLDApfSxqOmZ1bmN0aW9uKGMpe3ZhciBhPWMt
bmV3IERhdGUoIiIrYy5nZXRGdWxsWWVhcigpKyIvMS8xIEdNVCIpO2ErPWMuZ2V0VGltZXpvbmVP
ZmZzZXQoKSo2MDAwMDt2YXIgYj1wYXJzZUludChhLzYwMDAwLzYwLzI0LDEwKSsxO3JldHVybiBE
YXRlLmV4dC51dGlsLnhQYWQoYiwwLDEwMCl9LG06ZnVuY3Rpb24oYSl7cmV0dXJuIERhdGUuZXh0
LnV0aWwueFBhZChhLmdldE1vbnRoKCkrMSwwKX0sTTpbImdldE1pbnV0ZXMiLCIwIl0scDpmdW5j
dGlvbihhKXtyZXR1cm4gRGF0ZS5leHQubG9jYWxlc1thLmxvY2FsZV0ucFthLmdldEhvdXJzKCk+
PTEyPzE6MF19LFA6ZnVuY3Rpb24oYSl7cmV0dXJuIERhdGUuZXh0LmxvY2FsZXNbYS5sb2NhbGVd
LlBbYS5nZXRIb3VycygpPj0xMj8xOjBdfSxTOlsiZ2V0U2Vjb25kcyIsIjAiXSx1OmZ1bmN0aW9u
KGEpe3ZhciBiPWEuZ2V0RGF5KCk7cmV0dXJuIGI9PT0wPzc6Yn0sVTpmdW5jdGlvbihlKXt2YXIg
YT1wYXJzZUludChEYXRlLmV4dC5mb3JtYXRzLmooZSksMTApO3ZhciBjPTYtZS5nZXREYXkoKTt2
YXIgYj1wYXJzZUludCgoYStjKS83LDEwKTtyZXR1cm4gRGF0ZS5leHQudXRpbC54UGFkKGIsMCl9
LFY6ZnVuY3Rpb24oZSl7dmFyIGM9cGFyc2VJbnQoRGF0ZS5leHQuZm9ybWF0cy5XKGUpLDEwKTt2
YXIgYT0obmV3IERhdGUoIiIrZS5nZXRGdWxsWWVhcigpKyIvMS8xIikpLmdldERheSgpO3ZhciBi
PWMrKGE+NHx8YTw9MT8wOjEpO2lmKGI9PTUzJiYobmV3IERhdGUoIiIrZS5nZXRGdWxsWWVhcigp
KyIvMTIvMzEiKSkuZ2V0RGF5KCk8NCl7Yj0xfWVsc2V7aWYoYj09PTApe2I9RGF0ZS5leHQuZm9y
bWF0cy5WKG5ldyBEYXRlKCIiKyhlLmdldEZ1bGxZZWFyKCktMSkrIi8xMi8zMSIpKX19cmV0dXJu
IERhdGUuZXh0LnV0aWwueFBhZChiLDApfSx3OiJnZXREYXkiLFc6ZnVuY3Rpb24oZSl7dmFyIGE9
cGFyc2VJbnQoRGF0ZS5leHQuZm9ybWF0cy5qKGUpLDEwKTt2YXIgYz03LURhdGUuZXh0LmZvcm1h
dHMudShlKTt2YXIgYj1wYXJzZUludCgoYStjKS83LDEwKTtyZXR1cm4gRGF0ZS5leHQudXRpbC54
UGFkKGIsMCwxMCl9LHk6ZnVuY3Rpb24oYSl7cmV0dXJuIERhdGUuZXh0LnV0aWwueFBhZChhLmdl
dEZ1bGxZZWFyKCklMTAwLDApfSxZOiJnZXRGdWxsWWVhciIsejpmdW5jdGlvbihjKXt2YXIgYj1j
LmdldFRpbWV6b25lT2Zmc2V0KCk7dmFyIGE9RGF0ZS5leHQudXRpbC54UGFkKHBhcnNlSW50KE1h
dGguYWJzKGIvNjApLDEwKSwwKTt2YXIgZT1EYXRlLmV4dC51dGlsLnhQYWQoYiU2MCwwKTtyZXR1
cm4oYj4wPyItIjoiKyIpK2ErZX0sWjpmdW5jdGlvbihhKXtyZXR1cm4gYS50b1N0cmluZygpLnJl
cGxhY2UoL14uKlwoKFteKV0rKVwpJC8sIiQxIil9LCIlIjpmdW5jdGlvbihhKXtyZXR1cm4iJSJ9
fTtEYXRlLmV4dC5hZ2dyZWdhdGVzPXtjOiJsb2NhbGUiLEQ6IiVtLyVkLyV5IixoOiIlYiIsbjoi
XG4iLHI6IiVJOiVNOiVTICVwIixSOiIlSDolTSIsdDoiXHQiLFQ6IiVIOiVNOiVTIix4OiJsb2Nh
bGUiLFg6ImxvY2FsZSJ9O0RhdGUuZXh0LmFnZ3JlZ2F0ZXMuej1EYXRlLmV4dC5mb3JtYXRzLnoo
bmV3IERhdGUoKSk7RGF0ZS5leHQuYWdncmVnYXRlcy5aPURhdGUuZXh0LmZvcm1hdHMuWihuZXcg
RGF0ZSgpKTtEYXRlLmV4dC51bnN1cHBvcnRlZD17fTtEYXRlLnByb3RvdHlwZS5zdHJmdGltZT1m
dW5jdGlvbihhKXtpZighKHRoaXMubG9jYWxlIGluIERhdGUuZXh0LmxvY2FsZXMpKXtpZih0aGlz
LmxvY2FsZS5yZXBsYWNlKC8tW2EtekEtWl0rJC8sIiIpIGluIERhdGUuZXh0LmxvY2FsZXMpe3Ro
aXMubG9jYWxlPXRoaXMubG9jYWxlLnJlcGxhY2UoLy1bYS16QS1aXSskLywiIil9ZWxzZXt0aGlz
LmxvY2FsZT0iZW4tR0IifX12YXIgYz10aGlzO3doaWxlKGEubWF0Y2goLyVbY0RobnJSdFR4WHpa
XS8pKXthPWEucmVwbGFjZSgvJShbY0RobnJSdFR4WHpaXSkvZyxmdW5jdGlvbihlLGQpe3ZhciBn
PURhdGUuZXh0LmFnZ3JlZ2F0ZXNbZF07cmV0dXJuKGc9PSJsb2NhbGUiP0RhdGUuZXh0LmxvY2Fs
ZXNbYy5sb2NhbGVdW2RdOmcpfSl9dmFyIGI9YS5yZXBsYWNlKC8lKFthQWJCQ2RlZ0dISWptTXBQ
U3VVVndXeVklXSkvZyxmdW5jdGlvbihlLGQpe3ZhciBnPURhdGUuZXh0LmZvcm1hdHNbZF07aWYo
dHlwZW9mKGcpPT0ic3RyaW5nIil7cmV0dXJuIGNbZ10oKX1lbHNle2lmKHR5cGVvZihnKT09ImZ1
bmN0aW9uIil7cmV0dXJuIGcuY2FsbChjLGMpfWVsc2V7aWYodHlwZW9mKGcpPT0ib2JqZWN0IiYm
dHlwZW9mKGdbMF0pPT0ic3RyaW5nIil7cmV0dXJuIERhdGUuZXh0LnV0aWwueFBhZChjW2dbMF1d
KCksZ1sxXSl9ZWxzZXtyZXR1cm4gZH19fX0pO2M9bnVsbDtyZXR1cm4gYn07ClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0
aWMtZGFzaGJvYXJkcy9mbGFraW5lc3NfZGFzaGJvYXJkLmh0bWwgYi9Ub29scy9UZXN0UmVzdWx0
U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2ZsYWtpbmVzc19kYXNoYm9hcmQuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4yNzMwNDUxNzI1OTM4YmVjYmZiYTMxMDhjMTIyMDk0MTQ1ZDU1YTlkCi0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9mbGFraW5l
c3NfZGFzaGJvYXJkLmh0bWwKQEAgLTAsMCArMSwyNzI2IEBACis8IS0tIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKK21ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKK25vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKK2NvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
K2luIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKK2Rpc3RyaWJ1dGlvbi4KKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKK2NvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCit0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCitBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCitTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCitM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKK0RBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCitPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorLS0+Cis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorCis8aGVhZD4KKyAgPHRpdGxl
PkNocm9taXVtL1dlYktpdCBUZXN0IEhpc3Rvcnk8L3RpdGxlPgorICA8c3R5bGU+CisgICAgYm9k
eSB7CisgICAgICBmb250LWZhbWlseTogYXJpYWw7CisgICAgICBmb250LXNpemU6IDEzcHg7Cisg
ICAgfQorICAgIGgyIHsKKyAgICAgIGZvbnQtc2l6ZTogMTZweDsKKyAgICAgIG1hcmdpbi1ib3R0
b206IC4yNWVtOworICAgIH0KKyAgICBoMyB7CisgICAgICBmb250LXNpemU6IDEzcHg7CisgICAg
ICBtYXJnaW46IDA7CisgICAgfQorICAgIGlucHV0IHsKKyAgICAgIG1hcmdpbi1yaWdodDogMTVw
eDsKKyAgICB9CisgICAgLmZvcm1zIHsKKyAgICAgIGRpc3BsYXk6IC13ZWJraXQtYm94OworICAg
IH0KKyAgICAuZm9ybXMgPiAqIHsKKyAgICAgIGRpc3BsYXk6IC13ZWJraXQtYm94OworICAgIH0K
KyAgICAuZm9ybXMgc3BhbiB7CisgICAgICBwYWRkaW5nOiAwcHggM3B4OworICAgIH0KKyAgICAj
dGVzdHMtZm9ybSB7CisgICAgICBkaXNwbGF5OiAtd2Via2l0LWJveDsKKyAgICAgIC13ZWJraXQt
Ym94LWZsZXg6IDE7CisgICAgfQorICAgICN0ZXN0cy1mb3JtID4gKiB7CisgICAgICBkaXNwbGF5
OiAtd2Via2l0LWJveDsKKyAgICB9CisgICAgI3Rlc3RzLWlucHV0IHsKKyAgICAgIGRpc3BsYXk6
IC13ZWJraXQtYm94OworICAgICAgLXdlYmtpdC1ib3gtZmxleDogMTsKKyAgICB9CisgICAgI3Jl
c3VsdC1pbnB1dCB7CisgICAgICB3aWR0aDogN2VtOworICAgIH0KKyAgICAudGVzdC1saW5rIHsK
KyAgICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7CisgICAgfQorICAgIC50ZXN0LWxpbmsuYnVpbGRl
ci1uYW1lIHsKKyAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CisgICAgfQorICAgIC50ZXN0LWxp
bmssIC5vcHRpb25zLWNvbnRhaW5lciB7CisgICAgICBwYWRkaW5nOiAwIDJweDsKKyAgICB9Cisg
ICAgLnRlc3QtdGFibGUgeworICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKKyAgICAgIGJvcmRl
ci1zcGFjaW5nOiAxcHg7CisgICAgfQorICAgIC50ZXN0LXRhYmxlIHsKKyAgICAgIHdpZHRoOiAx
MDAlOworICAgIH0KKyAgICAudGVzdC10YWJsZSB0ciB7CisgICAgICBib3JkZXI6IDFweCBzb2xp
ZCByZWQ7CisgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRThFOEU4OworICAgIH0KKyAgICAudGVz
dC10YWJsZSB0Ym9keSB0cjpob3ZlciB7CisgICAgICBvcGFjaXR5OiAuNzsKKyAgICB9CisgICAg
LnRlc3QtdGFibGUgdGggeworICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKKyAgICAg
IC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CisgICAgfQorICAgIC5saW5rLCAuc29ydGFibGUgLmhl
YWRlci10ZXh0IHsKKyAgICAgIGNvbG9yOiBibHVlOworICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1
bmRlcmxpbmU7CisgICAgICBjdXJzb3I6IHBvaW50ZXI7CisgICAgfQorICAgIC50YWJsZS1oZWFk
ZXItY29udGVudCwKKyAgICAudGFibGUtaGVhZGVyLWNvbnRlbnQgKiB7CisgICAgICBkaXNwbGF5
OiAtd2Via2l0LWJveDsKKyAgICB9CisgICAgLnRhYmxlLWhlYWRlci1jb250ZW50ICogeworICAg
ICAgLXdlYmtpdC1ib3gtZmxleDogMTsKKyAgICAgIGN1cnNvcjogcG9pbnRlcjsKKyAgICAgIHdo
aXRlLXNwYWNlOiBub3JtYWw7CisgICAgfQorICAgIC5yZXN1bHRzIHsKKyAgICAgIGN1cnNvcjog
cG9pbnRlcjsKKyAgICAgIHBhZGRpbmc6IDAgMXB4OworICAgICAgZm9udC1zaXplOiAxMHB4Owor
ICAgICAgdGV4dC1hbGlnbjogY2VudGVyOworICAgIH0KKyAgICAjbGVnZW5kIHsKKyAgICAgIHBv
c2l0aW9uOiBmaXhlZDsKKyAgICAgIHRvcDogNXB4OworICAgICAgcmlnaHQ6IDVweDsKKyAgICAg
IHdpZHRoOiA0MDBweDsKKyAgICAgIHBhZGRpbmc6IDJweDsKKyAgICAgIGJvcmRlcjogMnB4IHNv
bGlkIGdyZXk7CisgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKKyAgICAgIHotaW5kZXg6
IDE7CisgICAgfQorICAgICNsZWdlbmQgdWwsICNsZWdlbmQgb2wgeworICAgICAgbWFyZ2luLXRv
cDogMDsKKyAgICAgIG1hcmdpbi1ib3R0b206IDVweDsKKyAgICB9CisgICAgI2xlZ2VuZC1jb250
ZW50cyAqIHsKKyAgICAgIG1hcmdpbjogM3B4IDA7CisgICAgICBwYWRkaW5nOiAwIDJweDsKKyAg
ICAgIGZsb2F0OiBsZWZ0OworICAgICAgYm9yZGVyOiAxcHggc29saWQgZ3JleTsKKyAgICB9Cisg
ICAgLnRlc3QtdGFibGUgLndyb25nLWV4cGVjdGF0aW9ucywKKyAgICAud3JvbmctZXhwZWN0YXRp
b25zIHsKKyAgICAgIGJhY2tncm91bmQtY29sb3I6ICNwaW5rOworICAgIH0KKyAgICAuUCB7Cisg
ICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjOGZkZjVmOworICAgIH0KKyAgICAuTiB7CisgICAgICBi
YWNrZ3JvdW5kLWNvbG9yOiAjZmZmOworICAgIH0KKyAgICAuQyB7CisgICAgICBiYWNrZ3JvdW5k
LWNvbG9yOiAjZmZjMzQzOworICAgIH0KKyAgICAuVCB7CisgICAgICBiYWNrZ3JvdW5kLWNvbG9y
OiAjZmZmYzZjOworICAgIH0KKyAgICAuSSB7CisgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjlm
OworICAgIH0KKyAgICAuUyB7CisgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzZjOworICAgIH0K
KyAgICAuRiB7CisgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTk4MDgwOworICAgIH0KKyAgICAu
TyB7CisgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjOGE3NzAwOworICAgIH0KKyAgICAuWiB7Cisg
ICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjOTZmOworICAgIH0KKyAgICAjbGVnZW5kIC5tZXJnZSB7
CisgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBibGFjazsKKyAgICAgIGNvbG9yOiB3aGl0ZTsKKyAg
ICB9CisgICAgLnRlc3QtdGFibGUgLm1lcmdlIHsKKyAgICAgIGJvcmRlci1yaWdodDogc29saWQg
MnB4ICMwMDA7CisgICAgICBwYWRkaW5nLXJpZ2h0OiAwOworICAgIH0KKyAgICAuc2VwYXJhdG9y
IHsKKyAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGxpZ2h0Z3JheTsKKyAgICAgIGhlaWdodDogMHB4
OworICAgIH0KKyAgICAuZGlmZmVyZW50LXBsYXRmb3JtIHsKKyAgICAgIGNvbG9yOiBncmF5Owor
ICAgICAgZm9udC1zaXplOiAxMHB4OworICAgIH0KKyAgICAjcGFzc2luZy10ZXN0cyB7CisgICAg
ICAtd2Via2l0LWNvbHVtbi1jb3VudDogMzsKKyAgICAgIC13ZWJraXQtY29sdW1uLWdhcDogMjVw
eDsKKyAgICAgIC13ZWJraXQtY29sdW1uLXJ1bGU6IDFweCBkYXNoZWQgYmxhY2s7CisgICAgICAt
bW96LWNvbHVtbi1jb3VudDogMzsKKyAgICAgIC1tb3otY29sdW1uLWdhcDogMjVweDsKKyAgICAg
IC1tb3otY29sdW1uLXJ1bGU6IDFweCBkYXNoZWQgYmxhY2s7CisgICAgfQorICAgIC5ub3QtZm91
bmQgeworICAgICAgY29sb3I6IHJlZDsKKyAgICAgIGZvbnQtc2l6ZTogbGFyZ2U7CisgICAgfQor
ICAgICNsb2FkaW5nLXVpIHsKKyAgICAgIHBvc2l0aW9uOiBmaXhlZDsKKyAgICAgIHRvcDogMDsK
KyAgICAgIGxlZnQ6IDA7CisgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB5ZWxsb3c7CisgICAgICBw
YWRkaW5nOiA1cHg7CisgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgICBmb250LXdlaWdo
dDogYm9sZDsKKyAgICB9CisgICAgI3BvcHVwIHsKKyAgICAgIGJhY2tncm91bmQtY29sb3I6IHdo
aXRlOworICAgICAgei1pbmRleDogMTsKKyAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICAg
IGJvcmRlcjogM3B4IHNvbGlkIGdyZXk7CisgICAgICBwYWRkaW5nOiAzcHg7CisgICAgICAtd2Vi
a2l0LWJveC1zaGFkb3c6IDVweCA1cHggNXB4IHJnYmEoMCwgMCwgMCwgMC41KTsKKyAgICAgIC1t
b3otYm94LXNoYWRvdzogNXB4IDVweCA1cHggcmdiYSgwLCAwLCAwLCAwLjUpOworICAgICAgLXdl
YmtpdC1ib3JkZXItcmFkaXVzOiA1cHg7CisgICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDVweDsK
KyAgICB9CisgICAgI3BvcHVwID4gdWwgeworICAgICAgbWFyZ2luOiAwOworICAgICAgcGFkZGlu
Zy1sZWZ0OiAyMHB4OworICAgIH0KKyAgICAuZXhwZWN0YXRpb25zLWNvbnRhaW5lciB7CisgICAg
ICBjbGVhcjogYm90aDsKKyAgICB9CisgICAgLmV4cGVjdGF0aW9ucy1pdGVtIHsKKyAgICAgIGZs
b2F0OiBsZWZ0OworICAgICAgYm9yZGVyOiAxcHggc29saWQgZ3JleTsKKyAgICAgIGRpc3BsYXk6
IC13ZWJraXQtYm94OworICAgICAgZGlzcGxheTogLW1vei1ib3g7CisgICAgICBwb3NpdGlvbjog
cmVsYXRpdmU7CisgICAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsOworICAgICAgLW1v
ei1ib3gtb3JpZW50OiB2ZXJ0aWNhbDsKKyAgICB9CisgICAgLmV4cGVjdGF0aW9ucy1pdGVtIC5l
eHBlY3RhdGlvbiB7CisgICAgICB3aWR0aDogNDAwcHg7CisgICAgICBoZWlnaHQ6IDMwMHB4Owor
ICAgICAgYm9yZGVyOiAwOworICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIGdyZXk7CisgICAg
ICBvdmVyZmxvdzogYXV0bzsKKyAgICAgIGRpc3BsYXk6IC13ZWJraXQtYm94OworICAgICAgZGlz
cGxheTogLW1vei1ib3g7CisgICAgICAtd2Via2l0LWJveC1mbGV4OiAxOworICAgICAgLW1vei1i
b3gtZmxleDogMTsKKyAgICB9CisgICAgcHJlLmV4cGVjdGF0aW9uIHsKKyAgICAgIHBhZGRpbmc6
IDhweDsKKyAgICAgIG1hcmdpbjogMDsKKyAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7Cisg
ICAgfQorICAgIC5leHBlY3RhdGlvbnMtaXRlbSAubGFyZ2UgeworICAgICAgd2lkdGg6IDgwMHB4
OworICAgICAgaGVpZ2h0OiA2MDBweDsKKyAgICB9CisgICAgLm5vbi13ZWJraXQtcmVzdWx0cyB7
CisgICAgICB3aWR0aDogOTklOworICAgIH0KKyAgICAudXNlZC1wbGF0Zm9ybSB7CisgICAgICBm
bG9hdDogcmlnaHQ7CisgICAgICBjb2xvcjogZGFya2JsdWU7CisgICAgICBtYXJnaW46IDAgNXB4
OworICAgIH0KKyAgICAuZXhwZWN0YXRpb25zLXRpdGxlIHsKKyAgICAgIC8qIEhhY2sgdG8gbWFr
ZSBhIGNvbnRhaW5pbmcgYmxvY2sgZm9yIGFic29sdXRlIHBvc2l0aW9uZWQgZWxlbWVudHMuICov
CisgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgICBjbGVhcjogYm90aDsKKyAgICB9Cisg
ICAgLnRpdGxlIHsKKyAgICAgIC8qIFBvc2l0aW9uIGFic29sdXRlbHkgc28gdGhlIGNvbnRhaW5l
ciBkb2VzIG5vdCBncm93IHRvIGNvbnRhaW4gdGhpcy4gKi8KKyAgICAgIHBvc2l0aW9uOiBhYnNv
bHV0ZTsKKyAgICB9CisgICAgLnBsYXRmb3JtcyB7CisgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7
CisgICAgICByaWdodDogMDsKKyAgICAgIHotaW5kZXg6IDE7CisgICAgfQorICAgIC5maWxlLWJ1
ZyB7CisgICAgICBmb250LXdlaWdodDogYm9sZDsKKyAgICAgIGZvbnQtc2l6ZTogMTFweDsKKyAg
ICB9CisgICAgLnBuZ2NoZWNrc3VtIHsKKyAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICAg
IHJpZ2h0OiAwOworICAgICAgYm90dG9tOiAwOworICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Zm
ZmZjODsKKyAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKKyAgICB9CisgICAgLmV4cGVjdGF0aW9u
cy1pdGVtOmhvdmVyIC5wbmdjaGVja3N1bSB7CisgICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlOwor
ICAgIH0KKyAgPC9zdHlsZT4KKworICA8c2NyaXB0IHNyYz0iYnVpbGRlcnMuanMiPjwvc2NyaXB0
PgorICA8c2NyaXB0IHNyYz0iZGFzaGJvYXJkX2Jhc2UuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0
PgorICAvKioKKyAgICogQGZpbGVvdmVydmlldyBDcmVhdGVzIGEgZGFzaGJvYXJkIGZvciBtdWx0
aXBsZSBydW5zIG9mIGEgZ2l2ZW4gc2V0IG9mIHRlc3RzCisgICAqIG9uIHRoZSBidWlsZGJvdHMu
IFB1bGxzIGluIEpTT05QLWlzaCBmaWxlcyB3aXRoIHRoZSByZXN1bHRzIGZvciBydW5uaW5nCisg
ICAqIHRlc3RzIG9uIGEgZ2l2ZW4gYnVpbGRlciAoaS5lLiBBRERfUkVTVUxUUyhqc29uX2hlcmUp
KSBhbmQgdGhlIGV4cGVjdGF0aW9ucworICAgKiBmb3IgYWxsIHRlc3RzIG9uIGFsbCBidWlsZGVy
cyAoaS5lLiBBRERfRVhQRUNUQVRJT05TKGpzb25faGVyZSkpLgorICAgKgorICAgKiBUaGlzIHNo
b3dzIGZsYWtpbmVzcyBvZiB0aGUgdGVzdHMgYXMgd2VsbCBhcyBydW50aW1lcyBmb3Igc2xvdyB0
ZXN0cy4KKyAgICoKKyAgICogQWxzbywgZWFjaCBjb2x1bW4gaW4gdGhlIGRhc2hib2FyZCBpcyBz
b3J0YWJsZS4KKyAgICoKKyAgICogQ3VycmVudGx5LCBvbmx5IHdlYmtpdCB0ZXN0cyBhcmUgc3Vw
cG9ydGVkLCBidXQgYWRkaW5nIG90aGVyIHRlc3QgdHlwZXMKKyAgICogc2hvdWxkIGp1c3QgcmVx
dWlyZSB0aGUgZm9sbG93aW5nIHN0ZXBzOgorICAgKiAgIC1nZW5lcmF0ZSByZXN1bHRzLmpzb24g
YW5kIGV4cGVjdGF0aW9ucy5qc29uIGZvciB0aGVzZSB0ZXN0cworICAgKiAgIC1jb3B5IHRoZW0g
dG8gdGhlIGFwcHJvcHJpYXRlIGxvY2F0aW9uCisgICAqICAgLWFkZCB0aGUgYnVpbGRlciBuYW1l
IHRvIHRoZSBsaXN0IG9mIGJ1aWxkZXJzIGJlbG93LgorICAgKi8KKworICAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KKyAgLy8gQ09OU1RBTlRTCisgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICB2YXIg
QUxMID0gJ0FMTCc7CisgIHZhciBGT1JXQVJEID0gJ2ZvcndhcmQnOworICB2YXIgQkFDS1dBUkQg
PSAnYmFja3dhcmQnOworICB2YXIgR1RFU1RfRkxBS1lfTUFSS0VSID0gJ1wuRkxBS1lfJzsKKyAg
dmFyIEdURVNUX0ZBSUxTX01BUktFUiA9ICdcLkZBSUxTXyc7CisgIHZhciBURVNUX1VSTF9CQVNF
X1BBVEhfVFJBQyA9ICdodHRwOi8vdHJhYy53ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvTGF5b3V0
VGVzdHMvJzsKKyAgdmFyIFRFU1RfVVJMX0JBU0VfUEFUSCA9ICJodHRwOi8vc3ZuLndlYmtpdC5v
cmcvcmVwb3NpdG9yeS93ZWJraXQvdHJ1bmsvTGF5b3V0VGVzdHMvIjsKKyAgdmFyIFRFU1RfUkVT
VUxUU19CQVNFX1BBVEggPSAnaHR0cDovL2J1aWxkLmNocm9taXVtLm9yZy9mL2Nocm9taXVtL2xh
eW91dF90ZXN0X3Jlc3VsdHMvJzsKKyAgdmFyIFBMQVRGT1JNUyA9IHsKKyAgICAnTUFDJzogJ01B
QycsCisgICAgJ0xJTlVYJzogJ0xJTlVYJywKKyAgICAnV0lOJzogJ1dJTicsCisgICAgJ1dJTi1Y
UCc6ICdXSU4tWFAnLAorICAgICdXSU4tVklTVEEnOiAnV0lOLVZJU1RBJworICB9OworICB2YXIg
UExBVEZPUk1fRkFMTEJBQ0tTID0geworICAgICdXSU4nOiAnQUxMJywKKyAgICAnV0lOLVhQJzog
J1dJTicsCisgICAgJ1dJTi1WSVNUQSc6ICdXSU4nLAorICAgICdMSU5VWCc6ICdBTEwnLAorICAg
ICdNQUMnOiAnQUxMJworICB9OworICB2YXIgQlVJTERfVFlQRVMgPSB7J0RFQlVHJzogJ0RCRycs
ICdSRUxFQVNFJzogJ1JFTEVBU0UnfTsKKyAgdmFyIE1JTl9TRUNPTkRTX0ZPUl9TTE9XX1RFU1Qg
PSA0OworICB2YXIgTUlOX1NFQ09ORFNfRk9SX1NMT1dfVEVTVF9ERUJVRyA9IDIgKiBNSU5fU0VD
T05EU19GT1JfU0xPV19URVNUOworICB2YXIgRkFJTF9SRVNVTFRTID0gWydJTUFHRScsICdJTUFH
RStURVhUJywgJ1RFWFQnLCAnU0lNUExJRklFRCcsICdNSVNTSU5HJ107CisgIHZhciBDSFVOS19T
SVpFID0gMjU7CisgIHZhciBNQVhfUkVTVUxUUyA9IDE1MDA7CisKKyAgLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCisgIC8vIE1ldGhvZHMgYW5kIG9iamVjdHMgZnJvbSBkYXNoYm9hcmRfYmFzZS5qcyB0
byBvdmVycmlkZS4KKyAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgIGZ1bmN0aW9uIGdlbmVyYXRl
UGFnZSgpIHsKKyAgICBpZiAoY3VycmVudFN0YXRlLnVzZVRlc3REYXRhKQorICAgICAgcmV0dXJu
OworCisgICAgdXBkYXRlRGVmYXVsdEJ1aWxkZXJTdGF0ZSgpOworICAgIGRvY3VtZW50LmJvZHku
aW5uZXJIVE1MID0gJzxkaXYgaWQ9ImxvYWRpbmctdWkiPkxPQURJTkcuLi48L2Rpdj4nOworICAg
IHNob3dFcnJvcnMoKTsKKworICAgIC8vIHRlc3RzIGV4cGFuZHMgdG8gYWxsIHRlc3RzIHRoYXQg
bWF0Y2ggdGhlIENTViBsaXN0LgorICAgIC8vIHJlc3VsdCBleHBhbmRzIHRvIGFsbCB0ZXN0cyB0
aGF0IGV2ZXIgaGF2ZSB0aGUgZ2l2ZW4gcmVzdWx0CisgICAgaWYgKGN1cnJlbnRTdGF0ZS50ZXN0
cyB8fCBjdXJyZW50U3RhdGUucmVzdWx0KSB7CisgICAgICBnZW5lcmF0ZVBhZ2VGb3JJbmRpdmlk
dWFsVGVzdHMoZ2V0SW5kaXZpZHVhbFRlc3RzKCkpOworICAgIH0gZWxzZSBpZiAoY3VycmVudFN0
YXRlLmV4cGVjdGF0aW9uc1VwZGF0ZSkgeworICAgICAgZ2VuZXJhdGVQYWdlRm9yRXhwZWN0YXRp
b25zVXBkYXRlKCk7CisgICAgfSBlbHNlIHsKKyAgICAgIGdlbmVyYXRlUGFnZUZvckJ1aWxkZXIo
Y3VycmVudFN0YXRlLmJ1aWxkZXIpOworICAgIH0KKworICAgIGZvciAodmFyIGJ1aWxkZXIgaW4g
YnVpbGRlcnMpIHsKKyAgICAgIHByb2Nlc3NUZXN0UmVzdWx0c0ZvckJ1aWxkZXJBc3luYyhidWls
ZGVyKTsKKyAgICB9CisgIH0KKworICBmdW5jdGlvbiBoYW5kbGVWYWxpZEhhc2hQYXJhbWV0ZXIo
a2V5LCB2YWx1ZSkgeworICAgIHN3aXRjaChrZXkpIHsKKyAgICAgIGNhc2UgJ3Rlc3RzJzoKKyAg
ICAgICAgdmFsaWRhdGVQYXJhbWV0ZXIoY3VycmVudFN0YXRlLCBrZXksIHZhbHVlLAorICAgICAg
ICAgICAgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgIHJldHVybiBpc1ZhbGlkTmFtZSh2YWx1
ZSk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgY2Fz
ZSAncmVzdWx0JzoKKyAgICAgICAgdmFsdWUgPSB2YWx1ZS50b1VwcGVyQ2FzZSgpOworICAgICAg
ICB2YWxpZGF0ZVBhcmFtZXRlcihjdXJyZW50U3RhdGUsIGtleSwgdmFsdWUsCisgICAgICAgICAg
ICBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgZm9yICh2YXIgcmVzdWx0IGluIExBWU9VVF9U
RVNUX0VYUEVDVEFUSU9OU19NQVBfKSB7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IExB
WU9VVF9URVNUX0VYUEVDVEFUSU9OU19NQVBfW3Jlc3VsdF0pCisgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICB9KTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgY2FzZSAn
YnVpbGRlcic6CisgICAgICAgIHZhbGlkYXRlUGFyYW1ldGVyKGN1cnJlbnRTdGF0ZSwga2V5LCB2
YWx1ZSwKKyAgICAgICAgICAgIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICByZXR1cm4gdmFs
dWUgaW4gYnVpbGRlcnM7CisgICAgICAgICAgICB9KTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgICAgY2FzZSAnc29ydENvbHVtbic6CisgICAgICAgIHZhbGlkYXRlUGFyYW1ldGVyKGN1
cnJlbnRTdGF0ZSwga2V5LCB2YWx1ZSwKKyAgICAgICAgICAgIGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgICAvLyBHZXQgYWxsIHBvc3NpYmxlIGhlYWRlcnMgc2luY2UgdGhlIGFjdHVhbCB1c2Vk
IHNldCBvZiBoZWFkZXJzCisgICAgICAgICAgICAgIC8vIGRlcGVuZHMgb24gdGhlIHZhbHVlcyBp
biBjdXJyZW50U3RhdGUsIHdoaWNoIGFyZSBjdXJyZW50bHkgYmVpbmcgc2V0LgorICAgICAgICAg
ICAgICB2YXIgaGVhZGVycyA9IHRhYmxlSGVhZGVycyh0cnVlKTsKKyAgICAgICAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAg
aWYgKHZhbHVlID09CisgICAgICAgICAgICAgICAgICAgICAgICBnZXRTb3J0Q29sdW1uRnJvbVRh
YmxlSGVhZGVyKGhlYWRlcnNbaV0pKQorICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlID09ICd0ZXN0JyB8fCB2
YWx1ZSA9PSAnYnVpbGRlcic7CisgICAgICAgICAgICB9KTsKKworICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgICAgY2FzZSAnc29ydE9yZGVyJzoKKyAgICAgICAgdmFsaWRhdGVQYXJhbWV0ZXIo
Y3VycmVudFN0YXRlLCBrZXksIHZhbHVlLAorICAgICAgICAgICAgZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICAgIHJldHVybiB2YWx1ZSA9PSBGT1JXQVJEIHx8IHZhbHVlID09IEJBQ0tXQVJEOwor
ICAgICAgICAgICAgfSk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgIGNhc2UgJ3Jl
c3VsdHNIZWlnaHQnOgorICAgICAgY2FzZSAndXBkYXRlSW5kZXgnOgorICAgICAgY2FzZSAncmV2
aXNpb24nOgorICAgICAgICB2YWxpZGF0ZVBhcmFtZXRlcihjdXJyZW50U3RhdGUsIGtleSwgTnVt
YmVyKHZhbHVlKSwKKyAgICAgICAgICAgIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICByZXR1
cm4gdmFsdWUubWF0Y2goL15cZCskLyk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgICAgY2FzZSAnc2hvd0NvcnJlY3RFeHBlY3RhdGlvbnMnOgorICAgICAg
Y2FzZSAnc2hvd1dyb25nRXhwZWN0YXRpb25zJzoKKyAgICAgIGNhc2UgJ3Nob3dFeHBlY3RhdGlv
bnMnOgorICAgICAgY2FzZSAnc2hvd0ZsYWt5JzoKKyAgICAgIGNhc2UgJ3Nob3dMYXJnZUV4cGVj
dGF0aW9ucyc6CisgICAgICBjYXNlICdsZWdhY3lFeHBlY3RhdGlvbnNTZW1hbnRpY3MnOgorICAg
ICAgY2FzZSAnc2hvd1NraXBwZWQnOgorICAgICAgY2FzZSAnc2hvd1Nsb3cnOgorICAgICAgY2Fz
ZSAnc2hvd1dvbnRGaXhTa2lwJzoKKyAgICAgIGNhc2UgJ2V4cGVjdGF0aW9uc1VwZGF0ZSc6Cisg
ICAgICBjYXNlICdzaG93UnVuc09uQnVpbGRlclBhZ2UnOgorICAgICAgICBjdXJyZW50U3RhdGVb
a2V5XSA9IHZhbHVlID09ICd0cnVlJzsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfQorCisgIGRlZmF1bHRT
dGF0ZVZhbHVlcyA9IHsKKyAgICBzb3J0T3JkZXI6IEJBQ0tXQVJELAorICAgIHNvcnRDb2x1bW46
ICdmbGFraW5lc3MnLAorICAgIHNob3dFeHBlY3RhdGlvbnM6IGZhbHNlLAorICAgIHNob3dGbGFr
eTogdHJ1ZSwKKyAgICBzaG93TGFyZ2VFeHBlY3RhdGlvbnM6IGZhbHNlLAorICAgIGxlZ2FjeUV4
cGVjdGF0aW9uc1NlbWFudGljczogdHJ1ZSwKKyAgICBzaG93Q29ycmVjdEV4cGVjdGF0aW9uczog
IWlzTGF5b3V0VGVzdFJlc3VsdHMoKSwKKyAgICBzaG93V3JvbmdFeHBlY3RhdGlvbnM6ICFpc0xh
eW91dFRlc3RSZXN1bHRzKCksCisgICAgc2hvd1dvbnRGaXhTa2lwOiAhaXNMYXlvdXRUZXN0UmVz
dWx0cygpLAorICAgIHNob3dTbG93OiAhaXNMYXlvdXRUZXN0UmVzdWx0cygpLAorICAgIHNob3dT
a2lwcGVkOiAhaXNMYXlvdXRUZXN0UmVzdWx0cygpLAorICAgIGV4cGVjdGF0aW9uc1VwZGF0ZTog
ZmFsc2UsCisgICAgc2hvd1J1bnNPbkJ1aWxkZXJQYWdlOiBmYWxzZSwKKyAgICB1cGRhdGVJbmRl
eDogMCwKKyAgICBidWlsZGVyOiBkZWZhdWx0QnVpbGRlck5hbWUsCisgICAgcmVzdWx0c0hlaWdo
dDogMzAwLAorICAgIHJldmlzaW9uOiBudWxsCisgIH07CisKKyAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCisgIC8vIEdMT0JBTFMKKyAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgdmFyIHBlckJ1
aWxkZXJQbGF0Zm9ybUFuZEJ1aWxkVHlwZSA9IHt9OworICB2YXIgcGVyQnVpbGRlckZhaWx1cmVz
ID0ge307CisgIC8vIE1hcCBvZiBidWlsZGVyIHRvIGFycmF5cyBvZiB0ZXN0cyB0aGF0IGFyZSBs
aXN0ZWQgaW4gdGhlIGV4cGVjdGF0aW9ucyBmaWxlCisgIC8vIGJ1dCBoYXZlIGZvciB0aGF0IGJ1
aWxkZXIuCisgIHZhciBwZXJCdWlsZGVyV2l0aEV4cGVjdGF0aW9uc0J1dE5vRmFpbHVyZXMgPSB7
fTsKKyAgLy8gTWFwIG9mIGJ1aWxkZXIgdG8gYXJyYXlzIG9mIHBhdGhzIHRoYXQgYXJlIHNraXBw
ZWQuIFRoaXMgc2hvd3MgdGhlIHJhdworICAvLyBwYXRoIHVzZWQgaW4gdGVzdF9leHBlY3RhdGlv
bnMudHh0IHJhdGhlciB0aGFuIHRoZSB0ZXN0IHBhdGggc2luY2Ugd2UKKyAgLy8gZG9uJ3QgYWN0
dWFsbHkgaGF2ZSBhbnkgZGF0YSBoZXJlIGZvciBza2lwcGVkIHRlc3RzLgorICB2YXIgcGVyQnVp
bGRlclNraXBwZWRQYXRocyA9IHt9OworICAvLyBNYXBzIHRlc3QgcGF0aCB0byBhbiBhcnJheSBv
ZiB7YnVpbGRlciwgdGVzdFJlc3VsdHN9IG9iamVjdHMuCisgIHZhciB0ZXN0VG9SZXN1bHRzTWFw
ID0ge307CisgIC8vIFRlc3RzIHRoYXQgdGhlIHVzZXIgd2FudHMgdG8gdXBkYXRlIGV4cGVjdGF0
aW9ucyBmb3IuCisgIHZhciBjb25maXJtZWRUZXN0cyA9IHt9OworCisgIGZ1bmN0aW9uIGNyZWF0
ZVJlc3VsdHNPYmplY3RGb3JUZXN0KHRlc3QsIGJ1aWxkZXIpIHsKKyAgICByZXR1cm4geworICAg
ICAgdGVzdDogdGVzdCwKKyAgICAgIGJ1aWxkZXI6IGJ1aWxkZXIsCisgICAgICAvLyBIVE1MIGZv
ciBkaXNwbGF5IG9mIHRoZSByZXN1bHRzIGluIHRoZSBmbGFraW5lc3MgY29sdW1uCisgICAgICBo
dG1sOiAnJywKKyAgICAgIGZsaXBzOiAwLAorICAgICAgc2xvd2VzdFRpbWU6IDAsCisgICAgICBz
bG93ZXN0Tm9uVGltZW91dENyYXNoVGltZTogMCwKKyAgICAgIG1lZXRzRXhwZWN0YXRpb25zOiB0
cnVlLAorICAgICAgaXNXb250Rml4U2tpcDogZmFsc2UsCisgICAgICBpc0ZsYWt5OiBmYWxzZSwK
KyAgICAgIC8vIFNvcnRlZCBzdHJpbmcgb2YgbWlzc2luZyBleHBlY3RhdGlvbnMKKyAgICAgIG1p
c3Npbmc6ICcnLAorICAgICAgLy8gU3RyaW5nIG9mIGV4dHJhIGV4cGVjdGF0aW9ucyAoaS5lLiBl
eHBlY3RhdGlvbnMgdGhhdCBuZXZlciBvY2N1cikuCisgICAgICBleHRyYTogJycsCisgICAgICAv
LyBIVE1MIGZvciBidWcgSURzIGZvciB0aGlzIHRlc3QgZm9yIGFsbCBwbGF0Zm9ybXMKKyAgICAg
IGJ1Z3NIVE1MOiAnJywKKyAgICAgIC8vIEhUTUwgZm9yIGV4cGVjdGF0aW9ucyBmb3IgdGhpcyB0
ZXN0IGZvciBhbGwgcGxhdGZvcm1zCisgICAgICBleHBlY3RhdGlvbnNIVE1MOiAnJywKKyAgICAg
IC8vIEhUTUwgZm9yIG1vZGlmaWVycyBmb3IgdGhpcyB0ZXN0IGZvciBhbGwgcGxhdGZvcm1zCisg
ICAgICBtb2RpZmllcnNIVE1MOiAnJywKKyAgICAgIHJhd1Jlc3VsdHM6ICcnLAorICAgICAgcGVy
Y2VudEZhaWxlZDogMCwKKyAgICAgIC8vIExpc3Qgb2YgYWxsIHRoZSByZXN1bHRzIHRoZSB0ZXN0
IGFjdHVhbGx5IGhhcy4KKyAgICAgIGFjdHVhbFJlc3VsdHM6IFtdCisgICAgfTsKKyAgfQorCisg
IGZ1bmN0aW9uIGdldE1hdGNoaW5nRWxlbWVudChzdHJpbmdUb01hdGNoLCBlbGVtZW50c01hcCkg
eworICAgIGZvciAodmFyIGVsZW1lbnQgaW4gZWxlbWVudHNNYXApIHsKKyAgICAgIGlmIChzdHJp
bmdDb250YWlucyhzdHJpbmdUb01hdGNoLCBlbGVtZW50c01hcFtlbGVtZW50XSkpCisgICAgICAg
IHJldHVybiBlbGVtZW50OworICAgIH0KKyAgfQorCisgIGZ1bmN0aW9uIGdldFBsYXRmb3JtQW5k
QnVpbGRUeXBlKGJ1aWxkZXJOYW1lKSB7CisgICAgaWYgKCFwZXJCdWlsZGVyUGxhdGZvcm1BbmRC
dWlsZFR5cGVbYnVpbGRlck5hbWVdKSB7CisgICAgICAvLyBJZiB0aGUgYnVpbGQgbmFtZSBkb2Vz
IG5vdCBjb250YWluIGEgcGxhdGZvcm0KKyAgICAgIC8vIG9yIGJ1aWxkIHR5cGUsIGFzc3VtZSBX
aW5kb3dzIFJlbGVhc2UuCisgICAgICB2YXIgY3VycmVudEJ1aWxkVXBwZXJjYXNlID0gYnVpbGRl
ck5hbWUudG9VcHBlckNhc2UoKTsKKyAgICAgIHZhciBwbGF0Zm9ybSA9IGdldE1hdGNoaW5nRWxl
bWVudChjdXJyZW50QnVpbGRVcHBlcmNhc2UsIFBMQVRGT1JNUykgfHwKKyAgICAgICAgICAnV0lO
JzsKKyAgICAgIHZhciBidWlsZFR5cGUgPSBnZXRNYXRjaGluZ0VsZW1lbnQoY3VycmVudEJ1aWxk
VXBwZXJjYXNlLCBCVUlMRF9UWVBFUykgfHwKKyAgICAgICAgICAnUkVMRUFTRSc7CisgICAgICBw
ZXJCdWlsZGVyUGxhdGZvcm1BbmRCdWlsZFR5cGVbYnVpbGRlck5hbWVdID0ge3BsYXRmb3JtOiBw
bGF0Zm9ybSwKKyAgICAgICAgICBidWlsZFR5cGU6IGJ1aWxkVHlwZX07CisgICAgfQorICAgIHJl
dHVybiBwZXJCdWlsZGVyUGxhdGZvcm1BbmRCdWlsZFR5cGVbYnVpbGRlck5hbWVdOworICB9CisK
KyAgZnVuY3Rpb24gaXNEZWJ1ZyhidWlsZGVyTmFtZSkgeworICAgIHJldHVybiBnZXRQbGF0Zm9y
bUFuZEJ1aWxkVHlwZShidWlsZGVyTmFtZSkuYnVpbGRUeXBlID09ICdERUJVRyc7CisgIH0KKwor
ICAvKioKKyAgICogUmV0dXJucyB0aGUgZXhwZWN0YXRpb24gc3RyaW5nIGZvciB0aGUgZ2l2ZW4g
c2luZ2xlIGNoYXJhY3RlciByZXN1bHQuCisgICAqIFRoaXMgc3RyaW5nIHNob3VsZCBtYXRjaCB0
aGUgZXhwZWN0YXRpb25zIHRoYXQgYXJlIHB1dCBpbnRvCisgICAqIHRlc3RfZXhwZWN0YXRpb25z
LnB5LgorICAgKgorICAgKiBGb3IgZXhhbXBsZSwgaWYgd2Ugc3RhcnQgZXhwbGljaXRseSBsaXN0
aW5nIElNQUdFIHJlc3VsdCBmYWlsdXJlcywKKyAgICogdGhpcyBmdW5jdGlvbiBzaG91bGQgc3Rh
cnQgcmV0dXJuaW5nICdJTUFHRScuCisgICAqLworICBmdW5jdGlvbiBnZXRFeHBlY3RhdGlvbnNG
aWxlU3RyaW5nRm9yUmVzdWx0KHJlc3VsdCkgeworICAgIC8vIEZvciB0aGUgcHVycG9zZXMgb2Yg
Y29tcGFyaW5nIGFnYWluc3QgdGhlIGV4cGVjYXRpb25zIG9mIGEgdGVzdCwKKyAgICAvLyBjb25z
aWRlciBzaW1wbGlmaWVkIGRpZmYgZmFpbHVyZXMgYXMganVzdCB0ZXh0IGZhaWx1cmVzIHNpbmNl
CisgICAgLy8gdGhlIHRlc3RfZXhwZWN0YXRpb25zIGZpbGUgZG9lc24ndCB0cmVhdCB0aGVtIHNw
ZWNpYWxseS4KKyAgICBpZiAocmVzdWx0ID09ICdTJykKKyAgICAgIHJldHVybiAnVEVYVCc7CisK
KyAgICBpZiAocmVzdWx0ID09ICdOJykKKyAgICAgIHJldHVybiAnJzsKKworICAgIHJldHVybiBn
ZXRFeHBlY3RhdGlvbnNNYXAoKVtyZXN1bHRdOworICB9CisKKyAgLy8gTWFwIG9mIGFsbCB0ZXN0
cyB0byB0cnVlIHZhbHVlcy4gVGhpcyBpcyBqdXN0IHNvIHdlIGNhbiBoYXZlIHRoZSBsaXN0IG9m
CisgIC8vIGFsbCB0ZXN0cyBhY3Jvc3MgYWxsIHRoZSBidWlsZGVycy4KKyAgdmFyIGFsbFRlc3Rz
OworCisgIC8qKgorICAgKiBSZXR1cm5zIGEgbWFwIG9mIGFsbCB0ZXN0cyB0byB0cnVlIHZhbHVl
cy4gVGhpcyBpcyBqdXN0IHNvIHdlIGNhbiBoYXZlIHRoZQorICAgKiBsaXN0IG9mIGFsbCB0ZXN0
cyBhY3Jvc3MgYWxsIHRoZSBidWlsZGVycy4KKyAgICovCisgIGZ1bmN0aW9uIGdldEFsbFRlc3Rz
KCkgeworICAgIGlmICghYWxsVGVzdHMpIHsKKyAgICAgIGFsbFRlc3RzID0ge307CisgICAgICBm
b3IgKHZhciBidWlsZGVyIGluIGJ1aWxkZXJzKSB7CisgICAgICAgIGFkZFRlc3RzRm9yQnVpbGRl
cihidWlsZGVyLCBhbGxUZXN0cyk7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiBhbGxUZXN0
czsKKyAgfQorCisgIC8qKgorICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIHRlc3RzIHRvIGJlIGRp
c3BsYXllZCBpbiB0aGUgaW5kaXZpZHVhbCB0ZXN0cyB2aWV3LgorICAgKiBOb3RlIHRoYXQgYSBk
aXJlY3RvcnkgY2FuIGJlIGxpc3RlZCBhcyBhIHRlc3QsIHNvIHdlIGV4cGFuZCB0aGF0IGludG8g
YWxsCisgICAqIHRlc3RzIGluIHRoZSBkaXJlY3RvcnkuCisgICAqLworICBmdW5jdGlvbiBnZXRJ
bmRpdmlkdWFsVGVzdHMoKSB7CisgICAgaWYgKGN1cnJlbnRTdGF0ZS5yZXN1bHQpCisgICAgICBy
ZXR1cm4gZ2V0QWxsVGVzdHNXaXRoUmVzdWx0KGN1cnJlbnRTdGF0ZS5yZXN1bHQpOworCisgICAg
aWYgKCFjdXJyZW50U3RhdGUudGVzdHMpCisgICAgICByZXR1cm4gW107CisKKyAgICByZXR1cm4g
Z2V0SW5kaXZpZHVhbFRlc3RzRm9yU3Vic3RyaW5nTGlzdCgpOworICB9CisKKyAgZnVuY3Rpb24g
Z2V0SW5kaXZpZHVhbFRlc3RzRm9yU3Vic3RyaW5nTGlzdCgpIHsKKyAgICAvLyBDb252ZXJ0IHdp
bmRvd3Mgc2xhc2hlcyB0byB1bml4IHNsYXNoZXMuCisgICAgdmFyIHRlc3RzID0gY3VycmVudFN0
YXRlLnRlc3RzLnJlcGxhY2UoL1xcL2csICcvJyk7CisgICAgdmFyIHNlcGFyYXRvciA9IHN0cmlu
Z0NvbnRhaW5zKHRlc3RzLCAnICcpID8gJyAnIDogJywnOworICAgIHZhciB0ZXN0TGlzdCA9IHRl
c3RzLnNwbGl0KHNlcGFyYXRvcik7CisKKyAgICBpZiAoIWlzTGF5b3V0VGVzdFJlc3VsdHMoKSkg
eworICAgICAgdGVzdExpc3QuZm9yRWFjaChmdW5jdGlvbihlbGVtZW50KSB7CisgICAgICAgIC8v
IE1ha2Ugc3VyZSB0byBzZWFyY2ggZm9yIHRoZSBmbGFreS9mYWlscyBhbmQgbm9uLWZsYWt5L25v
bi1mYWlscworICAgICAgICAvLyBuYW1lcyBmb3IgYSB0ZXN0LgorICAgICAgICAvLyBlLmcuIGZv
ciB0ZXN0IEZvby5CYXIsIGFsc28gc2VhcmNoIGZvciBGb28uRkxBS1lfQmFyLgorICAgICAgICBp
ZiAoc3RyaW5nQ29udGFpbnMoZWxlbWVudCwgR1RFU1RfRkxBS1lfTUFSS0VSKSkgeworICAgICAg
ICAgIHRlc3RMaXN0LnB1c2goZWxlbWVudC5yZXBsYWNlKEdURVNUX0ZMQUtZX01BUktFUiwgJy4n
KSk7CisgICAgICAgIH0gZWxzZSBpZiAoc3RyaW5nQ29udGFpbnMoZWxlbWVudCwgR1RFU1RfRkFJ
TFNfTUFSS0VSKSkgeworICAgICAgICAgIHRlc3RMaXN0LnB1c2goZWxlbWVudC5yZXBsYWNlKEdU
RVNUX0ZBSUxTX01BUktFUiwgJy4nKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgdGVz
dExpc3QucHVzaChlbGVtZW50LnJlcGxhY2UoJy4nLCBHVEVTVF9GTEFLWV9NQVJLRVIpKTsKKyAg
ICAgICAgICB0ZXN0TGlzdC5wdXNoKGVsZW1lbnQucmVwbGFjZSgnLicsIEdURVNUX0ZBSUxTX01B
UktFUikpOworICAgICAgICB9CisgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBQdXQgdGhlIHRl
c3RzIGludG8gYW4gb2JqZWN0IGZpcnN0IGFuZCB0aGVuIG1vdmUgdGhlbSBpbnRvIGFuIGFycmF5
CisgICAgLy8gYXMgYSB3YXkgb2YgZGVkdXBpbmcuCisgICAgdmFyIHRlc3RzTWFwID0ge307Cisg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXN0TGlzdC5sZW5ndGg7IGkrKykgeworICAgICAgdmFy
IHBhdGggPSB0ZXN0TGlzdFtpXTsKKworICAgICAgLy8gSWdub3JlIHdoaXRlc3BhY2UgZW50cmll
cyBhcyB0aGV5J2QgbWF0Y2ggZXZlcnkgdGVzdC4KKyAgICAgIGlmIChwYXRoLm1hdGNoKC9eXHMq
JC8pKQorICAgICAgICBjb250aW51ZTsKKworICAgICAgdmFyIGFsbFRlc3RzID0gZ2V0QWxsVGVz
dHMoKTsKKyAgICAgIHZhciBoYXNBbnlNYXRjaGVzID0gZmFsc2U7CisgICAgICBmb3IgKHZhciB0
ZXN0IGluIGFsbFRlc3RzKSB7CisgICAgICAgIGlmIChjYXNlSW5zZW5zaXRpdmVDb250YWlucyh0
ZXN0LCBwYXRoKSkgeworICAgICAgICAgIHRlc3RzTWFwW3Rlc3RdID0gMTsKKyAgICAgICAgICBo
YXNBbnlNYXRjaGVzID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICAvLyBJZiBh
IHBhdGggZG9lc24ndCBtYXRjaCBhbnkgdGVzdHMsIHRoZW4gYXNzdW1lIGl0J3MgYSBmdWxsIHBh
dGgKKyAgICAgIC8vIHRvIGEgdGVzdCB0aGF0IHBhc3NlcyBvbiBhbGwgYnVpbGRlcnMuCisgICAg
ICBpZiAoIWhhc0FueU1hdGNoZXMpIHsKKyAgICAgICAgdGVzdHNNYXBbcGF0aF0gPSAxOworICAg
ICAgfQorICAgIH0KKworICAgIHZhciB0ZXN0c0FycmF5ID0gW107CisgICAgZm9yICh2YXIgdGVz
dCBpbiB0ZXN0c01hcCkgeworICAgICAgdGVzdHNBcnJheS5wdXNoKHRlc3QpOworICAgIH0KKyAg
ICByZXR1cm4gdGVzdHNBcnJheTsKKyAgfQorCisgIC8qKgorICAgKiBSZXR1cm5zIHdoZXRoZXIg
dGhpcyB0ZXN0J3Mgc2xvd2VzdCB0aW1lIGlzIGFib3ZlIHRoZSBjdXRvZmYgZm9yCisgICAqIGJl
aW5nIGEgc2xvdyB0ZXN0LgorICAgKi8KKyAgZnVuY3Rpb24gaXNTbG93VGVzdChyZXN1bHRzRm9y
VGVzdCkgeworICAgIHZhciBtYXhUaW1lID0gaXNEZWJ1ZyhyZXN1bHRzRm9yVGVzdC5idWlsZGVy
KSA/CisgICAgICAgIE1JTl9TRUNPTkRTX0ZPUl9TTE9XX1RFU1RfREVCVUcgOgorICAgICAgICBN
SU5fU0VDT05EU19GT1JfU0xPV19URVNUOworICAgIHJldHVybiByZXN1bHRzRm9yVGVzdC5zbG93
ZXN0Tm9uVGltZW91dENyYXNoVGltZSA+IG1heFRpbWU7CisgIH0KKworICAvKioKKyAgICogUmV0
dXJucyB3aGV0aGVyIHRoaXMgdGVzdCdzIHNsb3dlc3QgdGltZSBpcyAqd2VsbCogYmVsb3cgdGhl
IGN1dG9mZiBmb3IKKyAgICogYmVpbmcgYSBzbG93IHRlc3QuCisgICAqLworICBmdW5jdGlvbiBp
c0Zhc3RUZXN0KHJlc3VsdHNGb3JUZXN0KSB7CisgICAgdmFyIG1heFRpbWUgPSBpc0RlYnVnKHJl
c3VsdHNGb3JUZXN0LmJ1aWxkZXIpID8KKyAgICAgICAgTUlOX1NFQ09ORFNfRk9SX1NMT1dfVEVT
VF9ERUJVRyA6CisgICAgICAgIE1JTl9TRUNPTkRTX0ZPUl9TTE9XX1RFU1Q7CisgICAgcmV0dXJu
IHJlc3VsdHNGb3JUZXN0LnNsb3dlc3ROb25UaW1lb3V0Q3Jhc2hUaW1lIDwgbWF4VGltZSAvIDI7
CisgIH0KKworICBmdW5jdGlvbiBnZXRBbGxUZXN0c1dpdGhSZXN1bHQocmVzdWx0KSB7CisgICAg
cHJvY2Vzc1Rlc3RSdW5zRm9yQWxsQnVpbGRlcnMoKTsKKyAgICB2YXIgdGVzdHMgPSBnZXRBbGxU
ZXN0cygpOworICAgIHZhciByZXRWYWwgPSBbXTsKKyAgICBmb3IgKHZhciB0ZXN0IGluIHRlc3Rz
KSB7CisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRlc3RUb1Jlc3VsdHNNYXBbdGVzdF0ubGVu
Z3RoOyBpKyspIHsKKyAgICAgICAgaWYgKHRlc3RUb1Jlc3VsdHNNYXBbdGVzdF1baV0uYWN0dWFs
UmVzdWx0cy5pbmRleE9mKHJlc3VsdCkgIT0gLTEpIHsKKyAgICAgICAgICByZXRWYWwucHVzaCh0
ZXN0KTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICBy
ZXR1cm4gcmV0VmFsOworICB9CisKKworICAvKioKKyAgICogQWRkcyBhbGwgdGhlIHRlc3RzIGZv
ciB0aGUgZ2l2ZW4gYnVpbGRlciB0byB0aGUgdGVzdE1hcFRvUG9wdWxhdGUuCisgICAqLworICBm
dW5jdGlvbiBhZGRUZXN0c0ZvckJ1aWxkZXIoYnVpbGRlciwgdGVzdE1hcFRvUG9wdWxhdGUpIHsK
KyAgICB2YXIgdGVzdHMgPSByZXN1bHRzQnlCdWlsZGVyW2J1aWxkZXJdLnRlc3RzOworICAgIGZv
ciAodmFyIHRlc3QgaW4gdGVzdHMpIHsKKyAgICAgIHRlc3RNYXBUb1BvcHVsYXRlW3Rlc3RdID0g
dHJ1ZTsKKyAgICB9CisgIH0KKworICAvLyBNYXAgb2YgYWxsIHRlc3RzIHRvIHRydWUgdmFsdWVz
IGJ5IHBsYXRmb3JtIGFuZCBidWlsZCB0eXBlLgorICAvLyBlLmcuIGFsbFRlc3RzQnlQbGF0Zm9y
bUFuZEJ1aWxkVHlwZVsnV0lOJ11bJ0RFQlVHJ10gd2lsbCBoYXZlIHRoZSB1bmlvbgorICAvLyBv
ZiBhbGwgdGVzdHMgcnVuIG9uIHRoZSB3aW4tZGVidWcgYnVpbGRlcnMuCisgIHZhciBhbGxUZXN0
c0J5UGxhdGZvcm1BbmRCdWlsZFR5cGUgPSB7fTsKKyAgZm9yICh2YXIgcGxhdGZvcm0gaW4gUExB
VEZPUk1TKSB7CisgICAgYWxsVGVzdHNCeVBsYXRmb3JtQW5kQnVpbGRUeXBlW3BsYXRmb3JtXSA9
IHt9OworICB9CisKKyAgLyoqCisgICAqIE1hcCBvZiBhbGwgdGVzdHMgdG8gdHJ1ZSB2YWx1ZXMg
YnkgcGxhdGZvcm0gYW5kIGJ1aWxkIHR5cGUuCisgICAqIGUuZy4gYWxsVGVzdHNCeVBsYXRmb3Jt
QW5kQnVpbGRUeXBlWydXSU4nXVsnREVCVUcnXSB3aWxsIGhhdmUgdGhlIHVuaW9uCisgICAqIG9m
IGFsbCB0ZXN0cyBydW4gb24gdGhlIHdpbi1kZWJ1ZyBidWlsZGVycy4KKyAgICovCisgIGZ1bmN0
aW9uIGdldEFsbFRlc3RzV2l0aFNhbWVQbGF0Zm9ybUFuZEJ1aWxkVHlwZShwbGF0Zm9ybSwgYnVp
bGRUeXBlKSB7CisgICAgaWYgKCFhbGxUZXN0c0J5UGxhdGZvcm1BbmRCdWlsZFR5cGVbcGxhdGZv
cm1dW2J1aWxkVHlwZV0pIHsKKyAgICAgIHZhciB0ZXN0cyA9IHt9OworICAgICAgZm9yICh2YXIg
dGhpc0J1aWxkZXIgaW4gYnVpbGRlcnMpIHsKKyAgICAgICAgdmFyIHRoaXNCdWlsZGVyQnVpbGRJ
bmZvID0gZ2V0UGxhdGZvcm1BbmRCdWlsZFR5cGUodGhpc0J1aWxkZXIpOworICAgICAgICBpZiAo
dGhpc0J1aWxkZXJCdWlsZEluZm8uYnVpbGRUeXBlID09IGJ1aWxkVHlwZSAmJgorICAgICAgICAg
ICAgdGhpc0J1aWxkZXJCdWlsZEluZm8ucGxhdGZvcm0gPT0gcGxhdGZvcm0pIHsKKyAgICAgICAg
ICBhZGRUZXN0c0ZvckJ1aWxkZXIodGhpc0J1aWxkZXIsIHRlc3RzKTsKKyAgICAgICAgfQorICAg
ICAgfQorICAgICAgYWxsVGVzdHNCeVBsYXRmb3JtQW5kQnVpbGRUeXBlW3BsYXRmb3JtXVtidWls
ZFR5cGVdID0gdGVzdHM7CisgICAgfQorCisgICAgcmV0dXJuIGFsbFRlc3RzQnlQbGF0Zm9ybUFu
ZEJ1aWxkVHlwZVtwbGF0Zm9ybV1bYnVpbGRUeXBlXTsKKyAgfQorCisgIGZ1bmN0aW9uIGFkZEhU
TUxUb0luZGl2aWR1YWxPcHRpb25zQXJyYXkoYXJyYXksIGh0bWwsIGlzQ3VycmVudFBsYXRmb3Jt
KSB7CisgICAgaWYgKGh0bWwpIHsKKyAgICAgIGFycmF5LnB1c2goJzxkaXYgY2xhc3M9Im9wdGlv
bicgKworICAgICAgICAgIChpc0N1cnJlbnRQbGF0Zm9ybSA/ICcnIDogJyBkaWZmZXJlbnQtcGxh
dGZvcm0nKSArICciPicgKyBodG1sICsKKyAgICAgICAgICAnPC9kaXY+Jyk7CisgICAgfQorICB9
CisKKyAgZnVuY3Rpb24gYWRkSHRtbFRvT3B0aW9uc0FycmF5cyhodG1sQXJyYXlzLCBleHBlY3Rh
dGlvbnMsIG1vZGlmaWVycywgYnVncywKKyAgICAgIGlzQ3VycmVudFBsYXRmb3JtKSB7CisgICAg
YWRkSFRNTFRvSW5kaXZpZHVhbE9wdGlvbnNBcnJheShodG1sQXJyYXlzLmV4cGVjdGF0aW9ucywg
ZXhwZWN0YXRpb25zLAorICAgICAgICBpc0N1cnJlbnRQbGF0Zm9ybSk7CisgICAgYWRkSFRNTFRv
SW5kaXZpZHVhbE9wdGlvbnNBcnJheShodG1sQXJyYXlzLm1vZGlmaWVycywgbW9kaWZpZXJzLAor
ICAgICAgICBpc0N1cnJlbnRQbGF0Zm9ybSk7CisgICAgYWRkSFRNTFRvSW5kaXZpZHVhbE9wdGlv
bnNBcnJheShodG1sQXJyYXlzLmJ1Z3MsIGdldEh0bWxGb3JCdWdzKGJ1Z3MpLAorICAgICAgICBp
c0N1cnJlbnRQbGF0Zm9ybSk7CisgIH0KKworICBmdW5jdGlvbiBnZXRFeHBlY3RhdGlvbnModGVz
dCwgcGxhdGZvcm0sIGJ1aWxkVHlwZSkgeworICAgIHZhciB0ZXN0T2JqZWN0ID0gYWxsRXhwZWN0
YXRpb25zW3Rlc3RdOworICAgIGlmICghdGVzdE9iamVjdCkKKyAgICAgIHJldHVybiBudWxsOwor
CisgICAgdmFyIHBsYXRmb3JtT2JqZWN0OworICAgIHdoaWxlIChwbGF0Zm9ybSAmJiAhKHBsYXRm
b3JtT2JqZWN0ID0gdGVzdE9iamVjdFtwbGF0Zm9ybV0pKSB7CisgICAgICBwbGF0Zm9ybSA9IFBM
QVRGT1JNX0ZBTExCQUNLU1twbGF0Zm9ybV07CisgICAgfQorCisgICAgaWYgKHBsYXRmb3JtT2Jq
ZWN0KSB7CisgICAgICBpZiAocGxhdGZvcm1PYmplY3RbYnVpbGRUeXBlXSkKKyAgICAgICAgcmV0
dXJuIHBsYXRmb3JtT2JqZWN0W2J1aWxkVHlwZV0KKworICAgICAgaWYgKHBsYXRmb3JtT2JqZWN0
W0FMTF0pCisgICAgICAgIHJldHVybiBwbGF0Zm9ybU9iamVjdFtBTExdOworCisgICAgICBpZiAo
dGVzdE9iamVjdFtBTExdKSB7CisgICAgICAgIHZhciBhbGxQbGF0Zm9ybU9iamVjdCA9IHRlc3RP
YmplY3RbQUxMXTsKKyAgICAgICAgaWYgKGFsbFBsYXRmb3JtT2JqZWN0W2J1aWxkVHlwZV0pCisg
ICAgICAgICAgcmV0dXJuIGFsbFBsYXRmb3JtT2JqZWN0W2J1aWxkVHlwZV0KKworICAgICAgICBp
ZiAoYWxsUGxhdGZvcm1PYmplY3RbQUxMXSkKKyAgICAgICAgICByZXR1cm4gYWxsUGxhdGZvcm1P
YmplY3RbQUxMXQorICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgIGZ1
bmN0aW9uIHBvcHVsYXRlRXhwZWN0YXRpb25zRGF0YShyZXN1bHRzT2JqKSB7CisgICAgdmFyIHRl
c3QgPSByZXN1bHRzT2JqLnRlc3Q7CisKKyAgICB2YXIgYnVpbGRJbmZvID0gZ2V0UGxhdGZvcm1B
bmRCdWlsZFR5cGUocmVzdWx0c09iai5idWlsZGVyKTsKKyAgICB2YXIgcGxhdGZvcm0gPSBidWls
ZEluZm8ucGxhdGZvcm07CisgICAgdmFyIGJ1aWxkVHlwZSA9IGJ1aWxkSW5mby5idWlsZFR5cGU7
CisKKyAgICB2YXIgdGhpc1BsYXRmb3JtRXhwZWN0YXRpb25zID0gZ2V0RXhwZWN0YXRpb25zKHRl
c3QsIHBsYXRmb3JtLCBidWlsZFR5cGUpOworCisgICAgdmFyIGh0bWxBcnJheXMgPSB7fTsKKyAg
ICBodG1sQXJyYXlzLmV4cGVjdGF0aW9ucyA9IFtdOworICAgIGh0bWxBcnJheXMubW9kaWZpZXJz
ID0gW107CisgICAgaHRtbEFycmF5cy5idWdzID0gW107CisKKyAgICB2YXIgdGVzdHMgPSByZXN1
bHRzQnlCdWlsZGVyW3Jlc3VsdHNPYmouYnVpbGRlcl0udGVzdHM7CisKKyAgICB2YXIgdGVzdE9i
amVjdCA9IGFsbEV4cGVjdGF0aW9uc1t0ZXN0XTsKKyAgICB2YXIgdXNlZEV4cGVjdGF0aW9ucyA9
IHt9OworCisgICAgZm9yICh2YXIgcGxhdGZvcm0gaW4gYWxsRXhwZWN0YXRpb25zW3Rlc3RdKSB7
CisgICAgICB2YXIgcGxhdGZvcm1PYmplY3QgPSB0ZXN0T2JqZWN0W3BsYXRmb3JtXTsKKyAgICAg
IGZvciAodmFyIGJ1aWxkVHlwZSBpbiBwbGF0Zm9ybU9iamVjdCkgeworICAgICAgICB2YXIgdGhp
c0V4cGVjdGF0aW9ucyA9IHBsYXRmb3JtT2JqZWN0W2J1aWxkVHlwZV07CisgICAgICAgIHZhciBt
b2RpZmllcnMgPSB0aGlzRXhwZWN0YXRpb25zLm1vZGlmaWVyczsKKworICAgICAgICAvLyBBIHNl
dCBvZiBtb2RpZmllcnMvZXhwZWN0YXRpb25zIGNhbiBhcHBseSB0byBtdWx0aXBsZSBwbGF0Zm9y
bXMuCisgICAgICAgIC8vIE9ubHkgYWRkIEhUTUwgZm9yIGVhY2ggZW50cnkgb25jZS4KKyAgICAg
ICAgaWYgKHVzZWRFeHBlY3RhdGlvbnNbbW9kaWZpZXJzXSkKKyAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICB1c2VkRXhwZWN0YXRpb25zW21vZGlmaWVyc10gPSB0cnVlOworCisgICAgICAg
IHZhciBidWdzID0gbW9kaWZpZXJzLm1hdGNoKC9CVUcoV0t8Q1IpP1xkKy9nKTsKKyAgICAgICAg
aWYgKGJ1Z3MpIHsKKyAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGJ1Z3MubGVuZ3RoOyBq
KyspIHsKKyAgICAgICAgICAgIG1vZGlmaWVycyA9IG1vZGlmaWVycy5yZXBsYWNlKGJ1Z3Nbal0s
ICcnKTsKKyAgICAgICAgICB9CisgICAgICAgICAgbW9kaWZpZXJzID0gdHJpbVN0cmluZyhtb2Rp
ZmllcnMpOworICAgICAgICAgIGJ1Z3MgPSBidWdzLmpvaW4oJyAnKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICBidWdzID0gJyc7CisgICAgICAgIH0KKworICAgICAgICB2YXIgZXhwZWN0
YXRpb25zID0gdGhpc0V4cGVjdGF0aW9ucy5leHBlY3RhdGlvbnM7CisgICAgICAgIGlmICh0aGlz
RXhwZWN0YXRpb25zID09IHRoaXNQbGF0Zm9ybUV4cGVjdGF0aW9ucykgeworICAgICAgICAgIHJl
c3VsdHNPYmouYnVncyA9IGJ1Z3M7CisgICAgICAgICAgcmVzdWx0c09iai5leHBlY3RhdGlvbnMg
PSBleHBlY3RhdGlvbnM7CisgICAgICAgICAgcmVzdWx0c09iai5tb2RpZmllcnMgPSBtb2RpZmll
cnM7CisgICAgICAgICAgcmVzdWx0c09iai5pc1dvbnRGaXhTa2lwID0gc3RyaW5nQ29udGFpbnMo
bW9kaWZpZXJzLCAnV09OVEZJWCcpIHx8CisgICAgICAgICAgICAgIHN0cmluZ0NvbnRhaW5zKG1v
ZGlmaWVycywgJ1NLSVAnKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBhZGRIdG1sVG9P
cHRpb25zQXJyYXlzKGh0bWxBcnJheXMsIGV4cGVjdGF0aW9ucywgbW9kaWZpZXJzLCBidWdzLAor
ICAgICAgICAgICAgICBmYWxzZSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICBp
ZiAocmVzdWx0c09iai5leHBlY3RhdGlvbnMpIHsKKyAgICAgIGFkZEh0bWxUb09wdGlvbnNBcnJh
eXMoaHRtbEFycmF5cywgcmVzdWx0c09iai5leHBlY3RhdGlvbnMsCisgICAgICAgICAgcmVzdWx0
c09iai5tb2RpZmllcnMsIHJlc3VsdHNPYmouYnVncywgdHJ1ZSk7CisgICAgfQorCisgICAgcmVz
dWx0c09iai5idWdzSFRNTCArPSBodG1sQXJyYXlzLmJ1Z3Muam9pbignPGRpdiBjbGFzcz1zZXBh
cmF0b3I+PC9kaXY+Jyk7CisgICAgcmVzdWx0c09iai5leHBlY3RhdGlvbnNIVE1MICs9CisgICAg
ICAgIGh0bWxBcnJheXMuZXhwZWN0YXRpb25zLmpvaW4oJzxkaXYgY2xhc3M9c2VwYXJhdG9yPjwv
ZGl2PicpOworICAgIHJlc3VsdHNPYmoubW9kaWZpZXJzSFRNTCArPQorICAgICAgICBodG1sQXJy
YXlzLm1vZGlmaWVycy5qb2luKCc8ZGl2IGNsYXNzPXNlcGFyYXRvcj48L2Rpdj4nKTsKKyAgfQor
CisgIGZ1bmN0aW9uIGFkZEZhbGxiYWNrcyhhZGRGbiwgY2FuZGlkYXRlcywgdmFsaWRWYWx1ZXMp
IHsKKyAgICB2YXIgaGFzQW55VmFsaWRWYWx1ZXMgPSBmYWxzZTsKKyAgICBmb3IgKHZhciBpID0g
MDsgaSA8IGNhbmRpZGF0ZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgIGlmIChjYW5kaWRhdGVzW2ld
IGluIHZhbGlkVmFsdWVzKSB7CisgICAgICAgIGhhc0FueVZhbGlkVmFsdWVzID0gdHJ1ZTsKKyAg
ICAgICAgYWRkRm4oY2FuZGlkYXRlc1tpXSk7CisgICAgICB9CisgICAgfQorICAgIGlmICghaGFz
QW55VmFsaWRWYWx1ZXMpCisgICAgICBhZGRGbihBTEwpOworICB9CisKKyAgZnVuY3Rpb24gYWRk
VGVzdFRvQWxsRXhwZWN0YXRpb25zKHRlc3QsIGV4cGVjdGF0aW9ucykgeworICAgIGZvciAodmFy
IGogPSAwOyBqIDwgZXhwZWN0YXRpb25zLmxlbmd0aDsgaisrKSB7CisgICAgICB2YXIgbW9kaWZp
ZXJzID0gZXhwZWN0YXRpb25zW2pdLm1vZGlmaWVycy5zcGxpdCgnICcpOworICAgICAgYWRkRmFs
bGJhY2tzKGZ1bmN0aW9uKHBsYXRmb3JtS2V5KSB7CisgICAgICAgIGFkZEZhbGxiYWNrcyhmdW5j
dGlvbihidWlsZFR5cGVLZXkpIHsKKyAgICAgICAgICAvLyBTZXR0aW5nIHRoZSBBTEwga2V5IG92
ZXJyaWRlcyBhbnkgcHJldmlvdXNseSBzZWVuIGV4cGVjdGF0aW9ucy4KKyAgICAgICAgICBpZiAo
cGxhdGZvcm1LZXkgPT0gQUxMKSB7CisgICAgICAgICAgICAvLyBUT0RPKG9qYW4pOiBUaGlzIGlz
IGJyb2tlbi4gUExBVEZPUk1TIGlzIGFuIG9iamVjdCwgbm90IGFuIGFycmF5LgorICAgICAgICAg
ICAgLy8gRmlndXJlIG91dCBpZiB3ZSBzaG91bGQganVzdCBiZSBkZWxldGluZyB0aGlzIG9yIGZp
eGluZyBpdC4KKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgUExBVEZPUk1TLmxlbmd0
aDsgaSsrKSB7CisgICAgICAgICAgICAgIGlmIChQTEFURk9STVNbaV0gaW4gYWxsRXhwZWN0YXRp
b25zW3Rlc3RdKSB7CisgICAgICAgICAgICAgICAgLy8gU2V0dGluZyB0aGUgQUxMIGtleSBvdmVy
cmlkZXMgYW55IHByZXZpb3VzbHkgc2VlbgorICAgICAgICAgICAgICAgIC8vIGV4cGVjdGF0aW9u
cy4KKyAgICAgICAgICAgICAgICBpZiAoYnVpbGRUeXBlS2V5ID09IEFMTCkKKyAgICAgICAgICAg
ICAgICAgIGFsbEV4cGVjdGF0aW9uc1t0ZXN0XVtQTEFURk9STVNbaV1dID0ge307CisgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9IGVsc2UgaWYgKGJ1aWxkVHlwZUtl
eSA9PSBBTEwgJiYgYWxsRXhwZWN0YXRpb25zW3Rlc3RdKSB7CisgICAgICAgICAgICBhbGxFeHBl
Y3RhdGlvbnNbdGVzdF1bcGxhdGZvcm1LZXldID0ge30KKyAgICAgICAgICB9CisKKyAgICAgICAg
ICBpZiAoIWFsbEV4cGVjdGF0aW9uc1t0ZXN0XSkKKyAgICAgICAgICAgIGFsbEV4cGVjdGF0aW9u
c1t0ZXN0XSA9IHt9OworCisgICAgICAgICAgdmFyIHRlc3RIb2xkZXIgPSBhbGxFeHBlY3RhdGlv
bnNbdGVzdF07CisgICAgICAgICAgaWYgKCF0ZXN0SG9sZGVyW3BsYXRmb3JtS2V5XSkKKyAgICAg
ICAgICAgIHRlc3RIb2xkZXJbcGxhdGZvcm1LZXldID0ge30KKworICAgICAgICAgIHRlc3RIb2xk
ZXJbcGxhdGZvcm1LZXldW2J1aWxkVHlwZUtleV0gPSBleHBlY3RhdGlvbnNbal07CisgICAgICAg
IH0sIG1vZGlmaWVycywgQlVJTERfVFlQRVMpOworICAgICAgfSwgbW9kaWZpZXJzLCBQTEFURk9S
TVMpOworICAgIH0KKyAgfQorCisgIC8qKgorICAgKiBEYXRhIHN0cnVjdHVyZSB0byBob2xkIHRo
ZSBwcm9jZXNzZWQgZXhwZWN0YXRpb25zLgorICAgKiBhbGxFeHBlY3RhdGlvbnNbdGVzdFBhdGhd
W3BsYXRmb3JtXVtidWlsZFR5cGVdIGdldHMgdGhlIG9iamVjdCB0aGF0IGhhcworICAgKiBleHBl
Y3RhdGlvbnMgYW5kIG1vZGlmaWVycyBwcm9wZXJ0aWVzIGZvciB0aGlzIHBsYXRmb3JtL2J1aWxk
VHlwZS4KKyAgICoKKyAgICogcGxhdGZvcm0gYW5kIGJ1aWxkVHlwZSBib3RoIGdvIHRocm91Z2gg
ZmFsbGJhY2sgc2V0cyBvZiBrZXlzIGZyb20gbW9zdAorICAgKiBzcGVjaWZpYyBrZXkgdG8gbGVh
c3Qgc3BlY2lmaWMuIEZvciBleGFtcGxlLCBvbiBXaW5kb3dzIFZpc3RhLCB3ZSBmaXJzdAorICAg
KiBjaGVjayB0aGUgcGxhdGZvcm0gV0lOLVZJU1RBLCBpZiB0aGVyZSdzIG5vIHN1Y2ggb2JqZWN0
LCB3ZSBjaGVjayBXSU4sCisgICAqIHRoZW4gZmluYWxseSB3ZSBjaGVjayBBTEwuIEZvciBidWls
ZCB0eXBlcywgd2UgY2hlY2sgdGhlIGN1cnJlbnQKKyAgICogYnVpbGRUeXBlLCB0aGVuIEFMTC4K
KyAgICovCisgIHZhciBhbGxFeHBlY3RhdGlvbnM7CisKKyAgZnVuY3Rpb24gcHJvY2Vzc0V4cGVj
dGF0aW9ucygpIHsKKyAgICBpZiAoYWxsRXhwZWN0YXRpb25zKQorICAgICAgcmV0dXJuIGFsbEV4
cGVjdGF0aW9uczsKKworICAgIGFsbEV4cGVjdGF0aW9ucyA9IHt9OworCisgICAgdmFyIGV4cGVj
dGF0aW9uc0FycmF5ID0gW107CisgICAgZm9yICh2YXIgcGF0aCBpbiBleHBlY3RhdGlvbnNCeVRl
c3QpIHsKKyAgICAgIGV4cGVjdGF0aW9uc0FycmF5LnB1c2goCisgICAgICAgICAge3BhdGg6IHBh
dGgsIGV4cGVjdGF0aW9uczogZXhwZWN0YXRpb25zQnlUZXN0W3BhdGhdfSk7CisgICAgfQorCisg
ICAgLy8gU29ydCB0aGUgYXJyYXkgdG8gaGl0IG1vcmUgc3BlY2lmaWMgcGF0aHMgbGFzdC4gTW9y
ZSBzcGVjaWZpYworICAgIC8vIHBhdGhzIChlLmcuIGZvby9iYXIvYmF6Lmh0bWwpIG92ZXJyaWRl
IGVudHJpZXMgZm9yIGxlc3Mtc3BlY2lmaWMgb25lcworICAgIC8vIChlLmcuIGZvby9iYXIpLgor
ICAgIGV4cGVjdGF0aW9uc0FycmF5LnNvcnQoZ2V0QWxwaGFudW1lcmljQ29tcGFyZSgncGF0aCcp
KTsKKworICAgIHZhciBhbGxUZXN0cyA9IGdldEFsbFRlc3RzKCk7CisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBleHBlY3RhdGlvbnNBcnJheS5sZW5ndGg7IGkrKykgeworICAgICAgdmFyIHBhdGgg
PSBleHBlY3RhdGlvbnNBcnJheVtpXS5wYXRoOworICAgICAgdmFyIGV4cGVjdGF0aW9ucyA9IGV4
cGVjdGF0aW9uc0FycmF5W2ldLmV4cGVjdGF0aW9uczsKKworICAgICAgdmFyIHBhdGhNYXRjaGVz
QW55VGVzdCA9IGZhbHNlOworICAgICAgaWYgKGFsbFRlc3RzW3BhdGhdKSB7CisgICAgICAgIHBh
dGhNYXRjaGVzQW55VGVzdCA9IHRydWU7CisgICAgICAgIGFkZFRlc3RUb0FsbEV4cGVjdGF0aW9u
cyhwYXRoLCBleHBlY3RhdGlvbnMpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yICh2YXIg
dGVzdCBpbiBhbGxUZXN0cykgeworICAgICAgICAgIGlmIChzdGFydHNXaXRoKHRlc3QsIHBhdGgp
KSB7CisgICAgICAgICAgICBwYXRoTWF0Y2hlc0FueVRlc3QgPSB0cnVlOworICAgICAgICAgICAg
YWRkVGVzdFRvQWxsRXhwZWN0YXRpb25zKHRlc3QsIGV4cGVjdGF0aW9ucyk7CisgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmICghcGF0aE1hdGNoZXNBbnlUZXN0KQor
ICAgICAgICBhZGRUZXN0VG9BbGxFeHBlY3RhdGlvbnMocGF0aCwgZXhwZWN0YXRpb25zKTsKKyAg
ICB9CisgIH0KKworICBmdW5jdGlvbiBwcm9jZXNzTWlzc2luZ1Rlc3RzV2l0aEV4cGVjdGF0aW9u
cyhidWlsZGVyLCBwbGF0Zm9ybSwgYnVpbGRUeXBlKSB7CisgICAgdmFyIG5vRmFpbHVyZXMgPSBb
XTsKKyAgICB2YXIgc2tpcHBlZCA9IFtdOworCisgICAgdmFyIGFsbFRlc3RzRm9yUGxhdGZvcm1B
bmRCdWlsZFR5cGUgPQorICAgICAgICBnZXRBbGxUZXN0c1dpdGhTYW1lUGxhdGZvcm1BbmRCdWls
ZFR5cGUocGxhdGZvcm0sIGJ1aWxkVHlwZSk7CisgICAgZm9yICh2YXIgdGVzdCBpbiBhbGxFeHBl
Y3RhdGlvbnMpIHsKKyAgICAgIHZhciBleHBlY3RhdGlvbnMgPSBnZXRFeHBlY3RhdGlvbnModGVz
dCwgcGxhdGZvcm0sIGJ1aWxkVHlwZSk7CisKKyAgICAgIGlmICghZXhwZWN0YXRpb25zKQorICAg
ICAgICBjb250aW51ZTsKKworICAgICAgLy8gVGVzdCBoYXMgZXhwZWN0YXRpb25zLCBidXQgbm8g
cmVzdWx0IGluIHRoZSBidWlsZGVycyByZXN1bHRzLgorICAgICAgLy8gVGhpcyBtZWFucyBpdCdz
IGVpdGhlciBTS0lQIG9yIHBhc3NlcyBvbiBhbGwgYnVpbGRzLgorICAgICAgaWYgKCFhbGxUZXN0
c0ZvclBsYXRmb3JtQW5kQnVpbGRUeXBlW3Rlc3RdICYmCisgICAgICAgICAgIXN0cmluZ0NvbnRh
aW5zKGV4cGVjdGF0aW9ucy5tb2RpZmllcnMsICdXT05URklYJykpIHsKKyAgICAgICAgaWYgKHN0
cmluZ0NvbnRhaW5zKGV4cGVjdGF0aW9ucy5tb2RpZmllcnMsICdTS0lQJykpIHsKKyAgICAgICAg
ICBza2lwcGVkLnB1c2godGVzdCk7CisgICAgICAgIH0gZWxzZSBpZiAoIWV4cGVjdGF0aW9ucy5l
eHBlY3RhdGlvbnMubWF0Y2goL15ccypQQVNTXHMqJC8pKSB7CisgICAgICAgICAgLy8gRG9uJ3Qg
c2hvdyB0ZXN0cyBleHBlY3RlZCB0byBhbHdheXMgcGFzcy4gVGhpcyBpcyB1c2VkIGluIHdheXMg
bGlrZQorICAgICAgICAgIC8vIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgLy8gZm9vL2JhciA9
IEZBSUwKKyAgICAgICAgICAvLyBmb28vYmFyL2Jhei5odG1sID0gUEFTUworICAgICAgICAgIG5v
RmFpbHVyZXMucHVzaCh7dGVzdDogdGVzdCwgZXhwZWN0YXRpb25zOiBleHBlY3RhdGlvbnMuZXhw
ZWN0YXRpb25zLAorICAgICAgICAgICAgICBtb2RpZmllcnM6IGV4cGVjdGF0aW9ucy5tb2RpZmll
cnN9KTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIHBlckJ1aWxkZXJTa2lwcGVk
UGF0aHNbYnVpbGRlcl0gPSBza2lwcGVkLnNvcnQoKTsKKyAgICBwZXJCdWlsZGVyV2l0aEV4cGVj
dGF0aW9uc0J1dE5vRmFpbHVyZXNbYnVpbGRlcl0gPSBub0ZhaWx1cmVzLnNvcnQoKTsKKyAgfQor
CisgIGZ1bmN0aW9uIHByb2Nlc3NUZXN0UmVzdWx0c0ZvckJ1aWxkZXJBc3luYyhidWlsZGVyKSB7
CisgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgcHJvY2Vzc1Rlc3RSdW5zRm9y
QnVpbGRlcihidWlsZGVyKTsKKyAgICAgIH0sIDApOworICB9CisKKyAgZnVuY3Rpb24gcHJvY2Vz
c1Rlc3RSdW5zRm9yQWxsQnVpbGRlcnMoKSB7CisgICAgZm9yICh2YXIgYnVpbGRlciBpbiBidWls
ZGVycykKKyAgICAgIHByb2Nlc3NUZXN0UnVuc0ZvckJ1aWxkZXIoYnVpbGRlcik7CisgIH0KKwor
ICBmdW5jdGlvbiBwcm9jZXNzVGVzdFJ1bnNGb3JCdWlsZGVyKGJ1aWxkZXJOYW1lKSB7CisgICAg
aWYgKHBlckJ1aWxkZXJGYWlsdXJlc1tidWlsZGVyTmFtZV0pIHsKKyAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoIXJlc3VsdHNCeUJ1aWxkZXJbYnVpbGRlck5hbWVdKSB7CisgICAgICBj
b25zb2xlLmVycm9yKCdObyB0ZXN0cyBmb3VuZCBmb3IgJyArIGJ1aWxkZXJOYW1lKTsKKyAgICAg
IHBlckJ1aWxkZXJGYWlsdXJlc1tidWlsZGVyTmFtZV0gPSBbXTsKKyAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICB2YXIgc3RhcnQgPSBEYXRlLm5vdygpOworCisgICAgcHJvY2Vzc0V4cGVjdGF0
aW9ucygpOworCisgICAgdmFyIGJ1aWxkSW5mbyA9IGdldFBsYXRmb3JtQW5kQnVpbGRUeXBlKGJ1
aWxkZXJOYW1lKTsKKyAgICB2YXIgcGxhdGZvcm0gPSBidWlsZEluZm8ucGxhdGZvcm07CisgICAg
dmFyIGJ1aWxkVHlwZSA9IGJ1aWxkSW5mby5idWlsZFR5cGU7CisgICAgcHJvY2Vzc01pc3NpbmdU
ZXN0c1dpdGhFeHBlY3RhdGlvbnMoYnVpbGRlck5hbWUsIHBsYXRmb3JtLCBidWlsZFR5cGUpOwor
CisgICAgdmFyIGZhaWx1cmVzID0gW107CisgICAgdmFyIGFsbFRlc3RzRm9yVGhpc0J1aWxkZXIg
PSByZXN1bHRzQnlCdWlsZGVyW2J1aWxkZXJOYW1lXS50ZXN0czsKKworICAgIGZvciAodmFyIHRl
c3QgaW4gYWxsVGVzdHNGb3JUaGlzQnVpbGRlcikgeworICAgICAgdmFyIHJlc3VsdHNGb3JUZXN0
ID0gY3JlYXRlUmVzdWx0c09iamVjdEZvclRlc3QodGVzdCwgYnVpbGRlck5hbWUpOworICAgICAg
cG9wdWxhdGVFeHBlY3RhdGlvbnNEYXRhKHJlc3VsdHNGb3JUZXN0KTsKKworICAgICAgdmFyIHJh
d1Rlc3QgPSByZXN1bHRzQnlCdWlsZGVyW2J1aWxkZXJOYW1lXS50ZXN0c1t0ZXN0XTsKKyAgICAg
IHJlc3VsdHNGb3JUZXN0LnJhd1RpbWVzID0gcmF3VGVzdC50aW1lczsKKyAgICAgIHZhciByYXdS
ZXN1bHRzID0gcmF3VGVzdC5yZXN1bHRzOworICAgICAgcmVzdWx0c0ZvclRlc3QucmF3UmVzdWx0
cyA9IHJhd1Jlc3VsdHM7CisKKyAgICAgIC8vIFRPRE86IFN3aXRjaCB0byBnZXRUZXN0UmVzdWx0
c0J5QnVpbGQKKyAgICAgIHZhciB0aW1lcyA9IHJlc3VsdHNGb3JUZXN0LnJhd1RpbWVzOworICAg
ICAgdmFyIG51bVRpbWVzU2VlbiA9IDA7CisgICAgICB2YXIgbnVtUmVzdWx0c1NlZW4gPSAwOwor
ICAgICAgdmFyIHJlc3VsdHNJbmRleCA9IDA7CisgICAgICB2YXIgY3VycmVudFJlc3VsdDsKKyAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGltZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgbnVt
VGltZXNTZWVuICs9IHRpbWVzW2ldW1JMRS5MRU5HVEhdOworCisgICAgICAgIHdoaWxlIChyYXdS
ZXN1bHRzW3Jlc3VsdHNJbmRleF0gJiYgbnVtVGltZXNTZWVuID4gKG51bVJlc3VsdHNTZWVuICsK
KyAgICAgICAgICAgIHJhd1Jlc3VsdHNbcmVzdWx0c0luZGV4XVtSTEUuTEVOR1RIXSkpIHsKKyAg
ICAgICAgICBudW1SZXN1bHRzU2VlbiArPSByYXdSZXN1bHRzW3Jlc3VsdHNJbmRleF1bUkxFLkxF
TkdUSF07CisgICAgICAgICAgcmVzdWx0c0luZGV4Kys7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAocmF3UmVzdWx0cyAmJiByYXdSZXN1bHRzW3Jlc3VsdHNJbmRleF0pCisgICAgICAgICAgY3Vy
cmVudFJlc3VsdCA9IHJhd1Jlc3VsdHNbcmVzdWx0c0luZGV4XVtSTEUuVkFMVUVdOworCisgICAg
ICAgIHZhciB0aW1lID0gdGltZXNbaV1bUkxFLlZBTFVFXQorCisgICAgICAgIC8vIElnbm9yZSB0
aW1lcyBmb3IgY3Jhc2hpbmcvdGltZW91dCBydW5zIGZvciB0aGUgc2FrZSBvZiBzZWVpbmcgaWYK
KyAgICAgICAgLy8gYSB0ZXN0IHNob3VsZCBiZSBtYXJrZWQgc2xvdy4KKyAgICAgICAgaWYgKGN1
cnJlbnRSZXN1bHQgIT0gJ0MnICYmIGN1cnJlbnRSZXN1bHQgIT0gJ1QnKSB7CisgICAgICAgICAg
cmVzdWx0c0ZvclRlc3Quc2xvd2VzdE5vblRpbWVvdXRDcmFzaFRpbWUgPQorICAgICAgICAgICAg
ICBNYXRoLm1heChyZXN1bHRzRm9yVGVzdC5zbG93ZXN0Tm9uVGltZW91dENyYXNoVGltZSwgdGlt
ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0c0ZvclRlc3Quc2xvd2VzdFRpbWUgPSBNYXRo
Lm1heChyZXN1bHRzRm9yVGVzdC5zbG93ZXN0VGltZSwgdGltZSk7CisgICAgICB9CisKKyAgICAg
IHByb2Nlc3NNaXNzaW5nQW5kRXh0cmFFeHBlY3RhdGlvbnMocmVzdWx0c0ZvclRlc3QpOworCisg
ICAgICBmYWlsdXJlcy5wdXNoKHJlc3VsdHNGb3JUZXN0KTsKKworICAgICAgaWYgKCF0ZXN0VG9S
ZXN1bHRzTWFwW3Rlc3RdKQorICAgICAgICB0ZXN0VG9SZXN1bHRzTWFwW3Rlc3RdID0gW107Cisg
ICAgICB0ZXN0VG9SZXN1bHRzTWFwW3Rlc3RdLnB1c2gocmVzdWx0c0ZvclRlc3QpOworICAgIH0K
KworICAgIHBlckJ1aWxkZXJGYWlsdXJlc1tidWlsZGVyTmFtZV0gPSBmYWlsdXJlczsKKyAgICBs
b2dUaW1lKCdwcm9jZXNzVGVzdFJ1bnNGb3JCdWlsZGVyOiAnICsgYnVpbGRlck5hbWUsIHN0YXJ0
KTsKKyAgfQorCisgIGZ1bmN0aW9uIHByb2Nlc3NNaXNzaW5nQW5kRXh0cmFFeHBlY3RhdGlvbnMo
cmVzdWx0c0ZvclRlc3QpIHsKKyAgICAvLyBIZXVyaXN0aWMgZm9yIGRldGVybWluaW5nIHdoZXRo
ZXIgZXhwZWN0YXRpb25zIGFwcGx5IHRvIGEgZ2l2ZW4gdGVzdDoKKyAgICAvLyAtSWYgYSB0ZXN0
IHJlc3VsdCBoYXBwZW5zIDwgTUlOX1JVTlNfRk9SX0ZMQUtFLCB0aGVuIGNvbnNpZGVyIGl0IGEg
Zmxha3kKKyAgICAvLyByZXN1bHQgYW5kIGluY2x1ZGUgaXQgaW4gdGhlIGxpc3Qgb2YgZXhwZWN0
ZWQgcmVzdWx0cy4KKyAgICAvLyAtT3RoZXJ3aXNlLCBncmFiIHRoZSBmaXJzdCBjb250aWd1b3Vz
IHNldCBvZiBydW5zIHdpdGggdGhlIHNhbWUgcmVzdWx0CisgICAgLy8gZm9yID49IE1JTl9SVU5T
X0ZPUl9GTEFLRSBhbmQgaWdub3JlIGFsbCBmb2xsb3dpbmcgcnVucyA+PQorICAgIC8vIE1JTl9S
VU5TX0ZPUl9GTEFLRS4KKyAgICAvLyBUaGlzIGxldHMgdXMgcnVsZSBvdXQgY29tbW9uIGNhc2Vz
IG9mIGEgdGVzdCBjaGFuZ2luZyBleHBlY3RhdGlvbnMgZm9yCisgICAgLy8gYSBmZXcgcnVucywg
dGhlbiBiZWluZyBmaXhlZCBvciBvdGhlcndpc2UgbW9kaWZpZWQgaW4gYSBub24tZmxha3kgd2F5
LgorICAgIHZhciByYXdSZXN1bHRzID0gcmVzdWx0c0ZvclRlc3QucmF3UmVzdWx0czsKKworICAg
IC8vIElmIHRoZSBmaXJzdCByZXN1bHQgaXMgbm8tZGF0YSB0aGF0IG1lYW5zIHRoZSB0ZXN0IGlz
IHNraXBwZWQgb3IgaXMKKyAgICAvLyBiZWluZyBydW4gb24gYSBkaWZmZXJlbnQgYnVpbGRlciAo
ZS5nLiBtb3ZlZCBmcm9tIG9uZSBzaGFyZCB0byBhbm90aGVyKS4KKyAgICAvLyBJZ25vcmUgdGhl
c2UgcmVzdWx0cyBzaW5jZSB3ZSBoYXZlIG5vIHJlYWwgZGF0YSBhYm91dCB3aGF0J3MgZ29pbmcg
b24uCisgICAgaWYgKHJhd1Jlc3VsdHNbMF1bUkxFLlZBTFVFXSA9PSAnTicpCisgICAgICByZXR1
cm47CisKKyAgICAvLyBPbmx5IGNvbnNpZGVyIGZsYWtlIGlmIGl0IGRvZXNuJ3QgaGFwcGVuIHR3
aWNlIGluIGEgcm93LgorICAgIHZhciBNSU5fUlVOU19GT1JfRkxBS0UgPSAyOworICAgIHZhciBy
ZXN1bHRzTWFwID0ge30KKyAgICB2YXIgbnVtUmVzdWx0c1NlZW4gPSAwOworICAgIHZhciBoYXZl
U2Vlbk5vbkZsYWtlUmVzdWx0ID0gZmFsc2U7CisgICAgdmFyIG51bVJlYWxSZXN1bHRzID0gMDsK
KyAgICB2YXIgZmFpbGVkQ291bnQgPSAwOworCisgICAgdmFyIHNlZW5SZXN1bHRzID0ge307Cisg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYXdSZXN1bHRzLmxlbmd0aDsgaSsrKSB7CisgICAgICB2
YXIgbnVtUmVzdWx0cyA9IHJhd1Jlc3VsdHNbaV1bUkxFLkxFTkdUSF07CisgICAgICBudW1SZXN1
bHRzU2VlbiArPSBudW1SZXN1bHRzOworCisgICAgICB2YXIgcmVzdWx0ID0gcmF3UmVzdWx0c1tp
XVtSTEUuVkFMVUVdOworICAgICAgaWYgKGlzRmFpbGluZ1Jlc3VsdChyZXN1bHQpKSB7CisgICAg
ICAgIGZhaWxlZENvdW50ICs9IG51bVJlc3VsdHM7CisgICAgICB9CisKKyAgICAgIHZhciBoYXNN
aW5SdW5zID0gbnVtUmVzdWx0cyA+PSBNSU5fUlVOU19GT1JfRkxBS0U7CisgICAgICBpZiAoaGF2
ZVNlZW5Ob25GbGFrZVJlc3VsdCAmJiBoYXNNaW5SdW5zKSB7CisgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgfSBlbHNlIGlmIChoYXNNaW5SdW5zKSB7CisgICAgICAgIGhhdmVTZWVuTm9uRmxha2VS
ZXN1bHQgPSB0cnVlOworICAgICAgfSBlbHNlIGlmICghc2VlblJlc3VsdHNbcmVzdWx0XSkgewor
ICAgICAgICAvLyBPbmx5IGNvbnNpZGVyIGEgc2hvcnQtbGl2ZWQgcmVzdWx0IGlmIHdlJ3ZlIHNl
ZW4gaXQgbW9yZSB0aGFuIG9uY2UuCisgICAgICAgIC8vIE90aGVyd2lzZSwgd2UgaW5jbHVkZSBs
b3RzIG9mIGZhbHNlLXBvc2l0aXZlcyBkdWUgdG8gdGVzdHMgdGhhdCBmYWlsCisgICAgICAgIC8v
IGZvciBhIGNvdXBsZSBydW5zIGFuZCB0aGVuIHN0YXJ0IHBhc3NpbmcuCisgICAgICAgIHNlZW5S
ZXN1bHRzW3Jlc3VsdF0gPSB0cnVlOworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKworICAg
ICAgdmFyIGV4cGVjdGF0aW9uID0gZ2V0RXhwZWN0YXRpb25zRmlsZVN0cmluZ0ZvclJlc3VsdChy
ZXN1bHQpOworICAgICAgcmVzdWx0c01hcFtleHBlY3RhdGlvbl0gPSB0cnVlOworICAgICAgbnVt
UmVhbFJlc3VsdHMrKzsKKyAgICB9CisKKyAgICByZXN1bHRzRm9yVGVzdC5mbGlwcyA9IGkgLSAx
OworICAgIHJlc3VsdHNGb3JUZXN0LmlzRmxha3kgPSBudW1SZWFsUmVzdWx0cyA+IDE7CisgICAg
Ly8gQ2FsY3VsYXRlIHRoZSAlIG9mIHRpbWVzIHRoZSB0ZXN0IGZhaWxlZCAtIGhvdyBmbGFreSBp
cyBpdD8KKyAgICByZXN1bHRzRm9yVGVzdC5wZXJjZW50RmFpbGVkID0KKyAgICAgICAgTWF0aC5y
b3VuZChmYWlsZWRDb3VudCAvIG51bVJlc3VsdHNTZWVuICogMTAwKTsKKworICAgIHZhciBtaXNz
aW5nRXhwZWN0YXRpb25zID0gW107CisgICAgdmFyIGV4dHJhRXhwZWN0YXRpb25zID0gW107CisK
KyAgICBpZiAoaXNMYXlvdXRUZXN0UmVzdWx0cygpKSB7CisgICAgICB2YXIgZXhwZWN0YXRpb25z
QXJyYXkgPSByZXN1bHRzRm9yVGVzdC5leHBlY3RhdGlvbnMgPworICAgICAgICAgIHJlc3VsdHNG
b3JUZXN0LmV4cGVjdGF0aW9ucy5zcGxpdCgnICcpIDogW107CisgICAgICBleHRyYUV4cGVjdGF0
aW9ucyA9IGV4cGVjdGF0aW9uc0FycmF5LmZpbHRlcigKKyAgICAgICAgICBmdW5jdGlvbihlbGVt
ZW50KSB7CisgICAgICAgICAgICAvLyBUT0RPKG9qYW4pOiBPbmNlIGFsbCB0aGUgRkFJTCBsaW5l
cyBhcmUgcmVtb3ZlZCBmcm9tCisgICAgICAgICAgICAvLyB0ZXN0X2V4cGVjdGF0aW9ucy50eHQs
IGRlbGV0ZSBhbGwgdGhlIGxlZ2FjeUV4cGVjdGF0aW9uc1NlbWFudGljcworICAgICAgICAgICAg
Ly8gY29kZS4KKyAgICAgICAgICAgIGlmIChjdXJyZW50U3RhdGUubGVnYWN5RXhwZWN0YXRpb25z
U2VtYW50aWNzKSB7CisgICAgICAgICAgICAgIGlmIChlbGVtZW50ID09ICdGQUlMJykgeworICAg
ICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgRkFJTF9SRVNVTFRTLmxlbmd0aDsgaSsr
KSB7CisgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0c01hcFtGQUlMX1JFU1VMVFNbaV1dKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50ICYmICFyZXN1bHRzTWFwW2VsZW1lbnRdICYm
CisgICAgICAgICAgICAgICAgIXN0cmluZ0NvbnRhaW5zKGVsZW1lbnQsICdCVUcnKTsKKyAgICAg
ICAgICB9KTsKKworICAgICAgZm9yICh2YXIgcmVzdWx0IGluIHJlc3VsdHNNYXApIHsKKyAgICAg
ICAgcmVzdWx0c0ZvclRlc3QuYWN0dWFsUmVzdWx0cy5wdXNoKHJlc3VsdCk7CisgICAgICAgIHZh
ciBoYXNFeHBlY3RhdGlvbiA9IGZhbHNlOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4
cGVjdGF0aW9uc0FycmF5Lmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgdmFyIGV4cGVjdGF0aW9u
ID0gZXhwZWN0YXRpb25zQXJyYXlbaV07CisgICAgICAgICAgLy8gVE9ETyhvamFuKTogT25jZSBh
bGwgdGhlIEZBSUwgbGluZXMgYXJlIHJlbW92ZWQgZnJvbQorICAgICAgICAgIC8vIHRlc3RfZXhw
ZWN0YXRpb25zLnR4dCwgZGVsZXRlIGFsbCB0aGUgbGVnYWN5RXhwZWN0YXRpb25zU2VtYW50aWNz
CisgICAgICAgICAgLy8gY29kZS4KKyAgICAgICAgICBpZiAoY3VycmVudFN0YXRlLmxlZ2FjeUV4
cGVjdGF0aW9uc1NlbWFudGljcykgeworICAgICAgICAgICAgaWYgKGV4cGVjdGF0aW9uID09ICdG
QUlMJykgeworICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IEZBSUxfUkVTVUxUUy5s
ZW5ndGg7IGorKykgeworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRkFJTF9SRVNVTFRT
W2pdKSB7CisgICAgICAgICAgICAgICAgICBoYXNFeHBlY3RhdGlvbiA9IHRydWU7CisgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAocmVzdWx0ID09IGV4cGVj
dGF0aW9uKSB7CisgICAgICAgICAgICBoYXNFeHBlY3RhdGlvbiA9IHRydWU7CisgICAgICAgICAg
fQorCisgICAgICAgICAgaWYgKGhhc0V4cGVjdGF0aW9uKQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgLy8gSWYgd2UgaGF2ZSBubyBleHBlY3RhdGlvbnMgZm9yIGEgdGVz
dCBhbmQgaXQgb25seSBwYXNzZXMsIHRoZW4gZG9uJ3QKKyAgICAgICAgLy8gbGlzdCBQQVNTIGFz
IGEgbWlzc2luZyBleHBlY3RhdGlvbi4gV2Ugb25seSB3YW50IHRvIGxpc3QgUEFTUyBpZiBpdAor
ICAgICAgICAvLyBmbGFreSBwYXNzZXMsIHNvIHRoZXJlIHdvdWxkIGJlIG90aGVyIGV4cGVjdGF0
aW9ucy4KKyAgICAgICAgaWYgKCFoYXNFeHBlY3RhdGlvbiAmJgorICAgICAgICAgICAgISghZXhw
ZWN0YXRpb25zQXJyYXkubGVuZ3RoICYmIHJlc3VsdCA9PSAnUEFTUycgJiYKKyAgICAgICAgICAg
ICAgbnVtUmVhbFJlc3VsdHMgPT0gMSkpCisgICAgICAgICAgbWlzc2luZ0V4cGVjdGF0aW9ucy5w
dXNoKHJlc3VsdCk7CisgICAgICB9CisKKyAgICAgIC8vIE9ubHkgaGlnaGxpZ2h0IHRlc3RzIHRo
YXQgdGFrZSA+IDIgc2Vjb25kcyBhcyBuZWVkaW5nIHRvIGJlIG1hcmtlZCBhcworICAgICAgLy8g
c2xvdy4gVGhlcmUgYXJlIHRvbyBtYW55IHRlc3RzIHRoYXQgdGFrZSB+MiBzZWNvbmRzIGV2ZXJ5
IGNvdXBsZQorICAgICAgLy8gaHVuZHJlZCBydW5zLiBJdCdzIG5vdCB3b3J0aCB0aGUgbWFudWFs
IG1haW50ZW5hbmNlIGVmZm9ydC4KKyAgICAgIC8vIEFsc28sIGlmIGEgdGVzdCB0aW1lcyBvdXQs
IHRoZW4gaXQgc2hvdWxkIG5vdCBiZSBtYXJrZWQgYXMgc2xvdy4KKyAgICAgIHZhciBtaW5UaW1l
Rm9yTmVlZHNTbG93ID0gaXNEZWJ1ZyhyZXN1bHRzRm9yVGVzdC5idWlsZGVyKSA/IDIgOiAxOwor
ICAgICAgaWYgKGlzU2xvd1Rlc3QocmVzdWx0c0ZvclRlc3QpICYmICFyZXN1bHRzTWFwWydUSU1F
T1VUJ10gJiYKKyAgICAgICAgICAoIXJlc3VsdHNGb3JUZXN0Lm1vZGlmaWVycyB8fAorICAgICAg
ICAgICAhc3RyaW5nQ29udGFpbnMocmVzdWx0c0ZvclRlc3QubW9kaWZpZXJzLCAnU0xPVycpKSkg
eworICAgICAgICBtaXNzaW5nRXhwZWN0YXRpb25zLnB1c2goJ1NMT1cnKTsKKyAgICAgIH0gZWxz
ZSBpZiAoaXNGYXN0VGVzdChyZXN1bHRzRm9yVGVzdCkgJiYKKyAgICAgICAgICAgICAgICAgcmVz
dWx0c0ZvclRlc3QubW9kaWZpZXJzICYmCisgICAgICAgICAgICAgICAgIHN0cmluZ0NvbnRhaW5z
KHJlc3VsdHNGb3JUZXN0Lm1vZGlmaWVycywgJ1NMT1cnKSkgeworICAgICAgICBleHRyYUV4cGVj
dGF0aW9ucy5wdXNoKCdTTE9XJyk7CisgICAgICB9CisKKyAgICAgIC8vIElmIHRoZXJlIGFyZSBu
byBtaXNzaW5nIHJlc3VsdHMgb3IgbW9kaWZpZXJzIGJlc2lkZXMgYnVpbGQKKyAgICAgIC8vIHR5
cGUsIHBsYXRmb3JtLCBvciBidWcgYW5kIHRoZSBleHBlY3RhdGlvbnMgYXJlIGFsbCBleHRyYQor
ICAgICAgLy8gdGhhdCBpcywgZXh0cmFFeHBlY3RhdGlvbnMgLSBleHBlY3RhdGlvbnMgPSBQQVNT
LAorICAgICAgLy8gaW5jbHVkZSBQQVNTIGFzIGV4dHJhLCBzaW5jZSB0aGF0IG1lYW5zIHRoaXMg
bGluZSBpbgorICAgICAgLy8gdGVzdF9leHBlY3RhdGlvbnMgY2FuIGJlIGRlbGV0ZWQuLgorICAg
ICAgaWYgKCFtaXNzaW5nRXhwZWN0YXRpb25zLmxlbmd0aCAmJgorICAgICAgICAgICEocmVzdWx0
c0ZvclRlc3QubW9kaWZpZXJzICYmCisgICAgICAgICAgICBnZXRSZWFsTW9kaWZpZXJzKHJlc3Vs
dHNGb3JUZXN0Lm1vZGlmaWVycykpKSB7CisgICAgICAgIHZhciBleHRyYVBsdXNQYXNzID0gZXh0
cmFFeHBlY3RhdGlvbnMuY29uY2F0KFsnUEFTUyddKTsKKyAgICAgICAgaWYgKGV4dHJhUGx1c1Bh
c3Muc29ydCgpLnRvU3RyaW5nKCkgPT0KKyAgICAgICAgICAgIGV4cGVjdGF0aW9uc0FycmF5LnNs
aWNlKDApLnNvcnQoKS50b1N0cmluZygpKSB7CisgICAgICAgICAgZXh0cmFFeHBlY3RhdGlvbnMu
cHVzaCgnUEFTUycpOworICAgICAgICB9CisgICAgICB9CisKKyAgICB9IGVsc2UgeworICAgICAg
dmFyIGlzTWFya2VkRmxha3kgPSBzdHJpbmdDb250YWlucyhyZXN1bHRzRm9yVGVzdC50ZXN0LAor
ICAgICAgICAgIEdURVNUX0ZMQUtZX01BUktFUik7CisgICAgICBpZiAocmVzdWx0c0ZvclRlc3Qu
aXNGbGFreSAmJiAhaXNNYXJrZWRGbGFreSkgeworICAgICAgICBtaXNzaW5nRXhwZWN0YXRpb25z
LnB1c2goJ0ZMQUtZJyk7CisgICAgICB9IGVsc2UgaWYgKCFyZXN1bHRzRm9yVGVzdC5pc0ZsYWt5
ICYmIGlzTWFya2VkRmxha3kpIHsKKyAgICAgICAgZXh0cmFFeHBlY3RhdGlvbnMucHVzaCgnRkxB
S1knKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXN1bHRzRm9yVGVzdC5tZWV0c0V4cGVjdGF0
aW9ucyA9CisgICAgICAgICFtaXNzaW5nRXhwZWN0YXRpb25zLmxlbmd0aCAmJiAhZXh0cmFFeHBl
Y3RhdGlvbnMubGVuZ3RoOworICAgIHJlc3VsdHNGb3JUZXN0Lm1pc3NpbmcgPSBtaXNzaW5nRXhw
ZWN0YXRpb25zLnNvcnQoKS5qb2luKCcgJyk7CisgICAgcmVzdWx0c0ZvclRlc3QuZXh0cmEgPSBl
eHRyYUV4cGVjdGF0aW9ucy5zb3J0KCkuam9pbignICcpOworICB9CisKKworICB2YXIgYnVnVXJs
UHJlZml4ID0gJzxhIGhyZWY9Imh0dHA6Ly8nOworICB2YXIgYnVnVXJsUG9zdGZpeCA9ICcvJDIi
PiQyPC9hPiAnOworICB2YXIgd2Via2l0QnVnVXJsUG9zdGZpeCA9ICcvJDIiPldLICQyPC9hPiAn
OworICB2YXIgaW50ZXJuYWxCdWdSZXBsYWNlVmFsdWUgPSBidWdVcmxQcmVmaXggKyAnYicgKyBi
dWdVcmxQb3N0Zml4OworICB2YXIgZXh0ZXJuYWxCdWdSZXBsYWNlVmFsdWUgPSBidWdVcmxQcmVm
aXggKyAnY3JidWcuY29tJyArIGJ1Z1VybFBvc3RmaXg7CisgIHZhciB3ZWJraXRCdWdSZXBsYWNl
VmFsdWUgPSBidWdVcmxQcmVmaXggKyAnd2Via2l0Lm9yZy9iJyArCisgICAgICB3ZWJraXRCdWdV
cmxQb3N0Zml4OworCisgIC8qKgorICAgKiBSZXR1cm5zIHRoZSBCVUcgbW9kaWZpZXJzIGxpbmtp
bmcgdG8gdGhlIGJ1Zy4KKyAgICogQnVncyB3aXRoIDQgb3IgNSBkaWdpdHMgYXJlIGNyYnVnLmNv
bSBidWdzLiBCdWdzIHdpdGggNiBvciA3IGRpZ2l0cworICAgKiBhcmUgaW50ZXJuYWwgZ29vZ2xl
IGJ1Z3MuCisgICAqLworICBmdW5jdGlvbiBnZXRIdG1sRm9yQnVncyhidWdzKSB7CisgICAgYnVn
cyA9IGJ1Z3MucmVwbGFjZSgvQlVHKENSKT8oXGR7NH0pKFwgfCQpL2csIGV4dGVybmFsQnVnUmVw
bGFjZVZhbHVlKTsKKyAgICBidWdzID0gYnVncy5yZXBsYWNlKC9CVUcoQ1IpPyhcZHs1fSkoXCB8
JCkvZywgZXh0ZXJuYWxCdWdSZXBsYWNlVmFsdWUpOworICAgIGJ1Z3MgPSBidWdzLnJlcGxhY2Uo
L0JVRyhDUik/KFxkezZ9KShcIHwkKS9nLCBpbnRlcm5hbEJ1Z1JlcGxhY2VWYWx1ZSk7CisgICAg
YnVncyA9IGJ1Z3MucmVwbGFjZSgvQlVHKENSKT8oXGR7N30pKFwgfCQpL2csIGludGVybmFsQnVn
UmVwbGFjZVZhbHVlKTsKKyAgICBidWdzID0gYnVncy5yZXBsYWNlKC9CVUcoV0spKFxkezV9XGQq
PykoXCB8JCkvZywgd2Via2l0QnVnUmVwbGFjZVZhbHVlKTsKKyAgICByZXR1cm4gYnVnczsKKyAg
fQorCisgIGZ1bmN0aW9uIGdldExpbmtIVE1MVG9PcGVuV2luZG93KHVybCwgdGV4dCkgeworICAg
IHJldHVybiAnPGRpdiBjbGFzcz1saW5rIG9uY2xpY2s9IndpbmRvdy5vcGVuKFwnJyArIHVybCAr
ICdcJykiPicgKyB0ZXh0ICsKKyAgICAgICAgJzwvZGl2Pic7CisgIH0KKworICAvLyBUT0RPOiBy
ZXBsYWNlZCB3aXRoIGdldENocm9taXVtUmV2aXNpb25MaW5rL2dldFdlYktpdFJldmlzaW9uTGlu
aworICBmdW5jdGlvbiBjcmVhdGVCbGFtZUxpc3RIVE1MKHJldmlzaW9ucywgaW5kZXgsIHVybEJh
c2UsIHNlcGFyYXRvciwgcmVwbykgeworICAgIHZhciB0aGlzUmV2aXNpb24gPSByZXZpc2lvbnNb
aW5kZXhdOworICAgIGlmICghdGhpc1JldmlzaW9uKQorICAgICAgcmV0dXJuICcnOworCisgICAg
dmFyIHByZXZpb3VzUmV2aXNpb24gPSByZXZpc2lvbnNbaW5kZXggKyAxXTsKKyAgICBpZiAocHJl
dmlvdXNSZXZpc2lvbiAmJiBwcmV2aW91c1JldmlzaW9uICE9IHRoaXNSZXZpc2lvbikgeworICAg
ICAgcHJldmlvdXNSZXZpc2lvbisrOworICAgICAgcmV0dXJuIGdldExpbmtIVE1MVG9PcGVuV2lu
ZG93KAorICAgICAgICAgIHVybEJhc2UgKyB0aGlzUmV2aXNpb24gKyBzZXBhcmF0b3IgKyBwcmV2
aW91c1JldmlzaW9uLAorICAgICAgICAgIHJlcG8gKyAnIGJsYW1lbGlzdCByJyArIHByZXZpb3Vz
UmV2aXNpb24gKyAnOnInICsgdGhpc1JldmlzaW9uKTsKKyAgICB9IGVsc2UgeworICAgICAgcmV0
dXJuICdBdCAnICsgcmVwbyArICcgcmV2aXNpb246ICcgKyB0aGlzUmV2aXNpb247CisgICAgfQor
ICB9CisKKyAgLyoqCisgICAqIFJldHVybnMgd2hldGhlciB0aGUgcmVzdWx0IGZvciBpbmRleCd0
aCByZXN1bHQgZm9yIHRlc3ROYW1lIG9uIGJ1aWxkZXIgd2FzCisgICAqIGEgZmFpbHVyZS4KKyAg
ICovCisgIGZ1bmN0aW9uIGlzRmFpbHVyZShidWlsZGVyLCB0ZXN0TmFtZSwgaW5kZXgpIHsKKyAg
ICB2YXIgY3VycmVudEluZGV4ID0gMDsKKyAgICB2YXIgcmF3UmVzdWx0cyA9IHJlc3VsdHNCeUJ1
aWxkZXJbYnVpbGRlcl0udGVzdHNbdGVzdE5hbWVdLnJlc3VsdHM7CisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCByYXdSZXN1bHRzLmxlbmd0aDsgaSsrKSB7CisgICAgICBjdXJyZW50SW5kZXggKz0g
cmF3UmVzdWx0c1tpXVtSTEUuTEVOR1RIXTsKKyAgICAgIGlmIChjdXJyZW50SW5kZXggPiBpbmRl
eCkKKyAgICAgICAgcmV0dXJuIGlzRmFpbGluZ1Jlc3VsdChyYXdSZXN1bHRzW2ldW1JMRS5WQUxV
RV0pOworICAgIH0KKyAgICBjb25zb2xlLmVycm9yKCdJbmRleCBleGNlZWRzIG51bWJlciBvZiBy
ZXN1bHRzOiAnICsgaW5kZXgpOworICB9CisKKyAgLyoqCisgICAqIFJldHVybnMgYW4gYXJyYXkg
b2YgYnVpbGROdW1iZXJzIGZvciBhbGwgYnVpbGRzIHdoZXJlIHRoaXMgdGVzdCBmYWlsZWQuCisg
ICAqLworICBmdW5jdGlvbiBnZXRCdWlsZE51bWJlcnNGb3JGYWlsdXJlcyhidWlsZGVyLCB0ZXN0
TmFtZSkgeworICAgIHZhciByYXdSZXN1bHRzID0gcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyXS50
ZXN0c1t0ZXN0TmFtZV0ucmVzdWx0czsKKyAgICB2YXIgYnVpbGROdW1iZXJzID0gcmVzdWx0c0J5
QnVpbGRlcltidWlsZGVyXS5idWlsZE51bWJlcnM7CisgICAgdmFyIGluZGV4ID0gMDsKKyAgICB2
YXIgZmFpbHVyZXMgPSBbXTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhd1Jlc3VsdHMubGVu
Z3RoOyBpKyspIHsKKyAgICAgIHZhciBudW1SZXN1bHRzID0gcmF3UmVzdWx0c1tpXVtSTEUuTEVO
R1RIXTsKKyAgICAgIGlmIChpc0ZhaWxpbmdSZXN1bHQocmF3UmVzdWx0c1tpXVtSTEUuVkFMVUVd
KSkgeworICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG51bVJlc3VsdHM7IGorKykgeworICAg
ICAgICAgIGZhaWx1cmVzLnB1c2goYnVpbGROdW1iZXJzW2luZGV4ICsgal0pOworICAgICAgICB9
CisgICAgICB9CisgICAgICBpbmRleCArPSBudW1SZXN1bHRzOworICAgIH0KKworICAgIHJldHVy
biBmYWlsdXJlczsKKyAgfQorCisgIC8qKgorICAgKiBSZXR1cm5zIHRoZSBwYXRoIHRvIHRoZSBm
YWlsdXJlIGxvZyBmb3IgdGhpcyBub24td2Via2l0IHRlc3QuCisgICAqLworICBmdW5jdGlvbiBn
ZXRQYXRoVG9GYWlsdXJlTG9nKHRlc3ROYW1lKSB7CisgICAgcmV0dXJuICcvc3RlcHMvJyArIGN1
cnJlbnRTdGF0ZS50ZXN0VHlwZSArICcvbG9ncy8nICsKKyAgICAgICAgdGVzdE5hbWUuc3BsaXQo
Jy4nKVsxXQorICB9CisKKyAgZnVuY3Rpb24gc2hvd1BvcHVwRm9yQnVpbGQoZSwgYnVpbGRlciwg
aW5kZXgsIG9wdF90ZXN0TmFtZSkgeworICAgIHZhciBodG1sID0gJyc7CisKKyAgICB2YXIgdGlt
ZSA9IHJlc3VsdHNCeUJ1aWxkZXJbYnVpbGRlcl0uc2Vjb25kc1NpbmNlRXBvY2hbaW5kZXhdOwor
ICAgIGlmICh0aW1lKSB7CisgICAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKHRpbWUgKiAxMDAwKTsK
KyAgICAgIGh0bWwgKz0gZGF0ZS50b0xvY2FsZURhdGVTdHJpbmcoKSArICcgJyArIGRhdGUudG9M
b2NhbGVUaW1lU3RyaW5nKCk7CisgICAgfQorCisgICAgdmFyIGJ1aWxkTnVtYmVyID0gcmVzdWx0
c0J5QnVpbGRlcltidWlsZGVyXS5idWlsZE51bWJlcnNbaW5kZXhdOworICAgIHZhciBidWlsZGVy
TWFzdGVyID0gZ2V0QnVpbGRlck1hc3RlcihidWlsZGVyKTsKKyAgICB2YXIgYnVpbGRCYXNlUGF0
aCA9IGJ1aWxkZXJNYXN0ZXIuZ2V0TG9nUGF0aChidWlsZGVyLCBidWlsZE51bWJlcik7CisKKyAg
ICBodG1sICs9ICc8dWw+PGxpPicgKyBnZXRMaW5rSFRNTFRvT3BlbldpbmRvdyhidWlsZEJhc2VQ
YXRoLCAnQnVpbGQgbG9nJykgKworICAgICAgICAnPC9saT48bGk+JyArCisgICAgICAgIGNyZWF0
ZUJsYW1lTGlzdEhUTUwocmVzdWx0c0J5QnVpbGRlcltidWlsZGVyXS53ZWJraXRSZXZpc2lvbiwg
aW5kZXgsCisgICAgICAgICAgICAnaHR0cDovL3RyYWMud2Via2l0Lm9yZy9sb2cvP3ZlcmJvc2U9
b24mcmV2PScsICcmc3RvcF9yZXY9JywKKyAgICAgICAgICAgICdXZWJLaXQnKSArCisgICAgICAg
ICc8L2xpPic7CisKKyAgICBpZiAoYnVpbGRlck1hc3RlciA9PSBXRUJLSVRfQlVJTERFUl9NQVNU
RVIpIHsKKyAgICAgIHZhciByZXZpc2lvbiA9IHJlc3VsdHNCeUJ1aWxkZXJbYnVpbGRlcl0ud2Vi
a2l0UmV2aXNpb25baW5kZXhdOworICAgICAgaHRtbCArPSAnPGxpPjxzcGFuIGNsYXNzPWxpbmsg
b25jbGljaz0ic2V0UXVlcnlQYXJhbWV0ZXIoXCdyZXZpc2lvblwnLCcgKworICAgICAgICAgIHJl
dmlzaW9uICsgJykiPlNob3cgcmVzdWx0cyBmb3IgV2ViS2l0IHInICsgcmV2aXNpb24gKworICAg
ICAgICAgICc8L3NwYW4+PC9saT4nOworICAgIH0gZWxzZSB7CisgICAgICBodG1sICs9ICc8bGk+
JyArCisgICAgICAgICAgY3JlYXRlQmxhbWVMaXN0SFRNTChyZXN1bHRzQnlCdWlsZGVyW2J1aWxk
ZXJdLmNocm9tZVJldmlzaW9uLCBpbmRleCwKKyAgICAgICAgICAgICAgJ2h0dHA6Ly9idWlsZC5j
aHJvbWl1bS5vcmcvZi9jaHJvbWl1bS9wZXJmL2Rhc2hib2FyZC91aS8nICsKKyAgICAgICAgICAg
ICAgJ2NoYW5nZWxvZy5odG1sP3VybD0vdHJ1bmsvc3JjJm1vZGU9aHRtbCZyYW5nZT0nLCAnOics
CisgICAgICAgICAgICAgICdDaHJvbWUnKSArCisgICAgICAgICAgJzwvbGk+JzsKKworICAgICAg
dmFyIGNocm9tZVJldmlzaW9uID0gcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyXS5jaHJvbWVSZXZp
c2lvbltpbmRleF07CisgICAgICBpZiAoY2hyb21lUmV2aXNpb24gJiYgaXNMYXlvdXRUZXN0UmVz
dWx0cygpKSB7CisgICAgICAgIGh0bWwgKz0gJzxsaT48YSBocmVmPSInICsgVEVTVF9SRVNVTFRT
X0JBU0VfUEFUSCArIGJ1aWxkZXJzW2J1aWxkZXJdICsKKyAgICAgICAgICAgICcvJyArIGNocm9t
ZVJldmlzaW9uICsgJy9sYXlvdXQtdGVzdC1yZXN1bHRzLnppcCcgKworICAgICAgICAgICAgJyI+
bGF5b3V0LXRlc3QtcmVzdWx0cy56aXA8L2E+PC9saT4nOworICAgICAgfQorICAgIH0KKworICAg
IGlmICghaXNMYXlvdXRUZXN0UmVzdWx0cygpICYmIG9wdF90ZXN0TmFtZSAmJgorICAgICAgICBp
c0ZhaWx1cmUoYnVpbGRlciwgb3B0X3Rlc3ROYW1lLCBpbmRleCkpIHsKKyAgICAgIGh0bWwgKz0g
JzxsaT4nICsgZ2V0TGlua0hUTUxUb09wZW5XaW5kb3coCisgICAgICAgICAgYnVpbGRCYXNlUGF0
aCArIGdldFBhdGhUb0ZhaWx1cmVMb2cob3B0X3Rlc3ROYW1lKSwKKyAgICAgICAgICAnRmFpbHVy
ZSBsb2cnKSArICc8L2xpPic7CisgICAgfQorCisgICAgaHRtbCArPSAnPC91bD4nOworICAgIHNo
b3dQb3B1cChlLCBodG1sKTsKKyAgfQorCisgIGZ1bmN0aW9uIHNob3dQb3B1cEZvclRlc3QoZSwg
dGVzdCkgeworICAgIHNob3dQb3B1cChlLCBnZXRIVE1MRm9ySW5kaXZpZHVsVGVzdE9uQWxsQnVp
bGRlcnModGVzdCkpOworICAgIGFwcGVuZEV4cGVjdGF0aW9ucygpOworICB9CisKKyAgZnVuY3Rp
b24gZ2V0SHRtbEZvclRlc3RSZXN1bHRzKHRlc3QpIHsKKyAgICBpZiAoIWN1cnJlbnRTdGF0ZS5z
aG93UnVuc09uQnVpbGRlclBhZ2UgJiYgIWlzQ3Jvc3NCdWlsZGVyVmlldygpKQorICAgICAgcmV0
dXJuICc8dGQ+JyArIHRlc3QuZmxpcHM7CisKKyAgICB2YXIgaHRtbCA9ICcnOworICAgIHZhciBy
ZXN1bHRzID0gdGVzdC5yYXdSZXN1bHRzLmNvbmNhdCgpOworICAgIHZhciB0aW1lcyA9IHRlc3Qu
cmF3VGltZXMuY29uY2F0KCk7CisgICAgdmFyIGJ1aWxkZXIgPSB0ZXN0LmJ1aWxkZXI7CisgICAg
dmFyIGJ1aWxkZXJNYXN0ZXIgPSBnZXRCdWlsZGVyTWFzdGVyKGJ1aWxkZXIpOworICAgIHZhciBi
dWlsZE51bWJlcnMgPSByZXN1bHRzQnlCdWlsZGVyW2J1aWxkZXJdLmJ1aWxkTnVtYmVyczsKKwor
ICAgIHZhciBpbmRleFRvUmVwbGFjZUN1cnJlbnRSZXN1bHQgPSAtMTsKKyAgICB2YXIgaW5kZXhU
b1JlcGxhY2VDdXJyZW50VGltZSA9IC0xOworICAgIHZhciBjdXJyZW50UmVzdWx0QXJyYXksIGN1
cnJlbnRUaW1lQXJyYXksIGN1cnJlbnRSZXN1bHQsIGlubmVySFRNTCwKKyAgICAgICAgcmVzdWx0
U3RyaW5nOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnVpbGROdW1iZXJzLmxlbmd0aDsgaSsr
KSB7CisgICAgICBpZiAoaSA+IGluZGV4VG9SZXBsYWNlQ3VycmVudFJlc3VsdCkgeworICAgICAg
ICBjdXJyZW50UmVzdWx0QXJyYXkgPSByZXN1bHRzLnNoaWZ0KCk7CisgICAgICAgIGlmIChjdXJy
ZW50UmVzdWx0QXJyYXkpIHsKKyAgICAgICAgICBjdXJyZW50UmVzdWx0ID0gY3VycmVudFJlc3Vs
dEFycmF5W1JMRS5WQUxVRV07CisgICAgICAgICAgLy8gVHJlYXQgc2ltcGxpZmllZCBkaWZmIGZh
aWx1cmVzIGFzIGp1c3QgdGV4dCBmYWlsdXJlcy4KKyAgICAgICAgICBpZiAoY3VycmVudFJlc3Vs
dCA9PSAnUycpCisgICAgICAgICAgICBjdXJyZW50UmVzdWx0ID0gJ0YnOworICAgICAgICAgIGlu
ZGV4VG9SZXBsYWNlQ3VycmVudFJlc3VsdCArPSBjdXJyZW50UmVzdWx0QXJyYXlbUkxFLkxFTkdU
SF07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgY3VycmVudFJlc3VsdCA9ICdOJzsKKyAg
ICAgICAgICBpbmRleFRvUmVwbGFjZUN1cnJlbnRSZXN1bHQgKz0gYnVpbGROdW1iZXJzLmxlbmd0
aDsKKyAgICAgICAgfQorCisgICAgICAgIHJlc3VsdFN0cmluZyA9IGdldEV4cGVjdGF0aW9uc0Zp
bGVTdHJpbmdGb3JSZXN1bHQoY3VycmVudFJlc3VsdCk7CisgICAgICB9CisKKyAgICAgIGlmIChp
ID4gaW5kZXhUb1JlcGxhY2VDdXJyZW50VGltZSkgeworICAgICAgICBjdXJyZW50VGltZUFycmF5
ID0gdGltZXMuc2hpZnQoKTsKKyAgICAgICAgdmFyIGN1cnJlbnRUaW1lID0gMDsKKyAgICAgICAg
aWYgKGN1cnJlbnRSZXN1bHRBcnJheSkgeworICAgICAgICAgIGN1cnJlbnRUaW1lID0gY3VycmVu
dFRpbWVBcnJheVtSTEUuVkFMVUVdOworICAgICAgICAgIGluZGV4VG9SZXBsYWNlQ3VycmVudFRp
bWUgKz0gY3VycmVudFRpbWVBcnJheVtSTEUuTEVOR1RIXTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICBpbmRleFRvUmVwbGFjZUN1cnJlbnRUaW1lICs9IGJ1aWxkTnVtYmVycy5sZW5ndGg7
CisgICAgICAgIH0KKyAgICAgICAgaW5uZXJIVE1MID0gY3VycmVudFRpbWUgfHwgJyZuYnNwOyc7
CisgICAgICB9CisKKyAgICAgIHZhciBleHRyYUNsYXNzTmFtZXMgPSAnJzsKKyAgICAgIHZhciB3
ZWJraXRSZXZpc2lvbiA9IHJlc3VsdHNCeUJ1aWxkZXJbYnVpbGRlcl0ud2Via2l0UmV2aXNpb247
CisgICAgICB2YXIgaXNXZWJraXRNZXJnZSA9IHdlYmtpdFJldmlzaW9uW2kgKyAxXSAmJgorICAg
ICAgICAgIHdlYmtpdFJldmlzaW9uW2ldICE9IHdlYmtpdFJldmlzaW9uW2kgKyAxXTsKKyAgICAg
IGlmIChpc1dlYmtpdE1lcmdlICYmIGJ1aWxkZXJNYXN0ZXIgIT0gV0VCS0lUX0JVSUxERVJfTUFT
VEVSKSB7CisgICAgICAgIGV4dHJhQ2xhc3NOYW1lcyArPSAnIG1lcmdlJzsKKyAgICAgIH0KKwor
ICAgICAgaHRtbCArPSAnPHRkIHRpdGxlPSInICsgKHJlc3VsdFN0cmluZyB8fCAnTk8gREFUQScp
ICsKKyAgICAgICAgICAnLiBDbGljayBmb3IgbW9yZSBpbmZvLiIgY2xhc3M9InJlc3VsdHMgJyAr
IGN1cnJlbnRSZXN1bHQgKworICAgICAgICAgIGV4dHJhQ2xhc3NOYW1lcyArICciIG9uY2xpY2s9
XCdzaG93UG9wdXBGb3JCdWlsZChldmVudCwgIicgKworICAgICAgICAgIGJ1aWxkZXIgKyAnIiwn
ICsgaSArICcsIicgKyB0ZXN0LnRlc3QgKyAnIilcJz4nICsgaW5uZXJIVE1MOworICAgIH0KKyAg
ICByZXR1cm4gaHRtbDsKKyAgfQorCisgIGZ1bmN0aW9uIGdldEhUTUxGb3JUZXN0c1dpdGhFeHBl
Y3RhdGlvbnNCdXROb0ZhaWx1cmVzKGJ1aWxkZXIpIHsKKyAgICB2YXIgdGVzdHMgPSBwZXJCdWls
ZGVyV2l0aEV4cGVjdGF0aW9uc0J1dE5vRmFpbHVyZXNbYnVpbGRlcl07CisgICAgdmFyIHNraXBw
ZWRQYXRocyA9IHBlckJ1aWxkZXJTa2lwcGVkUGF0aHNbYnVpbGRlcl07CisKKyAgICB2YXIgaHRt
bCA9ICcnOworICAgIGlmICh0ZXN0cy5sZW5ndGggfHwgc2tpcHBlZFBhdGhzLmxlbmd0aCkgewor
ICAgICAgdmFyIGJ1aWxkSW5mbyA9IGdldFBsYXRmb3JtQW5kQnVpbGRUeXBlKGJ1aWxkZXIpOwor
ICAgICAgaHRtbCArPSAnPGgyPkV4cGVjdGF0aW9ucyBmb3IgJyArIGJ1aWxkSW5mby5wbGF0Zm9y
bSArICctJyArCisgICAgICAgICAgYnVpbGRJbmZvLmJ1aWxkVHlwZSArICc6PC9oMj4nOworICAg
IH0KKworICAgIHZhciBvcGVuID0gJzxkaXYgb25jbGljaz0ic2VsZWN0Q29udGVudHModGhpcyki
Pic7CisKKyAgICBpZiAodGVzdHMubGVuZ3RoKSB7CisgICAgICBodG1sICs9ICAnPGgzPkhhdmUg
bm90IGZhaWxlZCBpbiBsYXN0ICcgKworICAgICAgICAgIHJlc3VsdHNCeUJ1aWxkZXJbYnVpbGRl
cl0uYnVpbGROdW1iZXJzLmxlbmd0aCArCisgICAgICAgICAgJyBydW5zLjwvaDM+PGRpdiBpZD0i
cGFzc2luZy10ZXN0cyI+JzsKKworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXN0cy5sZW5n
dGg7IGkrKykgeworICAgICAgICBodG1sICs9IG9wZW4gKyB0ZXN0c1tpXS50ZXN0ICsgJzwvZGl2
Pic7CisgICAgICB9CisKKyAgICAgIGh0bWwgKz0gJzwvZGl2Pic7CisgICAgfQorCisgICAgaWYg
KHNraXBwZWRQYXRocy5sZW5ndGgpIHsKKyAgICAgIGh0bWwgKz0gJzxoMz4nICsKKyAgICAgICAg
ICBnZXRMaW5rSFRNTFRvVG9nZ2xlU3RhdGUoJ3Nob3dTa2lwcGVkJywKKyAgICAgICAgICAgICAg
J1NraXBwZWQgdGVzdHMgaW4gdGVzdF9leHBlY3RhdGlvbnMudHh0JykgKworICAgICAgICAgICc8
L2gzPic7CisKKyAgICAgIGlmIChjdXJyZW50U3RhdGUuc2hvd1NraXBwZWQpIHsKKyAgICAgICAg
aHRtbCArPSAnPGRpdiBpZD0icGFzc2luZy10ZXN0cyI+JyArIG9wZW4gKworICAgICAgICAgIHNr
aXBwZWRQYXRocy5qb2luKCc8L2Rpdj4nICsgb3BlbikgKyAnPC9kaXY+PC9kaXY+JzsKKyAgICAg
IH0KKyAgICB9CisgICAgcmV0dXJuIGh0bWw7CisgIH0KKworICAvKioKKyAgICogUmV0dXJucyB3
aGV0aGVyIHdlIHNob3VsZCBleGNsdWRlIHRlc3QgcmVzdWx0cyBmcm9tIHRoZSB0ZXN0IHRhYmxl
LgorICAgKi8KKyAgZnVuY3Rpb24gc2hvdWxkSGlkZVRlc3QodGVzdFJlc3VsdCkgeworICAgIGlm
ICh0ZXN0UmVzdWx0LmlzV29udEZpeFNraXApCisgICAgICByZXR1cm4gIWN1cnJlbnRTdGF0ZS5z
aG93V29udEZpeFNraXA7CisKKyAgICBpZiAodGVzdFJlc3VsdC5pc0ZsYWt5KQorICAgICAgcmV0
dXJuICFjdXJyZW50U3RhdGUuc2hvd0ZsYWt5OworCisgICAgaWYgKGlzU2xvd1Rlc3QodGVzdFJl
c3VsdCkpCisgICAgICByZXR1cm4gIWN1cnJlbnRTdGF0ZS5zaG93U2xvdzsKKworICAgIGlmICh0
ZXN0UmVzdWx0Lm1lZXRzRXhwZWN0YXRpb25zKQorICAgICAgcmV0dXJuICFjdXJyZW50U3RhdGUu
c2hvd0NvcnJlY3RFeHBlY3RhdGlvbnM7CisKKyAgICByZXR1cm4gIWN1cnJlbnRTdGF0ZS5zaG93
V3JvbmdFeHBlY3RhdGlvbnM7CisgIH0KKworICAvKioKKyAgICogU2V0cyB0aGUgYnJvd3Nlcidz
IHNlbGVjdGlvbiB0byB0aGUgZWxlbWVudCdzIGNvbnRlbnRzLgorICAgKi8KKyAgZnVuY3Rpb24g
c2VsZWN0Q29udGVudHMoZWxlbWVudCkgeworICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5zZWxl
Y3RBbGxDaGlsZHJlbihlbGVtZW50KTsKKyAgfQorCisgIGZ1bmN0aW9uIGdldENyZWF0ZUJ1Z0hU
TUwodGVzdCkgeworICAgIHZhciBzeW1wdG9tID0gdGVzdC5pc0ZsYWt5ID8gJ2ZsYWt5JyA6ICdm
YWlsaW5nJzsKKyAgICB2YXIgdGl0bGUgPSAnTGF5b3V0IFRlc3QgJyArIHRlc3QudGVzdCArICcg
aXMgJyArIHN5bXB0b207CisgICAgdmFyIGRlc2NyaXB0aW9uID0gJ1RoZSBmb2xsb3dpbmcgbGF5
b3V0IHRlc3QgaXMgJyArIHN5bXB0b20gKyAnIG9uICcgKworICAgICAgICAnW2luc2VydCBwbGF0
Zm9ybV1cblxuJyArIHRlc3QudGVzdCArICdcblxuUHJvYmFibGUgY2F1c2U6XG5cbicgKworICAg
ICAgICAnW2luc2VydCBwcm9iYWJsZSBjYXVzZV0nOworICAgIHJldHVybiBidWdVcmxQcmVmaXgg
KyAnY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2VudHJ5PycgKworICAgICAgICAn
dGVtcGxhdGU9TGF5b3V0JTIwVGVzdCUyMEZhaWx1cmUmc3VtbWFyeT0nICsKKyAgICAgICAgZW5j
b2RlVVJJQ29tcG9uZW50KHRpdGxlKSArICcmY29tbWVudD0nICsKKyAgICAgICAgZW5jb2RlVVJJ
Q29tcG9uZW50KGRlc2NyaXB0aW9uKSArICciIGNsYXNzPSJmaWxlLWJ1ZyI+RklMRSBCVUc8L2E+
JzsKKyAgfQorCisgIGZ1bmN0aW9uIGlzQ3Jvc3NCdWlsZGVyVmlldygpIHsKKyAgICByZXR1cm4g
Y3VycmVudFN0YXRlLnRlc3RzIHx8IGN1cnJlbnRTdGF0ZS5yZXN1bHQgfHwgY3VycmVudFN0YXRl
LmV4cGVjdGF0aW9uc1VwZGF0ZTsKKyAgfQorCisgIGZ1bmN0aW9uIHRhYmxlSGVhZGVycyhvcHRf
Z2V0QWxsKSB7CisgICAgdmFyIGhlYWRlcnMgPSBbXTsKKyAgICBpZiAoaXNDcm9zc0J1aWxkZXJW
aWV3KCkgfHwgb3B0X2dldEFsbCkKKyAgICAgIGhlYWRlcnMucHVzaCgnYnVpbGRlcicpOworCisg
ICAgaWYgKCFpc0Nyb3NzQnVpbGRlclZpZXcoKSB8fCBvcHRfZ2V0QWxsKQorICAgICAgaGVhZGVy
cy5wdXNoKCd0ZXN0Jyk7CisKKyAgICBpZiAoaXNMYXlvdXRUZXN0UmVzdWx0cygpIHx8IG9wdF9n
ZXRBbGwpIHsKKyAgICAgIGhlYWRlcnMucHVzaCgnYnVncycpOworICAgICAgaWYgKGlzQ3Jvc3NC
dWlsZGVyVmlldygpIHx8IGN1cnJlbnRTdGF0ZS5zaG93UnVuc09uQnVpbGRlclBhZ2UgfHwgb3B0
X2dldEFsbCkKKyAgICAgICAgaGVhZGVycy5wdXNoKCdtb2RpZmllcnMnLCAnZXhwZWN0YXRpb25z
Jyk7CisgICAgfQorCisgICAgaWYgKGN1cnJlbnRTdGF0ZS5zaG93UnVuc09uQnVpbGRlclBhZ2Ug
fHwgb3B0X2dldEFsbCB8fCBpc0Nyb3NzQnVpbGRlclZpZXcoKSkKKyAgICAgIGhlYWRlcnMucHVz
aCgnbWlzc2luZycsICdleHRyYScpOworCisgICAgaGVhZGVycy5wdXNoKCdzbG93ZXN0IHJ1bics
ICclIGZhaWwnKTsKKworICAgIHZhciBGTEFLSU5FU1NfSEVBREVSID0gJ2ZsYWtpbmVzcyAobnVt
YmVycyBhcmUgcnVudGltZXMgaW4gc2Vjb25kcyknOworICAgIHZhciBGTElQU19IRUFERVIgPSAn
Zmxha2luZXNzIChudW1iZXIgb2YgZmxpcHMpJzsKKworICAgIGlmIChjdXJyZW50U3RhdGUuc2hv
d1J1bnNPbkJ1aWxkZXJQYWdlIHx8IG9wdF9nZXRBbGwpCisgICAgICBoZWFkZXJzLnB1c2goRkxB
S0lORVNTX0hFQURFUik7CisKKyAgICBpZiAoIWN1cnJlbnRTdGF0ZS5zaG93UnVuc09uQnVpbGRl
clBhZ2UgfHwgb3B0X2dldEFsbCkKKyAgICAgIGhlYWRlcnMucHVzaChGTElQU19IRUFERVIpOwor
CisgICAgcmV0dXJuIGhlYWRlcnM7CisgIH0KKworICBmdW5jdGlvbiBnZXRIVE1MRm9yU2luZ2xl
VGVzdFJvdyh0ZXN0KSB7CisgICAgaWYgKCFpc0Nyb3NzQnVpbGRlclZpZXcoKSAmJiBzaG91bGRI
aWRlVGVzdCh0ZXN0KSkgeworICAgICAgLy8gVGhlIGlubmVySFRNTCBjYWxsIGlzIGNvbnNpZGVy
YWJseSBmYXN0ZXIgaWYgd2UgZXhjbHVkZSB0aGUgcm93cyBmb3IKKyAgICAgIC8vIGl0ZW1zIHdl
J3JlIG5vdCBzaG93aW5nIHRoYW4gaWYgd2UgaGlkZSB0aGVtIHVzaW5nIGRpc3BsYXk6bm9uZS4K
KyAgICAgIC8vIEZvciB0aGUgY3Jvc3NCdWlsZGVyVmlldywgd2Ugd2FudCB0byBzaG93IGFsbCBy
b3dzIHRoZSB1c2VyIGlzCisgICAgICAvLyBleHBsaWNpdGx5IGxpc3RpbmcgdGVzdHMgdG8gdmll
dy4KKyAgICAgIHJldHVybiAnJzsKKyAgICB9CisKKyAgICB2YXIgaGVhZGVycyA9IHRhYmxlSGVh
ZGVycygpOworICAgIHZhciBodG1sID0gJyc7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoZWFk
ZXJzLmxlbmd0aDsgaSsrKSB7CisgICAgICB2YXIgaGVhZGVyID0gaGVhZGVyc1tpXTsKKyAgICAg
IGlmIChzdGFydHNXaXRoKGhlYWRlciwgJ3Rlc3QnKSB8fCBzdGFydHNXaXRoKGhlYWRlciwgJ2J1
aWxkZXInKSkgeworICAgICAgICAvLyBJZiBpc0Nyb3NzQnVpbGRlclZpZXcoKSBpcyB0cnVlLCB3
ZSdyZSBqdXN0IHZpZXdpbmcgYSBzaW5nbGUgdGVzdAorICAgICAgICAvLyB3aXRoIHJlc3VsdHMg
Zm9yIG1hbnkgYnVpbGRlcnMsIHNvIHRoZSBmaXJzdCBjb2x1bW4gaXMgYnVpbGRlciBuYW1lcwor
ICAgICAgICAvLyBpbnN0ZWFkIG9mIHRlc3QgcGF0aHMuCisgICAgICAgIHZhciB0ZXN0Q2VsbENs
YXNzTmFtZSA9ICd0ZXN0LWxpbmsnICsgKGlzQ3Jvc3NCdWlsZGVyVmlldygpID8gJyBidWlsZGVy
LW5hbWUnIDogJycpOworICAgICAgICB2YXIgdGVzdENlbGxIVE1MID0gaXNDcm9zc0J1aWxkZXJW
aWV3KCkgPyB0ZXN0LmJ1aWxkZXIgOgorICAgICAgICAgICc8c3BhbiBjbGFzcz0ibGluayIgb25j
bGljaz0ic2V0UXVlcnlQYXJhbWV0ZXIoXCd0ZXN0c1wnLFwnJyArIHRlc3QudGVzdCArJ1wnKTsi
PicgKyB0ZXN0LnRlc3QgKyAnPC9zcGFuPic7CisKKyAgICAgICAgaHRtbCArPSAnPHRyIGNsYXNz
PSInICsKKyAgICAgICAgICAodGVzdC5tZWV0c0V4cGVjdGF0aW9ucyA/ICcnIDogJ3dyb25nLWV4
cGVjdGF0aW9ucycpICsKKyAgICAgICAgICAnIj48dGQgY2xhc3M9IicgKyB0ZXN0Q2VsbENsYXNz
TmFtZSArICciPicgKyB0ZXN0Q2VsbEhUTUw7CisgICAgICB9IGVsc2UgaWYgKHN0YXJ0c1dpdGgo
aGVhZGVyLCAnYnVncycpKSB7CisgICAgICAgIGh0bWwgKz0gJzx0ZCBjbGFzcz1vcHRpb25zLWNv
bnRhaW5lcj4nICsgKHRlc3QuYnVnc0hUTUwgPyB0ZXN0LmJ1Z3NIVE1MIDogZ2V0Q3JlYXRlQnVn
SFRNTCh0ZXN0KSk7CisgICAgICB9IGVsc2UgaWYgKHN0YXJ0c1dpdGgoaGVhZGVyLCAnbW9kaWZp
ZXJzJykpIHsKKyAgICAgICAgaHRtbCArPSAnPHRkIGNsYXNzPW9wdGlvbnMtY29udGFpbmVyPicg
KyB0ZXN0Lm1vZGlmaWVyc0hUTUw7CisgICAgICB9IGVsc2UgaWYgKHN0YXJ0c1dpdGgoaGVhZGVy
LCAnZXhwZWN0YXRpb25zJykpIHsKKyAgICAgICAgaHRtbCArPSAnPHRkIGNsYXNzPW9wdGlvbnMt
Y29udGFpbmVyPicgKyB0ZXN0LmV4cGVjdGF0aW9uc0hUTUw7CisgICAgICB9IGVsc2UgaWYgKHN0
YXJ0c1dpdGgoaGVhZGVyLCAnbWlzc2luZycpKSB7CisgICAgICAgIGh0bWwgKz0gJzx0ZD4nICsg
dGVzdC5taXNzaW5nOworICAgICAgfSBlbHNlIGlmIChzdGFydHNXaXRoKGhlYWRlciwgJ2V4dHJh
JykpIHsKKyAgICAgICAgaHRtbCArPSAnPHRkPicgKyB0ZXN0LmV4dHJhOworICAgICAgfSBlbHNl
IGlmIChzdGFydHNXaXRoKGhlYWRlciwgJ3Nsb3dlc3QnKSkgeworICAgICAgICBodG1sICs9ICc8
dGQ+JyArICh0ZXN0LnNsb3dlc3RUaW1lID8gdGVzdC5zbG93ZXN0VGltZSArICdzJyA6ICcnKTsK
KyAgICAgIH0gZWxzZSBpZiAoc3RhcnRzV2l0aChoZWFkZXIsICclIGZhaWwnKSkgeworICAgICAg
ICBodG1sICs9ICc8dGQ+JyArIHRlc3QucGVyY2VudEZhaWxlZDsKKyAgICAgIH0gZWxzZSBpZiAo
c3RhcnRzV2l0aChoZWFkZXIsICdmbGFraW5lc3MnKSkgeworICAgICAgICBodG1sICs9IGdldEh0
bWxGb3JUZXN0UmVzdWx0cyh0ZXN0LCBpc0Nyb3NzQnVpbGRlclZpZXcoKSk7CisgICAgICB9Cisg
ICAgfQorICAgIHJldHVybiBodG1sOworICB9CisKKyAgZnVuY3Rpb24gZ2V0U29ydENvbHVtbkZy
b21UYWJsZUhlYWRlcihoZWFkZXJUZXh0KSB7CisgICAgcmV0dXJuIGhlYWRlclRleHQuc3BsaXQo
JyAnLCAxKVswXTsKKyAgfQorCisgIGZ1bmN0aW9uIGh0bWxGb3JUYWJsZUNvbHVtbkhlYWRlciho
ZWFkZXJOYW1lLCBvcHRfZmlsbENvbFNwYW4pIHsKKyAgICAvLyBVc2UgdGhlIGZpcnN0IHdvcmQg
b2YgdGhlIGhlYWRlciB0aXRsZSBhcyB0aGUgc29ydGtleQorICAgIHZhciB0aGlzU29ydFZhbHVl
ID0gZ2V0U29ydENvbHVtbkZyb21UYWJsZUhlYWRlcihoZWFkZXJOYW1lKTsKKyAgICB2YXIgYXJy
b3dIVE1MID0gdGhpc1NvcnRWYWx1ZSA9PSBjdXJyZW50U3RhdGUuc29ydENvbHVtbiA/CisgICAg
ICAgICc8c3BhbiBjbGFzcz0nICsgY3VycmVudFN0YXRlLnNvcnRPcmRlciArICc+JyArCisgICAg
ICAgIChjdXJyZW50U3RhdGUuc29ydE9yZGVyID09IEZPUldBUkQgPyAnJnVhcnI7JyA6ICcmZGFy
cjsnICkgKworICAgICAgICAnPC9zcGFuPicgOgorICAgICAgICAnJzsKKyAgICByZXR1cm4gJzx0
aCBzb3J0VmFsdWU9JyArIHRoaXNTb3J0VmFsdWUgKworICAgICAgICAvLyBFeHRlbmQgbGFzdCB0
aCB0aHJvdWdoIGFsbCB0aGUgcmVzdCBvZiB0aGUgY29sdW1ucy4KKyAgICAgICAgKG9wdF9maWxs
Q29sU3BhbiA/ICcgY29sc3Bhbj0xMDAwMCcgOiAnJykgKworICAgICAgICAvLyBFeHRyYSBzcGFu
IGhlcmUgaXMgc28gZmxleCBib3hpbmcgYWN0dWFsbHkgY2VudGVycy4KKyAgICAgICAgLy8gVGhl
cmUncyBwcm9iYWJseSBhIGJldHRlciB3YXkgdG8gZG8gdGhpcyB3aXRoIENTUyBvbmx5IHRob3Vn
aC4KKyAgICAgICAgJz48ZGl2IGNsYXNzPXRhYmxlLWhlYWRlci1jb250ZW50PjxzcGFuPjwvc3Bh
bj4nICsgYXJyb3dIVE1MICsKKyAgICAgICAgJzxzcGFuIGNsYXNzPWhlYWRlci10ZXh0PicgKyBo
ZWFkZXJOYW1lICsgJzwvc3Bhbj4nICsKKyAgICAgICAgYXJyb3dIVE1MICsgJzwvZGl2PjwvdGg+
JzsKKyAgfQorCisgIGZ1bmN0aW9uIGdldEhUTUxGb3JUZXN0VGFibGUocm93c0hUTUwsIG9wdF9l
eGNsdWRlSGVhZGVycykgeworICAgIHZhciBodG1sID0gJzx0YWJsZSBjbGFzcz10ZXN0LXRhYmxl
Pic7CisgICAgaWYgKCFvcHRfZXhjbHVkZUhlYWRlcnMpIHsKKyAgICAgIGh0bWwgKz0gJzx0aGVh
ZD48dHI+JzsKKyAgICAgIHZhciBoZWFkZXJzID0gdGFibGVIZWFkZXJzKCk7CisgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaHRtbCArPSBo
dG1sRm9yVGFibGVDb2x1bW5IZWFkZXIoaGVhZGVyc1tpXSwgaSA9PSBoZWFkZXJzLmxlbmd0aCAt
IDEpOworICAgICAgfQorICAgICAgaHRtbCArPSAnPC90cj48L3RoZWFkPic7CisgICAgfQorICAg
IHJldHVybiBodG1sICsgJzx0Ym9keT4nICsgcm93c0hUTUwgKyAnPC90Ym9keT48L3RhYmxlPic7
CisgIH0KKworICBmdW5jdGlvbiBhcHBlbmRIVE1MKGh0bWwpIHsKKyAgICB2YXIgc3RhcnRUaW1l
ID0gRGF0ZS5ub3coKTsKKyAgICAvLyBJbm5lckhUTUwgdG8gYSBkaXYgdGhhdCdzIG5vdCBpbiB0
aGUgZG9jdW1lbnQuIFRoaXMgaXMKKyAgICAvLyB+MzAwbXMgZmFzdGVyIGluIFNhZmFyaSA0IGFu
ZCBDaHJvbWUgNCBvbiBtYWMuCisgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
J2RpdicpOworICAgIGRpdi5pbm5lckhUTUwgPSBodG1sOworICAgIGRvY3VtZW50LmJvZHkuYXBw
ZW5kQ2hpbGQoZGl2KTsKKyAgICBsb2dUaW1lKCdUaW1lIHRvIGlubmVySFRNTCcsIHN0YXJ0VGlt
ZSk7CisgIH0KKworICBmdW5jdGlvbiBnZXRBbHBoYW51bWVyaWNDb21wYXJlKGNvbHVtbiwgcmV2
ZXJzZSkgeworICAgIHJldHVybiBnZXRSZXZlcnNpYmxlQ29tcGFyZUZ1bmN0aW9uKGZ1bmN0aW9u
KGEsIGIpIHsKKyAgICAgIC8vIFB1dCBudWxsIGVudHJpZXMgYXQgdGhlIGJvdHRvbQorICAgICAg
dmFyIGEgPSBhW2NvbHVtbl0gPyBTdHJpbmcoYVtjb2x1bW5dKSA6ICd6JzsKKyAgICAgIHZhciBi
ID0gYltjb2x1bW5dID8gU3RyaW5nKGJbY29sdW1uXSkgOiAneic7CisKKworICAgICAgLy8gRm9y
IGd0ZXN0IHRlc3RzLCB3ZSBtYWtlIHRoZW0gYXMgZmxha3kvZmFpbGluZyBieSBwcmVmaXhpbmcg
dGhlCisgICAgICAvLyB0ZXN0IG5hbWUgd2l0aCBGTEFLWV8gb3IgRkFJTFNfLCByZXN1bHRpbmcg
aW4gdGhyZWUgcG9zc2libGUgZW50cmllcworICAgICAgLy8gZm9yIHRoZSB0ZXN0LgorICAgICAg
Ly8gUGxhY2UgZmxha3kvZmFpbHMgdGVzdHMgbmV4dCB0byB0aGVpciBub24tZmxha3kgY291bnRl
cnBhcnRzLgorICAgICAgLy8gVE9ETyhvamFuKTogTWVyZ2UgdGhlIG5vbi1mbGFreS9ub24tZmFp
bHMgdGVzdCB3aXRoIHRoZSBmbGFreS9mYWlscworICAgICAgLy8gb25lIHNvIHRoZXJlJ3Mgb25s
eSBhIHNpbmdsZSBlbnRyeSBwZXIgdGVzdC4KKyAgICAgIGlmICghaXNMYXlvdXRUZXN0UmVzdWx0
cygpKSB7CisgICAgICAgIGEgPSBhLnJlcGxhY2UoR1RFU1RfRkxBS1lfTUFSS0VSLCAnLicpOwor
ICAgICAgICBiID0gYi5yZXBsYWNlKEdURVNUX0ZMQUtZX01BUktFUiwgJy4nKTsKKyAgICAgICAg
YSA9IGEucmVwbGFjZShHVEVTVF9GQUlMU19NQVJLRVIsICcuJyk7CisgICAgICAgIGIgPSBiLnJl
cGxhY2UoR1RFU1RfRkFJTFNfTUFSS0VSLCAnLicpOworICAgICAgfQorCisgICAgICBpZiAoYSA8
IGIpCisgICAgICAgIHJldHVybiAtMTsKKyAgICAgIGVsc2UgaWYgKGEgPT0gYikKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgICBlbHNlCisgICAgICAgIHJldHVybiAxOworICAgIH0sIHJldmVyc2Up
OworICB9CisKKyAgZnVuY3Rpb24gZ2V0TnVtZXJpY1NvcnQoY29sdW1uLCByZXZlcnNlKSB7Cisg
ICAgcmV0dXJuIGdldFJldmVyc2libGVDb21wYXJlRnVuY3Rpb24oZnVuY3Rpb24oYSwgYikgewor
ICAgICAgYSA9IHBhcnNlRmxvYXQoYVtjb2x1bW5dKTsKKyAgICAgIGIgPSBwYXJzZUZsb2F0KGJb
Y29sdW1uXSk7CisgICAgICByZXR1cm4gYSAtIGI7CisgICAgfSwgcmV2ZXJzZSk7CisgIH0KKwor
ICBmdW5jdGlvbiBnZXRSZXZlcnNpYmxlQ29tcGFyZUZ1bmN0aW9uKGNvbXBhcmUsIHJldmVyc2Up
IHsKKyAgICByZXR1cm4gZnVuY3Rpb24oYSwgYikgeworICAgICAgcmV0dXJuIGNvbXBhcmUocmV2
ZXJzZSA/IGIgOiBhLCByZXZlcnNlID8gYSA6IGIpOworICAgIH0KKyAgfQorCisgIGZ1bmN0aW9u
IGNoYW5nZVNvcnQoZSkgeworICAgIHZhciB0YXJnZXQgPSBlLmN1cnJlbnRUYXJnZXQ7CisgICAg
ZS5wcmV2ZW50RGVmYXVsdCgpOworCisgICAgdmFyIHNvcnRWYWx1ZSA9IHRhcmdldC5nZXRBdHRy
aWJ1dGUoJ3NvcnRWYWx1ZScpOworICAgIHdoaWxlICh0YXJnZXQgJiYgdGFyZ2V0LnRhZ05hbWUg
IT0gJ1RBQkxFJykgeworICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7CisgICAgfQor
CisgICAgdmFyIHNvcnQgPSAnc29ydENvbHVtbic7CisgICAgdmFyIG9yZGVyS2V5ID0gJ3NvcnRP
cmRlcic7CisgICAgaWYgKHNvcnRWYWx1ZSA9PSBjdXJyZW50U3RhdGVbc29ydF0gJiYgY3VycmVu
dFN0YXRlW29yZGVyS2V5XSA9PSBGT1JXQVJEKQorICAgICAgb3JkZXIgPSBCQUNLV0FSRDsKKyAg
ICBlbHNlCisgICAgICBvcmRlciA9IEZPUldBUkQ7CisKKyAgICBzZXRRdWVyeVBhcmFtZXRlcihz
b3J0LCBzb3J0VmFsdWUsIG9yZGVyS2V5LCBvcmRlcik7CisgIH0KKworICBmdW5jdGlvbiBzb3J0
VGVzdHModGVzdHMsIGNvbHVtbiwgb3JkZXIpIHsKKyAgICB2YXIgcmVzdWx0c1Byb3BlcnR5LCBz
b3J0RnVuY3Rpb25HZXR0ZXI7CisgICAgaWYgKGNvbHVtbiA9PSAnZmxha2luZXNzJykgeworICAg
ICAgc29ydEZ1bmN0aW9uR2V0dGVyID0gZ2V0TnVtZXJpY1NvcnQ7CisgICAgICByZXN1bHRzUHJv
cGVydHkgPSAnZmxpcHMnOworICAgIH0gZWxzZSBpZiAoY29sdW1uID09ICdzbG93ZXN0Jykgewor
ICAgICAgc29ydEZ1bmN0aW9uR2V0dGVyID0gZ2V0TnVtZXJpY1NvcnQ7CisgICAgICByZXN1bHRz
UHJvcGVydHkgPSAnc2xvd2VzdFRpbWUnOworICAgIH0gZWxzZSBpZiAoY29sdW1uID09ICclJykg
eworICAgICAgc29ydEZ1bmN0aW9uR2V0dGVyID0gZ2V0TnVtZXJpY1NvcnQ7CisgICAgICByZXN1
bHRzUHJvcGVydHkgPSAncGVyY2VudEZhaWxlZCc7CisgICAgfSBlbHNlIHsKKyAgICAgIHNvcnRG
dW5jdGlvbkdldHRlciA9IGdldEFscGhhbnVtZXJpY0NvbXBhcmU7CisgICAgICByZXN1bHRzUHJv
cGVydHkgPSBjb2x1bW47CisgICAgfQorCisgICAgdGVzdHMuc29ydChzb3J0RnVuY3Rpb25HZXR0
ZXIocmVzdWx0c1Byb3BlcnR5LCBvcmRlciA9PSBCQUNLV0FSRCkpOworICB9CisKKyAgLyoqCisg
ICAqIFNvcnRzIGEgc3BhY2Ugc2VwYXJhdGVkIGV4cGVjdGF0aW9ucyBzdHJpbmcgaW4gYWxwaGFu
dW1lcmljIG9yZGVyLgorICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyIFRoZSBleHBlY3RhdGlvbnMg
c3RyaW5nLgorICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBzb3J0ZWQgc3RyaW5nLgorICAgKi8K
KyAgZnVuY3Rpb24gc29ydEV4cGVjdGF0aW9uc1N0cmluZyhzdHIpIHsKKyAgICByZXR1cm4gc3Ry
LnNwbGl0KCcgJykuc29ydCgpLmpvaW4oJyAnKTsKKyAgfQorCisgIGZ1bmN0aW9uIGFkZFVwZGF0
ZSh0ZXN0c05lZWRpbmdVcGRhdGUsIHRlc3QsIGJ1aWxkZXJOYW1lLCBtaXNzaW5nLCBleHRyYSkg
eworICAgIGlmICghdGVzdHNOZWVkaW5nVXBkYXRlW3Rlc3RdKQorICAgICAgdGVzdHNOZWVkaW5n
VXBkYXRlW3Rlc3RdID0ge307CisKKyAgICB2YXIgYnVpbGRJbmZvID0gZ2V0UGxhdGZvcm1BbmRC
dWlsZFR5cGUoYnVpbGRlck5hbWUpOworICAgIHZhciBidWlsZGVyID0gYnVpbGRJbmZvLnBsYXRm
b3JtICsgJyAnICsgYnVpbGRJbmZvLmJ1aWxkVHlwZTsKKyAgICBpZiAoIXRlc3RzTmVlZGluZ1Vw
ZGF0ZVt0ZXN0XVtidWlsZGVyXSkKKyAgICAgIHRlc3RzTmVlZGluZ1VwZGF0ZVt0ZXN0XVtidWls
ZGVyXSA9IHt9OworCisgICAgaWYgKG1pc3NpbmcpCisgICAgICB0ZXN0c05lZWRpbmdVcGRhdGVb
dGVzdF1bYnVpbGRlcl0ubWlzc2luZyA9CisgICAgICAgICAgc29ydEV4cGVjdGF0aW9uc1N0cmlu
ZyhtaXNzaW5nKTsKKworICAgIGlmIChleHRyYSkKKyAgICAgIHRlc3RzTmVlZGluZ1VwZGF0ZVt0
ZXN0XVtidWlsZGVyXS5leHRyYSA9IHNvcnRFeHBlY3RhdGlvbnNTdHJpbmcoZXh0cmEpOworICB9
CisKKworICAvKioKKyAgICogRnJvbSBhIHN0cmluZyBvZiBtb2RpZmllcnMsIHJldHVybnMgYSBz
dHJpbmcgb2YgbW9kaWZpZXJzIHRoYXQKKyAgICogYXJlIGZvciByZWFsIHJlc3VsdCBjaGFuZ2Vz
LCBsaWtlIFNMT1csIGFuZCBleGNsdWRlcyBtb2RpZmllcnMKKyAgICogdGhhdCBzcGVjaWZpY3kg
dGhpbmdzIGxpa2UgcGxhdGZvcm0sIGJ1aWxkX3R5cGUsIGJ1Zy4KKyAgICogQHBhcmFtIHtzdHJp
bmd9IG1vZGlmaWVyU3RyaW5nIFN0cmluZyBjb250YWluaW5nIGFsbCBtb2RpZmllcnMuCisgICAq
IEByZXR1cm4ge3N0cmluZ30gU3RyaW5nIGNvbnRhaW5pbmcgb25seSBtb2RpZmllcnMgdGhhdCBl
ZmZlY3QKKyAgICogICAgIHRoZSByZXN1bHRzLgorICAgKi8KKyAgZnVuY3Rpb24gZ2V0UmVhbE1v
ZGlmaWVycyhtb2RpZmllclN0cmluZykgeworICAgIHZhciByZWFsTW9kaWZpZXJzID0gW107Cisg
ICAgdmFyIG1vZGlmaWVycyA9IG1vZGlmaWVyU3RyaW5nLnNwbGl0KCcgJyk7OworICAgIGZvciAo
dmFyIGogPSAwOyBqIDwgbW9kaWZpZXJzLmxlbmd0aDsgaisrKSB7CisgICAgICB2YXIgbW9kaWZp
ZXIgPSBtb2RpZmllcnNbal07CisgICAgICBpZiAoIShtb2RpZmllciBpbiBCVUlMRF9UWVBFUykg
JiYKKyAgICAgICAgICAhKG1vZGlmaWVyIGluIFBMQVRGT1JNUykgJiYKKyAgICAgICAgICAhc3Rh
cnRzV2l0aChtb2RpZmllciwgJ0JVRycpKSB7CisgICAgICAgIHJlYWxNb2RpZmllcnMucHVzaCht
b2RpZmllcik7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiByZWFsTW9kaWZpZXJzLmpvaW4o
JyAnKTsKKyAgfQorCisgIGZ1bmN0aW9uIGdlbmVyYXRlUGFnZUZvckV4cGVjdGF0aW9uc1VwZGF0
ZSgpIHsKKyAgICAvLyBBbHdheXMgc2hvdyBhbGwgcnVucyB3aGVuIGF1dG8tdXBkYXRpbmcgZXhw
ZWN0YXRpb25zLgorICAgIGlmICghY3VycmVudFN0YXRlLnNob3dBbGxSdW5zKQorICAgICAgc2V0
UXVlcnlQYXJhbWV0ZXIoJ3Nob3dBbGxSdW5zJywgdHJ1ZSk7CisKKyAgICBwcm9jZXNzVGVzdFJ1
bnNGb3JBbGxCdWlsZGVycygpOworICAgIHZhciB0ZXN0c05lZWRpbmdVcGRhdGUgPSB7fTsKKyAg
ICBmb3IgKHZhciB0ZXN0IGluIHRlc3RUb1Jlc3VsdHNNYXApIHsKKyAgICAgIHZhciByZXN1bHRz
ID0gdGVzdFRvUmVzdWx0c01hcFt0ZXN0XTsKKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVz
dWx0cy5sZW5ndGg7IGkrKykgeworICAgICAgICB2YXIgdGhpc1Jlc3VsdCA9IHJlc3VsdHNbaV07
CisgICAgICAgIGlmICghdGhpc1Jlc3VsdC5taXNzaW5nICYmICF0aGlzUmVzdWx0LmV4dHJhKQor
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHZhciBhbGxQYXNzZXNPck5vRGF0YXMgPSB0
aGlzUmVzdWx0LnJhd1Jlc3VsdHMuZmlsdGVyKGZ1bmN0aW9uICh4KSB7CisgICAgICAgICAgcmV0
dXJuIHhbMV0gIT0gIlAiICYmIHhbMV0gIT0gIk4iOworICAgICAgICB9KS5sZW5ndGggPT0gMDsK
KworICAgICAgICBpZiAoYWxsUGFzc2VzT3JOb0RhdGFzKQorICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgIGFkZFVwZGF0ZSh0ZXN0c05lZWRpbmdVcGRhdGUsIHRlc3QsIHRoaXNSZXN1bHQu
YnVpbGRlciwKKyAgICAgICAgICAgIHRoaXNSZXN1bHQubWlzc2luZywgdGhpc1Jlc3VsdC5leHRy
YSk7CisgICAgICB9CisgICAgfQorCisgICAgZm9yICh2YXIgYnVpbGRlciBpbiBidWlsZGVycykg
eworICAgICAgdmFyIHRlc3RzID0gcGVyQnVpbGRlcldpdGhFeHBlY3RhdGlvbnNCdXROb0ZhaWx1
cmVzW2J1aWxkZXJdCisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRlc3RzLmxlbmd0aDsgaSsr
KSB7CisgICAgICAgIC8vIEFueXRoaW5nIGV4dHJhIGluIHRoaXMgY2FzZSBpcyB3aGF0IGlzIGxp
c3RlZCBpbiBleHBlY3RhdGlvbnMKKyAgICAgICAgLy8gcGx1cyBtb2RpZmllcnMgb3RoZXIgdGhh
biBidWcsIHBsYXRmb3JtLCBidWlsZCB0eXBlLgorICAgICAgICB2YXIgcmVhbE1vZGlmaWVycyA9
IGdldFJlYWxNb2RpZmllcnModGVzdHNbaV0ubW9kaWZpZXJzKTsKKyAgICAgICAgdmFyIGV4dHJh
cyA9IHRlc3RzW2ldLmV4cGVjdGF0aW9uczsKKyAgICAgICAgZXh0cmFzICs9IHJlYWxNb2RpZmll
cnMgPyAnICcgKyByZWFsTW9kaWZpZXJzIDogJyc7CisKKyAgICAgICAgYWRkVXBkYXRlKHRlc3Rz
TmVlZGluZ1VwZGF0ZSwgdGVzdHNbaV0udGVzdCwgYnVpbGRlciwKKyAgICAgICAgICAgIG51bGws
IGV4dHJhcyk7CisgICAgICB9CisgICAgfQorCisgICAgLy8gR2V0IHRoZSBrZXlzIGluIGFscGhh
YmV0aWNhbCBvcmRlciwgc28gaXQgaXMgZWFzeSB0byBwcm9jZXNzIGdyb3VwcworICAgIC8vIG9m
IHRlc3RzLgorICAgIHZhciBrZXlzID0gZ2V0S2V5cyh0ZXN0c05lZWRpbmdVcGRhdGUpLnNvcnQo
KTsKKyAgICBzaG93VXBkYXRlSW5mb0ZvclRlc3QodGVzdHNOZWVkaW5nVXBkYXRlLCBrZXlzKTsK
KyAgfQorCisgIC8qKgorICAgKiBTaG93IHRoZSB0ZXN0IHJlc3VsdHMgYW5kIHRoZSBqc29uIGZv
ciBkaWZmZXJpbmcgZXhwZWN0YXRpb25zLCBhbmQKKyAgICogYWxsb3cgdGhlIHVzZXIgdG8gaW5j
bHVkZSBvciBleGNsdWRlIHRoaXMgdXBkYXRlLgorICAgKgorICAgKiBAcGFyYW0ge09iamVjdH0g
dGVzdHNOZWVkaW5nVXBkYXRlIFRlc3RzIHRoYXQgbmVlZCB1cGRhdGluZy4KKyAgICogQHBhcmFt
IHtBcnJheS48c3RyaW5nPn0ga2V5cyBLZXlzIGludG8gdGhlIHRlc3ROZWVkaW5nVXBkYXRlIG9i
amVjdC4KKyAgICovCisgIGZ1bmN0aW9uIHNob3dVcGRhdGVJbmZvRm9yVGVzdCh0ZXN0c05lZWRp
bmdVcGRhdGUsIGtleXMpIHsKKyAgICB2YXIgdGVzdCA9IGtleXNbY3VycmVudFN0YXRlLnVwZGF0
ZUluZGV4XTsKKyAgICBkb2N1bWVudC5ib2R5LmlubmVySFRNTCA9ICc8Yj4nICsgdGVzdCArICc8
L2I+JyArCisgICAgICAgICc8ZGl2IHN0eWxlPSJmbG9hdDpyaWdodCI+JyArIChjdXJyZW50U3Rh
dGUudXBkYXRlSW5kZXggKyAxKSArICcgb2YgJyArCisgICAgICAgICsga2V5cy5sZW5ndGggKyAn
IHRlc3RzPC9kaXY+PGJyPjxicj4nOworCisgICAgdmFyIGJ1dHRvblJlZ2lvbiA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgIHZhciBpbmNsdWRlQnRuID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgnaW5wdXQnKTsKKyAgICBpbmNsdWRlQnRuLnR5cGUgPSAnYnV0dG9uJzsKKyAg
ICBpbmNsdWRlQnRuLnZhbHVlID0gJ2luY2x1ZGUgc2VsZWN0ZWQnOworICAgIGluY2x1ZGVCdG4u
YWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLAorICAgICAgICBwYXJ0aWFsKGhhbmRsZVVwZGF0ZSwg
dGVzdHNOZWVkaW5nVXBkYXRlLCBrZXlzKSwKKyAgICAgICAgZmFsc2UpOworICAgIGJ1dHRvblJl
Z2lvbi5hcHBlbmRDaGlsZChpbmNsdWRlQnRuKTsKKworICAgIHZhciBwcmV2aW91c0J0biA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7CisgICAgcHJldmlvdXNCdG4udHlwZSA9ICdi
dXR0b24nOworICAgIHByZXZpb3VzQnRuLnZhbHVlID0gJ3ByZXZpb3VzJzsKKyAgICBwcmV2aW91
c0J0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsCisgICAgICAgIGZ1bmN0aW9uKCkgeworICAg
ICAgICAgIHNldFVwZGF0ZUluZGV4KGN1cnJlbnRTdGF0ZS51cGRhdGVJbmRleCAtIDEsCisgICAg
ICAgICAgICAgIHRlc3RzTmVlZGluZ1VwZGF0ZSwga2V5cyk7CisgICAgICAgIH0sCisgICAgICAg
IGZhbHNlKTsKKyAgICBidXR0b25SZWdpb24uYXBwZW5kQ2hpbGQocHJldmlvdXNCdG4pOworCisg
ICAgdmFyIG5leHRCdG4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpOworICAgIG5l
eHRCdG4udHlwZSA9ICdidXR0b24nOworICAgIG5leHRCdG4udmFsdWUgPSAnbmV4dCc7CisgICAg
bmV4dEJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsCisgICAgICAgIHBhcnRpYWwobmV4dFVw
ZGF0ZSwgdGVzdHNOZWVkaW5nVXBkYXRlLCBrZXlzKSwKKyAgICAgICAgZmFsc2UpOworICAgIGJ1
dHRvblJlZ2lvbi5hcHBlbmRDaGlsZChuZXh0QnRuKTsKKworICAgIHZhciBkb25lQnRuID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTsKKyAgICBkb25lQnRuLnR5cGUgPSAnYnV0dG9u
JzsKKyAgICBkb25lQnRuLnZhbHVlID0gJ2RvbmUnOworICAgIGRvbmVCdG4uYWRkRXZlbnRMaXN0
ZW5lcignY2xpY2snLCBmaW5pc2hVcGRhdGUsIGZhbHNlKTsKKyAgICBidXR0b25SZWdpb24uYXBw
ZW5kQ2hpbGQoZG9uZUJ0bik7CisKKyAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGJ1dHRv
blJlZ2lvbik7CisKKyAgICB2YXIgdXBkYXRlcyA9IHRlc3RzTmVlZGluZ1VwZGF0ZVt0ZXN0XTsK
KyAgICB2YXIgY2hlY2tib3hlcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAg
IGZvciAodmFyIGJ1aWxkZXIgaW4gdXBkYXRlcykgeworICAgICAgLy8gQ3JlYXRlIGEgY2hlY2ti
b3ggZm9yIGVhY2ggYnVpbGRlci4KKyAgICAgIHZhciBjaGVja2JveFJlZ2lvbiA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAgdmFyIGNoZWNrYm94ID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgnaW5wdXQnKTsKKyAgICAgIGNoZWNrYm94LnR5cGUgPSAnY2hlY2tib3gnOwor
ICAgICAgY2hlY2tib3guaWQgPSBidWlsZGVyOworICAgICAgY2hlY2tib3guY2hlY2tlZCA9IHRy
dWU7CisgICAgICBjaGVja2JveFJlZ2lvbi5hcHBlbmRDaGlsZChjaGVja2JveCk7CisgICAgICBj
aGVja2JveFJlZ2lvbi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShidWlsZGVy
ICsgJyA6ICcgKworICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHVwZGF0ZXNbYnVpbGRlcl0pKSk7
CisgICAgICBjaGVja2JveGVzLmFwcGVuZENoaWxkKGNoZWNrYm94UmVnaW9uKTsKKyAgICB9Cisg
ICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjaGVja2JveGVzKTsKKworICAgIHZhciBkaXYg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICBkaXYuaW5uZXJIVE1MID0gZ2V0
SFRNTEZvckluZGl2aWR1bFRlc3RPbkFsbEJ1aWxkZXJzKHRlc3QpOworICAgIGRvY3VtZW50LmJv
ZHkuYXBwZW5kQ2hpbGQoZGl2KTsKKyAgICBhcHBlbmRFeHBlY3RhdGlvbnMoKTsKKyAgfQorCisK
KyAgLyoqCisgICAqIFdoZW4gdGhlIHVzZXIgaGFzIGZpbmlzaGVkIHNlbGVjdGluZyBleHBlY3Rh
dGlvbnMgdG8gdXBkYXRlLCBwcm92aWRlIHRoZW0KKyAgICogd2l0aCBqc29uIHRvIGNvcHkgb3Zl
ci4KKyAgICovCisgIGZ1bmN0aW9uIGZpbmlzaFVwZGF0ZSgpIHsKKyAgICBkb2N1bWVudC5ib2R5
LmlubmVySFRNTCA9ICdUaGUgbmV4dCBzdGVwIGlzIHRvIGNvcHkgdGhlIG91dHB1dCBiZWxvdyAn
ICsKKyAgICAgICAgJ2ludG8gYSBsb2NhbCBmaWxlIGFuZCBzYXZlIGl0LiAgVGhlbiwgcnVuPGJy
Pjxjb2RlPnB5dGhvbiAnICsKKyAgICAgICAgJ3NyYy93ZWJraXQvdG9vbHMvbGF5b3V0X3Rlc3Rz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy91cGRhdGVfZXhwZWN0YXQnICsKKyAgICAgICAgJ2lvbnNf
ZnJvbV9kYXNoYm9hcmQucHkgcGF0aC90by9sb2NhbC9maWxlPC9jb2RlPjxicj5pbiBvcmRlciB0
byAnICsKKyAgICAgICAgJ3VwZGF0ZSB0aGUgZXhwZWN0YXRpb25zIGZpbGUuPGJyPjx0ZXh0YXJl
YSBpZD0icmVzdWx0cyIgJysKKyAgICAgICAgJ3N0eWxlPSJ3aWR0aDo2MDBweDtoZWlnaHQ6NjAw
cHg7Ij4gJyArCisgICAgICAgIEpTT04uc3RyaW5naWZ5KGNvbmZpcm1lZFRlc3RzKSArICc8L3Rl
eHRhcmVhPic7CisgICAgcmVzdWx0cy5mb2N1cygpOworICAgIGRvY3VtZW50LmV4ZWNDb21tYW5k
KCdTZWxlY3RBbGwnKTsKKyAgfQorCisgIC8qKgorICAgKiBIYW5kbGUgdXNlciBjbGljayBvbiAi
aW5jbHVkZSBzZWxlY3RlZCIgYnV0dG9uLgorICAgKiBJbmNsdWRlcyB0aGUgdGVzdHMgdGhhdCBh
cmUgc2VsZWN0ZWQgYW5kIGV4Y2x1ZGUgdGhlIHJlc3QuCisgICAqIEBwYXJhbSB7T2JqZWN0fSB0
ZXN0c05lZWRpbmdVcGRhdGUgVGVzdHMgdGhhdCBuZWVkIHVwZGF0aW5nLgorICAgKiBAcGFyYW0g
e0FycmF5LjxzdHJpbmc+fSBrZXlzIEtleXMgaW50byB0aGUgdGVzdE5lZWRpbmdVcGRhdGUgb2Jq
ZWN0LgorICAgKgorICAgKi8KKyAgZnVuY3Rpb24gaGFuZGxlVXBkYXRlKHRlc3RzTmVlZGluZ1Vw
ZGF0ZSwga2V5cykgeworICAgIHZhciB0ZXN0ID0ga2V5c1tjdXJyZW50U3RhdGUudXBkYXRlSW5k
ZXhdOworICAgIHZhciB1cGRhdGVzID0gdGVzdHNOZWVkaW5nVXBkYXRlW3Rlc3RdOworICAgIGZv
ciAodmFyIGJ1aWxkZXIgaW4gdXBkYXRlcykgeworICAgICAgLy8gQWRkIGluY2x1ZGVkIHRlc3Rz
LCBhbmQgZGVsZXRlIGV4Y2x1ZGVkIHRlc3RzIGlmCisgICAgICAvLyB0aGV5IHdlcmUgcHJldmlv
dXNseSBpbmNsdWRlZC4KKyAgICAgIGlmICgkKGJ1aWxkZXIpLmNoZWNrZWQpIHsKKyAgICAgICAg
aWYgKCFjb25maXJtZWRUZXN0c1t0ZXN0XSkgeworICAgICAgICAgIGNvbmZpcm1lZFRlc3RzW3Rl
c3RdID0ge307CisgICAgICAgIH0KKyAgICAgICAgY29uZmlybWVkVGVzdHNbdGVzdF1bYnVpbGRl
cl0gPSB0ZXN0c05lZWRpbmdVcGRhdGVbdGVzdF1bYnVpbGRlcl07CisgICAgICB9IGVsc2UgaWYg
KGNvbmZpcm1lZFRlc3RzW3Rlc3RdICYmIGNvbmZpcm1lZFRlc3RzW3Rlc3RdW2J1aWxkZXJdKSB7
CisgICAgICAgIGRlbGV0ZSBjb25maXJtZWRUZXN0c1t0ZXN0XVtidWlsZGVyXTsKKyAgICAgICAg
aWYgKCFnZXRLZXlzKGNvbmZpcm1lZFRlc3RzW3Rlc3RdKS5sZW5ndGgpIHsKKyAgICAgICAgICBk
ZWxldGUgY29uZmlybWVkVGVzdHNbdGVzdF07CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9Cisg
ICAgbmV4dFVwZGF0ZSh0ZXN0c05lZWRpbmdVcGRhdGUsIGtleXMpOworICB9CisKKworICAvKioK
KyAgICogTW92ZSB0byB0aGUgbmV4dCBpdGVtIHRvIHVwZGF0ZS4KKyAgICogQHBhcmFtIHtPYmpl
Y3R9IHRlc3RzTmVlZGluZ1VwZGF0ZSBUZXN0cyB0aGF0IG5lZWQgdXBkYXRpbmcuCisgICAqIEBw
YXJhbSB7QXJyYXkuPHN0cmluZz59IGtleXMgS2V5cyBpbnRvIHRoZSB0ZXN0TmVlZGluZ1VwZGF0
ZSBvYmplY3QuCisgICAqLworICBmdW5jdGlvbiBuZXh0VXBkYXRlKHRlc3RzTmVlZGluZ1VwZGF0
ZSwga2V5cykgeworICAgIHNldFVwZGF0ZUluZGV4KGN1cnJlbnRTdGF0ZS51cGRhdGVJbmRleCAr
IDEsIHRlc3RzTmVlZGluZ1VwZGF0ZSwga2V5cyk7CisgIH0KKworCisgIC8qKgorICAgKiBBZHZh
bmNlIHRoZSBpbmRleCB3ZSBhcmUgdXBkYXRpbmcgYXQuICBJZiB3ZSB3YWxrIG92ZXIgdGhlIGVu
ZAorICAgKiBvciBiZWdpbm5pbmcsIGp1c3QgbG9vcC4KKyAgICogQHBhcmFtIHtzdHJpbmd9IG5l
d0luZGV4IFRoZSBpbmRleCBpbnRvIHRoZSBrZXlzIHRvIG1vdmUgdG8uCisgICAqIEBwYXJhbSB7
T2JqZWN0fSB0ZXN0c05lZWRpbmdVcGRhdGUgVGVzdHMgdGhhdCBuZWVkIHVwZGF0aW5nLgorICAg
KiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBrZXlzIEtleXMgaW50byB0aGUgdGVzdE5lZWRpbmdV
cGRhdGUgb2JqZWN0LgorICAgKi8KKyAgZnVuY3Rpb24gc2V0VXBkYXRlSW5kZXgobmV3SW5kZXgs
IHRlc3RzTmVlZGluZ1VwZGF0ZSwga2V5cykgeworICAgIGlmIChuZXdJbmRleCA9PSAtMSkgewor
ICAgICAgbmV3SW5kZXggPSBrZXlzLmxlbmd0aCAtIDE7CisgICAgfSBlbHNlIGlmIChuZXdJbmRl
eCA9PSBrZXlzLmxlbmd0aCkgeworICAgICAgbmV3SW5kZXggPSAwOworICAgIH0KKyAgICBzZXRR
dWVyeVBhcmFtZXRlcigidXBkYXRlSW5kZXgiLCBuZXdJbmRleCk7CisgICAgc2hvd1VwZGF0ZUlu
Zm9Gb3JUZXN0KHRlc3RzTmVlZGluZ1VwZGF0ZSwga2V5cyk7CisgIH0KKworICBmdW5jdGlvbiBn
ZXRIVE1MRm9ySW5kaXZpZHVsVGVzdE9uQWxsQnVpbGRlcnModGVzdCkgeworICAgIHByb2Nlc3NU
ZXN0UnVuc0ZvckFsbEJ1aWxkZXJzKCk7CisKKyAgICB2YXIgdGVzdFJlc3VsdHMgPSB0ZXN0VG9S
ZXN1bHRzTWFwW3Rlc3RdOworICAgIHZhciBidWlsZGVyTWFzdGVyOworICAgIHZhciBodG1sID0g
Jyc7CisgICAgaWYgKHRlc3RSZXN1bHRzICYmIHRlc3RSZXN1bHRzLmxlbmd0aCkgeworICAgICAg
YnVpbGRlck1hc3RlciA9IGdldEJ1aWxkZXJNYXN0ZXIodGVzdFJlc3VsdHNbMF0uYnVpbGRlcik7
CisgICAgICBpZiAoaXNMYXlvdXRUZXN0UmVzdWx0cygpKSB7CisgICAgICAgIHZhciB0cmFjVVJM
ID0gVEVTVF9VUkxfQkFTRV9QQVRIX1RSQUMgKyB0ZXN0CisgICAgICAgIGh0bWwgKz0gZ2V0TGlu
a0hUTUxUb09wZW5XaW5kb3codHJhY1VSTCwgdHJhY1VSTCk7CisgICAgICB9CisKKyAgICAgIGh0
bWwgKz0nPGRpdj48Yj5JZiBhIGJ1aWxkZXIgaXMgbm90IGxpc3RlZCwgdGhhdCBtZWFucyB0aGUg
YnVpbGRlciAnICsKKyAgICAgICAgICAnZG9lcyBub3QgcnVuIHRoYXQgdGVzdCAoZS5nLiBpdCBp
cyBza2lwcGVkKSBvciBhbGwgcnVucyBvZiB0aGUgJyArCisgICAgICAgICAgJ3Rlc3QgcGFzc2Vk
LjwvYj48L2Rpdj4nOworCisgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRlc3RSZXN1bHRzLmxl
bmd0aDsgaisrKSB7CisgICAgICAgIGh0bWwgKz0gZ2V0SFRNTEZvclNpbmdsZVRlc3RSb3codGVz
dFJlc3VsdHNbal0pOworICAgICAgfQorICAgICAgaHRtbCA9IGdldEhUTUxGb3JUZXN0VGFibGUo
aHRtbCk7CisgICAgfSBlbHNlIHsKKyAgICAgIGlmIChleHBlY3RhdGlvbnNCeVRlc3RbdGVzdF0p
IHsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHBlY3RhdGlvbnNCeVRlc3RbdGVzdF0u
bGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICBodG1sICs9ICc8ZGl2PicgKyBleHBlY3RhdGlvbnNC
eVRlc3RbdGVzdF1baV0ubW9kaWZpZXJzICsgJyB8ICcgKworICAgICAgICAgICAgICBleHBlY3Rh
dGlvbnNCeVRlc3RbdGVzdF1baV0uZXhwZWN0YXRpb25zICsgJzwvZGl2Pic7CisgICAgICAgIH0K
KyAgICAgIH0KKyAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9Im5vdC1mb3VuZCI+VGVzdCBub3Qg
Zm91bmQuIEVpdGhlciBpdCBkb2VzICcgKworICAgICAgICAgICdub3QgZXhpc3QsIGlzIHNraXBw
ZWQgb3IgcGFzc2VzIG9uIGFsbCBwbGF0Zm9ybXMuPC9kaXY+JzsKKyAgICB9CisKKyAgICBodG1s
ICs9ICc8ZGl2IGNsYXNzPWV4cGVjdGF0aW9ucyB0ZXN0PScgKyB0ZXN0ICsgJz48ZGl2PicgKwor
ICAgICAgICBnZXRMaW5rSFRNTFRvVG9nZ2xlU3RhdGUoJ3Nob3dFeHBlY3RhdGlvbnMnLCAncmVz
dWx0cycpCisKKyAgICBpZiAoaXNMYXlvdXRUZXN0UmVzdWx0cygpKSB7CisgICAgICBodG1sICs9
ICcgfCAnICsgZ2V0TGlua0hUTUxUb1RvZ2dsZVN0YXRlKCdzaG93TGFyZ2VFeHBlY3RhdGlvbnMn
LAorICAgICAgICAgICAgICAnbGFyZ2UgdGh1bWJuYWlscycpOworICAgICAgaWYgKGJ1aWxkZXJN
YXN0ZXIgPT0gV0VCS0lUX0JVSUxERVJfTUFTVEVSKSB7CisgICAgICAgIHZhciByZXZpc2lvbiA9
IGN1cnJlbnRTdGF0ZS5yZXZpc2lvbiB8fCAnJzsKKyAgICAgICAgaHRtbCArPSAnPGZvcm0gJyAr
CisgICAgICAgICAgICAnb25zdWJtaXQ9InNldFF1ZXJ5UGFyYW1ldGVyKFwncmV2aXNpb25cJywg
cmV2aXNpb24udmFsdWUpOycgKworICAgICAgICAgICAgJ3JldHVybiBmYWxzZTsiPlNob3cgcmVz
dWx0cyBmb3IgV2ViS2l0IHJldmlzaW9uOiAnICsKKyAgICAgICAgICAgICc8aW5wdXQgbmFtZT1y
ZXZpc2lvbiBwbGFjZWhvbGRlcj0iZS5nLiA2NTU0MCIgdmFsdWU9IicgKyByZXZpc2lvbiArCisg
ICAgICAgICAgICAnIiBpZD1yZXZpc2lvbi1pbnB1dD48L2Zvcm0+JzsKKyAgICAgIH0gZWxzZSB7
CisgICAgICAgIGh0bWwgKz0gJyB8IDxiPk9ubHkgc2hvd3MgYWN0dWFsIHJlc3VsdHMvZGlmZnMg
ZnJvbSB0aGUgbW9zdCByZWNlbnQnICsKKyAgICAgICAgICAnICpmYWlsdXJlKiBvbiBlYWNoIGJv
dC48L2I+JzsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgaHRtbCArPSAnIHwgPHNwYW4+
UmVzdWx0cyBoZWlnaHQ6PGlucHV0ICcgKworICAgICAgICAgICdvbmNoYW5nZT0ic2V0UXVlcnlQ
YXJhbWV0ZXIoXCdyZXN1bHRzSGVpZ2h0XCcsdGhpcy52YWx1ZSkiIHZhbHVlPSInICsKKyAgICAg
ICAgICBjdXJyZW50U3RhdGUucmVzdWx0c0hlaWdodCArICciIHN0eWxlPSJ3aWR0aDoyLjVlbSI+
cHg8L3NwYW4+JzsKKyAgICB9CisgICAgaHRtbCArPSAnPC9kaXY+PC9kaXY+JzsKKyAgICByZXR1
cm4gaHRtbDsKKyAgfQorCisgIGZ1bmN0aW9uIGdldEV4cGVjdGF0aW9uc0NvbnRhaW5lcihleHBl
Y3RhdGlvbnNDb250YWluZXJzLCBwYXJlbnRDb250YWluZXIsCisgICAgICBleHBlY3RhdGlvbnNU
eXBlKSB7CisgICAgaWYgKCFleHBlY3RhdGlvbnNDb250YWluZXJzW2V4cGVjdGF0aW9uc1R5cGVd
KSB7CisgICAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7
CisgICAgICBjb250YWluZXIuY2xhc3NOYW1lID0gJ2V4cGVjdGF0aW9ucy1jb250YWluZXInOwor
ICAgICAgcGFyZW50Q29udGFpbmVyLmFwcGVuZENoaWxkKGNvbnRhaW5lcik7CisgICAgICBleHBl
Y3RhdGlvbnNDb250YWluZXJzW2V4cGVjdGF0aW9uc1R5cGVdID0gY29udGFpbmVyOworICAgIH0K
KyAgICByZXR1cm4gZXhwZWN0YXRpb25zQ29udGFpbmVyc1tleHBlY3RhdGlvbnNUeXBlXTsKKyAg
fQorCisgIGZ1bmN0aW9uIGdldEV4dGVuc2lvbihwYXRoKSB7CisgICAgdmFyIHBhcnRzID0gcGF0
aC5zcGxpdCgnLicpCisgICAgdmFyIGV4dGVuc2lvbiA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFd
OworICAgIHJldHVybiBleHRlbnNpb24gPT0gJ2h0bWwnID8gJ3R4dCcgOiBleHRlbnNpb247Cisg
IH0KKworICBmdW5jdGlvbiBlbnN1cmVUcmFpbGluZ1NsYXNoKHBhdGgpIHsKKyAgICBpZiAocGF0
aC5tYXRjaCgvXC8kLykpCisgICAgICByZXR1cm4gcGF0aDsKKyAgICByZXR1cm4gcGF0aCArICcv
JzsKKyAgfQorCisgIGZ1bmN0aW9uIG1heWJlQWRkUG5nQ2hlY2tzdW0oZXhwZWN0YXRpb25EaXYs
IHBuZ1VybCkgeworICAgIC8vIHBuZ1VybCBnZXRzIHNlcnZlZCBmcm9tIHRoZSBicm93c2VyIGNh
Y2hlIHNpbmNlIHdlIGp1c3QgbG9hZGVkIGl0IGluIGFuCisgICAgLy8gPGltZz4gdGFnLgorICAg
IHJlcXVlc3QocG5nVXJsLAorICAgICAgZnVuY3Rpb24oeGhyKSB7CisgICAgICAgIC8vIENvbnZl
cnQgdGhlIGZpcnN0IDJrIG9mIHRoZSByZXNwb25zZSB0byBhIGJ5dGUgc3RyaW5nLgorICAgICAg
ICB2YXIgYnl0ZXMgPSB4aHIucmVzcG9uc2VUZXh0LnN1YnN0cmluZygwLCAyMDQ4KTsKKyAgICAg
ICAgZm9yICh2YXIgcG9zaXRpb24gPSAwOyBwb3NpdGlvbiA8IGJ5dGVzLmxlbmd0aDsgKytwb3Np
dGlvbikKKyAgICAgICAgICBieXRlc1twb3NpdGlvbl0gPSBieXRlc1twb3NpdGlvbl0gJiAweGZm
OworCisgICAgICAgIC8vIExvb2sgZm9yIHRoZSBjb21tZW50LgorICAgICAgICB2YXIgY29tbWVu
dEtleSA9ICd0RVh0Y2hlY2tzdW1ceDAwJzsKKyAgICAgICAgdmFyIGNoZWNrc3VtUG9zaXRpb24g
PSBieXRlcy5pbmRleE9mKGNvbW1lbnRLZXkpOworICAgICAgICBpZiAoY2hlY2tzdW1Qb3NpdGlv
biA9PSAtMSkKKyAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdmFyIGNoZWNrc3VtID0gYnl0
ZXMuc3Vic3RyaW5nKAorICAgICAgICAgICAgY2hlY2tzdW1Qb3NpdGlvbiArIGNvbW1lbnRLZXku
bGVuZ3RoLAorICAgICAgICAgICAgY2hlY2tzdW1Qb3NpdGlvbiArIGNvbW1lbnRLZXkubGVuZ3Ro
ICsgMzIpOworICAgICAgICB2YXIgY2hlY2tzdW1Db250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCdzcGFuJyk7CisgICAgICAgIGNoZWNrc3VtQ29udGFpbmVyLmlubmVyVGV4dCA9ICdF
bWJlZGRlZCBjaGVja3N1bTogJyArIGNoZWNrc3VtOworICAgICAgICBjaGVja3N1bUNvbnRhaW5l
ci5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ3BuZ2NoZWNrc3VtJyk7CisgICAgICAgIGV4cGVjdGF0
aW9uRGl2LnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQoY2hlY2tzdW1Db250YWluZXIpOworICAgICAg
fSwKKyAgICAgIGZ1bmN0aW9uKHhocikge30sCisgICAgICB0cnVlKTsKKyAgfQorCisgIC8qKgor
ICAgKiBBZGRzIGEgc3BlY2lmaWMgZXhwZWN0YXRpb24uIElmIGl0J3MgYW4gaW1hZ2UsIGl0J3Mg
b25seSBhZGRlZCBvbiB0aGUKKyAgICogaW1hZ2UncyBvbmxvYWQgaGFuZGxlci4gSWYgaXQncyBh
IHRleHQgZmlsZSwgdGhlbiBhIHNjcmlwdCB0YWcgaXMgYXBwZW5kZWQKKyAgICogYXMgYSBoYWNr
IHRvIHNlZSBpZiB0aGUgZmlsZSA0MDRzIChuZWNlc3Nhcnkgc2luY2UgaXQncyBjcm9zcy1kb21h
aW4pLgorICAgKiBPbmNlIGFsbCB0aGUgZXhwZWN0YXRpb25zIGZvciBhIHNwZWNpZmljIHR5cGUg
aGF2ZSBsb2FkZWQgb3IgZXJyb3JlZAorICAgKiAoZS5nLiBhbGwgdGhlIHRleHQgcmVzdWx0cyks
IHRoZW4gd2UgZ28gdGhyb3VnaCBhbmQgaWRlbnRpZnkgd2hpY2ggcGxhdGZvcm0KKyAgICogdXNl
cyB3aGljaCBleHBlY3RhdGlvbi4KKyAgICoKKyAgICogQHBhcmFtIHtPYmplY3R9IGV4cGVjdGF0
aW9uc0NvbnRhaW5lcnMgTWFwIGZyb20gZXhwZWN0YXRpb25zIHR5cGUgdG8KKyAgICogICAgIGNv
bnRhaW5lciBESVYuCisgICAqIEBwYXJhbSB7RWxlbWVudH0gcGFyZW50Q29udGFpbmVyIENvbnRh
aW5lciBlbGVtZW50IGZvcgorICAgKiAgICAgZXhwZWN0YXRpb25zQ29udGFpbmVyIGRpdnMuCisg
ICAqIEBwYXJhbSB7c3RyaW5nfSBwbGF0Zm9ybSBQbGF0Zm9ybSBzdHJpbmcuIEVtcHR5IHN0cmlu
ZyBmb3Igbm9uLXBsYXRmb3JtCisgICAqICAgICBzcGVjaWZpYyBleHBlY3RhdGlvbnMuCisgICAq
IEBwYXJhbSB7c3RyaW5nfSBwYXRoIFJlbGF0aXZlIHBhdGggdG8gdGhlIGV4cGVjdGF0aW9uLgor
ICAgKiBAcGFyYW0ge3N0cmluZ30gYmFzZSBCYXNlIHBhdGggZm9yIHRoZSBleHBlY3RhdGlvbiBV
UkwuCisgICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRfYnVpbGRlciBCdWlsZGVyIHdob3NlIGFjdHVh
bCByZXN1bHRzIHRoaXMgZXhwZWN0YXRpb24KKyAgICogICAgIHBvaW50cyB0by4KKyAgICovCisg
IGZ1bmN0aW9uIGFkZEV4cGVjdGF0aW9uSXRlbShleHBlY3RhdGlvbnNDb250YWluZXJzLCBwYXJl
bnRDb250YWluZXIsIHBsYXRmb3JtLAorICAgICAgcGF0aCwgYmFzZSwgb3B0X2J1aWxkZXIpIHsK
KyAgICB2YXIgZmlsZUV4dGVuc2lvbiA9IGdldEV4dGVuc2lvbihwYXRoKTsKKyAgICB2YXIgY29u
dGFpbmVyID0gZ2V0RXhwZWN0YXRpb25zQ29udGFpbmVyKGV4cGVjdGF0aW9uc0NvbnRhaW5lcnMs
CisgICAgICAgICAgcGFyZW50Q29udGFpbmVyLCBmaWxlRXh0ZW5zaW9uKTsKKyAgICB2YXIgaXNJ
bWFnZSA9IHBhdGgubWF0Y2goL1wucG5nJC8pOworCisgICAgLy8gVE9ETyhvamFuKTogU3RvcCB1
c2luZyBzY3JpcHQgdGFncyBvbmNlIGFsbCB0aGUgcGxhY2VzIHdlIHB1bGwgZnJvbSBzdXBwb3J0
IENPUlMuCisgICAgdmFyIHBsYXRmb3JtUGFydCA9IHBsYXRmb3JtID8gZW5zdXJlVHJhaWxpbmdT
bGFzaChwbGF0Zm9ybSkgOiAnJzsKKworICAgIHZhciBjaGlsZENvbnRhaW5lciA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsKKyAgICBjaGlsZENvbnRhaW5lci5jbGFzc05hbWUgPSAn
dW5sb2FkZWQnOworCisgICAgdmFyIGFwcGVuZEV4cGVjdGF0aW9uc0l0ZW0gPSBmdW5jdGlvbihp
dGVtKSB7CisgICAgICBjaGlsZENvbnRhaW5lci5hcHBlbmRDaGlsZChnZXRFeHBlY3RhdGlvbnNU
aXRsZShwbGF0Zm9ybSwgcGF0aCwgb3B0X2J1aWxkZXIgfHwgJycpKTsKKyAgICAgIGNoaWxkQ29u
dGFpbmVyLmNsYXNzTmFtZSA9ICdleHBlY3RhdGlvbnMtaXRlbSc7CisgICAgICBpdGVtLmNsYXNz
TmFtZSA9ICdleHBlY3RhdGlvbiAnICsgZmlsZUV4dGVuc2lvbjsKKyAgICAgIGlmIChjdXJyZW50
U3RhdGUuc2hvd0xhcmdlRXhwZWN0YXRpb25zKQorICAgICAgICBpdGVtLmNsYXNzTmFtZSArPSAn
IGxhcmdlJzsKKyAgICAgIGNoaWxkQ29udGFpbmVyLmFwcGVuZENoaWxkKGl0ZW0pOworICAgICAg
aGFuZGxlRmluaXNoZWRMb2FkaW5nRXhwZWN0YXRpb25zKGNvbnRhaW5lcik7CisgICAgfTsKKwor
ICAgIHZhciB1cmwgPSBiYXNlICsgcGxhdGZvcm1QYXJ0ICsgcGF0aDsKKyAgICBpZiAoaXNJbWFn
ZSB8fCAhc3RhcnRzV2l0aChiYXNlLCAnaHR0cDovL3N2bi53ZWJraXQub3JnJykpIHsKKyAgICAg
IHZhciBkdW1teU5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGlzSW1hZ2UgPyAnaW1nJyA6
ICdzY3JpcHQnKTsKKyAgICAgIGR1bW15Tm9kZS5zcmMgPSB1cmw7CisgICAgICBkdW1teU5vZGUu
b25sb2FkID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBpdGVtOworICAgICAgICBpZiAoaXNJ
bWFnZSkgeworICAgICAgICAgIGl0ZW0gPSBkdW1teU5vZGU7CisgICAgICAgICAgaWYgKHN0YXJ0
c1dpdGgoYmFzZSwgJ2h0dHA6Ly9zdm4ud2Via2l0Lm9yZycpKQorICAgICAgICAgICAgbWF5YmVB
ZGRQbmdDaGVja3N1bShpdGVtLCB1cmwpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGl0
ZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTsKKyAgICAgICAgICBpdGVtLnNy
YyA9IHVybDsKKyAgICAgICAgfQorICAgICAgICBhcHBlbmRFeHBlY3RhdGlvbnNJdGVtKGl0ZW0p
OworICAgICAgfQorICAgICAgZHVtbXlOb2RlLm9uZXJyb3IgPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgY2hpbGRDb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjaGlsZENvbnRhaW5lcik7
CisgICAgICAgIGhhbmRsZUZpbmlzaGVkTG9hZGluZ0V4cGVjdGF0aW9ucyhjb250YWluZXIpOwor
ICAgICAgfQorCisgICAgICAvLyBBcHBlbmQgc2NyaXB0IGVsZW1lbnRzIG5vdyBzbyB0aGF0IHRo
ZXkgbG9hZC4gSW1hZ2VzIGxvYWQgd2l0aG91dCBiZWluZworICAgICAgLy8gYXBwZW5kZWQgdG8g
dGhlIERPTS4KKyAgICAgIGlmICghaXNJbWFnZSkKKyAgICAgICAgY2hpbGRDb250YWluZXIuYXBw
ZW5kQ2hpbGQoZHVtbXlOb2RlKTsKKyAgICB9IGVsc2UgeworICAgICAgcmVxdWVzdCh1cmwsCisg
ICAgICAgIGZ1bmN0aW9uKHhocikgeworICAgICAgICAgIHZhciBpdGVtID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgncHJlJyk7CisgICAgICAgICAgaXRlbS5pbm5lclRleHQgPSB4aHIucmVzcG9u
c2VUZXh0OworICAgICAgICAgIGFwcGVuZEV4cGVjdGF0aW9uc0l0ZW0oaXRlbSk7CisgICAgICAg
IH0sCisgICAgICAgIGZ1bmN0aW9uKHhocikgey8qIERvIG5vdGhpbmcgb24gZXJyb3JzIHNpbmNl
IHRoZXkncmUgZXhwZWN0ZWQgKi99KTsKKyAgICB9CisKKyAgICBjb250YWluZXIuYXBwZW5kQ2hp
bGQoY2hpbGRDb250YWluZXIpOworICB9CisKKworICAvKioKKyAgICogSWRlbnRpZmllcyB3aGlj
aCBleHBlY3RhdGlvbnMgYXJlIHVzZWQgb24gd2hpY2ggcGxhdGZvcm0gb25jZSBhbGwgdGhlCisg
ICAqIGV4cGVjdGF0aW9ucyBvZiBhIGdpdmVuIHR5cGUgaGF2ZSBsb2FkZWQgKGUuZy4gdGhlIGNv
bnRhaW5lciBmb3IgcG5nCisgICAqIGV4cGVjdGF0aW9ucyBmb3IgdGhpcyB0ZXN0IGhhZCBubyBj
aGlsZCBlbGVtZW50cyB3aXRoIHRoZSBjbGFzcworICAgKiAidW5sb2FkZWQiKS4KKyAgICoKKyAg
ICogQHBhcmFtIHtzdHJpbmd9IGNvbnRhaW5lciBFbGVtZW50IGNvbnRhaW5pbmcgdGhlIGV4cGVj
dGF0aW9ucyBmb3IgYSBnaXZlbgorICAgKiAgICAgdGVzdCBhbmQgYSBnaXZlbiB0eXBlIChlLmcu
IHBuZykuCisgICAqLworICBmdW5jdGlvbiBoYW5kbGVGaW5pc2hlZExvYWRpbmdFeHBlY3RhdGlv
bnMoY29udGFpbmVyKSB7CisgICAgaWYgKGNvbnRhaW5lci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1l
KCd1bmxvYWRlZCcpLmxlbmd0aCkKKyAgICAgIHJldHVybjsKKworICAgIHZhciB0aXRsZXMgPSBj
b250YWluZXIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZXhwZWN0YXRpb25zLXRpdGxlJyk7Cisg
ICAgZm9yICh2YXIgcGxhdGZvcm0gaW4gZmFsbGJhY2tzTWFwKSB7CisgICAgICB2YXIgZmFsbGJh
Y2tzID0gZmFsbGJhY2tzTWFwW3BsYXRmb3JtXTsKKyAgICAgIHZhciB3aW5uZXIgPSBudWxsOwor
ICAgICAgdmFyIHdpbm5pbmdJbmRleCA9IC0xOworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0
aXRsZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgdmFyIHRpdGxlID0gdGl0bGVzW2ldOworCisg
ICAgICAgIGlmICghd2lubmVyICYmIHRpdGxlLnBsYXRmb3JtID09ICIiKSB7CisgICAgICAgICAg
d2lubmVyID0gdGl0bGU7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAg
ICB2YXIgcmF3UGxhdGZvcm0gPSB0aXRsZS5wbGF0Zm9ybSAmJgorICAgICAgICAgICAgdGl0bGUu
cGxhdGZvcm0ucmVwbGFjZSgncGxhdGZvcm0vJywgJycpOworICAgICAgICBmb3IgKHZhciBqID0g
MDsgaiA8IGZhbGxiYWNrcy5sZW5ndGg7IGorKykgeworICAgICAgICAgIGlmICgod2lubmluZ0lu
ZGV4ID09IC0xIHx8IHdpbm5pbmdJbmRleCA+IGopICYmCisgICAgICAgICAgICAgICByYXdQbGF0
Zm9ybSA9PSBmYWxsYmFja3Nbal0pIHsKKyAgICAgICAgICAgIHdpbm5pbmdJbmRleCA9IGo7Cisg
ICAgICAgICAgICB3aW5uZXIgPSB0aXRsZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgfQorICAgICAgaWYgKHdpbm5lcikgeworICAgICAgICB3aW5u
ZXIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncGxhdGZvcm1zJylbMF0uaW5uZXJIVE1MICs9Cisg
ICAgICAgICAgICAnPGRpdiBjbGFzcz11c2VkLXBsYXRmb3JtPicgKyBwbGF0Zm9ybSArICc8L2Rp
dj4nOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgY29uc29sZS5sb2coJ05vIGV4cGVjdGF0aW9u
cyBpZGVudGlmaWVkIGZvciB0aGlzIHRlc3QuIFRoaXMgbWVhbnMgJyArCisgICAgICAgICAgICAn
dGhlcmUgaXMgYSBsb2dpYyBidWcgaW4gdGhlIGRhc2hib2FyZCBmb3Igd2hpY2ggZXhwZWN0YXRp
b25zIGEgJyArCisgICAgICAgICAgICAncGxhdGZvcm0gdXNlcyBvciB0cmFjLndlYmtpdC5vcmcv
c3JjLmNocm9taXVtLm9yZyBpcyBnaXZpbmcgJyArCisgICAgICAgICAgICAnIDVYWHMuJyk7Cisg
ICAgICB9CisgICAgfQorCisgICAgY29uc29saWRhdGVVc2VkUGxhdGZvcm1zKGNvbnRhaW5lcik7
CisgIH0KKworICAvKioKKyAgICogQ29uc29saWRhdGUgcGxhdGZvcm1zIHdoZW4gYWxsIHN1Yi1w
bGF0Zm9ybXMgZm9yIGEgZ2l2ZW4gcGxhdGZvcm0gYXJlIHJlcHJlc2VudGVkLgorICAgKiBlLmcu
LCBpZiBhbGwgb2YgdGhlIFdJTi0gcGxhdGZvcm1zIGFyZSB0aGVyZSwgcmVwbGFjZSB0aGVtIHdp
dGgganVzdCBXSU4uCisgICAqIFRPRE8ob2phbik6IFNob3VsZCB3ZSBhbHNvIGNvbnNvbGlkYXRl
ICJNQUMtU05PV0xFT1BBUkQgTUFDLVNOT1dMRU9QQVJELUdQVSIgdG8gTUFDLVNOT1dMRU9QQVJE
CisgICAqIG9yIGlzIHRoYXQgbW9yZSBjb25mdXNpbmc/CisgICAqLworICBmdW5jdGlvbiBjb25z
b2xpZGF0ZVVzZWRQbGF0Zm9ybXMoY29udGFpbmVyKSB7CisgICAgdmFyIGFsbFBsYXRmb3JtcyA9
IE9iamVjdC5rZXlzKGZhbGxiYWNrc01hcCk7CisKKyAgICB2YXIgcGxhdGZvcm1FbGVtZW50cyA9
IGNvbnRhaW5lci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdwbGF0Zm9ybXMnKTsKKyAgICBmb3Ig
KHZhciBpID0gMCwgcGxhdGZvcm1zTGVuZ3RoID0gcGxhdGZvcm1FbGVtZW50cy5sZW5ndGg7IGkg
PCBwbGF0Zm9ybXNMZW5ndGg7IGkrKykgeworICAgICAgdmFyIHVzZWRQbGF0Zm9ybXMgPSBwbGF0
Zm9ybUVsZW1lbnRzW2ldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3VzZWQtcGxhdGZvcm0nKTsK
KyAgICAgIGlmICghdXNlZFBsYXRmb3Jtcy5sZW5ndGgpCisgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICB2YXIgcGxhdGZvcm1zID0ge307CisgICAgICBwbGF0Zm9ybXNbJ01BQyddID0ge307Cisg
ICAgICBwbGF0Zm9ybXNbJ1dJTiddID0ge307CisgICAgICBwbGF0Zm9ybXNbJ0xJTlVYJ10gPSB7
fTsKKyAgICAgIGFsbFBsYXRmb3Jtcy5mb3JFYWNoKGZ1bmN0aW9uKHBsYXRmb3JtKSB7CisgICAg
ICAgIGlmIChzdGFydHNXaXRoKHBsYXRmb3JtLCAnTUFDJykpCisgICAgICAgICAgcGxhdGZvcm1z
WydNQUMnXVtwbGF0Zm9ybV0gPSAxOworICAgICAgICBlbHNlIGlmIChzdGFydHNXaXRoKHBsYXRm
b3JtLCAnV0lOJykpCisgICAgICAgICAgcGxhdGZvcm1zWydXSU4nXVtwbGF0Zm9ybV0gPSAxOwor
ICAgICAgICBlbHNlIGlmIChzdGFydHNXaXRoKHBsYXRmb3JtLCAnTElOVVgnKSkKKyAgICAgICAg
ICBwbGF0Zm9ybXNbJ0xJTlVYJ11bcGxhdGZvcm1dID0gMTsKKyAgICAgIH0pOworCisgICAgICBm
b3IgKHZhciBqID0gMCwgdXNlZFBsYXRmb3Jtc0xlbmd0aCA9IHVzZWRQbGF0Zm9ybXMubGVuZ3Ro
OyBqIDwgdXNlZFBsYXRmb3Jtc0xlbmd0aDsgaisrKSB7CisgICAgICAgIGZvciAodmFyIHBsYXRm
b3JtIGluIHBsYXRmb3JtcykgeworICAgICAgICAgIGRlbGV0ZSBwbGF0Zm9ybXNbcGxhdGZvcm1d
W3VzZWRQbGF0Zm9ybXNbal0udGV4dENvbnRlbnRdOworICAgICAgICB9CisgICAgICB9CisKKyAg
ICAgIGZvciAodmFyIHBsYXRmb3JtIGluIHBsYXRmb3JtcykgeworICAgICAgICBpZiAoIU9iamVj
dC5rZXlzKHBsYXRmb3Jtc1twbGF0Zm9ybV0pLmxlbmd0aCkgeworICAgICAgICAgIHZhciBub2Rl
c1RvUmVtb3ZlID0gW107CisgICAgICAgICAgZm9yICh2YXIgaiA9IDAsIHVzZWRQbGF0Zm9ybXNM
ZW5ndGggPSB1c2VkUGxhdGZvcm1zLmxlbmd0aDsgaiA8IHVzZWRQbGF0Zm9ybXNMZW5ndGg7IGor
KykgeworICAgICAgICAgICAgdmFyIHVzZWRQbGF0Zm9ybSA9IHVzZWRQbGF0Zm9ybXNbal07Cisg
ICAgICAgICAgICBpZiAoc3RhcnRzV2l0aCh1c2VkUGxhdGZvcm0udGV4dENvbnRlbnQsIHBsYXRm
b3JtKSkKKyAgICAgICAgICAgICAgbm9kZXNUb1JlbW92ZS5wdXNoKHVzZWRQbGF0Zm9ybSk7Cisg
ICAgICAgICAgfQorCisgICAgICAgICAgbm9kZXNUb1JlbW92ZS5mb3JFYWNoKGZ1bmN0aW9uKGVs
ZW1lbnQpIHsgZWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsZW1lbnQpOyB9KTsKKyAg
ICAgICAgICBwbGF0Zm9ybUVsZW1lbnRzW2ldLmluc2VydEFkamFjZW50SFRNTCgnYWZ0ZXJCZWdp
bicsICc8ZGl2IGNsYXNzPXVzZWQtcGxhdGZvcm0+JyArIHBsYXRmb3JtICsgJzwvZGl2PicpOwor
ICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisKKyAgZnVuY3Rpb24gYWRkRXhwZWN0YXRp
b25zKGV4cGVjdGF0aW9uc0NvbnRhaW5lcnMsIGNvbnRhaW5lciwgYmFzZSwKKyAgICAgICAgcGxh
dGZvcm0sIHRleHQsIHBuZywgcmVmdGVzdF9odG1sX2ZpbGUsIHJlZnRlc3RfbWlzbWF0Y2hfaHRt
bF9maWxlKSB7CisgICAgYWRkRXhwZWN0YXRpb25JdGVtKGV4cGVjdGF0aW9uc0NvbnRhaW5lcnMs
IGNvbnRhaW5lciwgcGxhdGZvcm0sIHRleHQsIGJhc2UpOworICAgIGFkZEV4cGVjdGF0aW9uSXRl
bShleHBlY3RhdGlvbnNDb250YWluZXJzLCBjb250YWluZXIsIHBsYXRmb3JtLCBwbmcsIGJhc2Up
OworICAgIGFkZEV4cGVjdGF0aW9uSXRlbShleHBlY3RhdGlvbnNDb250YWluZXJzLCBjb250YWlu
ZXIsIHBsYXRmb3JtLCByZWZ0ZXN0X2h0bWxfZmlsZSwgYmFzZSk7CisgICAgYWRkRXhwZWN0YXRp
b25JdGVtKGV4cGVjdGF0aW9uc0NvbnRhaW5lcnMsIGNvbnRhaW5lciwgcGxhdGZvcm0sIHJlZnRl
c3RfbWlzbWF0Y2hfaHRtbF9maWxlLCBiYXNlKTsKKyAgfQorCisgIGZ1bmN0aW9uIGdldEV4cGVj
dGF0aW9uc1RpdGxlKHBsYXRmb3JtLCBwYXRoLCBidWlsZGVyKSB7CisgICAgdmFyIGhlYWRlciA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2gzJyk7CisgICAgaGVhZGVyLmNsYXNzTmFtZSA9ICdl
eHBlY3RhdGlvbnMtdGl0bGUnOworCisgICAgdmFyIGlubmVySFRNTDsKKyAgICBpZiAoYnVpbGRl
cikgeworICAgICAgdmFyIHJlc3VsdHNUeXBlOworICAgICAgaWYgKGVuZHNXaXRoKHBhdGgsICct
c3RhY2sudHh0JykpIHsKKyAgICAgICAgcmVzdWx0c1R5cGUgPSAnU1RBQ0tUUkFDRSc7CisgICAg
ICB9IGVsc2UgaWYgKGVuZHNXaXRoKHBhdGgsICctYWN0dWFsLnR4dCcpIHx8CisgICAgICAgICAg
ICAgICAgIGVuZHNXaXRoKHBhdGgsICctYWN0dWFsLnBuZycpKSB7CisgICAgICAgIHJlc3VsdHNU
eXBlID0gJ0FDVFVBTCBSRVNVTFRTJzsKKyAgICAgIH0gZWxzZSBpZiAoZW5kc1dpdGgocGF0aCwg
Jy13ZGlmZi5odG1sJykpIHsKKyAgICAgICAgcmVzdWx0c1R5cGUgPSAnV0RJRkYnOworICAgICAg
fSBlbHNlIHsKKyAgICAgICAgcmVzdWx0c1R5cGUgPSAnRElGRic7CisgICAgICB9CisgICAgICBp
bm5lckhUTUwgPSByZXN1bHRzVHlwZSArICc6ICcgKyBidWlsZGVyOworICAgIH0gZWxzZSBpZiAo
cGxhdGZvcm0gPT09ICIiKSB7CisgICAgICB2YXIgcGFydHMgPSBwYXRoLnNwbGl0KCcvJyk7Cisg
ICAgICBpbm5lckhUTUwgPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXTsKKyAgICB9IGVsc2Ugewor
ICAgICAgaW5uZXJIVE1MID0gcGxhdGZvcm0gfHwgcGF0aDsKKyAgICB9CisKKyAgICBoZWFkZXIu
aW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9dGl0bGU+JyArIGlubmVySFRNTCArCisgICAgICAgICc8
L2Rpdj48ZGl2IHN0eWxlPSJmbG9hdDpsZWZ0Ij4mbmJzcDs8L2Rpdj4nICsKKyAgICAgICAgJzxk
aXYgY2xhc3M9cGxhdGZvcm1zIHN0eWxlPSJmbG9hdDpyaWdodCI+PC9kaXY+JzsKKyAgICBoZWFk
ZXIucGxhdGZvcm0gPSBwbGF0Zm9ybTsKKyAgICByZXR1cm4gaGVhZGVyOworICB9CisKKyAgZnVu
Y3Rpb24gbG9hZEV4cGVjdGF0aW9ucyhleHBlY3RhdGlvbnNDb250YWluZXIpIHsKKyAgICBpZiAo
aXNMYXlvdXRUZXN0UmVzdWx0cygpKSB7CisgICAgICBsb2FkRXhwZWN0YXRpb25zTGF5b3V0VGVz
dHMoZXhwZWN0YXRpb25zQ29udGFpbmVyKTsKKyAgICB9IGVsc2UgeworICAgICAgdmFyIHRlc3Qg
PSBleHBlY3RhdGlvbnNDb250YWluZXIuZ2V0QXR0cmlidXRlKCd0ZXN0Jyk7CisgICAgICB2YXIg
cmVzdWx0cyA9IHRlc3RUb1Jlc3VsdHNNYXBbdGVzdF07CisgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgbG9hZE5vbldlYktpdFJlc3VsdHNG
b3JCdWlsZGVyKHJlc3VsdHNbaV0uYnVpbGRlciwgdGVzdCwKKyAgICAgICAgICAgIGV4cGVjdGF0
aW9uc0NvbnRhaW5lcik7CisgICAgICB9CisgICAgfQorICB9CisKKyAgZnVuY3Rpb24gbG9hZE5v
bldlYktpdFJlc3VsdHNGb3JCdWlsZGVyKGJ1aWxkZXIsIHRlc3QsCisgICAgICBleHBlY3RhdGlv
bnNDb250YWluZXIpIHsKKyAgICB2YXIgZmFpbHVyZXMgPSBnZXRCdWlsZE51bWJlcnNGb3JGYWls
dXJlcyhidWlsZGVyLCB0ZXN0KTsKKyAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgnZGl2Jyk7CisgICAgY29udGFpbmVyLmlubmVySFRNTCA9ICc8ZGl2PjxiPicgKyBi
dWlsZGVyICsgJzwvYj48L2Rpdj4nOworICAgIGV4cGVjdGF0aW9uc0NvbnRhaW5lci5hcHBlbmRD
aGlsZChjb250YWluZXIpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmFpbHVyZXMubGVuZ3Ro
OyBpKyspIHsKKyAgICAgIHZhciBwYXRoVG9Mb2cgPSBnZXRCdWlsZGVyTWFzdGVyKGJ1aWxkZXIp
LmdldExvZ1BhdGgoYnVpbGRlciwgZmFpbHVyZXNbaV0pICsKKyAgICAgICAgICBnZXRQYXRoVG9G
YWlsdXJlTG9nKHRlc3QpOworICAgICAgYXBwZW5kTm9uV2ViS2l0UmVzdWx0cyhjb250YWluZXIs
IHBhdGhUb0xvZyk7CisgICAgfQorICB9CisKKyAgZnVuY3Rpb24gYXBwZW5kTm9uV2ViS2l0UmVz
dWx0cyhjb250YWluZXIsIHVybCkgeworICAgIC8vIFVzZSBhIHNjcmlwdCB0YWcgdG8gZGV0ZWN0
IHdoZXRoZXIgdGhlIFVSTCA0MDRzLgorICAgIC8vIE5lZWQgdG8gdXNlIGEgc2NyaXB0IHRhZyBz
aW5jZSB0aGUgVVJMIGlzIGNyb3NzLWRvbWFpbi4KKyAgICB2YXIgZHVtbXlOb2RlID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7CisgICAgZHVtbXlOb2RlLnNyYyA9IHVybDsKKwor
ICAgIGR1bW15Tm9kZS5vbmxvYWQgPSBmdW5jdGlvbigpIHsKKyAgICAgIHZhciBpdGVtID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7CisgICAgICBpdGVtLnNyYyA9IGR1bW15Tm9k
ZS5zcmM7CisgICAgICBpdGVtLmNsYXNzTmFtZSA9ICdub24td2Via2l0LXJlc3VsdHMnOworICAg
ICAgaXRlbS5zdHlsZS5oZWlnaHQgPSBjdXJyZW50U3RhdGUucmVzdWx0c0hlaWdodCArICdweCc7
CisgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoaXRlbSk7CisgICAgfQorICAgIGR1bW15Tm9k
ZS5vbmVycm9yID0gZnVuY3Rpb24oKSB7CisgICAgICBjb250YWluZXIucGFyZW50Tm9kZS5yZW1v
dmVDaGlsZChjaGlsZENvbnRhaW5lcik7CisgICAgfQorCisgICAgY29udGFpbmVyLmFwcGVuZENo
aWxkKGR1bW15Tm9kZSk7CisgIH0KKworICBmdW5jdGlvbiBidWlsZEluZm9Gb3JSZXZpc2lvbihi
dWlsZGVyLCByZXZpc2lvbikgeworICAgIHZhciByZXZpc2lvbnMgPSByZXN1bHRzQnlCdWlsZGVy
W2J1aWxkZXJdLndlYmtpdFJldmlzaW9uOworICAgIHZhciByZXZpc2lvblN0YXJ0ID0gMCwgcmV2
aXNpb25FbmQgPSAwLCBidWlsZE51bWJlciA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBy
ZXZpc2lvbnMubGVuZ3RoOyBpKyspIHsKKyAgICAgIGlmIChyZXZpc2lvbiA+IHJldmlzaW9uc1tp
XSkgeworICAgICAgICByZXZpc2lvblN0YXJ0ID0gcmV2aXNpb25zW2kgLSAxXTsKKyAgICAgICAg
cmV2aXNpb25FbmQgPSByZXZpc2lvbnNbaV07CisgICAgICAgIGJ1aWxkTnVtYmVyID0gcmVzdWx0
c0J5QnVpbGRlcltidWlsZGVyXS5idWlsZE51bWJlcnNbaSAtIDFdOworICAgICAgICBicmVhazsK
KyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAocmV2aXNpb25FbmQpCisgICAgICByZXZpc2lvbkVu
ZCsrOworICAgIGVsc2UKKyAgICAgIHJldmlzaW9uRW5kID0gJyc7CisKKyAgICByZXR1cm4ge3Jl
dmlzaW9uU3RhcnQ6IHJldmlzaW9uU3RhcnQsIHJldmlzaW9uRW5kOiByZXZpc2lvbkVuZCwKKyAg
ICAgICAgYnVpbGROdW1iZXI6IGJ1aWxkTnVtYmVyfTsKKyAgfQorCisgIGZ1bmN0aW9uIGxvYWRF
eHBlY3RhdGlvbnNMYXlvdXRUZXN0cyhleHBlY3RhdGlvbnNDb250YWluZXIpIHsKKyAgICAvLyBN
YXAgZnJvbSBmaWxlIGV4dGVuc2lvbiB0byBjb250YWluZXIgZGl2IGZvciBleHBlY3RhdGlvbnMg
b2YgdGhhdCB0eXBlLgorICAgIHZhciBleHBlY3RhdGlvbnNDb250YWluZXJzID0ge307CisgICAg
dmFyIHRlc3QgPSBleHBlY3RhdGlvbnNDb250YWluZXIuZ2V0QXR0cmlidXRlKCd0ZXN0Jyk7CisK
KyAgICB2YXIgcmV2aXNpb25Db250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYn
KTsKKyAgICByZXZpc2lvbkNvbnRhaW5lci50ZXh0Q29udGVudCA9ICJTaG93aW5nIHJlc3VsdHMg
Zm9yOiAiCisgICAgZXhwZWN0YXRpb25zQ29udGFpbmVyLmFwcGVuZENoaWxkKHJldmlzaW9uQ29u
dGFpbmVyKTsKKyAgICBmb3IgKHZhciBidWlsZGVyIGluIGJ1aWxkZXJzKSB7CisgICAgICBpZiAo
Z2V0QnVpbGRlck1hc3RlcihidWlsZGVyKSA9PSBXRUJLSVRfQlVJTERFUl9NQVNURVIpIHsKKyAg
ICAgICAgdmFyIGxhdGVzdFJldmlzaW9uID0gY3VycmVudFN0YXRlLnJldmlzaW9uIHx8CisgICAg
ICAgICAgICByZXN1bHRzQnlCdWlsZGVyW2J1aWxkZXJdLndlYmtpdFJldmlzaW9uWzBdOworICAg
ICAgICB2YXIgYnVpbGRJbmZvID0gYnVpbGRJbmZvRm9yUmV2aXNpb24oYnVpbGRlciwgbGF0ZXN0
UmV2aXNpb24pOworICAgICAgICB2YXIgcmV2aXNpb25JbmZvID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgnZGl2Jyk7CisgICAgICAgIHJldmlzaW9uSW5mby5zdHlsZS5jc3NUZXh0ID0gJ2JhY2tn
cm91bmQ6bGlnaHRncmF5O21hcmdpbjowIDNweDsnICsKKyAgICAgICAgICAgICdwYWRkaW5nOjAg
MnB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrOyc7CisgICAgICAgIHJldmlzaW9uSW5mby5pbm5lckhU
TUwgPSBidWlsZGVyICsgJyByJyArIGJ1aWxkSW5mby5yZXZpc2lvbkVuZCArCisgICAgICAgICAg
ICAnOnInICsgYnVpbGRJbmZvLnJldmlzaW9uU3RhcnQgKyAnLCBidWlsZCAnICsgYnVpbGRJbmZv
LmJ1aWxkTnVtYmVyOworICAgICAgICByZXZpc2lvbkNvbnRhaW5lci5hcHBlbmRDaGlsZChyZXZp
c2lvbkluZm8pOworICAgICAgfQorICAgIH0KKworICAgIGFkZEV4cGVjdGF0aW9uSXRlbShleHBl
Y3RhdGlvbnNDb250YWluZXJzLCBleHBlY3RhdGlvbnNDb250YWluZXIsIG51bGwsCisgICAgICAg
IHRlc3QsIFRFU1RfVVJMX0JBU0VfUEFUSCk7CisKKyAgICB2YXIgdGVzdFdpdGhvdXRTdWZmaXgg
PSB0ZXN0LnN1YnN0cmluZygwLCB0ZXN0Lmxhc3RJbmRleE9mKCcuJykpOworICAgIHZhciB0ZXh0
ID0gdGVzdFdpdGhvdXRTdWZmaXggKyAiLWV4cGVjdGVkLnR4dCI7CisgICAgdmFyIHBuZyA9IHRl
c3RXaXRob3V0U3VmZml4ICsgIi1leHBlY3RlZC5wbmciOworICAgIHZhciByZWZ0ZXN0X2h0bWxf
ZmlsZSA9IHRlc3RXaXRob3V0U3VmZml4ICsgIi1leHBlY3RlZC5odG1sIjsKKyAgICB2YXIgcmVm
dGVzdF9taXNtYXRjaF9odG1sX2ZpbGUgPSB0ZXN0V2l0aG91dFN1ZmZpeCArICItZXhwZWN0ZWQt
bWlzbWF0Y2guaHRtbCI7CisKKyAgICBhZGRFeHBlY3RhdGlvbnMoZXhwZWN0YXRpb25zQ29udGFp
bmVycywgZXhwZWN0YXRpb25zQ29udGFpbmVyLAorICAgICAgICBURVNUX1VSTF9CQVNFX1BBVEgs
ICcnLCB0ZXh0LCBwbmcsIHJlZnRlc3RfaHRtbF9maWxlLAorICAgICAgICByZWZ0ZXN0X21pc21h
dGNoX2h0bWxfZmlsZSk7CisKKyAgICB2YXIgZmFsbGJhY2tzID0gZ2V0QWxsRmFsbGJhY2tzKCk7
CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmYWxsYmFja3MubGVuZ3RoOyBpKyspIHsKKyAgICAg
IHZhciBmYWxsYmFjayA9ICdwbGF0Zm9ybS8nICsgZmFsbGJhY2tzW2ldOworICAgICAgYWRkRXhw
ZWN0YXRpb25zKGV4cGVjdGF0aW9uc0NvbnRhaW5lcnMsIGV4cGVjdGF0aW9uc0NvbnRhaW5lciwK
KyAgICAgICAgICAgICAgICAgICAgICBURVNUX1VSTF9CQVNFX1BBVEgsIGZhbGxiYWNrLCB0ZXh0
LCBwbmcsCisgICAgICAgICAgICAgICAgICAgICAgcmVmdGVzdF9odG1sX2ZpbGUsIHJlZnRlc3Rf
bWlzbWF0Y2hfaHRtbF9maWxlKTsKKyAgICB9CisKKyAgICB2YXIgYWN0dWFsUmVzdWx0U3VmZml4
ZXMgPSBbJy1hY3R1YWwudHh0JywgJy1hY3R1YWwucG5nJywgJy1zdGFjay50eHQnLAorICAgICAg
ICAnLWRpZmYudHh0JywgJy13ZGlmZi5odG1sJywgJy1kaWZmLnBuZyddOworCisgICAgZm9yICh2
YXIgYnVpbGRlciBpbiBidWlsZGVycykgeworICAgICAgdmFyIGFjdHVhbFJlc3VsdHNCYXNlOwor
ICAgICAgaWYgKGdldEJ1aWxkZXJNYXN0ZXIoYnVpbGRlcikgPT0gV0VCS0lUX0JVSUxERVJfTUFT
VEVSKSB7CisgICAgICAgIHZhciBsYXRlc3RSZXZpc2lvbiA9IGN1cnJlbnRTdGF0ZS5yZXZpc2lv
biB8fAorICAgICAgICAgICAgcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyXS53ZWJraXRSZXZpc2lv
blswXTsKKyAgICAgICAgdmFyIGJ1aWxkSW5mbyA9IGJ1aWxkSW5mb0ZvclJldmlzaW9uKGJ1aWxk
ZXIsIGxhdGVzdFJldmlzaW9uKTsKKyAgICAgICAgYWN0dWFsUmVzdWx0c0Jhc2UgPSAnaHR0cDov
L2J1aWxkLndlYmtpdC5vcmcvcmVzdWx0cy8nICsgYnVpbGRlciArCisgICAgICAgICAgICAnL3In
ICsgYnVpbGRJbmZvLnJldmlzaW9uU3RhcnQgKyAnICgnICsgYnVpbGRJbmZvLmJ1aWxkTnVtYmVy
ICsgJykvJzsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGFjdHVhbFJlc3VsdHNCYXNlID0gVEVT
VF9SRVNVTFRTX0JBU0VfUEFUSCArCisgICAgICAgICAgICBidWlsZGVyc1tidWlsZGVyXSArICcv
cmVzdWx0cy9sYXlvdXQtdGVzdC1yZXN1bHRzLyc7CisgICAgICB9CisgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGFjdHVhbFJlc3VsdFN1ZmZpeGVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIGFk
ZEV4cGVjdGF0aW9uSXRlbShleHBlY3RhdGlvbnNDb250YWluZXJzLCBleHBlY3RhdGlvbnNDb250
YWluZXIsIG51bGwsCisgICAgICAgICAgICB0ZXN0V2l0aG91dFN1ZmZpeCArIGFjdHVhbFJlc3Vs
dFN1ZmZpeGVzW2ldLCBhY3R1YWxSZXN1bHRzQmFzZSwKKyAgICAgICAgICAgIGJ1aWxkZXIpOwor
ICAgICAgfQorICAgIH0KKworICAgIC8vIEFkZCBhIGNsZWFyaW5nIGVsZW1lbnQgc28gZmxvYXRl
ZCBlbGVtZW50cyBkb24ndCBibGVlZCBvdXQgb2YgdGhlaXIKKyAgICAvLyBjb250YWluaW5nIGJs
b2NrLgorICAgIHZhciBiciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2JyJyk7CisgICAgYnIu
c3R5bGUuY2xlYXIgPSAnYm90aCc7CisgICAgZXhwZWN0YXRpb25zQ29udGFpbmVyLmFwcGVuZENo
aWxkKGJyKTsKKyAgfQorCisgIHZhciBhbGxGYWxsYmFja3M7CisKKyAgLyoqCisgICAqIFJldHVy
bnMgdGhlIHJldmVyc2Ugc29ydGVkLCBkZWR1cGVkIGxpc3Qgb2YgYWxsIHBsYXRmb3JtIGZhbGxi
YWNrCisgICAqIGRpcmVjdG9yaWVzLgorICAgKi8KKyAgZnVuY3Rpb24gZ2V0QWxsRmFsbGJhY2tz
KCkgeworICAgIGlmICghYWxsRmFsbGJhY2tzKSB7CisgICAgICB2YXIgaG9sZGVyID0ge307Cisg
ICAgICBmb3IgKHZhciBwbGF0Zm9ybSBpbiBmYWxsYmFja3NNYXApIHsKKyAgICAgICAgdmFyIGZh
bGxiYWNrcyA9IGZhbGxiYWNrc01hcFtwbGF0Zm9ybV07CisgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgZmFsbGJhY2tzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgaG9sZGVyW2ZhbGxiYWNr
c1tpXV0gPSAxOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGFsbEZhbGxiYWNrcyA9IFtd
OworICAgICAgZm9yICh2YXIgZmFsbGJhY2sgaW4gaG9sZGVyKSB7CisgICAgICAgIGFsbEZhbGxi
YWNrcy5wdXNoKGZhbGxiYWNrKTsKKyAgICAgIH0KKyAgICAgIGFsbEZhbGxiYWNrcy5zb3J0KGZ1
bmN0aW9uKGEsIGIpIHsKKyAgICAgICAgaWYgKGEgPT0gYikKKyAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgcmV0dXJuIGEgPCBiOworICAgICAgfSk7CisgICAgfQorICAgIHJldHVybiBhbGxG
YWxsYmFja3M7CisgIH0KKworICAvKioKKyAgICogQXBwZW5kcyB0aGUgZXhwZWN0YXRpb25zIGZv
ciBlYWNoIHRlc3QgbGlzdGVkLgorICAgKi8KKyAgZnVuY3Rpb24gYXBwZW5kRXhwZWN0YXRpb25z
KCkgeworICAgIHZhciBleHBlY3RhdGlvbnMgPSBjdXJyZW50U3RhdGUuc2hvd0V4cGVjdGF0aW9u
cyA/CisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2V4cGVjdGF0aW9u
cycpIDogW107CisgICAgLy8gTG9hZGluZyBleHBlY3RhdGlvbnMgaXMgKnZlcnkqIHNsb3cuIFVz
ZSBhIGxhcmdlIHRpbWVvdXQgdG8gYXZvaWQKKyAgICAvLyB0b3RhbGx5IGhhbmdpbmcgdGhlIHJl
bmRlcmVyLgorICAgIHBlcmZvcm1DaHVua2VkQWN0aW9uKGV4cGVjdGF0aW9ucywgZnVuY3Rpb24o
Y2h1bmspIHsKKyAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBjaHVuay5sZW5ndGg7IGkgPCBs
ZW47IGkrKykgeworICAgICAgICBsb2FkRXhwZWN0YXRpb25zKGNodW5rW2ldKTsKKyAgICAgIH0K
KyAgICB9LCBoaWRlTG9hZGluZ1VJLCAxMDAwMCk7CisgIH0KKworICBmdW5jdGlvbiBoaWRlTG9h
ZGluZ1VJKCkgeworICAgIHZhciBsb2FkaW5nRGl2ID0gJCgnbG9hZGluZy11aScpOworICAgIGlm
IChsb2FkaW5nRGl2KSB7CisgICAgICBsb2FkaW5nRGl2LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7
CisgICAgfQorICB9CisKKyAgZnVuY3Rpb24gZ2VuZXJhdGVQYWdlRm9ySW5kaXZpZHVhbFRlc3Rz
KHRlc3RzKSB7CisgICAgY29uc29sZS5sb2coJ051bWJlciBvZiB0ZXN0czogJyArIHRlc3RzLmxl
bmd0aCk7CisgICAgYXBwZW5kSFRNTChnZXRIVE1MRm9yTmF2QmFyKCkpOworICAgIHBlcmZvcm1D
aHVua2VkQWN0aW9uKHRlc3RzLCBmdW5jdGlvbihjaHVuaykgeworICAgICAgYXBwZW5kSFRNTChn
ZXRIVE1MRm9ySW5kaXZpZHVhbFRlc3RzKGNodW5rKSk7CisgICAgfSwgYXBwZW5kRXhwZWN0YXRp
b25zLCA1MDApOworICAgICQoJ3Rlc3RzLWlucHV0JykudmFsdWUgPSBjdXJyZW50U3RhdGUudGVz
dHM7CisgIH0KKworICBmdW5jdGlvbiBwZXJmb3JtQ2h1bmtlZEFjdGlvbih0ZXN0cywgaGFuZGxl
Q2h1bmssIG9uQ29tcGxldGUsIHRpbWVvdXQsCisgICAgICBvcHRfaW5kZXgpIHsKKyAgICB2YXIg
aW5kZXggPSBvcHRfaW5kZXggfHwgMDsKKyAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAg
ICAgdmFyIGNodW5rID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGVzdHMsIGluZGV4ICog
Q0hVTktfU0laRSwKKyAgICAgICAgICAoaW5kZXggKyAxKSAqIENIVU5LX1NJWkUpOworICAgICAg
aWYgKGNodW5rLmxlbmd0aCkgeworICAgICAgICBoYW5kbGVDaHVuayhjaHVuayk7CisgICAgICAg
IHBlcmZvcm1DaHVua2VkQWN0aW9uKHRlc3RzLCBoYW5kbGVDaHVuaywgb25Db21wbGV0ZSwgdGlt
ZW91dCwgKytpbmRleCk7CisgICAgICB9IGVsc2UgeworICAgICAgICBvbkNvbXBsZXRlKCk7Cisg
ICAgICB9CisgICAgLy8gTm8gbmVlZCBmb3IgYSB0aW1lb3V0IG9uIHRoZSBmaXJzdCBjaHVua2Vk
IGFjdGlvbi4KKyAgICB9LCBpbmRleCA/IHRpbWVvdXQgOiAwKTsKKyAgfQorCisgIGZ1bmN0aW9u
IGdldEhUTUxGb3JJbmRpdmlkdWFsVGVzdHModGVzdHMpIHsKKyAgICB2YXIgdGVzdHNIVE1MID0g
W107CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7IGkrKykgeworICAgICAg
dGVzdHNIVE1MLnB1c2goJzxoMiBvbmNsaWNrPSJzZWxlY3RDb250ZW50cyh0aGlzKSI+JyArIHRl
c3RzW2ldICsKKyAgICAgICAgICAnPC9oMj4nICsgZ2V0SFRNTEZvckluZGl2aWR1bFRlc3RPbkFs
bEJ1aWxkZXJzKHRlc3RzW2ldKSk7CisgICAgfQorICAgIHJldHVybiB0ZXN0c0hUTUwuam9pbign
PGhyPicpOworICB9CisKKyAgZnVuY3Rpb24gZ2V0SFRNTEZvck5hdkJhcigpIHsKKyAgICB2YXIg
ZXh0cmFIVE1MID0gJyc7CisgICAgaWYgKCFpc0Nyb3NzQnVpbGRlclZpZXcoKSkgeworICAgICAg
ZXh0cmFIVE1MICs9IGNoZWNrYm94SFRNTCgnc2hvd1J1bnNPbkJ1aWxkZXJQYWdlJywgJ1Nob3cg
Zmxha2luZXNzIGRldGFpbHMnLAorICAgICAgICAgIGN1cnJlbnRTdGF0ZS5zaG93UnVuc09uQnVp
bGRlclBhZ2UpOworICAgIH0KKworICAgIHZhciBodG1sID0gZ2V0SFRNTEZvclRlc3RUeXBlU3dp
dGNoZXIoZmFsc2UsIGV4dHJhSFRNTCwgaXNDcm9zc0J1aWxkZXJWaWV3KCkpOworCisgICAgaHRt
bCArPSAnPGRpdiBjbGFzcz1mb3Jtcz48Zm9ybSBpZD1yZXN1bHQtZm9ybSAnICsKKyAgICAgICAg
J29uc3VibWl0PSJzZXRRdWVyeVBhcmFtZXRlcihcJ3Jlc3VsdFwnLCByZXN1bHQudmFsdWUpOycg
KworICAgICAgICAncmV0dXJuIGZhbHNlOyI+U2hvdyBhbGwgdGVzdHMgd2l0aCByZXN1bHQ6ICcg
KworICAgICAgICAnPGlucHV0IG5hbWU9cmVzdWx0IHBsYWNlaG9sZGVyPSJlLmcuIENSQVNIIiBp
ZD1yZXN1bHQtaW5wdXQ+JyArCisgICAgICAgICc8L2Zvcm0+PGZvcm0gaWQ9dGVzdHMtZm9ybSAn
ICsKKyAgICAgICAgJ29uc3VibWl0PSJzZXRRdWVyeVBhcmFtZXRlcihcJ3Rlc3RzXCcsIHRlc3Rz
LnZhbHVlKTsnICsKKyAgICAgICAgJ3JldHVybiBmYWxzZTsiPjxzcGFuPlNob3cgdGVzdHMgb24g
YWxsIHBsYXRmb3JtczogPC9zcGFuPicgKworICAgICAgICAnPGlucHV0IG5hbWU9dGVzdHMgJyAr
CisgICAgICAgICdwbGFjZWhvbGRlcj0iQ29tbWEgb3Igc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2Yg
dGVzdHMgb3IgcGFydGlhbCAnICsKKyAgICAgICAgJ3BhdGhzIHRvIHNob3cgdGVzdCByZXN1bHRz
IGFjcm9zcyBhbGwgYnVpbGRlcnMsIGUuZy4sICcgKworICAgICAgICAnZm9vL2Jhci5odG1sLGZv
by9iYXosZG9tc3RvcmFnZSIgaWQ9dGVzdHMtaW5wdXQ+PC9mb3JtPicgKworICAgICAgICAnPHNw
YW4gY2xhc3M9bGluayBvbmNsaWNrPSJzaG93TGVnZW5kKCkiPlNob3cgbGVnZW5kIFt0eXBlID9d
PC9zcGFuPjwvZGl2Pic7CisgICAgcmV0dXJuIGh0bWw7CisgIH0KKworICBmdW5jdGlvbiBnZXRM
aW5rSFRNTFRvVG9nZ2xlU3RhdGUoa2V5LCBsaW5rVGV4dCkgeworICAgIHZhciBpc1RydWUgPSBj
dXJyZW50U3RhdGVba2V5XTsKKyAgICByZXR1cm4gJzxzcGFuIGNsYXNzPWxpbmsgb25jbGljaz0i
c2V0UXVlcnlQYXJhbWV0ZXIoXCcnICsga2V5ICsgJ1wnLCAnICsKKyAgICAgICAgIWlzVHJ1ZSAr
ICcpIj4nICsgKGlzVHJ1ZSA/ICdIaWRlJyA6ICdTaG93JykgKyAnICcgKyBsaW5rVGV4dCArCisg
ICAgICAgICc8L3NwYW4+JzsKKyAgfQorCisgIGZ1bmN0aW9uIGdlbmVyYXRlUGFnZUZvckJ1aWxk
ZXIoYnVpbGRlck5hbWUpIHsKKyAgICBwcm9jZXNzVGVzdFJ1bnNGb3JCdWlsZGVyKGJ1aWxkZXJO
YW1lKTsKKworICAgIHZhciByZXN1bHRzID0gcGVyQnVpbGRlckZhaWx1cmVzW2J1aWxkZXJOYW1l
XTsKKyAgICBzb3J0VGVzdHMocmVzdWx0cywgY3VycmVudFN0YXRlLnNvcnRDb2x1bW4sIGN1cnJl
bnRTdGF0ZS5zb3J0T3JkZXIpOworCisgICAgdmFyIHRlc3RzSFRNTCA9ICcnOworICAgIGlmIChy
ZXN1bHRzLmxlbmd0aCkgeworICAgICAgdmFyIHRhYmxlUm93c0hUTUwgPSAnJzsKKyAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykgeworICAgICAgICB0YWJsZVJv
d3NIVE1MICs9IGdldEhUTUxGb3JTaW5nbGVUZXN0Um93KHJlc3VsdHNbaV0pCisgICAgICB9Cisg
ICAgICB0ZXN0c0hUTUwgPSBnZXRIVE1MRm9yVGVzdFRhYmxlKHRhYmxlUm93c0hUTUwpOworICAg
IH0gZWxzZSB7CisgICAgICB0ZXN0c0hUTUwgPSAnPGRpdj5ObyB0ZXN0cyBmb3VuZC4gJzsKKyAg
ICAgIGlmIChpc0xheW91dFRlc3RSZXN1bHRzKCkpIHsKKyAgICAgICAgdGVzdHNIVE1MICs9ICdU
cnkgc2hvd2luZyB0ZXN0cyB3aXRoIGNvcnJlY3QgZXhwZWN0YXRpb25zLjwvZGl2Pic7CisgICAg
ICB9IGVsc2UgeworICAgICAgICB0ZXN0c0hUTUwgKz0gJ1RoaXMgbWVhbnMgbm8gdGVzdHMgaGF2
ZSBmYWlsZWQhPC9kaXY+JzsKKyAgICAgIH0KKyAgICB9CisKKyAgICB2YXIgaHRtbCA9IGdldEhU
TUxGb3JOYXZCYXIoKTsKKworICAgIGlmIChpc0xheW91dFRlc3RSZXN1bHRzKCkpIHsKKyAgICAg
IGh0bWwgKz0gZ2V0SFRNTEZvclRlc3RzV2l0aEV4cGVjdGF0aW9uc0J1dE5vRmFpbHVyZXMoYnVp
bGRlck5hbWUpICsKKyAgICAgICAgICAnPGgyPkZhaWxpbmcgdGVzdHM8L2gyPicgKworICAgICAg
ICAgIGdldExpbmtIVE1MVG9Ub2dnbGVTdGF0ZSgnc2hvd1dvbnRGaXhTa2lwJywgJ1dPTlRGSVgv
U0tJUCcpICsKKyAgICAgICAgICAnIHwgJyArCisgICAgICAgICAgZ2V0TGlua0hUTUxUb1RvZ2ds
ZVN0YXRlKCdzaG93Q29ycmVjdEV4cGVjdGF0aW9ucycsCisgICAgICAgICAgICAgICd0ZXN0cyB3
aXRoIGNvcnJlY3QgZXhwZWN0YXRpb25zJykgKyAnIHwgJyArCisgICAgICAgICAgZ2V0TGlua0hU
TUxUb1RvZ2dsZVN0YXRlKCdzaG93V3JvbmdFeHBlY3RhdGlvbnMnLAorICAgICAgICAgICAgICAn
dGVzdHMgd2l0aCB3cm9uZyBleHBlY3RhdGlvbnMnKSArICcgfCAnICsKKyAgICAgICAgICBnZXRM
aW5rSFRNTFRvVG9nZ2xlU3RhdGUoJ3Nob3dGbGFreScsICdmbGFreScpICsgJyB8ICcgKworICAg
ICAgICAgIGdldExpbmtIVE1MVG9Ub2dnbGVTdGF0ZSgnc2hvd1Nsb3cnLCAnc2xvdycpOworICAg
IH0KKworICAgIGh0bWwgKz0gJyB8IEFsbCBjb2x1bW5zIGFyZSBzb3J0YWJsZS4gfCAnICsKKyAg
ICAgICAgJ0ZsYWtpbmVzcyByZWFkZXIgb3JkZXIgaXMgbmV3ZXIgLS0+IG9sZGVyIHJ1bnMuPGJy
PicgKworICAgICAgICB0ZXN0c0hUTUw7CisKKyAgICBhcHBlbmRIVE1MKGh0bWwpOworCisgICAg
dmFyIHRocyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0aCcpOworICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgdGhzLmxlbmd0aDsgaSsrKSB7CisgICAgICB0aHNbaV0uYWRkRXZlbnRM
aXN0ZW5lcignY2xpY2snLCBjaGFuZ2VTb3J0LCBmYWxzZSk7CisgICAgICB0aHNbaV0uY2xhc3NO
YW1lID0gInNvcnRhYmxlIjsKKyAgICB9CisKKyAgICBoaWRlTG9hZGluZ1VJKCk7CisgIH0KKwor
ICB2YXIgVkFMSURfS0VZU19GT1JfQ1JPU1NfQlVJTERFUl9WSUVXID0geworICAgIHRlc3RzOiAx
LAorICAgIHJlc3VsdDogMSwKKyAgICBzaG93RXhwZWN0YXRpb25zOiAxLAorICAgIHNob3dMYXJn
ZUV4cGVjdGF0aW9uczogMSwKKyAgICBsZWdhY3lFeHBlY3RhdGlvbnNTZW1hbnRpY3M6IDEsCisg
ICAgcmVzdWx0c0hlaWdodDogMSwKKyAgICByZXZpc2lvbjogMQorICB9OworCisgIGZ1bmN0aW9u
IGlzSW52YWxpZEtleUZvckNyb3NzQnVpbGRlclZpZXcoa2V5KSB7CisgICAgcmV0dXJuICEoa2V5
IGluIFZBTElEX0tFWVNfRk9SX0NST1NTX0JVSUxERVJfVklFVykgJiYKKyAgICAgICAgIShrZXkg
aW4gZGVmYXVsdENyb3NzRGFzaGJvYXJkU3RhdGVWYWx1ZXMpOworICB9CisKKyAgZnVuY3Rpb24g
dXBkYXRlRGVmYXVsdEJ1aWxkZXJTdGF0ZSgpIHsKKyAgICBpZiAoaXNDcm9zc0J1aWxkZXJWaWV3
KCkpCisgICAgICBkZWxldGUgZGVmYXVsdFN0YXRlVmFsdWVzLmJ1aWxkZXI7CisgICAgZWxzZQor
ICAgICAgZGVmYXVsdFN0YXRlVmFsdWVzLmJ1aWxkZXIgPSBkZWZhdWx0QnVpbGRlck5hbWU7Cisg
IH0KKworICAvKioKKyAgICogU2V0cyB0aGUgcGFnZSBzdGF0ZSB0byByZWdlbmVyYXRlIHRoZSBw
YWdlLgorICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIE5ldyBvciBtb2RpZmllZCBxdWVyeSBw
YXJhbWV0ZXJzIGFzIGtleTogdmFsdWUuCisgICAqLworICBmdW5jdGlvbiBoYW5kbGVRdWVyeVBh
cmFtZXRlckNoYW5nZShwYXJhbXMpIHsKKyAgICBmb3IgKGtleSBpbiBwYXJhbXMpIHsKKyAgICAg
IGlmIChrZXkgPT0gJ3Rlc3RzJykgeworICAgICAgICAvLyBFbnRlcmluZyBjcm9zcy1idWlsZGVy
IHZpZXcsIG9ubHkga2VlcCB2YWxpZCBrZXlzIGZvciB0aGF0IHZpZXcuCisgICAgICAgIGZvciAo
dmFyIGN1cnJlbnRLZXkgaW4gY3VycmVudFN0YXRlKSB7CisgICAgICAgICAgaWYgKGlzSW52YWxp
ZEtleUZvckNyb3NzQnVpbGRlclZpZXcoY3VycmVudEtleSkpIHsKKyAgICAgICAgICAgIGRlbGV0
ZSBjdXJyZW50U3RhdGVbY3VycmVudEtleV07CisgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICB9IGVsc2UgaWYgKGlzSW52YWxpZEtleUZvckNyb3NzQnVpbGRlclZpZXcoa2V5KSkgeworICAg
ICAgICBkZWxldGUgY3VycmVudFN0YXRlLnRlc3RzOworICAgICAgICBkZWxldGUgY3VycmVudFN0
YXRlLnJlc3VsdDsKKyAgICAgIH0KKyAgICB9CisKKyAgICB1cGRhdGVEZWZhdWx0QnVpbGRlclN0
YXRlKCk7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICBmdW5jdGlvbiBoaWRlTGVnZW5kKCkg
eworICAgIHZhciBsZWdlbmQgPSAkKCdsZWdlbmQnKTsKKyAgICBpZiAobGVnZW5kKQorICAgICAg
bGVnZW5kLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobGVnZW5kKTsKKyAgfQorCisgIHZhciBmYWxs
YmFja3NNYXAgPSB7fTsKKyAgZmFsbGJhY2tzTWFwWydXSU4tWFAnXSA9IFsnY2hyb21pdW0td2lu
LXhwJywgJ2Nocm9taXVtLXdpbi12aXN0YScsICdjaHJvbWl1bS13aW4nLCAnY2hyb21pdW0nLCAn
d2luJywgJ21hYyddOworICBmYWxsYmFja3NNYXBbJ1dJTi1WSVNUQSddID0gWydjaHJvbWl1bS13
aW4tdmlzdGEnLCAnY2hyb21pdW0td2luJywgJ2Nocm9taXVtJywgJ3dpbicsICdtYWMnXTsKKyAg
ZmFsbGJhY2tzTWFwWydXSU4tNyddID0gWydjaHJvbWl1bS13aW4nLCAnY2hyb21pdW0nLCAnd2lu
JywgJ21hYyddOworICBmYWxsYmFja3NNYXBbJ1dJTi03LUdQVSddID0gWydjaHJvbWl1bS1ncHUt
d2luJ10uY29uY2F0KGZhbGxiYWNrc01hcFsnV0lOLTcnXSk7CisgIGZhbGxiYWNrc01hcFsnTUFD
LUxFT1BBUkQnXSA9IFsnY2hyb21pdW0tbWFjLWxlb3BhcmQnLCAnY2hyb21pdW0tbWFjLXNub3ds
ZW9wYXJkJywgJ2Nocm9taXVtLW1hYycsICdjaHJvbWl1bScsICdtYWMtbGVvcGFyZCcsICdtYWMt
c25vd2xlb3BhcmQnLCAnbWFjJ107CisgIGZhbGxiYWNrc01hcFsnTUFDLVNOT1dMRU9QQVJEJ10g
PSBbJ2Nocm9taXVtLW1hYy1zbm93bGVvcGFyZCcsICdjaHJvbWl1bS1tYWMnLCAnY2hyb21pdW0n
LCAnbWFjLXNub3dsZW9wYXJkJywgJ21hYyddOworICBmYWxsYmFja3NNYXBbJ01BQy1TTk9XTEVP
UEFSRC1HUFUnXSA9IFsnY2hyb21pdW0tZ3B1LW1hYyddLmNvbmNhdChmYWxsYmFja3NNYXBbJ01B
Qy1TTk9XTEVPUEFSRCddKTsKKyAgZmFsbGJhY2tzTWFwWydMSU5VWC0zMiddID0gWydjaHJvbWl1
bS1saW51eC14ODYnLCAnY2hyb21pdW0tbGludXgnLCAnY2hyb21pdW0td2luJywgJ2Nocm9taXVt
JywgJ3dpbicsICdtYWMnXTsKKyAgZmFsbGJhY2tzTWFwWydMSU5VWC02NCddID0gWydjaHJvbWl1
bS1saW51eCcsICdjaHJvbWl1bS13aW4nLCAnY2hyb21pdW0nLCAnd2luJywgJ21hYyddOworICBm
YWxsYmFja3NNYXBbJ0xJTlVYLTMyLUdQVSddID0gWydjaHJvbWl1bS1ncHUtbGludXgnXS5jb25j
YXQoZmFsbGJhY2tzTWFwWydMSU5VWC0zMiddKTsKKworICBmdW5jdGlvbiBodG1sRm9yRmFsbGJh
Y2tIZWxwKGZhbGxiYWNrcykgeworICAgIHJldHVybiAnPG9sIGNsYXNzPWZhbGxiYWNrLWxpc3Q+
PGxpPicgKyBmYWxsYmFja3Muam9pbignPC9saT48bGk+JykgKworICAgICAgICAnPC9saT48L29s
Pic7CisgIH0KKworICBmdW5jdGlvbiBzaG93TGVnZW5kKCkgeworICAgIHZhciBsZWdlbmQgPSAk
KCdsZWdlbmQnKTsKKyAgICBpZiAoIWxlZ2VuZCkgeworICAgICAgbGVnZW5kID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICBsZWdlbmQuaWQgPSAnbGVnZW5kJzsKKyAgICAg
IGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGVnZW5kKTsKKyAgICB9CisKKyAgICB2YXIgaHRt
bCA9ICc8ZGl2IGlkPWxlZ2VuZC10b2dnbGUgb25jbGljaz0iaGlkZUxlZ2VuZCgpIj5IaWRlICcg
KworICAgICAgICAnbGVnZW5kIFt0eXBlIGVzY108L2Rpdj48ZGl2Pk51bWJlciBvZiBmbGFreSB0
ZXN0cyBsaXN0ZWQgbmV4dCB0byAnICsKKyAgICAgICAgJ2VhY2ggYnVpbGRlcjwvZGl2PjxkaXYg
aWQ9bGVnZW5kLWNvbnRlbnRzPic7CisgICAgZm9yICh2YXIgZXhwZWN0YXRpb24gaW4gZ2V0RXhw
ZWN0YXRpb25zTWFwKCkpIHsKKyAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9JyArIGV4cGVjdGF0
aW9uICsgJz4nICsKKyAgICAgICAgICBnZXRFeHBlY3RhdGlvbnNNYXAoKVtleHBlY3RhdGlvbl0g
KyAnPC9kaXY+JzsKKyAgICB9CisKKyAgICBodG1sICs9ICc8ZGl2IGNsYXNzPW1lcmdlPldFQktJ
VCBNRVJHRTwvZGl2Pic7CisgICAgaWYgKGlzTGF5b3V0VGVzdFJlc3VsdHMoKSkgeworICAgICAg
aHRtbCArPSAnPGRpdiBjbGFzcz13cm9uZy1leHBlY3RhdGlvbnM+V1JPTkcgRVhQRUNUQVRJT05T
PC9kaXY+JyArCisgICAgICAgICAgJzwvZGl2PjxiciBzdHlsZT0iY2xlYXI6Ym90aCI+JyArCisg
ICAgICAgICAgJzwvZGl2PjxoMz5UZXN0IGV4cGVjdGF0b25zIGZhbGxiYWNrIG9yZGVyLjwvaDM+
JzsKKworICAgICAgZm9yICh2YXIgcGxhdGZvcm0gaW4gZmFsbGJhY2tzTWFwKSB7CisgICAgICAg
IGh0bWwgKz0gJzxkaXYgY2xhc3M9ZmFsbGJhY2staGVhZGVyPicgKyBwbGF0Zm9ybSArICc8L2Rp
dj4nICsKKyAgICAgICAgICBodG1sRm9yRmFsbGJhY2tIZWxwKGZhbGxiYWNrc01hcFtwbGF0Zm9y
bV0pOworICAgICAgfQorICAgICAgaHRtbCArPSAnPGRpdj5USU1FUzo8L2Rpdj4nICsKKyAgICAg
ICAgICBnZXRIdG1sRm9yU2xvd1RpbWVzKE1JTl9TRUNPTkRTX0ZPUl9TTE9XX1RFU1QpICsKKyAg
ICAgICAgICAnPGRpdj5ERUJVRyBUSU1FUzo8L2Rpdj4nICsKKyAgICAgICAgICBnZXRIdG1sRm9y
U2xvd1RpbWVzKE1JTl9TRUNPTkRTX0ZPUl9TTE9XX1RFU1RfREVCVUcpOworICAgIH0KKworICAg
IGxlZ2VuZC5pbm5lckhUTUwgPSBodG1sOworICB9CisKKyAgZnVuY3Rpb24gZ2V0SHRtbEZvclNs
b3dUaW1lcyhtaW5UaW1lKSB7CisgICAgcmV0dXJuICc8dWw+PGxpPiZsdDsxIHNlY29uZCA9PSAh
U0xPVzwvbGk+PGxpPiZndDsxIHNlY29uZCAmJiAmbHQ7JyArCisgICAgICAgIG1pblRpbWUgKyAn
IHNlY29uZHMgPT0gU0xPVyB8fCAhU0xPVyBpcyBmaW5lPC9saT48bGk+Jmd0OycgKworICAgICAg
ICBtaW5UaW1lICsgJyBzZWNvbmRzID09IFNMT1c8L2xpPjwvdWw+JzsKKyAgfQorCisgIGRvY3Vt
ZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBmdW5jdGlvbihlKSB7CisgICAgaWYgKGUu
a2V5SWRlbnRpZmllciA9PSAnVSswMDNGJyB8fCBlLmtleUlkZW50aWZpZXIgPT0gJ1UrMDBCRicp
IHsKKyAgICAgIC8vIFdlYktpdCBNQUMgcmV0dXJzbiAzRi4gV2ViS2l0IFdJTiByZXR1cm5zIEJG
LiBUaGlzIGlzIGEgYnVnIQorICAgICAgLy8gPyBrZXkKKyAgICAgIHNob3dMZWdlbmQoKTsKKyAg
ICB9IGVsc2UgaWYgKGUua2V5SWRlbnRpZmllciA9PSAnVSswMDFCJykgeworICAgICAgLy8gZXNj
YXBlIGtleQorICAgICAgaGlkZUxlZ2VuZCgpOworICAgICAgaGlkZVBvcHVwKCk7CisgICAgfQor
ICB9LCBmYWxzZSk7CisKKworCisgIDwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keT48L2JvZHk+
Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNo
Ym9hcmRzL2ZsYWtpbmVzc19kYXNoYm9hcmRfdGVzdHMuanMgYi9Ub29scy9UZXN0UmVzdWx0U2Vy
dmVyL3N0YXRpYy1kYXNoYm9hcmRzL2ZsYWtpbmVzc19kYXNoYm9hcmRfdGVzdHMuanMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMjEyMzg3MmYzN2ZiMzRiZjk4ZDc0MjgyYmZjMDIxNTg2NmViNmM4NQotLS0gL2Rldi9u
dWxsCisrKyBiL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvZmxha2lu
ZXNzX2Rhc2hib2FyZF90ZXN0cy5qcwpAQCAtMCwwICsxLDE2OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGVvdmVy
dmlldyBQb29yLW1hbidzIHVuaXR0ZXN0cyBmb3Igc29tZSBvZiB0aGUgdHJpY2tpZXIgbG9naWMg
Yml0cyBvZgorICogdGhlIGZsYWtpbmVzcyBkYXNoYm9hcmQuCisgKgorICogQ3VycmVudGx5IG9u
bHkgdGVzdHMgcHJvY2Vzc0V4cGVjdGF0aW9ucyBhbmQgcG9wdWxhdGVFeHBlY3RhdGlvbnNEYXRh
LgorICogQSB0ZXN0IGp1c3QgY29uc2lzdHMgb2YgY2FsbGluZyBydW5FeHBlY3RhdGlvbnNUZXN0
IHdpdGggdGhlIGFwcHJvcHJpYXRlCisgKiBhcmd1bWVudHMuCisgKi8KKworLy8gVE9ETyhvamFu
KTogQWRkIG1vcmUgdGVzdCBjYXNlcy4KKy8vIFRPRE8ob2phbik6IEFkZCB0ZXN0cyBmb3IgcHJv
Y2Vzc01pc3NpbmdBbmRFeHRyYUV4cGVjdGF0aW9ucworCisvKioKKyAqIENsZWFycyBvdXQgdGhl
IGdsb2JhbCBvYmplY3RzIG1vZGlmaWVkIG9yIHVzZWQgYnkgcHJvY2Vzc0V4cGVjdGF0aW9ucyBh
bmQKKyAqIHBvcHVsYXRlRXhwZWN0YXRpb25zRGF0YS4gQSBiaXQgZ3Jvc3Mgc2luY2UgaXQncyBk
aWdnaW5nIGludG8gaW1wbGVtZW50YXRpb24KKyAqIGRldGFpbHMsIGJ1dCBpdCdzIGdvb2QgZW5v
dWdoIGZvciBub3cuCisgKi8KK2Z1bmN0aW9uIHNldHVwRXhwZWN0YXRpb25zVGVzdCgpIHsKKyAg
YWxsRXhwZWN0YXRpb25zID0gbnVsbDsKKyAgYWxsVGVzdHMgPSBudWxsOworICBleHBlY3RhdGlv
bnNCeVRlc3QgPSB7fTsKKyAgcmVzdWx0c0J5QnVpbGRlciA9IHt9OworICBidWlsZGVycyA9IHt9
OworfQorCisvKioKKyAqIFByb2Nlc3NlcyB0aGUgZXhwZWN0YXRpb25zIGZvciBhIHRlc3QgYW5k
IGFzc2VydHMgdGhhdCB0aGUgZmluYWwgZXhwZWN0YXRpb25zCisgKiBhbmQgbW9kaWZpZXJzIHdl
IGFwcGx5IHRvIGEgdGVzdCBtYXRjaCB3aGF0IHdlIGV4cGVjdC4KKyAqCisgKiBAcGFyYW0ge3N0
cmluZ30gYnVpbGRlciBCdWlsZGVyIHRoZSB0ZXN0IGlzIHJ1biBvbi4KKyAqIEBwYXJhbSB7c3Ry
aW5nfSB0ZXN0IFRoZSB0ZXN0IG5hbWUuCisgKiBAcGFyYW0ge3N0cmluZ30gZXhwZWN0YXRpb25z
IFNvcnRlZCBzdHJpbmcgb2Ygd2hhdCB0aGUgZXhwZWN0YXRpb25zIGZvciB0aGlzCisgKiAgICB0
ZXN0IG91Z2h0IHRvIGJlIGZvciB0aGlzIGJ1aWxkZXIuCisgKiBAcGFyYW0ge3N0cmluZ30gbW9k
aWZpZXJzIFNvcnRlZCBzdHJpbmcgb2Ygd2hhdCB0aGUgbW9kaWZpZXJzIGZvciB0aGlzCisgKiAg
ICB0ZXN0IG91Z2h0IHRvIGJlIGZvciB0aGlzIGJ1aWxkZXIuCisgKi8KK2Z1bmN0aW9uIHJ1bkV4
cGVjdGF0aW9uc1Rlc3QoYnVpbGRlciwgdGVzdCwgZXhwZWN0YXRpb25zLCBtb2RpZmllcnMpIHsK
KyAgYnVpbGRlcnNbYnVpbGRlcl0gPSB0cnVlOworCisgIC8vIFB1dCBpbiBzb21lIGR1bW15IHJl
c3VsdHMuIHByb2Nlc3NFeHBlY3RhdGlvbnMgZXhwZWN0cyB0aGUgdGVzdCB0byBiZQorICAvLyB0
aGVyZS4KKyAgdmFyIHRlc3RzID0ge307CisgIHRlc3RzW3Rlc3RdID0geydyZXN1bHRzJzogW1sx
MDAsICdGJ11dLCAndGltZXMnOiBbWzEwMCwgMF1dfTsKKyAgcmVzdWx0c0J5QnVpbGRlcltidWls
ZGVyXSA9IHsndGVzdHMnOiB0ZXN0c307CisKKyAgcHJvY2Vzc0V4cGVjdGF0aW9ucygpOworICB2
YXIgcmVzdWx0c0ZvclRlc3QgPSBjcmVhdGVSZXN1bHRzT2JqZWN0Rm9yVGVzdCh0ZXN0LCBidWls
ZGVyKTsKKyAgcG9wdWxhdGVFeHBlY3RhdGlvbnNEYXRhKHJlc3VsdHNGb3JUZXN0KTsKKworICBh
c3NlcnRFcXVhbHMocmVzdWx0c0ZvclRlc3QsIHJlc3VsdHNGb3JUZXN0LmV4cGVjdGF0aW9ucywg
ZXhwZWN0YXRpb25zKTsKKyAgYXNzZXJ0RXF1YWxzKHJlc3VsdHNGb3JUZXN0LCByZXN1bHRzRm9y
VGVzdC5tb2RpZmllcnMsIG1vZGlmaWVycyk7Cit9CisKK2Z1bmN0aW9uIGFzc2VydEVxdWFscyhy
ZXN1bHRzRm9yVGVzdCwgYWN0dWFsLCBleHBlY3RlZCkgeworICBpZiAoZXhwZWN0ZWQgIT09IGFj
dHVhbCkgeworICAgIHRocm93IEVycm9yKCdCdWlsZGVyOiAnICsgcmVzdWx0c0ZvclRlc3QuYnVp
bGRlciArICcgdGVzdDogJyArCisgICAgICAgIHJlc3VsdHNGb3JUZXN0LnRlc3QgKyAnIGdvdDog
JyArIGFjdHVhbCArICcgZXhwZWN0ZWQ6ICcgKyBleHBlY3RlZCk7CisgIH0KK30KKworZnVuY3Rp
b24gdGhyb3dFcnJvcihyZXN1bHRzRm9yVGVzdHMsIGFjdHVhbCwgZXhwZWN0ZWQpIHsKK30KKwor
ZnVuY3Rpb24gdGVzdFJlbGVhc2VGYWlsKCkgeworICB2YXIgYnVpbGRlciA9ICdXZWJraXQnOwor
ICB2YXIgdGVzdCA9ICdmb28vMS5odG1sJzsKKyAgdmFyIGV4cGVjdGF0aW9uc0FycmF5ID0gWwor
ICAgIHsnbW9kaWZpZXJzJzogJ1JFTEVBU0UnLCAnZXhwZWN0YXRpb25zJzogJ0ZBSUwnfQorICBd
OworICBleHBlY3RhdGlvbnNCeVRlc3RbdGVzdF0gPSBleHBlY3RhdGlvbnNBcnJheTsKKyAgcnVu
RXhwZWN0YXRpb25zVGVzdChidWlsZGVyLCB0ZXN0LCAnRkFJTCcsICdSRUxFQVNFJyk7Cit9CisK
K2Z1bmN0aW9uIHRlc3RSZWxlYXNlRmFpbERlYnVnQ3Jhc2hSZWxlYXNlQnVpbGRlcigpIHsKKyAg
dmFyIGJ1aWxkZXIgPSAnV2Via2l0JzsKKyAgdmFyIHRlc3QgPSAnZm9vLzEuaHRtbCc7CisgIHZh
ciBleHBlY3RhdGlvbnNBcnJheSA9IFsKKyAgICB7J21vZGlmaWVycyc6ICdSRUxFQVNFJywgJ2V4
cGVjdGF0aW9ucyc6ICdGQUlMJ30sCisgICAgeydtb2RpZmllcnMnOiAnREVCVUcnLCAnZXhwZWN0
YXRpb25zJzogJ0NSQVNIJ30KKyAgXTsKKyAgZXhwZWN0YXRpb25zQnlUZXN0W3Rlc3RdID0gZXhw
ZWN0YXRpb25zQXJyYXk7CisgIHJ1bkV4cGVjdGF0aW9uc1Rlc3QoYnVpbGRlciwgdGVzdCwgJ0ZB
SUwnLCAnUkVMRUFTRScpOworfQorCitmdW5jdGlvbiB0ZXN0UmVsZWFzZUZhaWxEZWJ1Z0NyYXNo
RGVidWdCdWlsZGVyKCkgeworICB2YXIgYnVpbGRlciA9ICdXZWJraXQoZGJnKSc7CisgIHZhciB0
ZXN0ID0gJ2Zvby8xLmh0bWwnOworICB2YXIgZXhwZWN0YXRpb25zQXJyYXkgPSBbCisgICAgeydt
b2RpZmllcnMnOiAnUkVMRUFTRScsICdleHBlY3RhdGlvbnMnOiAnRkFJTCd9LAorICAgIHsnbW9k
aWZpZXJzJzogJ0RFQlVHJywgJ2V4cGVjdGF0aW9ucyc6ICdDUkFTSCd9CisgIF07CisgIGV4cGVj
dGF0aW9uc0J5VGVzdFt0ZXN0XSA9IGV4cGVjdGF0aW9uc0FycmF5OworICBydW5FeHBlY3RhdGlv
bnNUZXN0KGJ1aWxkZXIsIHRlc3QsICdDUkFTSCcsICdERUJVRycpOworfQorCitmdW5jdGlvbiB0
ZXN0T3ZlcnJpZGVKdXN0QnVpbGRUeXBlKCkgeworICB2YXIgdGVzdCA9ICdiYXIvMS5odG1sJzsK
KyAgZXhwZWN0YXRpb25zQnlUZXN0WydiYXInXSA9IFsKKyAgICB7J21vZGlmaWVycyc6ICdXT05U
RklYJywgJ2V4cGVjdGF0aW9ucyc6ICdGQUlMIFBBU1MgVElNRU9VVCd9CisgIF07CisgIGV4cGVj
dGF0aW9uc0J5VGVzdFt0ZXN0XSA9IFsKKyAgICB7J21vZGlmaWVycyc6ICdXT05URklYIE1BQycs
ICdleHBlY3RhdGlvbnMnOiAnRkFJTCd9LAorICAgIHsnbW9kaWZpZXJzJzogJ0xJTlVYIERFQlVH
JywgJ2V4cGVjdGF0aW9ucyc6ICdDUkFTSCd9LAorICBdOworICBydW5FeHBlY3RhdGlvbnNUZXN0
KCdXZWJraXQnLCB0ZXN0LCAnRkFJTCBQQVNTIFRJTUVPVVQnLCAnV09OVEZJWCcpOworICBydW5F
eHBlY3RhdGlvbnNUZXN0KCdXZWJraXQgKGRiZykoMyknLCB0ZXN0LCAnRkFJTCBQQVNTIFRJTUVP
VVQnLCAnV09OVEZJWCcpOworICBydW5FeHBlY3RhdGlvbnNUZXN0KCdXZWJraXQgTGludXgnLCB0
ZXN0LCAnRkFJTCBQQVNTIFRJTUVPVVQnLCAnV09OVEZJWCcpOworICBydW5FeHBlY3RhdGlvbnNU
ZXN0KCdXZWJraXQgTGludXggKGRiZykoMyknLCB0ZXN0LCAnQ1JBU0gnLCAnTElOVVggREVCVUcn
KTsKKyAgcnVuRXhwZWN0YXRpb25zVGVzdCgnV2Via2l0IE1hYzEwLjUnLCB0ZXN0LCAnRkFJTCcs
ICdXT05URklYIE1BQycpOworICBydW5FeHBlY3RhdGlvbnNUZXN0KCdXZWJraXQgTWFjMTAuNSAo
ZGJnKSgzKScsIHRlc3QsICdGQUlMJywgJ1dPTlRGSVggTUFDJyk7Cit9CisKK2Z1bmN0aW9uIHJ1
blRlc3RzKCkgeworICBkb2N1bWVudC5ib2R5LmlubmVySFRNTCA9ICc8cHJlIGlkPXVuaXR0ZXN0
LXJlc3VsdHM+PC9wcmU+JzsKKyAgZm9yICh2YXIgbmFtZSBpbiB3aW5kb3cpIHsKKyAgICBpZiAo
dHlwZW9mIHdpbmRvd1tuYW1lXSA9PSAnZnVuY3Rpb24nICYmIC9edGVzdC8udGVzdChuYW1lKSkg
eworICAgICAgc2V0dXBFeHBlY3RhdGlvbnNUZXN0KCk7CisKKyAgICAgIHZhciB0ZXN0ID0gd2lu
ZG93W25hbWVdOworICAgICAgdmFyIGVycm9yID0gbnVsbDsKKworICAgICAgdHJ5IHsKKyAgICAg
ICAgdGVzdCgpOworICAgICAgfSBjYXRjaCAoZXJyKSB7CisgICAgICAgIGVycm9yID0gZXJyOwor
ICAgICAgfQorCisgICAgICB2YXIgcmVzdWx0ID0gZXJyb3IgPyBlcnJvci50b1N0cmluZygpIDog
J1BBU1NFRCc7CisgICAgICAkKCd1bml0dGVzdC1yZXN1bHRzJykuaW5zZXJ0QWRqYWNlbnRIVE1M
KCJiZWZvcmVFbmQiLAorICAgICAgICAgIG5hbWUgKyAnOiAnICsgcmVzdWx0ICsgJ1xuJyk7Cisg
ICAgfQorICB9Cit9CisKK2lmIChkb2N1bWVudC5yZWFkeVN0YXRlID09ICdjb21wbGV0ZScpIHsK
KyAgcnVuVGVzdHMoKTsKK30gZWxzZSB7CisgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2Fk
JywgcnVuVGVzdHMsIGZhbHNlKTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2
ZXIvc3RhdGljLWRhc2hib2FyZHMvdGltZWxpbmVfZXhwbG9yZXIuaHRtbCBiL1Rvb2xzL1Rlc3RS
ZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvdGltZWxpbmVfZXhwbG9yZXIuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5lOGE2MjU4N2EwZTg3ODFmM2JhMzkxNzZmYTJjYTQ5YTJmYTk4NmFmCi0tLSAvZGV2
L251bGwKKysrIGIvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy90aW1l
bGluZV9leHBsb3Jlci5odG1sCkBAIC0wLDAgKzEsNDkxIEBACis8IS0tIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKK21ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKK25vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKK2NvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
K2luIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKK2Rpc3RyaWJ1dGlvbi4KKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKK2NvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCit0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCitBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCitTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCitM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKK0RBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCitPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorLS0+Cis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorCis8aGVhZD4KKyAgPHRpdGxl
PlRlc3QgVGltZWxpbmUgRXhwbG9yZXI8L3RpdGxlPgorICA8c3R5bGU+CisgICAgYm9keSB7Cisg
ICAgICBmb250LWZhbWlseTogSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjsKKyAgICAgIGZv
bnQtc2l6ZTogMTJweDsKKyAgICB9CisKKyAgICAjdGltZWxpbmUtY29udGFpbmVyIHsKKyAgICAg
IHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICB9CisKKyAgICAjaW5zcGVjdG9yLWNvbnRhaW5lciB7
CisgICAgICB3aWR0aDogMzAwcHg7CisgICAgICBmbG9hdDogcmlnaHQ7CisgICAgICBib3JkZXIt
bGVmdDogMXB4IGRhc2hlZDsKKyAgICAgIHBhZGRpbmctbGVmdDogNXB4OworICAgICAgbWFyZ2lu
LWxlZnQ6IDVweDsKKyAgICB9CisKKyAgICAjaW5zcGVjdG9yLWNvbnRhaW5lciBjYXB0aW9uIHsK
KyAgICAgIGJhY2tncm91bmQ6ICNlZWU7CisgICAgICBmb250LXdlaWdodDogYm9sZDsKKyAgICAg
IHBhZGRpbmc6IDJweDsKKyAgICAgIGZvbnQtc2l6ZTogMTRweDsKKyAgICAgIHRleHQtYWxpZ246
IGxlZnQ7CisgICAgfQorCisgICAgI2luc3BlY3Rvci10YWJsZSB7CisgICAgICB3aWR0aDogMTAw
JTsKKyAgICB9CisKKyAgICAjaW5zcGVjdG9yLXRhYmxlIHRkIHsKKyAgICAgIHdoaXRlLXNwYWNl
OiBub3dyYXA7CisgICAgfQorCisgICAgI2luc3BlY3Rvci10YWJsZSAubGFiZWwgeworICAgICAg
Y29sb3I6ICM2NjY7CisgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgIHdpZHRoOiAxMGVt
OworICAgIH0KKworICAgICNpbnNwZWN0b3ItdGFibGUgLmRlbHRhLnBvc2l0aXZlIHsKKyAgICAg
IGNvbG9yOiAjMDkwOworICAgIH0KKworICAgICNpbnNwZWN0b3ItdGFibGUgLmRlbHRhLm5lZ2F0
aXZlIHsKKyAgICAgIGNvbG9yOiAjOTAwOworICAgIH0KKworICAgICNpbnNwZWN0b3ItY29udGFp
bmVyIC5idXR0b25zIHsKKyAgICAgIHBhZGRpbmc6IDFlbSAwOworICAgICAgdGV4dC1hbGlnbjog
Y2VudGVyOworICAgIH0KKworICAgICNpbnNwZWN0b3ItY29udGFpbmVyICNidWlsZC1idXR0b25z
IHsKKyAgICAgIGJvcmRlci10b3A6IDFweCBkYXNoZWQ7CisgICAgfQorCisgICAgI2luZGljYXRv
ciB7CisgICAgICB0b3A6IDA7CisgICAgICB3aWR0aDogMXB4OworICAgICAgcG9zaXRpb246IGFi
c29sdXRlOworICAgICAgYmFja2dyb3VuZDogcmVkOworICAgIH0KKyAgPC9zdHlsZT4KKyAgPHNj
cmlwdCBzcmM9ImR5Z3JhcGgtY29tYmluZWQuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0i
YnVpbGRlcnMuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0iZGFzaGJvYXJkX2Jhc2UuanMi
Pjwvc2NyaXB0PgorICA8c2NyaXB0PgorICB2YXIgRkFJTElOR19URVNUU19EQVRBU0VUX05BTUUg
PSAnRmFpbGluZyB0ZXN0cyc7CisKKyAgdmFyIHNob3VsZFNob3dXZWJLaXRSZXZpc2lvbnNPbmx5
ID0gaXNUaXBPZlRyZWVXZWJLaXRCdWlsZGVyKCk7CisgIHZhciBkeWdyYXBoOworICB2YXIgYnVp
bGRJbmRpY2VzQnlUaW1lc3RhbXAgPSB7fTsKKyAgdmFyIGN1cnJlbnRCdWlsZEluZGV4ID0gLTE7
CisgIHZhciBjdXJyZW50QnVpbGRlclRlc3RSZXN1bHRzOworCisgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLworICAvLyBNZXRob2RzIGFuZCBvYmplY3RzIGZyb20gZGFzaGJvYXJkX2Jhc2UuanMgdG8g
b3ZlcnJpZGUuCisgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICBmdW5jdGlvbiBnZW5lcmF0ZVBh
Z2UoKSB7CisgICAgYnVpbGRJbmRpY2VzQnlUaW1lc3RhbXAgPSB7fTsKKyAgICB2YXIgcmVzdWx0
cyA9IHJlc3VsdHNCeUJ1aWxkZXJbY3VycmVudFN0YXRlLmJ1aWxkZXJdOworCisgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCByZXN1bHRzW0ZJWEFCTEVfQ09VTlRTX0tFWV0ubGVuZ3RoOyBpKyspIHsK
KyAgICAgIHZhciBidWlsZERhdGUgPSBuZXcgRGF0ZShyZXN1bHRzW1RJTUVTVEFNUFNfS0VZXVtp
XSAqIDEwMDApOworICAgICAgYnVpbGRJbmRpY2VzQnlUaW1lc3RhbXBbYnVpbGREYXRlLmdldFRp
bWUoKV0gPSBpOworICAgIH0KKworICAgIGlmIChjdXJyZW50U3RhdGUuYnVpbGRUaW1lc3RhbXAg
IT0gLTEgJiYKKyAgICAgICAgY3VycmVudFN0YXRlLmJ1aWxkVGltZXN0YW1wIGluIGJ1aWxkSW5k
aWNlc0J5VGltZXN0YW1wKSB7CisgICAgICAgIHZhciBuZXdCdWlsZEluZGV4ID0KKyAgICAgICAg
ICAgIGJ1aWxkSW5kaWNlc0J5VGltZXN0YW1wW2N1cnJlbnRTdGF0ZS5idWlsZFRpbWVzdGFtcF07
CisKKyAgICAgICAgaWYgKG5ld0J1aWxkSW5kZXggPT0gY3VycmVudEJ1aWxkSW5kZXgpIHsKKyAg
ICAgICAgICAvLyBUaGlzIGhhcHBlbnMgd2hlbiBzZWxlY3RCdWlsZCBpcyBjYWxsZWQsIHdoaWNo
IHVwZGF0ZXMgdGhlIFVJCisgICAgICAgICAgLy8gaW1tZWRpYXRlbHksIGluIGFkZGl0aW9uIHRv
IHVwZGF0aW5nIHRoZSBsb2NhdGlvbiBoYXNoICh3ZSBkb24ndAorICAgICAgICAgIC8vIGp1c3Qg
cmVseSBvbiB0aGUgaGFzaCBjaGFuZ2Ugc2luY2Ugd2UgZG9uJ3Qgd2FudCB0byByZWdlbmVyYXRl
IHRoZQorICAgICAgICAgIC8vIHdob2xlIHBhZ2UganVzdCBiZWNhdXNlIHRoZSB1c2VyIGNsaWNr
ZWQgb24gc29tZXRoaW5nKQorICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIGlmIChu
ZXdCdWlsZEluZGV4KSB7CisgICAgICAgICAgY3VycmVudEJ1aWxkSW5kZXggPSBuZXdCdWlsZElu
ZGV4OworICAgICAgICB9CisgICAgfQorCisgICAgaW5pdEN1cnJlbnRCdWlsZGVyVGVzdFJlc3Vs
dHMoKTsKKworICAgICQoJ3Rlc3QtdHlwZS1zd2l0Y2hlcicpLmlubmVySFRNTCA9IGdldEhUTUxG
b3JUZXN0VHlwZVN3aXRjaGVyKAorICAgICAgICBmYWxzZSwKKyAgICAgICAgY2hlY2tib3hIVE1M
KCdpZ25vcmVGbGFreVRlc3RzJywgJ0lnbm9yZSBmbGFreSB0ZXN0cycsCisgICAgICAgICAgICBj
dXJyZW50U3RhdGUuaWdub3JlRmxha3lUZXN0cywgJ2N1cnJlbnRCdWlsZEluZGV4ID0gLTEnKQor
ICAgICk7CisKKyAgICB1cGRhdGVUaW1lbGluZUZvckJ1aWxkZXIoKTsKKyAgfQorCisgIGZ1bmN0
aW9uIGluaXRDdXJyZW50QnVpbGRlclRlc3RSZXN1bHRzKCkgeworICAgIHZhciBzdGFydFRpbWUg
PSBEYXRlLm5vdygpOworICAgIGN1cnJlbnRCdWlsZGVyVGVzdFJlc3VsdHMgPQorICAgICAgICBn
ZXRUZXN0UmVzdWx0c0J5QnVpbGQocmVzdWx0c0J5QnVpbGRlcltjdXJyZW50U3RhdGUuYnVpbGRl
cl0pOworICAgIGNvbnNvbGUubG9nKAorICAgICAgICAnVGltZSB0byBnZXQgdGVzdCByZXN1bHRz
IGJ5IGJ1aWxkOiAnICsgKERhdGUubm93KCkgLSBzdGFydFRpbWUpKTsKKyAgfQorCisgIGZ1bmN0
aW9uIGhhbmRsZVZhbGlkSGFzaFBhcmFtZXRlcihrZXksIHZhbHVlKSB7CisgICAgc3dpdGNoKGtl
eSkgeworICAgICAgY2FzZSAnYnVpbGRUaW1lc3RhbXAnOgorICAgICAgICBjdXJyZW50U3RhdGUu
YnVpbGRUaW1lc3RhbXAgPSBwYXJzZUludCh2YWx1ZSwgMTApOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgIGNhc2UgJ2lnbm9yZUZsYWt5VGVzdHMnOgorICAgICAgICBjdXJyZW50U3RhdGUu
aWdub3JlRmxha3lUZXN0cyA9IHZhbHVlID09ICd0cnVlJzsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICB9CisKKyAg
ZGVmYXVsdFN0YXRlVmFsdWVzID0geworICAgIGJ1aWxkVGltZXN0YW1wOiAtMSwKKyAgICBidWls
ZGVyOiBkZWZhdWx0QnVpbGRlck5hbWUsCisgICAgaWdub3JlRmxha3lUZXN0czogdHJ1ZQorICB9
OworCisgIGZ1bmN0aW9uIHVwZGF0ZVRpbWVsaW5lRm9yQnVpbGRlcigpIHsKKyAgICB2YXIgYnVp
bGRlciA9IGN1cnJlbnRTdGF0ZS5idWlsZGVyOworICAgIHZhciByZXN1bHRzID0gcmVzdWx0c0J5
QnVpbGRlcltidWlsZGVyXTsKKyAgICB2YXIgZ3JhcGhEYXRhID0gW107CisKKyAgICB2YXIgYW5u
b3RhdGlvbnMgPSBbXTsKKworICAgIC8vIER5Z3JhcGggcHJlZmVycyB0byBiZSBoYW5kZWQgZGF0
YSBpbiBjaHJvbm9sb2dpY2FsIG9yZGVyLgorICAgIGZvciAodmFyIGkgPSByZXN1bHRzW0ZJWEFC
TEVfQ09VTlRTX0tFWV0ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgIHZhciBidWls
ZERhdGUgPSBuZXcgRGF0ZShyZXN1bHRzW1RJTUVTVEFNUFNfS0VZXVtpXSAqIDEwMDApOworICAg
ICAgLy8gRklYTUU6IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIGV4Y2x1ZGUgb3V0bGllcnMuIFRoaXMg
aXMganVzdCBzbyB3ZQorICAgICAgLy8gZXhjbHVkZSBydW5zIHdoZXJlIGV2ZXJ5IHRlc3QgZmFp
bGVkLgorICAgICAgdmFyIGZhaWx1cmVDb3VudCA9IE1hdGgubWluKHJlc3VsdHNbRklYQUJMRV9D
T1VOVF9LRVldW2ldLCAxMDAwMCk7CisKKyAgICAgIGlmIChjdXJyZW50U3RhdGUuaWdub3JlRmxh
a3lUZXN0cykgeworICAgICAgICBmYWlsdXJlQ291bnQgLT0KKyAgICAgICAgICAgIGN1cnJlbnRC
dWlsZGVyVGVzdFJlc3VsdHMuZmxha3lEZWx0YXNCeUJ1aWxkW2ldLnRvdGFsIHx8IDA7CisgICAg
ICB9CisKKyAgICAgIGdyYXBoRGF0YS5wdXNoKFtidWlsZERhdGUsIGZhaWx1cmVDb3VudF0pOwor
CisgICAgICBpZiAoIXNob3VsZFNob3dXZWJLaXRSZXZpc2lvbnNPbmx5ICYmCisgICAgICAgICAg
KHJlc3VsdHNbV0VCS0lUX1JFVklTSU9OU19LRVldW2ldICE9CisgICAgICAgICAgICAgIHJlc3Vs
dHNbV0VCS0lUX1JFVklTSU9OU19LRVldW2kgKyAxXSkpIHsKKyAgICAgICAgYW5ub3RhdGlvbnMu
cHVzaCh7CisgICAgICAgICAgICBzZXJpZXM6IEZBSUxJTkdfVEVTVFNfREFUQVNFVF9OQU1FLAor
ICAgICAgICAgICAgeDogYnVpbGREYXRlLAorICAgICAgICAgICAgc2hvcnRUZXh0OiAnUicsCisg
ICAgICAgICAgICB0ZXh0OiAnV2ViS2l0IHJvbGw6IHInICsKKyAgICAgICAgICAgICAgICByZXN1
bHRzW1dFQktJVF9SRVZJU0lPTlNfS0VZXVtpICsgMV0gKyAnIHRvICcgKworICAgICAgICAgICAg
ICAgIHJlc3VsdHNbV0VCS0lUX1JFVklTSU9OU19LRVldW2ldCisgICAgICAgICAgfSk7CisgICAg
ICB9CisgICAgfQorCisgICAgdmFyIHdpbmRvd1dpZHRoID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVt
ZW50LmNsaWVudFdpZHRoOworICAgIHZhciB3aW5kb3dIZWlnaHQgPSBkb2N1bWVudC5kb2N1bWVu
dEVsZW1lbnQuY2xpZW50SGVpZ2h0OworICAgIHZhciBzd2l0Y2hlck5vZGUgPSAkKCd0ZXN0LXR5
cGUtc3dpdGNoZXInKTsKKyAgICB2YXIgaW5zcGVjdG9yTm9kZSA9ICQoJ2luc3BlY3Rvci1jb250
YWluZXInKTsKKyAgICB2YXIgZ3JhcGhXaWR0aCA9IHdpbmRvd1dpZHRoIC0gMjAgLSBpbnNwZWN0
b3JOb2RlLm9mZnNldFdpZHRoOworICAgIHZhciBncmFwaEhlaWdodCA9IHdpbmRvd0hlaWdodCAt
CisgICAgICAgIHN3aXRjaGVyTm9kZS5vZmZzZXRUb3AgLSBzd2l0Y2hlck5vZGUub2Zmc2V0SGVp
Z2h0IC0gMjA7CisKKyAgICB2YXIgY29udGFpbmVyTm9kZSA9ICQoJ3RpbWVsaW5lLWNvbnRhaW5l
cicpOworICAgIGNvbnRhaW5lck5vZGUuc3R5bGUuaGVpZ2h0ID0gZ3JhcGhIZWlnaHQgKyAncHgn
OworICAgIGNvbnRhaW5lck5vZGUuc3R5bGUud2lkdGggPSBncmFwaFdpZHRoICsgJ3B4JzsKKyAg
ICBpbnNwZWN0b3JOb2RlLnN0eWxlLmhlaWdodCA9IGdyYXBoSGVpZ2h0ICsgJ3B4JzsKKworICAg
IGR5Z3JhcGggPSBuZXcgRHlncmFwaCgKKyAgICAgICAgY29udGFpbmVyTm9kZSwKKyAgICAgICAg
Z3JhcGhEYXRhLCB7CisgICAgICAgICAgbGFiZWxzOiBbJ0RhdGUnLCBGQUlMSU5HX1RFU1RTX0RB
VEFTRVRfTkFNRV0sCisgICAgICAgICAgd2lkdGg6IGdyYXBoV2lkdGgsCisgICAgICAgICAgaGVp
Z2h0OiBncmFwaEhlaWdodCwKKyAgICAgICAgICBjbGlja0NhbGxiYWNrOiBmdW5jdGlvbihldmVu
dCwgZGF0ZSkgeworICAgICAgICAgICAgc2VsZWN0QnVpbGQocmVzdWx0cywgYnVpbGRlciwgZHln
cmFwaCwgYnVpbGRJbmRpY2VzQnlUaW1lc3RhbXBbZGF0ZV0pOworICAgICAgICAgIH0sCisgICAg
ICAgICAgZHJhd0NhbGxiYWNrOiBmdW5jdGlvbihkeWdyYXBoLCBpc0luaXRpYWwpIHsKKyAgICAg
ICAgICAgIGlmIChpc0luaXRpYWwpIHJldHVybjsKKyAgICAgICAgICAgIHVwZGF0ZUJ1aWxkSW5k
aWNhdG9yKHJlc3VsdHMsIGR5Z3JhcGgpOworICAgICAgICAgIH0sCisgICAgICAgICAgLy8geFZh
bHVlUGFyc2VyIGlzIG5lY2Vzc2FyeSBmb3IgYW5ub3RhdGlvbnMgdG8gd29yaywgZXZlbiB0aG91
Z2ggd2UKKyAgICAgICAgICAvLyBhbHJlYWR5IGhhdmUgRGF0ZSBpbnN0YW5jZXMKKyAgICAgICAg
ICB4VmFsdWVQYXJzZXI6IGZ1bmN0aW9uKGlucHV0KSB7IHJldHVybiBpbnB1dC5nZXRUaW1lKCk7
IH0KKyAgICAgICAgfSk7CisgICAgaWYgKGFubm90YXRpb25zLmxlbmd0aCkgeworICAgICAgZHln
cmFwaC5zZXRBbm5vdGF0aW9ucyhhbm5vdGF0aW9ucyk7CisgICAgfQorCisgICAgaW5zcGVjdG9y
Tm9kZS5zdHlsZS52aXNpYmlsaXR5ID0gJ3Zpc2libGUnOworCisgICAgaWYgKGN1cnJlbnRCdWls
ZEluZGV4ICE9IC0xKSB7CisgICAgICBzZWxlY3RCdWlsZChyZXN1bHRzLCBidWlsZGVyLCBkeWdy
YXBoLCBjdXJyZW50QnVpbGRJbmRleCk7CisgICAgfQorICB9CisKKyAgZnVuY3Rpb24gc2VsZWN0
QnVpbGQocmVzdWx0cywgYnVpbGRlciwgZHlncmFwaCwgaW5kZXgpIHsKKyAgICBjdXJyZW50QnVp
bGRJbmRleCA9IGluZGV4OworICAgIHVwZGF0ZUJ1aWxkSW5kaWNhdG9yKHJlc3VsdHMsIGR5Z3Jh
cGgpOworICAgIHVwZGF0ZUJ1aWxkSW5zcGVjdG9yKHJlc3VsdHMsIGJ1aWxkZXIsIGR5Z3JhcGgs
IGluZGV4KTsKKyAgICBzZXRRdWVyeVBhcmFtZXRlcignYnVpbGRUaW1lc3RhbXAnLCByZXN1bHRz
W1RJTUVTVEFNUFNfS0VZXVtpbmRleF0gKiAxMDAwKTsKKyAgfQorCisgIGZ1bmN0aW9uIHVwZGF0
ZUJ1aWxkSW5kaWNhdG9yKHJlc3VsdHMsIGR5Z3JhcGgpIHsKKyAgICB2YXIgaW5kaWNhdG9yTm9k
ZSA9ICQoJ2luZGljYXRvcicpOworCisgICAgaWYgKCFpbmRpY2F0b3JOb2RlKSB7CisgICAgICB2
YXIgY29udGFpbmVyTm9kZSA9ICQoJ3RpbWVsaW5lLWNvbnRhaW5lcicpOworICAgICAgaW5kaWNh
dG9yTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAgaW5kaWNhdG9y
Tm9kZS5pZCA9ICdpbmRpY2F0b3InOworICAgICAgaW5kaWNhdG9yTm9kZS5zdHlsZS5oZWlnaHQg
PSBjb250YWluZXJOb2RlLm9mZnNldEhlaWdodCArICdweCc7CisgICAgICBjb250YWluZXJOb2Rl
LmFwcGVuZENoaWxkKGluZGljYXRvck5vZGUpOworICAgIH0KKworICAgIGlmIChjdXJyZW50QnVp
bGRJbmRleCA9PSAtMSkgeworICAgICAgaW5kaWNhdG9yTm9kZS5zdHlsZS5kaXNwbGF5ID0gJ25v
bmUnOworICAgIH0gZWxzZSB7CisgICAgICBpbmRpY2F0b3JOb2RlLnN0eWxlLmRpc3BsYXkgPSAn
YmxvY2snOworICAgICAgdmFyIGJ1aWxkRGF0ZSA9CisgICAgICAgICAgbmV3IERhdGUocmVzdWx0
c1tUSU1FU1RBTVBTX0tFWV1bY3VycmVudEJ1aWxkSW5kZXhdICogMTAwMCk7CisgICAgICB2YXIg
ZG9tQ29vcmRzID0gZHlncmFwaC50b0RvbUNvb3JkcyhidWlsZERhdGUsIDApOworICAgICAgaW5k
aWNhdG9yTm9kZS5zdHlsZS5sZWZ0ID0gZG9tQ29vcmRzWzBdICsgJ3B4JzsKKyAgICB9CisgIH0K
KworICBmdW5jdGlvbiB1cGRhdGVCdWlsZEluc3BlY3RvcihyZXN1bHRzLCBidWlsZGVyLCBkeWdy
YXBoLCBpbmRleCkgeworICAgIHZhciBodG1sID0gJzx0YWJsZSBpZD0iaW5zcGVjdG9yLXRhYmxl
Ij48Y2FwdGlvbj5EZXRhaWxzPC9jYXB0aW9uPic7CisKKyAgICBmdW5jdGlvbiBhZGRSb3cobGFi
ZWwsIHZhbHVlKSB7CisgICAgICBodG1sICs9CisgICAgICAgICAgJzx0cj48dGQgY2xhc3M9Imxh
YmVsIj4nICsgbGFiZWwgKyAnPC90ZD48dGQ+JyArIHZhbHVlICsgJzwvdGQ+PC90cj4nOworICAg
IH0KKworICAgIC8vIEJ1aWxkZXIgYW5kIHJlc3VsdHMgbGlua3MKKyAgICB2YXIgYnVpbGROdW1i
ZXIgPSByZXN1bHRzW0JVSUxEX05VTUJFUlNfS0VZXVtpbmRleF07CisgICAgYWRkUm93KCcnLCAn
Jyk7CisgICAgdmFyIG1hc3RlciA9IGdldEJ1aWxkZXJNYXN0ZXIoYnVpbGRlcik7CisgICAgdmFy
IGJ1aWxkVXJsID0gbWFzdGVyLmdldExvZ1BhdGgoYnVpbGRlciwgcmVzdWx0c1tCVUlMRF9OVU1C
RVJTX0tFWV1baW5kZXhdKTsKKyAgICBpZiAobWFzdGVyID09IFdFQktJVF9CVUlMREVSX01BU1RF
UikgeworICAgICAgdmFyIHJlc3VsdHNVcmwgPQorICAgICAgICAgICdodHRwOi8vYnVpbGQud2Vi
a2l0Lm9yZy9yZXN1bHRzLycgKyBidWlsZGVyICsgJy9yJyArCisgICAgICAgICAgICAgIHJlc3Vs
dHNbV0VCS0lUX1JFVklTSU9OU19LRVldW2luZGV4XSArCisgICAgICAgICAgICAgICcgKCcgKyBy
ZXN1bHRzW0JVSUxEX05VTUJFUlNfS0VZXVtpbmRleF0gKyAnKSc7CisgICAgfSBlbHNlIHsKKyAg
ICAgIHZhciByZXN1bHRzVXJsID0KKyAgICAgICAgICAnaHR0cDovL2J1aWxkLmNocm9taXVtLm9y
Zy9mL2Nocm9taXVtL2xheW91dF90ZXN0X3Jlc3VsdHMvJyArCisgICAgICAgICAgYnVpbGRlcnNb
YnVpbGRlcl0gKyAnLycgKyByZXN1bHRzW0NIUk9NRV9SRVZJU0lPTlNfS0VZXVtpbmRleF07Cisg
ICAgfQorCisgICAgYWRkUm93KAorICAgICAgICAnQnVpbGQ6JywKKyAgICAgICAgJzxhIGhyZWY9
IicgKyBidWlsZFVybCArICciIHRhcmdldD0iX2JsYW5rIj4nICsgYnVpbGROdW1iZXIgKyAnPC9h
PicgKworICAgICAgICAnICg8YSBocmVmPSInICsgcmVzdWx0c1VybCArICciIHRhcmdldD0iX2Js
YW5rIj5yZXN1bHRzPC9hPiknKTsKKworICAgIC8vIFJldmlzaW9uIGxpbmsocykKKyAgICBpZiAo
IXNob3VsZFNob3dXZWJLaXRSZXZpc2lvbnNPbmx5KSB7CisgICAgICBhZGRSb3coJ0Nocm9taXVt
IGNoYW5nZTonLCBnZXRDaHJvbWl1bVJldmlzaW9uTGluayhyZXN1bHRzLCBpbmRleCkpOworICAg
IH0KKyAgICBhZGRSb3coJ1dlYktpdCBjaGFuZ2U6JywgZ2V0V2ViS2l0UmV2aXNpb25MaW5rKHJl
c3VsdHMsIGluZGV4KSk7CisKKyAgICAvLyBUZXN0IHN0YXR1cy9jb3VudHMKKyAgICBhZGRSb3co
JycsICcnKTsKKworICAgIGZ1bmN0aW9uIGFkZE51bWJlclJvdyhsYWJlbCwgY3VycmVudFZhbHVl
LCBwcmV2aW91c1ZhbHVlKSB7CisgICAgICB2YXIgZGVsdGEgPSBjdXJyZW50VmFsdWUgLSBwcmV2
aW91c1ZhbHVlOworICAgICAgdmFyIGRlbHRhVGV4dCA9ICcnCisgICAgICBpZiAoZGVsdGEgPCAw
KSB7CisgICAgICAgIGRlbHRhVGV4dCA9ICcgPHNwYW4gY2xhc3M9ImRlbHRhIG5lZ2F0aXZlIj4n
ICsgZGVsdGEgKyAnPC9zcGFuPic7CisgICAgICB9IGVsc2UgaWYgKGRlbHRhID4gMCkgeworICAg
ICAgICBkZWx0YVRleHQgPSAnIDxzcGFuIGNsYXNzPSJkZWx0YSBwb3NpdGl2ZSI+KycgKyBkZWx0
YSArICc8L3NwYW4+JzsKKyAgICAgIH0KKworICAgICAgYWRkUm93KGxhYmVsLCBjdXJyZW50VmFs
dWUgKyBkZWx0YVRleHQpOworICAgIH0KKworICAgIHZhciBleHBlY3RhdGlvbnNNYXAgPSBnZXRF
eHBlY3RhdGlvbnNNYXAoKTsKKyAgICB2YXIgZmxha3lEZWx0YXNCeUJ1aWxkID0gY3VycmVudEJ1
aWxkZXJUZXN0UmVzdWx0cy5mbGFreURlbHRhc0J5QnVpbGQ7CisgICAgZm9yICh2YXIgZXhwZWN0
YXRpb25LZXkgaW4gZXhwZWN0YXRpb25zTWFwKSB7CisgICAgICBpZiAoZXhwZWN0YXRpb25LZXkg
aW4gcmVzdWx0c1tGSVhBQkxFX0NPVU5UU19LRVldW2luZGV4XSkgeworICAgICAgICB2YXIgY3Vy
cmVudENvdW50ID0KKyAgICAgICAgICAgIHJlc3VsdHNbRklYQUJMRV9DT1VOVFNfS0VZXVtpbmRl
eF1bZXhwZWN0YXRpb25LZXldOworICAgICAgICB2YXIgcHJldmlvdXNDb3VudCA9CisgICAgICAg
ICAgICByZXN1bHRzW0ZJWEFCTEVfQ09VTlRTX0tFWV1baW5kZXggKyAxXVtleHBlY3RhdGlvbktl
eV07CisgICAgICAgIGlmIChjdXJyZW50U3RhdGUuaWdub3JlRmxha3lUZXN0cykgeworICAgICAg
ICAgIGN1cnJlbnRDb3VudCAtPSBmbGFreURlbHRhc0J5QnVpbGRbaW5kZXhdW2V4cGVjdGF0aW9u
S2V5XSB8fCAwOworICAgICAgICAgIHByZXZpb3VzQ291bnQgLT0gZmxha3lEZWx0YXNCeUJ1aWxk
W2luZGV4ICsgMV1bZXhwZWN0YXRpb25LZXldIHx8IDA7CisgICAgICAgIH0KKyAgICAgICAgYWRk
TnVtYmVyUm93KAorICAgICAgICAgICAgZXhwZWN0YXRpb25zTWFwW2V4cGVjdGF0aW9uS2V5XSwg
Y3VycmVudENvdW50LCBwcmV2aW91c0NvdW50KTsKKyAgICAgIH0KKyAgICB9CisKKyAgICB2YXIg
Y3VycmVudFRvdGFsID0gcmVzdWx0c1tGSVhBQkxFX0NPVU5UX0tFWV1baW5kZXhdOworICAgIHZh
ciBwcmV2aW91c1RvdGFsID0gcmVzdWx0c1tGSVhBQkxFX0NPVU5UX0tFWV1baW5kZXggKyAxXTsK
KyAgICBpZiAoY3VycmVudFN0YXRlLmlnbm9yZUZsYWt5VGVzdHMpIHsKKyAgICAgIGN1cnJlbnRU
b3RhbCAtPSBmbGFreURlbHRhc0J5QnVpbGRbaW5kZXhdLnRvdGFsIHx8IDA7CisgICAgICBwcmV2
aW91c1RvdGFsIC09IGZsYWt5RGVsdGFzQnlCdWlsZFtpbmRleCArIDFdLnRvdGFsIHx8IDA7Cisg
ICAgfQorICAgIGFkZE51bWJlclJvdygKKyAgICAgICAgJ1RvdGFsIGZhaWxpbmcgdGVzdHM6Jywg
Y3VycmVudFRvdGFsLCBwcmV2aW91c1RvdGFsKTsKKworICAgIGh0bWwgKz0gJzwvdGFibGU+JzsK
KworICAgIGh0bWwgKz0gJzxkaXYgaWQ9ImNoYW5nZXMtYnV0dG9uIiBjbGFzcz0iYnV0dG9ucyI+
JzsKKyAgICBodG1sICs9ICc8YnV0dG9uPlNob3cgY2hhbmdlZCB0ZXN0IHJlc3VsdHM8L2J1dHRv
bj4nOworICAgIGh0bWwgKz0gJzwvZGl2Pic7CisKKyAgICBodG1sICs9ICc8ZGl2IGlkPSJidWls
ZC1idXR0b25zIiBjbGFzcz0iYnV0dG9ucyI+JzsKKyAgICBodG1sICs9ICc8YnV0dG9uPlByZXZp
b3VzIGJ1aWxkPC9idXR0b24+IDxidXR0b24+TmV4dCBidWlsZDwvYnV0dG9uPic7CisgICAgaHRt
bCArPSAnPC9kaXY+JzsKKworICAgIHZhciBpbnNwZWN0b3JOb2RlID0gJCgnaW5zcGVjdG9yLWNv
bnRhaW5lcicpOworICAgIGluc3BlY3Rvck5vZGUuaW5uZXJIVE1MID0gaHRtbDsKKworICAgIGlu
c3BlY3Rvck5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpWzBdLm9uY2xpY2sgPSBm
dW5jdGlvbigpIHsKKyAgICAgIHNob3dSZXN1bHRzRGVsdGEoaW5kZXgsIGJ1aWxkTnVtYmVyLCBi
dWlsZFVybCwgcmVzdWx0c1VybCk7CisgICAgfTsKKyAgICBpbnNwZWN0b3JOb2RlLmdldEVsZW1l
bnRzQnlUYWdOYW1lKCdidXR0b24nKVsxXS5vbmNsaWNrID0gZnVuY3Rpb24oKSB7CisgICAgICBz
ZWxlY3RCdWlsZChyZXN1bHRzLCBidWlsZGVyLCBkeWdyYXBoLCBpbmRleCArIDEpOworICAgIH07
CisgICAgaW5zcGVjdG9yTm9kZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYnV0dG9uJylbMl0ub25j
bGljayA9IGZ1bmN0aW9uKCkgeworICAgICAgc2VsZWN0QnVpbGQocmVzdWx0cywgYnVpbGRlciwg
ZHlncmFwaCwgaW5kZXggLSAxKTsKKyAgICB9OworICB9CisKKyAgZnVuY3Rpb24gc2hvd1Jlc3Vs
dHNEZWx0YShpbmRleCwgYnVpbGROdW1iZXIsIGJ1aWxkVXJsLCByZXN1bHRzVXJsKSB7CisgICAg
dmFyIGZsYWt5VGVzdHMgPSBjdXJyZW50QnVpbGRlclRlc3RSZXN1bHRzLmZsYWt5VGVzdHM7Cisg
ICAgdmFyIGN1cnJlbnRSZXN1bHRzID0gY3VycmVudEJ1aWxkZXJUZXN0UmVzdWx0cy5yZXN1bHRz
QnlCdWlsZFtpbmRleF07CisgICAgdmFyIHRlc3ROYW1lcyA9IGN1cnJlbnRCdWlsZGVyVGVzdFJl
c3VsdHMudGVzdE5hbWVzOworICAgIHZhciBwcmV2aW91c1Jlc3VsdHMgPSBjdXJyZW50QnVpbGRl
clRlc3RSZXN1bHRzLnJlc3VsdHNCeUJ1aWxkW2luZGV4ICsgMV07CisgICAgdmFyIGV4cGVjdGF0
aW9uc01hcCA9IGdldEV4cGVjdGF0aW9uc01hcCgpOworCisgICAgdmFyIGRlbHRhcyA9IHt9Owor
ICAgIGZ1bmN0aW9uIGFkZERlbHRhKGNhdGVnb3J5LCB0ZXN0SW5kZXgpIHsKKyAgICAgIGlmIChj
dXJyZW50U3RhdGUuaWdub3JlRmxha3lUZXN0cyAmJiBmbGFreVRlc3RzW3Rlc3RJbmRleF0pIHsK
KyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgaWYgKCEoY2F0ZWdvcnkgaW4gZGVsdGFz
KSkgeworICAgICAgICBkZWx0YXNbY2F0ZWdvcnldID0gW107CisgICAgICB9CisgICAgICB2YXIg
dGVzdE5hbWUgPSB0ZXN0TmFtZXNbdGVzdEluZGV4XTsKKyAgICAgIHZhciBmbGFraW5lc3NEYXNo
Ym9hcmRVcmwgPQorICAgICAgICAgICdmbGFraW5lc3NfZGFzaGJvYXJkLmh0bWwnICsKKyAgICAg
ICAgICAobG9jYXRpb24uaGFzaCA/IGxvY2F0aW9uLmhhc2ggKyAnJicgOiAnIycpICsKKyAgICAg
ICAgICAndGVzdHM9JyArIHRlc3ROYW1lOworICAgICAgdmFyIGh0bWwgPSAnPGEgaHJlZj0iJyAr
CisgICAgICAgICAgZmxha2luZXNzRGFzaGJvYXJkVXJsICsgJyI+JyArIHRlc3ROYW1lICsgJzwv
YT4nOworICAgICAgaWYgKGZsYWt5VGVzdHNbdGVzdEluZGV4XSkgeworICAgICAgICBodG1sICs9
ICcgPHNwYW4gc3R5bGU9ImNvbG9yOiAjZjY2Ij5wb3NzaWJseSBmbGFreTwvc3Bhbj4nOworICAg
ICAgfQorCisgICAgICBkZWx0YXNbY2F0ZWdvcnldLnB1c2goaHRtbCk7CisgICAgfQorCisgICAg
Zm9yICh2YXIgdGVzdEluZGV4ID0gMDsgdGVzdEluZGV4IDwgY3VycmVudFJlc3VsdHMubGVuZ3Ro
OyB0ZXN0SW5kZXgrKykgeworICAgICAgaWYgKGN1cnJlbnRSZXN1bHRzW3Rlc3RJbmRleF0gPT09
IHVuZGVmaW5lZCkgeworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKworICAgICAgaWYgKHBy
ZXZpb3VzUmVzdWx0c1t0ZXN0SW5kZXhdICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgaWYgKGN1
cnJlbnRSZXN1bHRzW3Rlc3RJbmRleF0gPT0gcHJldmlvdXNSZXN1bHRzW3Rlc3RJbmRleF0pIHsK
KyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBhZGREZWx0YSgKKyAgICAg
ICAgICAgICdXYXMgPGI+JyArIGV4cGVjdGF0aW9uc01hcFtwcmV2aW91c1Jlc3VsdHNbdGVzdElu
ZGV4XV0gKyAnPC9iPiAnICsKKyAgICAgICAgICAgICdub3cgPGI+JyArIGV4cGVjdGF0aW9uc01h
cFtjdXJyZW50UmVzdWx0c1t0ZXN0SW5kZXhdXSArICc8L2I+JywKKyAgICAgICAgICAgIHRlc3RJ
bmRleCk7CisgICAgICB9IGVsc2UgeworICAgICAgICBhZGREZWx0YSgKKyAgICAgICAgICAgICdO
ZXdseSA8Yj4nICsgZXhwZWN0YXRpb25zTWFwW2N1cnJlbnRSZXN1bHRzW3Rlc3RJbmRleF1dICsg
JzwvYj4nLAorICAgICAgICAgICAgdGVzdEluZGV4KTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBm
b3IgKHZhciB0ZXN0SW5kZXggPSAwOyB0ZXN0SW5kZXggPCBwcmV2aW91c1Jlc3VsdHMubGVuZ3Ro
OyB0ZXN0SW5kZXgrKykgeworICAgICAgaWYgKHByZXZpb3VzUmVzdWx0c1t0ZXN0SW5kZXhdID09
PSB1bmRlZmluZWQpIGNvbnRpbnVlOworICAgICAgaWYgKGN1cnJlbnRSZXN1bHRzW3Rlc3RJbmRl
eF0gPT09IHVuZGVmaW5lZCkgeworICAgICAgICBhZGREZWx0YSgKKyAgICAgICAgICAgICdXYXMg
PGI+JyArIGV4cGVjdGF0aW9uc01hcFtwcmV2aW91c1Jlc3VsdHNbdGVzdEluZGV4XV0gKyAnPC9i
PicsCisgICAgICAgICAgICB0ZXN0SW5kZXgpOworICAgICAgfQorICAgIH0KKworICAgIHZhciBo
dG1sID0gJyc7CisKKyAgICBodG1sICs9ICc8aGVhZD48YmFzZSB0YXJnZXQ9Il9ibGFuayI+PC9o
ZWFkPic7CisgICAgaHRtbCArPSAnPGgxPkNoYW5nZXMgaW4gdGVzdCByZXN1bHRzPC9oMT4nOwor
CisgICAgaHRtbCArPSAnPHA+Rm9yIGJ1aWxkIDxhIGhyZWY9IicgKyBidWlsZFVybCArICciIHRh
cmdldD0iX2JsYW5rIj4nICsKKyAgICAgICAgYnVpbGROdW1iZXIgKyAnPC9hPiAnICsgJyg8YSBo
cmVmPSInICsgcmVzdWx0c1VybCArCisgICAgICAgICciIHRhcmdldD0iX2JsYW5rIj5yZXN1bHRz
PC9hPik8L3A+JzsKKworICAgIGZvciAodmFyIGRlbHRhQ2F0ZWdvcnkgaW4gZGVsdGFzKSB7Cisg
ICAgICBodG1sICs9ICc8cD48ZGl2PicgKyBkZWx0YUNhdGVnb3J5ICsgJyAoJyArIGRlbHRhc1tk
ZWx0YUNhdGVnb3J5XS5sZW5ndGggKyAnKTwvZGl2Pjx1bD4nOworICAgICAgZGVsdGFzW2RlbHRh
Q2F0ZWdvcnldLmZvckVhY2goZnVuY3Rpb24oZGVsdGFIdG1sKSB7CisgICAgICAgIGh0bWwgKz0g
JzxsaT4nICsgZGVsdGFIdG1sICsgJzwvbGk+JzsKKyAgICAgIH0pOworICAgICAgaHRtbCArPSAn
PC91bD48L3A+JzsKKyAgICB9CisKKyAgICB2YXIgZGVsdGFXaW5kb3cgPSB3aW5kb3cub3Blbigp
OworICAgIGRlbHRhV2luZG93LmRvY3VtZW50LndyaXRlKGh0bWwpOworICB9CisKKyAgZG9jdW1l
bnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGZ1bmN0aW9uKGUpIHsKKyAgICBpZiAoY3Vy
cmVudEJ1aWxkSW5kZXggPT0gLTEpIHJldHVybjsKKworICAgIHN3aXRjaCAoZS5rZXlJZGVudGlm
aWVyKSB7CisgICAgICBjYXNlICdMZWZ0JzoKKyAgICAgICAgc2VsZWN0QnVpbGQoCisgICAgICAg
ICAgICByZXN1bHRzQnlCdWlsZGVyW2N1cnJlbnRTdGF0ZS5idWlsZGVyXSwKKyAgICAgICAgICAg
IGN1cnJlbnRTdGF0ZS5idWlsZGVyLAorICAgICAgICAgICAgZHlncmFwaCwKKyAgICAgICAgICAg
IGN1cnJlbnRCdWlsZEluZGV4ICsgMSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAnUmln
aHQnOgorICAgICAgICBzZWxlY3RCdWlsZCgKKyAgICAgICAgICAgIHJlc3VsdHNCeUJ1aWxkZXJb
Y3VycmVudFN0YXRlLmJ1aWxkZXJdLAorICAgICAgICAgICAgY3VycmVudFN0YXRlLmJ1aWxkZXIs
CisgICAgICAgICAgICBkeWdyYXBoLAorICAgICAgICAgICAgY3VycmVudEJ1aWxkSW5kZXggLSAx
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICB9KTsKKyAgPC9zY3JpcHQ+CisgIDwvaGVhZD4K
KyAgPGJvZHk+CisgICAgPGRpdiBpZD0idGVzdC10eXBlLXN3aXRjaGVyIj48L2Rpdj4KKworICAg
IDxkaXYgaWQ9Imluc3BlY3Rvci1jb250YWluZXIiIHN0eWxlPSJ2aXNpYmlsaXR5OiBoaWRkZW4i
PgorICAgICAgPHA+Q2xpY2sgb24gYSBwb2ludCBvbiB0aGUgZ3JhcGggdG8gc2VlIGRldGFpbHMg
YWJvdXQgdGhhdCBidWlsZC48L3A+CisgICAgICA8cD5DbGljayBhbmQgZHJhZyBvbiB0aGUgZ3Jh
cGggdG8gem9vbSBpbiB0byB0aGF0IHBlcmlvZC48L3A+CisgICAgPC9kaXY+CisgICAgPGRpdiBp
ZD0idGltZWxpbmUtY29udGFpbmVyIj5Mb2FkaW5nLi4uPC9kaXY+CisgIDwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMv
dHJlZW1hcC5odG1sIGIvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy90
cmVlbWFwLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmY2ZWRkNzk2Mzk1ZTA0Mzc2MzA0NjEzNzNkMzBkOTgx
MzFiZjBmMwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGlj
LWRhc2hib2FyZHMvdHJlZW1hcC5odG1sCkBAIC0wLDAgKzEsMzA5IEBACis8IS0tIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
K21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKK21ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKK25vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKK2NvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKK2luIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKK2Rpc3RyaWJ1dGlvbi4KKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKK2NvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCit0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCitBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCitTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCitMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKK0RBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CitPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorLS0+Cis8IURPQ1RZUEUgaHRtbD4KKzx0aXRsZT5UZXN0IFJ1bnRpbWVz
PC90aXRsZT4KKzxsaW5rIHJlbD0nc3R5bGVzaGVldCcgaHJlZj0nd2VidHJlZW1hcC5jc3MnPjwv
bGluaz4KKzxzdHlsZT4KK2JvZHkgeworICBkaXNwbGF5OiAtbW96LWJveDsKKyAgZGlzcGxheTog
LXdlYmtpdC1ib3g7CisgIGRpc3BsYXk6IGJveDsKKyAgLW1vei1ib3gtb3JpZW50OiB2ZXJ0aWNh
bDsKKyAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDsKKyAgYm94LW9yaWVudDogdmVydGlj
YWw7CisKKyAgcG9zaXRpb246IGFic29sdXRlOworICB0b3A6IDA7CisgIHJpZ2h0OiAwOworICBi
b3R0b206IDA7CisgIGxlZnQ6IDA7Cit9CisKKyNtYXAgeworICBkaXNwbGF5OiAtbW96LWJveDsK
KyAgZGlzcGxheTogLXdlYmtpdC1ib3g7CisgIGRpc3BsYXk6IGJveDsKKworICAtbW96LWJveC1m
bGV4OiAxOworICAtd2Via2l0LWJveC1mbGV4OiAxOworICBib3gtZmxleDogMTsKKworICBwb3Np
dGlvbjogcmVsYXRpdmU7CisgIGN1cnNvcjogcG9pbnRlcjsKKyAgLXdlYmtpdC11c2VyLXNlbGVj
dDogbm9uZTsKKyAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKK30KKworLmV4dHJhLWRvbSB7Cisg
IGRpc3BsYXk6IG5vbmU7CisgIGJvcmRlcjogbm9uZTsKKyAgYm9yZGVyLXRvcDogMXB4IGRhc2hl
ZDsKKyAgcGFkZGluZzogNHB4OworICBtYXJnaW46IDA7CisgIG92ZXJmbG93OiBhdXRvOworICBj
dXJzb3I6IGF1dG87CisgIC13ZWJraXQtdXNlci1zZWxlY3Q6IHRleHQ7CisgIC1tb3otdXNlci1z
ZWxlY3Q6IHRleHQ7Cit9CisKKyNmb2N1c2VkLWxlYWYgeworICBkaXNwbGF5OiAtd2Via2l0LWJv
eDsKKyAgZGlzcGxheTogLW1vei1ib3g7CisgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7
CisgIC1tb3otYm94LW9yaWVudDogdmVydGljYWw7Cit9CisKKyNmb2N1c2VkLWxlYWYgPiAuZXh0
cmEtZG9tIHsKKyAgZGlzcGxheTogLXdlYmtpdC1ib3g7CisgIGRpc3BsYXk6IC1tb3otYm94Owor
ICAtd2Via2l0LWJveC1mbGV4OiAxOworICAtbW96LWJveC1mbGV4OiAxOworfQorCisjZm9jdXNl
ZC1sZWFmLndlYnRyZWVtYXAtbm9kZTpob3ZlciB7CisgIGJhY2tncm91bmQ6IHdoaXRlOworfQor
CisjZm9jdXNlZC1sZWFmIC53ZWJ0cmVlbWFwLWNhcHRpb246aG92ZXIgeworICBiYWNrZ3JvdW5k
OiAjZWVlOworfQorCisuZXJyb3IgeworICBjb2xvcjogcmVkOworICBmb250LXN0eWxlOiBpdGFs
aWM7Cit9Cis8L3N0eWxlPgorPHNjcmlwdCBzcmM9ImJ1aWxkZXJzLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSJkYXNoYm9hcmRfYmFzZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0nd2Vi
dHJlZW1hcC5qcyc+PC9zY3JpcHQ+CisKKzxkaXYgaWQ9J2hlYWRlci1jb250YWluZXInPjwvZGl2
PgorPHA+Q2xpY2sgb24gYSBib3ggdG8gem9vbSBpbi4gIENsaWNrIG9uIHRoZSBvdXRlcm1vc3Qg
Ym94IHRvIHpvb20gb3V0LjwvcD4KKzxkaXYgaWQ9J21hcCc+PC9kaXY+CisKKzxzY3JpcHQ+Cisk
KCdoZWFkZXItY29udGFpbmVyJykuaW5uZXJIVE1MID0gZ2V0SFRNTEZvclRlc3RUeXBlU3dpdGNo
ZXIoKTsKKwordmFyIFRFU1RfVVJMX0JBU0VfUEFUSCA9ICJodHRwOi8vc3ZuLndlYmtpdC5vcmcv
cmVwb3NpdG9yeS93ZWJraXQvdHJ1bmsvIjsKKworLy8gVGhpcyBsb29rcyBsaWtlOgorLy8geyAi
ZGF0YSI6IHsiJGFyZWEiOiAoc3VtIG9mIGFsbCB0aW1pbmdzKX0sCisvLyAgICJuYW1lIjogKG5h
bWUgb2YgdGhpcyBub2RlKSwKKy8vICAgImNoaWxkcmVuIjogWyAoY2hpbGQgbm9kZXMsIGluIHRo
ZSBzYW1lIGZvcm1hdCBhcyB0aGlzKSBdIH0KKy8vIGNoaWxkQ291bnQgaXMgYWRkZWQganVzdCB0
byBiZSBpbmNsdWRlcyBpbiB0aGUgbm9kZSdzIG5hbWUKK2Z1bmN0aW9uIGNvbnZlcnRUb1dlYlRy
ZWVtYXBGb3JtYXQodHJlZW5hbWUsIHRyZWUpIHsKKyAgdmFyIHRvdGFsID0gMDsKKyAgdmFyIGNo
aWxkQ291bnQgPSAwOworICB2YXIgY2hpbGRyZW4gPSBbXTsKKyAgZm9yICh2YXIgbmFtZSBpbiB0
cmVlKSB7CisgICAgdmFyIHRyZWVOb2RlID0gdHJlZVtuYW1lXTsKKyAgICBpZiAodHlwZW9mIHRy
ZWVOb2RlID09ICJudW1iZXIiKSB7CisgICAgICB2YXIgdGltZSA9IHRyZWVOb2RlOworICAgICAg
dmFyIG5vZGUgPSB7CisgICAgICAgICJkYXRhIjogeyIkYXJlYSI6IHRpbWV9LAorICAgICAgICAi
bmFtZSI6IG5hbWUgKyAiICgiICsgdGltZSArICJtcykiCisgICAgICB9OworICAgICAgY2hpbGRy
ZW4ucHVzaChub2RlKTsKKyAgICAgIHRvdGFsICs9IHRpbWU7CisgICAgICBjaGlsZENvdW50Kys7
CisgICAgfSBlbHNlIHsKKyAgICAgIHZhciBzdWJ0cmVlID0gY29udmVydFRvV2ViVHJlZW1hcEZv
cm1hdChuYW1lLCB0cmVlTm9kZSk7CisgICAgICBjaGlsZHJlbi5wdXNoKHN1YnRyZWUpOworICAg
ICAgdG90YWwgKz0gc3VidHJlZVsiZGF0YSJdWyIkYXJlYSJdOworICAgICAgY2hpbGRDb3VudCAr
PSBzdWJ0cmVlWyJjaGlsZENvdW50Il07CisgICAgfQorICB9CisKKyAgY2hpbGRyZW4uc29ydChm
dW5jdGlvbihhLCBiKSB7CisgICAgYVRpbWUgPSBhLmRhdGFbIiRhcmVhIl0KKyAgICBiVGltZSA9
IGIuZGF0YVsiJGFyZWEiXQorICAgIHJldHVybiBiVGltZSAtIGFUaW1lOworICB9KTsKKworICBy
ZXR1cm4geworICAgICJkYXRhIjogeyIkYXJlYSI6IHRvdGFsfSwKKyAgICAibmFtZSI6IHRyZWVu
YW1lICsgIiAoIiArIHRvdGFsICsgIm1zIC0gIiArIGNoaWxkQ291bnQgKyAiIHRlc3RzKSIsCisg
ICAgImNoaWxkcmVuIjogY2hpbGRyZW4sCisgICAgImNoaWxkQ291bnQiOiBjaGlsZENvdW50Cisg
IH07Cit9CisKK3ZhciByZXN1bHRzQnlCdWlsZGVyID0ge307CisKK2Z1bmN0aW9uIEFERF9SRVNV
TFRTKGRhdGEpIHsKKyAgLy8gVE9ETyhvamFuKTogV2Ugc2hvdWxkIHByb2JhYmx5IGluY2x1ZGUg
dGhlIGJ1aWxkZXJOYW1lIGluIHRoZSBKU09OCisgIC8vIHJhdGhlciB0aGFuIHJlbHlpbmcgb24g
b25seSBsb2FkaW5nIG9uZSBKU09OIGZpbGUgcGVyIHBhZ2UuCisgIGlmICghcmVzdWx0c0J5QnVp
bGRlcltjdXJyZW50U3RhdGUuYnVpbGRlcl0pCisgICAgcmVzdWx0c0J5QnVpbGRlcltjdXJyZW50
U3RhdGUuYnVpbGRlcl0gPSBkYXRhOworCisgIGhhbmRsZUxvY2F0aW9uQ2hhbmdlKCk7Cit9CisK
K3ZhciBpc0dlbmVyYXRpbmdQYWdlID0gZmFsc2U7CisKK2Z1bmN0aW9uIGdlbmVyYXRlUGFnZSgp
IHsKKyAgaWYgKCFyZXN1bHRzQnlCdWlsZGVyW2N1cnJlbnRTdGF0ZS5idWlsZGVyXSkgeworICAg
IGhhbmRsZVJlc291cmNlTG9hZEVycm9yKGN1cnJlbnRTdGF0ZS5idWlsZGVyKTsKKyAgICByZXR1
cm47CisgIH0KKworICBpc0dlbmVyYXRpbmdQYWdlID0gdHJ1ZTsKKworICB2YXIgcmF3VHJlZSA9
IHJlc3VsdHNCeUJ1aWxkZXJbY3VycmVudFN0YXRlLmJ1aWxkZXJdOworICB2YXIgd2VidHJlZSA9
IGNvbnZlcnRUb1dlYlRyZWVtYXBGb3JtYXQoJ0xheW91dFRlc3RzJywgcmF3VHJlZSk7CisgIGFw
cGVuZFRyZWVtYXAoJCgnbWFwJyksIHdlYnRyZWUpOworCisgIGlmIChjdXJyZW50U3RhdGUudHJl
ZW1hcGZvY3VzKQorICAgIGZvY3VzUGF0aCh3ZWJ0cmVlLCBjdXJyZW50U3RhdGUudHJlZW1hcGZv
Y3VzKQorCisgIGlzR2VuZXJhdGluZ1BhZ2UgPSBmYWxzZTsKK30KKworZnVuY3Rpb24gZm9jdXNQ
YXRoKHRyZWUsIHBhdGgpIHsKKyAgdmFyIHBhcnRzID0gZGVjb2RlVVJJQ29tcG9uZW50KHBhdGgp
LnNwbGl0KCcvJyk7CisgIGlmIChleHRyYWN0TmFtZSh0cmVlKSAhPSBwYXJ0c1swXSkgeworICAg
IGNvbnNvbGUuZXJyb3IoJ0NvdWxkIG5vdCBmb2N1cyB0cmVlIHJvb3RlZCBhdCAnICsgcGFydHNb
MF0pOworICAgIHJldHVybjsKKyAgfQorCisgIGZvciAodmFyIGkgPSAxOyBpIDwgcGFydHMubGVu
Z3RoOyBpKyspIHsKKyAgICB2YXIgY2hpbGRyZW4gPSB0cmVlLmNoaWxkcmVuOworICAgIGZvciAo
dmFyIGogPSAwOyBqIDwgY2hpbGRyZW4ubGVuZ3RoOyBqKyspIHsKKyAgICAgIHZhciBjaGlsZCA9
IGNoaWxkcmVuW2pdOworICAgICAgaWYgKGV4dHJhY3ROYW1lKGNoaWxkKSA9PSBwYXJ0c1tpXSkg
eworICAgICAgICB0cmVlID0gY2hpbGQ7CisgICAgICAgIGZvY3VzKHRyZWUpOworICAgICAgICBi
cmVhazsKKyAgICAgIH0KKyAgICB9CisgICAgaWYgKGogPT0gY2hpbGRyZW4ubGVuZ3RoKSB7Cisg
ICAgICBjb25zb2xlLmVycm9yKCdDb3VsZCBub3QgZmluZCB0cmVlIGF0ICcgKyBwYXJ0c1tpXSk7
CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKworfQorCitmdW5jdGlvbiBoYW5kbGVWYWxpZEhh
c2hQYXJhbWV0ZXIoa2V5LCB2YWx1ZSkgeworICBzd2l0Y2goa2V5KSB7CisgICAgY2FzZSAnYnVp
bGRlcic6CisgICAgICB2YWxpZGF0ZVBhcmFtZXRlcihjdXJyZW50U3RhdGUsIGtleSwgdmFsdWUs
CisgICAgICAgICAgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICByZXR1cm4gdmFsdWUgaW4gYnVp
bGRlcnM7CisgICAgICAgICAgfSk7CisKKyAgICAgIHJldHVybiB0cnVlOworCisgICAgY2FzZSAn
dHJlZW1hcGZvY3VzJzoKKyAgICAgIHZhbGlkYXRlUGFyYW1ldGVyKGN1cnJlbnRTdGF0ZSwga2V5
LCB2YWx1ZSwKKyAgICAgICAgICBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIC8vIFRPRE8ob2ph
bik6IFRoZXJlJ3MgcHJvYmFibHkgYSBzaW1wbGVyIHJlZ2V4cCBoZXJlLiBKdXN0IHRyeWluZyB0
byBtYXRjaCBhc2NpaSArIGZvcndhcmQtc2xhc2guCisgICAgICAgICAgICAvLyBlLmcuIExheW91
dFRlc3RzL2Zvby9iYXIuaHRtbAorICAgICAgICAgICAgcmV0dXJuICh2YWx1ZS5tYXRjaCgvXihc
dytcL1x3KikqLyQpKTsKKyAgICAgICAgICB9KTsKKworICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICBkZWZhdWx0OgorICAgICAgcmV0dXJuIGZhbHNlOworICB9Cit9CisKK2RlZmF1bHRTdGF0ZVZh
bHVlcyA9IHsKKyAgYnVpbGRlcjogZGVmYXVsdEJ1aWxkZXJOYW1lCit9OworCitmdW5jdGlvbiBo
YW5kbGVRdWVyeVBhcmFtZXRlckNoYW5nZShwYXJhbXMpIHsKKyAgaWYgKCFyZXN1bHRzQnlCdWls
ZGVyW2N1cnJlbnRTdGF0ZS5idWlsZGVyXSkKKyAgICBhcHBlbmRKU09OU2NyaXB0RWxlbWVudEZv
cihjdXJyZW50U3RhdGUuYnVpbGRlcik7CisKKyAgZm9yICh2YXIgcGFyYW0gaW4gcGFyYW1zKSB7
CisgICAgaWYgKHBhcmFtICE9ICd0cmVlbWFwZm9jdXMnKSB7CisgICAgICAkKCdtYXAnKS5pbm5l
ckhUTUwgPSAnTG9hZGluZy4uLic7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgIH0KKyAg
cmV0dXJuIGZhbHNlOworfQorCisvLyBPdmVycmlkZXMgaGFuZGxlUmVzb3VyY2VMb2FkRXJyb3Ig
aW4gZGFzaGJvYXJkX2Jhc2UuanMuCitmdW5jdGlvbiBoYW5kbGVSZXNvdXJjZUxvYWRFcnJvcihi
dWlsZGVyTmFtZSwgZSkgeworICAkKCdtYXAnKS5pbm5lckhUTUwgPSAnPHNwYW4gY2xhc3M9ZXJy
b3I+Q291bGQgbm90IGxvYWQgZGF0YSBmb3IgJyArIGJ1aWxkZXJOYW1lICsgJy4gJyArCisgICAg
ICAnRWl0aGVyIHRoZXJlIHdhcyBhIHNlcnZlci1zaWRlIGVycm9yIG9yICcgKyBidWlsZGVyTmFt
ZSArICcgZG9lcyBub3QgcnVuICcgKworICAgICAgY3VycmVudFN0YXRlLnRlc3RUeXBlICsgJy48
L3NwYW4+JzsKK30KKworZnVuY3Rpb24gZXh0cmFjdE5hbWUobm9kZSkgeworICByZXR1cm4gbm9k
ZS5uYW1lLnNwbGl0KCcgJylbMF07Cit9CisKK2Z1bmN0aW9uIGZ1bGxOYW1lKG5vZGUpIHsKKyAg
dmFyIGJ1ZmZlciA9IFtleHRyYWN0TmFtZShub2RlKV07CisgIHdoaWxlIChub2RlLnBhcmVudCkg
eworICAgIG5vZGUgPSBub2RlLnBhcmVudDsKKyAgICBidWZmZXIudW5zaGlmdChleHRyYWN0TmFt
ZShub2RlKSk7CisgIH0KKyAgcmV0dXJuIGJ1ZmZlci5qb2luKCcvJyk7Cit9CisKK2Z1bmN0aW9u
IGhhbmRsZUZvY3VzKHRyZWUpIHsKKyAgdmFyIGN1cnJlbnRseUZvY3VzZWROb2RlID0gJCgnZm9j
dXNlZC1sZWFmJyk7CisgIGlmIChjdXJyZW50bHlGb2N1c2VkTm9kZSkKKyAgICBjdXJyZW50bHlG
b2N1c2VkTm9kZS5pZCA9ICcnOworCisgIGlmICghdHJlZS5jaGlsZHJlbikKKyAgICB0cmVlLmRv
bS5pZCA9ICdmb2N1c2VkLWxlYWYnOworCisgIHZhciBuYW1lID0gZnVsbE5hbWUodHJlZSk7CisK
KyAgaWYgKCF0cmVlLmNoaWxkcmVuICYmICF0cmVlLmV4dHJhRG9tICYmIGlzTGF5b3V0VGVzdFJl
c3VsdHMoKSkgeworICAgIHRyZWUuZXh0cmFEb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdw
cmUnKTsKKyAgICB0cmVlLmV4dHJhRG9tLmNsYXNzTmFtZSA9ICdleHRyYS1kb20nOworICAgIHRy
ZWUuZG9tLmFwcGVuZENoaWxkKHRyZWUuZXh0cmFEb20pOworCisgICAgcmVxdWVzdChURVNUX1VS
TF9CQVNFX1BBVEggKyBuYW1lLAorICAgICAgZnVuY3Rpb24oeGhyKSB7CisgICAgICAgIHRyZWUu
ZXh0cmFEb20ub25tb3VzZWRvd24gPSBmdW5jdGlvbihlKSB7CisgICAgICAgICAgZS5zdG9wUHJv
cGFnYXRpb24oKTsKKyAgICAgICAgfTsKKyAgICAgICAgdHJlZS5leHRyYURvbS50ZXh0Q29udGVu
dCA9IHhoci5yZXNwb25zZVRleHQ7CisgICAgICB9LAorICAgICAgZnVuY3Rpb24gKHhocikgewor
ICAgICAgICB0cmVlLmV4dHJhRG9tLnRleHRDb250ZW50ID0gIkNvdWxkIG5vdCBsb2FkIHRlc3Qu
IgorICAgIH0pOworICB9CisKKyAgLy8gV2UgZG9uJ3Qgd2FudCB0aGUgZm9jdXMgY2FsbHMgZHVy
aW5nIGdlbmVyYXRlUGFnZSB0byB0cnkgdG8gbW9kaWZ5IHRoZSBxdWVyeSBzdGF0ZS4KKyAgaWYg
KCFpc0dlbmVyYXRpbmdQYWdlKQorICAgIHNldFF1ZXJ5UGFyYW1ldGVyKCd0cmVlbWFwZm9jdXMn
LCBuYW1lKTsKK30KKworcGFyc2VQYXJhbWV0ZXJzKCk7CithcHBlbmRKU09OU2NyaXB0RWxlbWVu
dEZvcihjdXJyZW50U3RhdGUuYnVpbGRlcik7Cis8L3NjcmlwdD4KZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvd2VidHJlZW1hcC5jc3MgYi9Ub29s
cy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL3dlYnRyZWVtYXAuY3NzCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmEwNzg2NTAxNjNkZjJjMDIwMWQ0NjRiZjE2ZTQ0OTBhZGM5Yjk3YjEKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL3dlYnRy
ZWVtYXAuY3NzCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisud2VidHJlZW1hcC1ub2RlIHsKKyAgLyogUmVxdWly
ZWQgYXR0cmlidXRlcy4gKi8KKyAgcG9zaXRpb246IGFic29sdXRlOworICBvdmVyZmxvdzogaGlk
ZGVuOyAgIC8qIFRvIGhpZGUgb3ZlcmxvbmcgY2FwdGlvbnMuICovCisgIGJhY2tncm91bmQ6IHdo
aXRlOyAgLyogTm9kZXMgbXVzdCBiZSBvcGFxdWUgZm9yIHpJbmRleCBsYXllcmluZy4gKi8KKyAg
Ym9yZGVyOiBzb2xpZCAxcHggYmxhY2s7ICAvKiBDYWxjdWxhdGlvbnMgYXNzdW1lIDFweCBib3Jk
ZXIuICovCisKKyAgLyogT3B0aW9uYWw6IENTUyBhbmltYXRpb24uICovCisgIC13ZWJraXQtdHJh
bnNpdGlvbjogdG9wICAgIDAuM3MsCisgICAgICAgICAgICAgICAgICAgICAgbGVmdCAgIDAuM3Ms
CisgICAgICAgICAgICAgICAgICAgICAgd2lkdGggIDAuM3MsCisgICAgICAgICAgICAgICAgICAg
ICAgaGVpZ2h0IDAuM3M7Cit9CisKKy8qIE9wdGlvbmFsOiBoaWdobGlnaHQgbm9kZXMgb24gbW91
c2VvdmVyLiAqLworLndlYnRyZWVtYXAtbm9kZTpob3ZlciB7CisgIGJhY2tncm91bmQ6ICNlZWU7
Cit9CisKKy8qIE9wdGlvbmFsOiBEaWZmZXJlbnQgYm9yZGVycyBkZXBlbmRpbmcgb24gbGV2ZWwu
ICovCisud2VidHJlZW1hcC1sZXZlbDAgeworICBib3JkZXI6IHNvbGlkIDFweCAjNDQ0OworfQor
LndlYnRyZWVtYXAtbGV2ZWwxIHsKKyAgYm9yZGVyOiBzb2xpZCAxcHggIzY2NjsKK30KKy53ZWJ0
cmVlbWFwLWxldmVsMiB7CisgIGJvcmRlcjogc29saWQgMXB4ICM4ODg7Cit9Cisud2VidHJlZW1h
cC1sZXZlbDMgeworICBib3JkZXI6IHNvbGlkIDFweCAjYWFhOworfQorLndlYnRyZWVtYXAtbGV2
ZWw0IHsKKyAgYm9yZGVyOiBzb2xpZCAxcHggI2NjYzsKK30KKworLyogT3B0aW9uYWw6IHN0eWxp
bmcgb24gbm9kZSBjYXB0aW9ucy4gKi8KKy53ZWJ0cmVlbWFwLWNhcHRpb24geworICBmb250LWZh
bWlseTogc2Fucy1zZXJpZjsKKyAgZm9udC1zaXplOiAxMXB4OworICBwYWRkaW5nOiAycHg7Cisg
IHRleHQtYWxpZ246IGNlbnRlcjsKK30KKworLyogT3B0aW9uYWw6IHN0eWxpbmcgb24gY2FwdGlv
bnMgb24gbW91c2UgaG92ZXIuICovCisvKi53ZWJ0cmVlbWFwLW5vZGU6aG92ZXIgPiAud2VidHJl
ZW1hcC1jYXB0aW9uIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cit9Ki8KZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvd2VidHJlZW1h
cC5qcyBiL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvd2VidHJlZW1h
cC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4zNWMwM2M2OGI4ZTNmYWFiZTNjOTE5ZTlhZTdjNTQ2NzQ4NGMwYTVi
Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJv
YXJkcy93ZWJ0cmVlbWFwLmpzCkBAIC0wLDAgKzEsMjQzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gU2l6ZSBvZiBib3JkZXIgYXJv
dW5kIG5vZGVzLgorLy8gV2UgY291bGQgc3VwcG9ydCBhcmJpdHJhcnkgYm9yZGVycyB1c2luZyBn
ZXRDb21wdXRlZFN0eWxlKCksIGJ1dCBJIGFtCisvLyBza2VwdGljYWwgdGhlIGV4dHJhIGNvbXBs
ZXhpdHkgKGFuZCBwZXJmb3JtYW5jZSBoaXQpIGlzIHdvcnRoIGl0LgordmFyIGtCb3JkZXJXaWR0
aCA9IDE7CisKKy8vIFBhZGRpbmcgYXJvdW5kIGNvbnRlbnRzLgorLy8gVE9ETzogZG8gdGhpcyB3
aXRoIGEgbmVzdGVkIGRpdiB0byBhbGxvdyBpdCB0byBiZSBDU1Mtc3R5bGVhYmxlLgordmFyIGtQ
YWRkaW5nID0gNDsKKwordmFyIGZvY3VzZWQgPSBudWxsOworCisvLyBDYWxsYmFjayBmb3IgZW1i
ZWRkaW5nIHBhZ2UgdG8gdXBkYXRlIGFmdGVyIGEgZm9jdXMuCitmdW5jdGlvbiBoYW5kbGVGb2N1
cyh0cmVlKSB7fQorCitmdW5jdGlvbiBmb2N1cyh0cmVlKSB7CisgIGZvY3VzZWQgPSB0cmVlOwor
CisgIC8vIEhpZGUgYWxsIHZpc2libGUgc2libGluZ3Mgb2YgYWxsIG91ciBhbmNlc3RvcnMgYnkg
bG93ZXJpbmcgdGhlbS4KKyAgdmFyIGxldmVsID0gMDsKKyAgdmFyIHJvb3QgPSB0cmVlOworICB3
aGlsZSAocm9vdC5wYXJlbnQpIHsKKyAgICByb290ID0gcm9vdC5wYXJlbnQ7CisgICAgbGV2ZWwg
Kz0gMTsKKyAgICBmb3IgKHZhciBpID0gMCwgc2libGluZzsgc2libGluZyA9IHJvb3QuY2hpbGRy
ZW5baV07ICsraSkgeworICAgICAgaWYgKHNpYmxpbmcuZG9tKQorICAgICAgICBzaWJsaW5nLmRv
bS5zdHlsZS56SW5kZXggPSAwOworICAgIH0KKyAgfQorICB2YXIgd2lkdGggPSByb290LmRvbS5v
ZmZzZXRXaWR0aDsKKyAgdmFyIGhlaWdodCA9IHJvb3QuZG9tLm9mZnNldEhlaWdodDsKKyAgLy8g
VW5oaWRlIChyYWlzZSkgYW5kIG1heGltaXplIHVzIGFuZCBvdXIgYW5jZXN0b3JzLgorICBmb3Ig
KHZhciB0ID0gdHJlZTsgdC5wYXJlbnQ7IHQgPSB0LnBhcmVudCkgeworICAgIC8vIFNoaWZ0IG9m
ZiBieSBib3JkZXIgc28gd2UgZG9uJ3QgZ2V0IG5lc3RlZCBib3JkZXJzLgorICAgIC8vIFRPRE86
IGFjdHVhbGx5IG1ha2UgbmVzdGVkIGJvcmRlcnMgd29yayAobmVlZCB0byBhZGp1c3Qgd2lkdGgv
aGVpZ2h0KS4KKyAgICBwb3NpdGlvbih0LmRvbSwgLWtCb3JkZXJXaWR0aCwgLWtCb3JkZXJXaWR0
aCwgd2lkdGgsIGhlaWdodCk7CisgICAgdC5kb20uc3R5bGUuekluZGV4ID0gMTsKKyAgfQorICAv
LyBBbmQgbGF5b3V0IGludG8gdGhlIHRvcG1vc3QgYm94LgorICBsYXlvdXQodHJlZSwgbGV2ZWws
IHdpZHRoLCBoZWlnaHQpOworICBoYW5kbGVGb2N1cyh0cmVlKTsKK30KKworZnVuY3Rpb24gbWFr
ZURvbSh0cmVlLCBsZXZlbCkgeworICB2YXIgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
ZGl2Jyk7CisgIGRvbS5zdHlsZS56SW5kZXggPSAxOworICBkb20uY2xhc3NOYW1lID0gJ3dlYnRy
ZWVtYXAtbm9kZSB3ZWJ0cmVlbWFwLWxldmVsJyArIE1hdGgubWluKGxldmVsLCA0KTsKKworICBk
b20ub25tb3VzZWRvd24gPSBmdW5jdGlvbihlKSB7CisgICAgaWYgKGUuYnV0dG9uID09IDApIHsK
KyAgICAgIGlmIChmb2N1c2VkICYmIHRyZWUgPT0gZm9jdXNlZCAmJiBmb2N1c2VkLnBhcmVudCkg
eworICAgICAgICBmb2N1cyhmb2N1c2VkLnBhcmVudCk7CisgICAgICB9IGVsc2UgeworICAgICAg
ICBmb2N1cyh0cmVlKTsKKyAgICAgIH0KKyAgICB9CisgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsK
KyAgICByZXR1cm4gdHJ1ZTsKKyAgfTsKKworICB2YXIgY2FwdGlvbiA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoJ2RpdicpOworICBjYXB0aW9uLmNsYXNzTmFtZSA9ICd3ZWJ0cmVlbWFwLWNhcHRp
b24nOworICBjYXB0aW9uLmlubmVySFRNTCA9IHRyZWUubmFtZTsKKyAgZG9tLmFwcGVuZENoaWxk
KGNhcHRpb24pOworCisgIHRyZWUuZG9tID0gZG9tOworICByZXR1cm4gZG9tOworfQorCitmdW5j
dGlvbiBwb3NpdGlvbihkb20sIHgsIHksIHdpZHRoLCBoZWlnaHQpIHsKKyAgLy8gQ1NTIHdpZHRo
L2hlaWdodCBkb2VzIG5vdCBpbmNsdWRlIGJvcmRlci4KKyAgd2lkdGggLT0ga0JvcmRlcldpZHRo
KjI7CisgIGhlaWdodCAtPSBrQm9yZGVyV2lkdGgqMjsKKworICBkb20uc3R5bGUubGVmdCAgID0g
eCArICdweCc7CisgIGRvbS5zdHlsZS50b3AgICAgPSB5ICsgJ3B4JzsKKyAgZG9tLnN0eWxlLndp
ZHRoICA9IE1hdGgubWF4KHdpZHRoLCAwKSArICdweCc7CisgIGRvbS5zdHlsZS5oZWlnaHQgPSBN
YXRoLm1heChoZWlnaHQsIDApICsgJ3B4JzsKK30KKworLy8gR2l2ZW4gYSBsaXN0IG9mIHJlY3Rh
bmdsZXMgfG5vZGVzfCwgdGhlIDEtZCBzcGFjZSBhdmFpbGFibGUKKy8vIHxzcGFjZXwsIGFuZCBh
IHN0YXJ0aW5nIHJlY3RhbmdsZSBpbmRleCB8c3RhcnR8LCBjb21wdXRlIGFuIHNwYW4gb2YKKy8v
IHJlY3RhbmdsZXMgdGhhdCBvcHRpbWl6ZXMgYSBwbGVhc2FudCBhc3BlY3QgcmF0aW8uCisvLwor
Ly8gUmV0dXJucyBbZW5kLCBzdW1dLCB3aGVyZSBlbmQgaXMgb25lIHBhc3QgdGhlIGxhc3QgcmVj
dGFuZ2xlIGFuZCBzdW0gaXMgdGhlCisvLyAyLWQgc3VtIG9mIHRoZSByZWN0YW5nbGVzJyBhcmVh
cy4KK2Z1bmN0aW9uIHNlbGVjdFNwYW4obm9kZXMsIHNwYWNlLCBzdGFydCkgeworICAvLyBBZGQg
cmVjdGFuZ2xlIG9uZSBieSBvbmUsIHN0b3BwaW5nIHdoZW4gYXNwZWN0IHJhdGlvcyBiZWdpbiB0
byBnbworICAvLyBiYWQuICBSZXN1bHQgaXMgW3N0YXJ0LGVuZCkgY292ZXJpbmcgdGhlIGJlc3Qg
cnVuIGZvciB0aGlzIHNwYW4uCisgIC8vIGh0dHA6Ly9zY2hvbGFyLmdvb2dsZS5jb20vc2Nob2xh
cj9jbHVzdGVyPTU5NzI1MTIxMDc4NDU2MTU0NzQKKyAgdmFyIG5vZGUgPSBub2Rlc1tzdGFydF07
CisgIHZhciBybWluID0gbm9kZS5kYXRhWyckYXJlYSddOyAgLy8gU21hbGxlc3Qgc2VlbiBjaGls
ZCBzbyBmYXIuCisgIHZhciBybWF4ID0gcm1pbjsgICAgICAgICAgICAgICAgLy8gTGFyZ2VzdCBj
aGlsZC4KKyAgdmFyIHJzdW0gPSAwOyAgICAgICAgICAgICAgICAgICAvLyBTdW0gb2YgY2hpbGRy
ZW4gaW4gdGhpcyBzcGFuLgorICB2YXIgbGFzdF9zY29yZSA9IDA7ICAgICAgICAgICAgIC8vIEJl
c3Qgc2NvcmUgeWV0IGZvdW5kLgorICBmb3IgKHZhciBlbmQgPSBzdGFydDsgbm9kZSA9IG5vZGVz
W2VuZF07ICsrZW5kKSB7CisgICAgdmFyIHNpemUgPSBub2RlLmRhdGFbJyRhcmVhJ107CisgICAg
aWYgKHNpemUgPCBybWluKQorICAgICAgcm1pbiA9IHNpemU7CisgICAgaWYgKHNpemUgPiBybWF4
KQorICAgICAgcm1heCA9IHNpemU7CisgICAgcnN1bSArPSBzaXplOworCisgICAgLy8gVGhpcyBm
b3JtdWxhIGlzIGZyb20gdGhlIHBhcGVyLCBidXQgeW91IGNhbiBlYXNpbHkgcHJvdmUgdG8KKyAg
ICAvLyB5b3Vyc2VsZiBpdCdzIHRha2luZyB0aGUgbGFyZ2VyIG9mIHRoZSB4L3kgYXNwZWN0IHJh
dGlvIG9yIHRoZQorICAgIC8vIHkveCBhc3BlY3QgcmF0aW8uICBUaGUgYWRkaXRpb25hbCBtYWdp
YyBmdWRnZSBjb25zdGFudCBvZiA1CisgICAgLy8gbWFrZXMgdXMgcHJlZmVyIHdpZGVyIHJlY3Rh
bmdsZXMgdG8gdGFsbGVyIG9uZXMuCisgICAgdmFyIHNjb3JlID0gTWF0aC5tYXgoNSpzcGFjZSpz
cGFjZSpybWF4IC8gKHJzdW0qcnN1bSksCisgICAgICAgICAgICAgICAgICAgICAgICAgMSpyc3Vt
KnJzdW0gLyAoc3BhY2Uqc3BhY2Uqcm1pbikpOworICAgIGlmIChsYXN0X3Njb3JlICYmIHNjb3Jl
ID4gbGFzdF9zY29yZSkgeworICAgICAgcnN1bSAtPSBzaXplOyAgLy8gVW5kbyBzaXplIGFkZGl0
aW9uIGZyb20ganVzdCBhYm92ZS4KKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBsYXN0X3Njb3Jl
ID0gc2NvcmU7CisgIH0KKyAgcmV0dXJuIFtlbmQsIHJzdW1dOworfQorCitmdW5jdGlvbiBsYXlv
dXQodHJlZSwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQpIHsKKyAgaWYgKCEoJ2NoaWxkcmVuJyBpbiB0
cmVlKSkKKyAgICByZXR1cm47CisKKyAgdmFyIHRvdGFsID0gdHJlZS5kYXRhWyckYXJlYSddOwor
CisgIC8vIFhYWCB3aHkgZG8gSSBuZWVkIGFuIGV4dHJhIC0xLy0yIGhlcmUgZm9yIHdpZHRoL2hl
aWdodCB0byBsb29rIHJpZ2h0PworICB2YXIgeDEgPSAwLCB5MSA9IDAsIHgyID0gd2lkdGggLSAx
LCB5MiA9IGhlaWdodCAtIDI7CisgIHgxICs9IGtQYWRkaW5nOyB5MSArPSBrUGFkZGluZzsKKyAg
eDIgLT0ga1BhZGRpbmc7IHkyIC09IGtQYWRkaW5nOworICB5MSArPSAxNDsgIC8vIFhYWCBnZXQg
Zmlyc3QgY2hpbGQgaGVpZ2h0IGZvciBjYXB0aW9uIHNwYWNpbmcKKworICB2YXIgcGl4ZWxzX3Rv
X3VuaXRzID0gTWF0aC5zcXJ0KHRvdGFsIC8gKCh4MiAtIHgxKSAqICh5MiAtIHkxKSkpOworCisg
IGZvciAodmFyIHN0YXJ0ID0gMCwgY2hpbGQ7IGNoaWxkID0gdHJlZS5jaGlsZHJlbltzdGFydF07
ICsrc3RhcnQpIHsKKyAgICBpZiAoeDIgLSB4MSA8IDYwIHx8IHkyIC0geTEgPCA0MCkgeworICAg
ICAgaWYgKGNoaWxkLmRvbSkgeworICAgICAgICBjaGlsZC5kb20uc3R5bGUuekluZGV4ID0gMDsK
KyAgICAgICAgcG9zaXRpb24oY2hpbGQuZG9tLCAtMiwgLTIsIDAsIDApOworICAgICAgfQorICAg
ICAgY29udGludWU7CisgICAgfQorCisgICAgLy8gSW4gdGhlb3J5IHdlIGNhbiBkeW5hbWljYWxs
eSBkZWNpZGUgd2hldGhlciB0byBzcGxpdCBpbiB4IG9yIHkgYmFzZWQKKyAgICAvLyBvbiBhc3Bl
Y3QgcmF0aW8uICBJbiBwcmFjdGljZSwgY2hhbmdpbmcgc3BsaXQgZGlyZWN0aW9uIHdpdGggdGhp
cworICAgIC8vIGxheW91dCBkb2Vzbid0IGxvb2sgdmVyeSBnb29kLgorICAgIC8vICAgdmFyIHlz
cGxpdCA9ICh5MiAtIHkxKSA+ICh4MiAtIHgxKTsKKyAgICB2YXIgeXNwbGl0ID0gdHJ1ZTsKKwor
ICAgIHZhciBzcGFjZTsgIC8vIFNwYWNlIGF2YWlsYWJsZSBhbG9uZyBsYXlvdXQgYXhpcy4KKyAg
ICBpZiAoeXNwbGl0KQorICAgICAgc3BhY2UgPSAoeTIgLSB5MSkgKiBwaXhlbHNfdG9fdW5pdHM7
CisgICAgZWxzZQorICAgICAgc3BhY2UgPSAoeDIgLSB4MSkgKiBwaXhlbHNfdG9fdW5pdHM7CisK
KyAgICB2YXIgc3BhbiA9IHNlbGVjdFNwYW4odHJlZS5jaGlsZHJlbiwgc3BhY2UsIHN0YXJ0KTsK
KyAgICB2YXIgZW5kID0gc3BhblswXSwgcnN1bSA9IHNwYW5bMV07CisKKyAgICAvLyBOb3cgdGhh
dCB3ZSd2ZSBzZWxlY3RlZCBhIHNwYW4sIGxheSBvdXQgcmVjdGFuZ2xlcyBbc3RhcnQsZW5kKSBp
biBvdXIKKyAgICAvLyBhdmFpbGFibGUgc3BhY2UuCisgICAgdmFyIHggPSB4MSwgeSA9IHkxOwor
ICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7CisgICAgICBjaGlsZCA9IHRy
ZWUuY2hpbGRyZW5baV07CisgICAgICBpZiAoIWNoaWxkLmRvbSkgeworICAgICAgICBjaGlsZC5w
YXJlbnQgPSB0cmVlOworICAgICAgICBjaGlsZC5kb20gPSBtYWtlRG9tKGNoaWxkLCBsZXZlbCAr
IDEpOworICAgICAgICB0cmVlLmRvbS5hcHBlbmRDaGlsZChjaGlsZC5kb20pOworICAgICAgfSBl
bHNlIHsKKyAgICAgICAgY2hpbGQuZG9tLnN0eWxlLnpJbmRleCA9IDE7CisgICAgICB9CisgICAg
ICB2YXIgc2l6ZSA9IGNoaWxkLmRhdGFbJyRhcmVhJ107CisgICAgICB2YXIgZnJhYyA9IHNpemUg
LyByc3VtOworICAgICAgaWYgKHlzcGxpdCkgeworICAgICAgICB3aWR0aCA9IHJzdW0gLyBzcGFj
ZTsKKyAgICAgICAgaGVpZ2h0ID0gc2l6ZSAvIHdpZHRoOworICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgaGVpZ2h0ID0gcnN1bSAvIHNwYWNlOworICAgICAgICB3aWR0aCA9IHNpemUgLyBoZWlnaHQ7
CisgICAgICB9CisgICAgICB3aWR0aCAvPSBwaXhlbHNfdG9fdW5pdHM7CisgICAgICBoZWlnaHQg
Lz0gcGl4ZWxzX3RvX3VuaXRzOworICAgICAgd2lkdGggPSBNYXRoLnJvdW5kKHdpZHRoKTsKKyAg
ICAgIGhlaWdodCA9IE1hdGgucm91bmQoaGVpZ2h0KTsKKyAgICAgIHBvc2l0aW9uKGNoaWxkLmRv
bSwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgICBpZiAoJ2NoaWxkcmVuJyBpbiBjaGlsZCkg
eworICAgICAgICBsYXlvdXQoY2hpbGQsIGxldmVsICsgMSwgd2lkdGgsIGhlaWdodCk7CisgICAg
ICB9CisgICAgICBpZiAoeXNwbGl0KQorICAgICAgICB5ICs9IGhlaWdodDsKKyAgICAgIGVsc2UK
KyAgICAgICAgeCArPSB3aWR0aDsKKyAgICB9CisKKyAgICAvLyBTaHJpbmsgb3VyIGF2YWlsYWJs
ZSBzcGFjZSBiYXNlZCBvbiB0aGUgYW1vdW50IHdlIHVzZWQuCisgICAgaWYgKHlzcGxpdCkKKyAg
ICAgIHgxICs9IE1hdGgucm91bmQoKHJzdW0gLyBzcGFjZSkgLyBwaXhlbHNfdG9fdW5pdHMpOwor
ICAgIGVsc2UKKyAgICAgIHkxICs9IE1hdGgucm91bmQoKHJzdW0gLyBzcGFjZSkgLyBwaXhlbHNf
dG9fdW5pdHMpOworCisgICAgLy8gZW5kIHBvaW50cyBvbmUgcGFzdCB3aGVyZSB3ZSBlbmRlZCwg
d2hpY2ggaXMgd2hlcmUgd2Ugd2FudCB0bworICAgIC8vIGJlZ2luIHRoZSBuZXh0IGl0ZXJhdGlv
biwgYnV0IHN1YnRyYWN0IG9uZSB0byBiYWxhbmNlIHRoZSArKyBpbgorICAgIC8vIHRoZSBsb29w
LgorICAgIHN0YXJ0ID0gZW5kIC0gMTsKKyAgfQorfQorCitmdW5jdGlvbiBhcHBlbmRUcmVlbWFw
KGRvbSwgZGF0YSkgeworICB2YXIgc3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGRvbSwgbnVsbCk7
CisgIHZhciB3aWR0aCA9IHBhcnNlSW50KHN0eWxlLndpZHRoKTsKKyAgdmFyIGhlaWdodCA9IHBh
cnNlSW50KHN0eWxlLmhlaWdodCk7CisgIGlmICghZGF0YS5kb20pCisgICAgbWFrZURvbShkYXRh
LCAwKTsKKyAgZG9tLmFwcGVuZENoaWxkKGRhdGEuZG9tKTsKKyAgcG9zaXRpb24oZGF0YS5kb20s
IDAsIDAsIHdpZHRoLCBoZWlnaHQpOworICBsYXlvdXQoZGF0YSwgMCwgd2lkdGgsIGhlaWdodCk7
Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFJl
c3VsdFNlcnZlci9zdHlsZXNoZWV0cy9kYXNoYm9hcmRmaWxlLmNzcyBiL1Rvb2xzL1Rlc3RSZXN1
bHRTZXJ2ZXIvc3R5bGVzaGVldHMvZGFzaGJvYXJkZmlsZS5jc3MKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDFiMDkyMWNlNzQ3YjJmZmI2YjU2NGI2Y2IwNGVlYzk1ODRkODQyODYuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvVGVzdFJl
c3VsdFNlcnZlci9zdHlsZXNoZWV0cy9kYXNoYm9hcmRmaWxlLmNzcworKysgL2Rldi9udWxsCkBA
IC0xLDMwICswLDAgQEAKLWJvZHkgewotICBmb250LWZhbWlseTogVmVyZGFuYSwgSGVsdmV0aWNh
LCBzYW5zLXNlcmlmOwotICBwYWRkaW5nOiAwcHg7Ci0gIGNvbG9yOiAjNDQ0OwotfQotaDEgewot
ICBjb2xvcjogIzQ0NDsKLSAgZm9udC1zaXplOiAxNHB0OwotICBmb250LXN0eWxlOiBpdGFsaWM7
Ci0gIG1hcmdpbjogMHB4OwotICBwYWRkaW5nOiA1cHg7Ci19Ci10YWJsZSB7Ci0gIGJvcmRlci1z
cGFjaW5nOiAwcHg7Ci19Ci10aCB7Ci0gIGJhY2tncm91bmQtY29sb3I6ICNBQUE7Ci0gIGNvbG9y
OiB3aGl0ZTsKLSAgdGV4dC1hbGlnbjogbGVmdDsKLSAgcGFkZGluZzogNXB4OwotICBmb250LXNp
emU6IDEycHQ7Ci19Ci10ZCB7Ci0gIGZvbnQtc2l6ZTogMTFwdDsKLSAgcGFkZGluZzogM3B4Owot
ICB0ZXh0LWFsaWduOiBsZWZ0OwotfQotdHI6aG92ZXIgewotICBiYWNrZ3JvdW5kLWNvbG9yOiAj
RUVFOwotfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdHlsZXNoZWV0cy9t
ZW51LmNzcyBiL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3R5bGVzaGVldHMvbWVudS5jc3MKaW5k
ZXggOTk0ODYwNWU4OTNhNTNjMTVjZWJmMzkwYTMxZWYyNjUyODJkNDQxYi4uOTMzYmFhN2Q2YzZm
ZWY4Nzg1ZDc2OGI2YTMzMjJmZTk1ZWUyNWM3NSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFJlc3Vs
dFNlcnZlci9zdHlsZXNoZWV0cy9tZW51LmNzcworKysgYi9Ub29scy9UZXN0UmVzdWx0U2VydmVy
L3N0eWxlc2hlZXRzL21lbnUuY3NzCkBAIC0xLDI4ICsxLDkgQEAKIGJvZHkgewogICBmb250LWZh
bWlseTogVmVyZGFuYSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOwogfQotaDEgewotICBiYWNrZ3Jv
dW5kLWNvbG9yOiAjRUVFOwotICBjb2xvcjogIzQ0NDsKLSAgZm9udC1zaXplOiAxNHB0OwotICBm
b250LXN0eWxlOiBpdGFsaWM7Ci0gIG1hcmdpbjogMHB4OwotICBwYWRkaW5nOiA1cHg7Ci19CiB1
bCB7Ci0gIG1hcmdpbjogMHB4OwotICBwYWRkaW5nOiAyMHB4OwogICBsaXN0LXN0eWxlOiBub25l
OwogfQogbGkgewotICBwYWRkaW5nOiA1cHg7Ci19Ci1saTpob3ZlciB7Ci0gIGJhY2tncm91bmQt
Y29sb3I6ICNFRUU7Ci19Ci0ubG9naW4gewotICBmb250LXNpemU6IDhwdDsKLSAgdGV4dC1hbGln
bjogcmlnaHQ7Ci0gIHdpZHRoOiAxMDAlOworICBwYWRkaW5nOiA1cHggMDsKIH0KLQpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci90ZW1wbGF0ZXMvZGFzaGJvYXJkZmlsZWxpc3Qu
aHRtbCBiL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvdGVtcGxhdGVzL2Rhc2hib2FyZGZpbGVsaXN0
Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxOGNiOTFiOThjOTNlZWM2NjVl
NGU1OGZiYmVlOWFiZjEyNDlhNjUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci90ZW1wbGF0ZXMvZGFzaGJvYXJkZmls
ZWxpc3QuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTwhRE9DVFlQRSBodG1s
PgotPGh0bWw+Ci08aGVhZD4KLTx0aXRsZT5EYXNoYm9hcmQgRmlsZXM8L3RpdGxlPgotPGxpbmsg
dHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL3N0eWxlc2hlZXRzL2Rhc2hi
b2FyZGZpbGUuY3NzIiAvPgotPC9oZWFkPgotPGJvZHk+Ci08aDE+RGFzaGJvYXJkIEZpbGVzCi08
L2gxPgotPGRpdj4KLSAgICA8dGFibGU+Ci0gICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0aD5G
aWxlPC90aD4KLSAgICAgICAgICAgIDx0aD5EYXRlPC90aD4KLSAgICAgICAgICAgIHslIGlmIGFk
bWluICV9Ci0gICAgICAgICAgICA8dGg+PC90aD4KLSAgICAgICAgICAgIHslIGVuZGlmICV9Ci0g
ICAgICAgIHslIGZvciBmaWxlIGluIGZpbGVzICV9Ci0gICAgICAgIDx0cj57JSBpZiBmaWxlLm5h
bWUgJX0KLSAgICAgICAgICAgIDx0ZD48YSBocmVmPSIvZGFzaGJvYXJkcy97eyBmaWxlLm5hbWUg
fX0iID4KLSAgICAgICAgICAgICAgICB7eyBmaWxlLm5hbWUgfX0KLSAgICAgICAgICAgICAgICA8
L2E+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPHRkPnt7IGZpbGUuZGF0ZXxkYXRl
OiJkLU0tWSBIOmk6cyIgfX0KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICB7JSBpZiBh
ZG1pbiAlfQotICAgICAgICAgICAgPHRkPjxhIGhyZWY9Ii9kYXNoYm9hcmRzL2RlbGV0ZT9maWxl
PXt7IGZpbGUubmFtZSB9fSIgPgotICAgICAgICAgICAgICAgIERlbGV0ZQotICAgICAgICAgICAg
ICAgIDwvYT4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICB7JSBlbmRpZiAlfQotICAg
ICAgICB7JSBlbmRpZiAlfQotICAgICAgICA8L3RyPgotICAgIHslIGVuZGZvciAlfQotICAgIDwv
dGFibGU+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RS
ZXN1bHRTZXJ2ZXIvdGVtcGxhdGVzL21lbnUuaHRtbCBiL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIv
dGVtcGxhdGVzL21lbnUuaHRtbAppbmRleCAxYWQ5ZjRkNWZjN2RlZjhjYWI0MWNiNGRmZDUzZWUx
MTQyYzgzZjZjLi5kNDdkZWY3ZGZjNmRhYzQ0NWM4YzM3MWQ1MDU3MTdjY2ZjZWZhMDk3IDEwMDY0
NAotLS0gYS9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3RlbXBsYXRlcy9tZW51Lmh0bWwKKysrIGIv
VG9vbHMvVGVzdFJlc3VsdFNlcnZlci90ZW1wbGF0ZXMvbWVudS5odG1sCkBAIC0yLDIwICsyLDI4
IEBACiA8aHRtbD4KIDxoZWFkPgogPHRpdGxlPlRlc3QgUmVzdWx0IFNlcnZlcjwvdGl0bGU+Ci08
dGFibGUgY2xhc3M9bG9naW4+Ci0gICAgPHRyPgotICAgICAgICA8dGQ+Ci0gICAgICAgICAgICB7
JSBpZiB1c2VyX2VtYWlsICV9Ci0gICAgICAgICAgICA8c3Bhbj57eyB1c2VyX2VtYWlsIH19PC9z
cGFuPgotICAgICAgICAgICAgeyUgZW5kaWYgJX0KLSAgICAgICAgICAgIDxzcGFuPjxhIGhyZWY9
Int7IGxvZ2luX3VybCB9fSI+e3sgbG9naW5fdGV4dCB9fTwvYT48L3NwYW4+Ci0gICAgICAgIDwv
dGQ+Ci0gICAgPC90cj4KLTwvdGFibGU+CiA8bGluayB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHls
ZXNoZWV0IiBocmVmPSIvc3R5bGVzaGVldHMvbWVudS5jc3MiIC8+CiA8L2hlYWQ+CiA8Ym9keT4K
IDxoMT5UZXN0IFJlc3VsdCBTZXJ2ZXI8L2gxPgorCis8ZGl2IGNsYXNzPWxvZ2luPgorICAgIHsl
IGlmIHVzZXJfZW1haWwgJX0KKyAgICA8c3Bhbj57eyB1c2VyX2VtYWlsIH19PC9zcGFuPgorICAg
IHslIGVuZGlmICV9CisgICAgPHNwYW4+PGEgaHJlZj0ie3sgbG9naW5fdXJsIH19Ij57eyBsb2dp
bl90ZXh0IH19PC9hPjwvc3Bhbj4KKzwvZGl2PgorCis8aDI+RGFzaGJvYXJkczwvaDI+Cis8ZGl2
PgorICAgIDx1bD57JSBmb3IgdGl0bGUsbGluayBpbiBkYXNoYm9hcmRzICV9CisgICAgICAgIDxs
aT4KKyAgICAgICAgICAgIDxhIGhyZWY9Int7IGxpbmsgfX0iID57eyB0aXRsZSB9fTwvYT4KKyAg
ICAgICAgPC9saT57JSBlbmRmb3IgJX0KKyAgICA8L3VsPgorPC9kaXY+CisKKzxoMj5KU09OIGZp
bGVzPC9oMj4KIDxkaXY+CiAgICAgPHVsPnslIGZvciB0aXRsZSxsaW5rIGluIG1lbnUgJX0KICAg
ICAgICAgPGxpPgo=
</data>
<flag name="review"
          id="94816"
          type_id="1"
          status="+"
          setter="dpranke"
    />
          </attachment>
      

    </bug>

</bugzilla>