<?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>112188</bug_id>
          
          <creation_ts>2013-03-12 14:19:30 -0700</creation_ts>
          <short_desc>Cleanup: Move timeline_exporer js out of html file into js.</short_desc>
          <delta_ts>2013-03-18 12:58:37 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Julie Parent">jparent</reporter>
          <assigned_to name="Julie Parent">jparent</assigned_to>
          <cc>abarth</cc>
    
    <cc>dpranke</cc>
    
    <cc>ojan</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>853773</commentid>
    <comment_count>0</comment_count>
    <who name="Julie Parent">jparent</who>
    <bug_when>2013-03-12 14:19:30 -0700</bug_when>
    <thetext>Cleanup: Move timeline_exporer js out of html file into js.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>853786</commentid>
    <comment_count>1</comment_count>
      <attachid>192808</attachid>
    <who name="Julie Parent">jparent</who>
    <bug_when>2013-03-12 14:43:45 -0700</bug_when>
    <thetext>Created attachment 192808
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>855615</commentid>
    <comment_count>2</comment_count>
      <attachid>193211</attachid>
    <who name="Julie Parent">jparent</who>
    <bug_when>2013-03-14 17:59:08 -0700</bug_when>
    <thetext>Created attachment 193211
Patch

Uploaded since loader move. Ready for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857353</commentid>
    <comment_count>3</comment_count>
    <who name="Julie Parent">jparent</who>
    <bug_when>2013-03-18 11:34:10 -0700</bug_when>
    <thetext>Can someone take a look at this?  Just a simple cleanup of moving the timeline explorer&apos;s javascript out of the html file and into its own js file, and moving a few functions from dashboard_base that are only used by timeline explorer into that file too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857398</commentid>
    <comment_count>4</comment_count>
      <attachid>193211</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2013-03-18 12:10:44 -0700</bug_when>
    <thetext>Comment on attachment 193211
Patch

No test files needed to change to include the new js file?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857435</commentid>
    <comment_count>5</comment_count>
    <who name="Julie Parent">jparent</who>
    <bug_when>2013-03-18 12:43:01 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 193211 [details])
&gt; No test files needed to change to include the new js file?

Nope, none of the code in the new file could have been tested before, since it was just inline in the html page. Now that it is in its own js file, we can start actually testing it, modularizing, etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857449</commentid>
    <comment_count>6</comment_count>
      <attachid>193211</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-18 12:58:34 -0700</bug_when>
    <thetext>Comment on attachment 193211
Patch

Clearing flags on attachment: 193211

Committed r146106: &lt;http://trac.webkit.org/changeset/146106&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857450</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-18 12:58:37 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192808</attachid>
            <date>2013-03-12 14:43:45 -0700</date>
            <delta_ts>2013-03-14 17:59:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-112188-20130312143944.patch</filename>
            <type>text/plain</type>
            <size>40749</size>
            <attacher name="Julie Parent">jparent</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ1NTcwCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNDUzZmQ1NmJmNjIzMDExYWFhNzgwZjVlMzgwMWZkMjUy
MjFmZDczNi4uYzk4N2E4ZWZhMTIyYjRjNTA0ODlmMGFiNTFkZTU1MGQ1YzhiM2E2NiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2
IEBACisyMDEzLTAzLTEyICBKdWxpZSBQYXJlbnQgIDxqcGFyZW50QGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBDbGVhbnVwOiBNb3ZlIHRpbWVsaW5lX2V4cG9yZXIganMgb3V0IG9mIGh0bWwgZmls
ZSBpbnRvIGpzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTEyMTg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAg
IAorICAgICAgICBNb3ZlcyB0aGUgamF2YXNjcmlwdCBvdXQgb2YgdGhlIGh0bWwgZmlsZSBhbmQg
aW50byBhIG5ldyBqcyBmaWxlLgorICAgICAgICBUaGlzIGZvbGxvd3MgdGhlIGZvcm1hdCBvZiBm
bGFraW5lc3NfZGFzaGJvYXJkLntodG1sfGpzfS4KKyAgICAgICAgCisgICAgICAgIEFsc28gbW92
ZXMgY29kZSBmcm9tIGRhc2hib2FyZF9iYXNlIHRoYXQgaXMgdXNlZCBvbmx5IGJ5IHRoaXMgb25l
CisgICAgICAgIGRhc2hib2FyZCwgYW5kIG1ha2VzIGl0IHByaXZhdGUgdG8gdGhlIGRhc2hib2Fy
ZC4KKworICAgICAgICAqIFRlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvZGFzaGJv
YXJkX2Jhc2UuanM6CisgICAgICAgICogVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJk
cy90aW1lbGluZV9leHBsb3Jlci5odG1sOgorICAgICAgICAqIFRlc3RSZXN1bHRTZXJ2ZXIvc3Rh
dGljLWRhc2hib2FyZHMvdGltZWxpbmVfZXhwbG9yZXIuanM6IENvcGllZCBmcm9tIFRvb2xzL1Rl
c3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvdGltZWxpbmVfZXhwbG9yZXIuaHRtbC4K
KyAgICAgICAgKGdlbmVyYXRlUGFnZSk6CisgICAgICAgIChpbml0Q3VycmVudEJ1aWxkZXJUZXN0
UmVzdWx0cyk6CisgICAgICAgIChzaG91bGRTaG93V2ViS2l0UmV2aXNpb25zT25seSk6CisgICAg
ICAgICh1cGRhdGVUaW1lbGluZUZvckJ1aWxkZXIuKToKKyAgICAgICAgKHVwZGF0ZVRpbWVsaW5l
Rm9yQnVpbGRlcik6CisgICAgICAgIChzZWxlY3RCdWlsZCk6CisgICAgICAgICh1cGRhdGVCdWls
ZEluZGljYXRvcik6CisgICAgICAgICguYWRkUm93KToKKyAgICAgICAgKC5hZGROdW1iZXJSb3cp
OgorICAgICAgICAoLmluc3BlY3Rvck5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUuMC5vbmNsaWNr
KToKKyAgICAgICAgKC5pbnNwZWN0b3JOb2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lLjEub25jbGlj
ayk6CisgICAgICAgICguaW5zcGVjdG9yTm9kZS5nZXRFbGVtZW50c0J5VGFnTmFtZS4yLm9uY2xp
Y2spOgorICAgICAgICAodXBkYXRlQnVpbGRJbnNwZWN0b3IpOgorICAgICAgICAoc2hvd1Jlc3Vs
dHNEZWx0YSk6CisgICAgICAgIChkZWNvbXByZXNzUmVzdWx0cy5hZGRGbGFreURlbHRhKToKKyAg
ICAgICAgKGRlY29tcHJlc3NSZXN1bHRzKToKKwogMjAxMy0wMy0xMiAgQ2hyaXN0b3BoZSBEdW1l
eiAgPGNoLmR1bWV6QHNpc2Euc2Ftc3VuZy5jb20+CiAKICAgICAgICAgW0VGTF1bV0syXSBBZGQg
cG9wdXAgbWVudSBzdXBwb3J0IHRvIE1pbmlCcm93c2VyCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2Rhc2hib2FyZF9iYXNlLmpzIGIvVG9vbHMv
VGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9kYXNoYm9hcmRfYmFzZS5qcwppbmRl
eCBkMDQ2ZTBiM2ZmYzc1M2Q5MWM1YzMyOTdjZGFjOGU3YTcwMWQ0NGYxLi41NjE3NmY1YTA4OGE4
MTNmNjVkODUxNWVmMWEwYzMzMTlhNWYwNDdhIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UmVzdWx0
U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2Rhc2hib2FyZF9iYXNlLmpzCisrKyBiL1Rvb2xzL1Rl
c3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvZGFzaGJvYXJkX2Jhc2UuanMKQEAgLTg1
LDE0ICs4NSw2IEBAIHZhciBMQVlPVVRfVEVTVF9FWFBFQ1RBVElPTlNfTUFQXyA9IHsKICAgICAn
Tyc6ICdNSVNTSU5HJwogfTsKIAotdmFyIEZBSUxVUkVfRVhQRUNUQVRJT05TXyA9IHsKLSAgICAn
VCc6IDEsCi0gICAgJ0YnOiAxLAotICAgICdDJzogMSwKLSAgICAnSSc6IDEsCi0gICAgJ1onOiAx
Ci19OwotCiAvLyBNYXAgb2YgcGFyYW1ldGVyIHRvIG90aGVyIHBhcmFtZXRlciBpdCBpbnZhbGlk
YXRlcy4KIHZhciBDUk9TU19EQl9JTlZBTElEQVRJTkdfUEFSQU1FVEVSUyA9IHsKICAgICAndGVz
dFR5cGUnOiAnZ3JvdXAnCkBAIC01NDgsMTAyICs1NDAsNiBAQCBmdW5jdGlvbiBxdWVyeVBhcmFt
ZXRlclZhbHVlKHBhcmFtZXRlcikKICAgICByZXR1cm4gZ19jdXJyZW50U3RhdGVbcGFyYW1ldGVy
XSB8fCBnX2Nyb3NzRGFzaGJvYXJkU3RhdGVbcGFyYW1ldGVyXTsKIH0KIAotLy8gIkRlY29tcHJl
c3NlcyIgdGhlIFJMRS1lbmNvZGluZyBvZiB0ZXN0IHJlc3VsdHMgc28gdGhhdCB3ZSBjYW4gcXVl
cnkgaXQKLS8vIGJ5IGJ1aWxkIGluZGV4IGFuZCB0ZXN0IG5hbWUuCi0vLwotLy8gQHBhcmFtIHtP
YmplY3R9IHJlc3VsdHMgcmVzdWx0cyBmb3IgdGhlIGN1cnJlbnQgYnVpbGRlcgotLy8gQHJldHVy
biBPYmplY3Qgd2l0aCB0aGVzZSBwcm9wZXJ0aWVzOgotLy8gICAgIC0gdGVzdE5hbWVzOiBhcnJh
eSBtYXBwaW5nIHRlc3QgaW5kZXggdG8gdGVzdCBuYW1lcy4KLS8vICAgICAtIHJlc3VsdHNCeUJ1
aWxkOiBhcnJheSBvZiBidWlsZHMsIGZvciBlYWNoIGJ1aWxkIGEgKHNwYXJzZSkgYXJyYXkgb2Yg
dGVzdCByZXN1bHRzIGJ5IHRlc3QgaW5kZXguCi0vLyAgICAgLSBmbGFreVRlc3RzOiBhcnJheSB3
aXRoIHRoZSBib29sZWFuIHZhbHVlIHRydWUgYXQgdGVzdCBpbmRpY2VzIHRoYXQgYXJlIGNvbnNp
ZGVyZWQgZmxha3kgKG1vcmUgdGhhbiBvbmUgc2luZ2xlLWJ1aWxkIGZhaWx1cmUpLgotLy8gICAg
IC0gZmxha3lEZWx0YXNCeUJ1aWxkOiBhcnJheSBvZiBidWlsZHMsIGZvciBlYWNoIGJ1aWxkIGEg
Y291bnQgb2YgZmxha3kgdGVzdCByZXN1bHRzIGJ5IGV4cGVjdGF0aW9uLCBhcyB3ZWxsIGFzIGEg
dG90YWwuCi1mdW5jdGlvbiBkZWNvbXByZXNzUmVzdWx0cyhidWlsZGVyUmVzdWx0cykKLXsKLSAg
ICB2YXIgYnVpbGRlclRlc3RSZXN1bHRzID0gYnVpbGRlclJlc3VsdHNbVEVTVFNfS0VZXTsKLSAg
ICB2YXIgYnVpbGRDb3VudCA9IGJ1aWxkZXJSZXN1bHRzW0ZJWEFCTEVfQ09VTlRTX0tFWV0ubGVu
Z3RoOwotICAgIHZhciByZXN1bHRzQnlCdWlsZCA9IG5ldyBBcnJheShidWlsZENvdW50KTsKLSAg
ICB2YXIgZmxha3lEZWx0YXNCeUJ1aWxkID0gbmV3IEFycmF5KGJ1aWxkQ291bnQpOwotCi0gICAg
Ly8gUHJlLXNpemluZyB0aGUgdGVzdCByZXN1bHQgYXJyYXlzIGZvciBlYWNoIGJ1aWxkIHNhdmVz
IHVzIH4yNTBtcwotICAgIHZhciB0ZXN0Q291bnQgPSAwOwotICAgIGZvciAodmFyIHRlc3ROYW1l
IGluIGJ1aWxkZXJUZXN0UmVzdWx0cykKLSAgICAgICAgdGVzdENvdW50Kys7Ci0gICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBidWlsZENvdW50OyBpKyspIHsKLSAgICAgICAgcmVzdWx0c0J5QnVpbGRb
aV0gPSBuZXcgQXJyYXkodGVzdENvdW50KTsKLSAgICAgICAgcmVzdWx0c0J5QnVpbGRbaV1bdGVz
dENvdW50IC0gMV0gPSB1bmRlZmluZWQ7Ci0gICAgICAgIGZsYWt5RGVsdGFzQnlCdWlsZFtpXSA9
IHt9OwotICAgIH0KLQotICAgIC8vIFVzaW5nIGluZGljZXMgaW5zdGVhZCBvZiB0aGUgZnVsbCB0
ZXN0IG5hbWVzIGZvciBlYWNoIGJ1aWxkIHNhdmVzIHVzCi0gICAgLy8gfjE1MDBtcwotICAgIHZh
ciB0ZXN0SW5kZXggPSAwOwotICAgIHZhciB0ZXN0TmFtZXMgPSBuZXcgQXJyYXkodGVzdENvdW50
KTsKLSAgICB2YXIgZmxha3lUZXN0cyA9IG5ldyBBcnJheSh0ZXN0Q291bnQpOwotCi0gICAgLy8g
RGVjb21wcmVzcyBhbmQgImludmVydCIgdGVzdCByZXN1bHRzIChieSBidWlsZCBpbnN0ZWFkIG9m
IGJ5IHRlc3QpIGFuZAotICAgIC8vIGRldGVybWluZSB3aGljaCBhcmUgZmxha3kuCi0gICAgZm9y
ICh2YXIgdGVzdE5hbWUgaW4gYnVpbGRlclRlc3RSZXN1bHRzKSB7Ci0gICAgICAgIHZhciBvbmVC
dWlsZEZhaWx1cmVDb3VudCA9IDA7Ci0KLSAgICAgICAgdGVzdE5hbWVzW3Rlc3RJbmRleF0gPSB0
ZXN0TmFtZTsKLSAgICAgICAgdmFyIHRlc3RSZXN1bHRzID0gYnVpbGRlclRlc3RSZXN1bHRzW3Rl
c3ROYW1lXS5yZXN1bHRzOwotICAgICAgICBmb3IgKHZhciBpID0gMCwgcmxlUmVzdWx0LCBjdXJy
ZW50QnVpbGRJbmRleCA9IDA7IChybGVSZXN1bHQgPSB0ZXN0UmVzdWx0c1tpXSkgJiYgY3VycmVu
dEJ1aWxkSW5kZXggPCBidWlsZENvdW50OyBpKyspIHsKLSAgICAgICAgICAgIHZhciBjb3VudCA9
IHJsZVJlc3VsdFtSTEUuTEVOR1RIXTsKLSAgICAgICAgICAgIHZhciB2YWx1ZSA9IHJsZVJlc3Vs
dFtSTEUuVkFMVUVdOwotCi0gICAgICAgICAgICBpZiAoY291bnQgPT0gMSAmJiB2YWx1ZSBpbiBG
QUlMVVJFX0VYUEVDVEFUSU9OU18pCi0gICAgICAgICAgICAgICAgb25lQnVpbGRGYWlsdXJlQ291
bnQrKzsKLQotICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBjb3VudDsgaisrKSB7Ci0g
ICAgICAgICAgICAgICAgcmVzdWx0c0J5QnVpbGRbY3VycmVudEJ1aWxkSW5kZXgrK11bdGVzdElu
ZGV4XSA9IHZhbHVlOwotICAgICAgICAgICAgICAgIGlmIChjdXJyZW50QnVpbGRJbmRleCA9PSBi
dWlsZENvdW50KQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotCi0gICAgICAgIGlmIChvbmVCdWlsZEZhaWx1cmVDb3VudCA+IDIpCi0gICAgICAg
ICAgICBmbGFreVRlc3RzW3Rlc3RJbmRleF0gPSB0cnVlOwotCi0gICAgICAgIHRlc3RJbmRleCsr
OwotICAgIH0KLQotICAgIC8vIE5vdyB0aGF0IHdlIGtub3cgd2hpY2ggdGVzdHMgYXJlIGZsYWt5
LCBjb3VudCB0aGUgdGVzdCByZXN1bHRzIHRoYXQgYXJlCi0gICAgLy8gZnJvbSBmbGFreSB0ZXN0
cyBmb3IgZWFjaCBidWlsZC4KLSAgICB0ZXN0SW5kZXggPSAwOwotICAgIGZvciAodmFyIHRlc3RO
YW1lIGluIGJ1aWxkZXJUZXN0UmVzdWx0cykgewotICAgICAgICBpZiAoIWZsYWt5VGVzdHNbdGVz
dEluZGV4KytdKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgdmFyIHRlc3RSZXN1
bHRzID0gYnVpbGRlclRlc3RSZXN1bHRzW3Rlc3ROYW1lXS5yZXN1bHRzOwotICAgICAgICBmb3Ig
KHZhciBpID0gMCwgcmxlUmVzdWx0LCBjdXJyZW50QnVpbGRJbmRleCA9IDA7IChybGVSZXN1bHQg
PSB0ZXN0UmVzdWx0c1tpXSkgJiYgY3VycmVudEJ1aWxkSW5kZXggPCBidWlsZENvdW50OyBpKysp
IHsKLSAgICAgICAgICAgIHZhciBjb3VudCA9IHJsZVJlc3VsdFtSTEUuTEVOR1RIXTsKLSAgICAg
ICAgICAgIHZhciB2YWx1ZSA9IHJsZVJlc3VsdFtSTEUuVkFMVUVdOwotCi0gICAgICAgICAgICBm
b3IgKHZhciBqID0gMDsgaiA8IGNvdW50OyBqKyspIHsKLSAgICAgICAgICAgICAgICB2YXIgYnVp
bGRUZXN0UmVzdWx0cyA9IGZsYWt5RGVsdGFzQnlCdWlsZFtjdXJyZW50QnVpbGRJbmRleCsrXTsK
LSAgICAgICAgICAgICAgICBmdW5jdGlvbiBhZGRGbGFreURlbHRhKGtleSkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghKGtleSBpbiBidWlsZFRlc3RSZXN1bHRz
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkVGVzdFJlc3VsdHNba2V5XSA9IDA7Ci0g
ICAgICAgICAgICAgICAgICAgIGJ1aWxkVGVzdFJlc3VsdHNba2V5XSsrOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBhZGRGbGFreURlbHRhKHZhbHVlKTsKLSAgICAgICAgICAg
ICAgICBpZiAodmFsdWUgIT0gJ1AnICYmIHZhbHVlICE9ICdOJykKLSAgICAgICAgICAgICAgICAg
ICAgYWRkRmxha3lEZWx0YSgndG90YWwnKTsKLSAgICAgICAgICAgICAgICBpZiAoY3VycmVudEJ1
aWxkSW5kZXggPT0gYnVpbGRDb3VudCkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gewotICAgICAgICB0ZXN0
TmFtZXM6IHRlc3ROYW1lcywKLSAgICAgICAgcmVzdWx0c0J5QnVpbGQ6IHJlc3VsdHNCeUJ1aWxk
LAotICAgICAgICBmbGFreVRlc3RzOiBmbGFreVRlc3RzLAotICAgICAgICBmbGFreURlbHRhc0J5
QnVpbGQ6IGZsYWt5RGVsdGFzQnlCdWlsZAotICAgIH07Ci19Ci0KIHdpbmRvdy5hZGRFdmVudExp
c3RlbmVyKCdsb2FkJywgZnVuY3Rpb24oKSB7CiAgICAgZ19yZXNvdXJjZUxvYWRlciA9IG5ldyBs
b2FkZXIuTG9hZGVyKCk7CiAgICAgZ19yZXNvdXJjZUxvYWRlci5sb2FkKCk7CmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL3RpbWVsaW5lX2V4cGxv
cmVyLmh0bWwgYi9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL3RpbWVs
aW5lX2V4cGxvcmVyLmh0bWwKaW5kZXggZjdiOGY5OTU3YmY0YTg3NWNiZjZmNGM0Yjg3ZmZiZjZl
NWE0Y2NmNi4uYjJjYmM1MjczZGE2MzE5ZjI5NjRkZDRkMjIwZDMzYzc5N2NiNDEwOCAxMDA2NDQK
LS0tIGEvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy90aW1lbGluZV9l
eHBsb3Jlci5odG1sCisrKyBiL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2Fy
ZHMvdGltZWxpbmVfZXhwbG9yZXIuaHRtbApAQCAtMTAwLDM2NiArMTAwLDggQEAgYm9keSB7CiA8
c2NyaXB0IHNyYz0ibG9hZGVyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJzdHJpbmcuanMi
Pjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9ImRhc2hib2FyZF9iYXNlLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSJ0aW1lbGluZV9leHBsb3Jlci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0i
dWkuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLXZhciBGQUlMSU5HX1RFU1RTX0RBVEFTRVRfTkFN
RSA9ICdGYWlsaW5nIHRlc3RzJzsKLQotdmFyIGdfZHlncmFwaDsKLXZhciBnX2J1aWxkSW5kaWNl
c0J5VGltZXN0YW1wID0ge307Ci12YXIgZ19jdXJyZW50QnVpbGRJbmRleCA9IC0xOwotdmFyIGdf
Y3VycmVudEJ1aWxkZXJUZXN0UmVzdWx0czsKLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBN
ZXRob2RzIGFuZCBvYmplY3RzIGZyb20gZGFzaGJvYXJkX2Jhc2UuanMgdG8gb3ZlcnJpZGUuCi0v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KLWZ1bmN0aW9uIGdlbmVyYXRlUGFnZSgpCi17Ci0gICAgZ19i
dWlsZEluZGljZXNCeVRpbWVzdGFtcCA9IHt9OwotICAgIHZhciByZXN1bHRzID0gZ19yZXN1bHRz
QnlCdWlsZGVyW2dfY3VycmVudFN0YXRlLmJ1aWxkZXIgfHwgY3VycmVudEJ1aWxkZXJHcm91cCgp
LmRlZmF1bHRCdWlsZGVyKCldOwotCi0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzW0ZJ
WEFCTEVfQ09VTlRTX0tFWV0ubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgdmFyIGJ1aWxkRGF0ZSA9
IG5ldyBEYXRlKHJlc3VsdHNbVElNRVNUQU1QU19LRVldW2ldICogMTAwMCk7Ci0gICAgICAgIGdf
YnVpbGRJbmRpY2VzQnlUaW1lc3RhbXBbYnVpbGREYXRlLmdldFRpbWUoKV0gPSBpOwotICAgIH0K
LQotICAgIGlmIChnX2N1cnJlbnRTdGF0ZS5idWlsZFRpbWVzdGFtcCAhPSAtMSAmJiBnX2N1cnJl
bnRTdGF0ZS5idWlsZFRpbWVzdGFtcCBpbiBnX2J1aWxkSW5kaWNlc0J5VGltZXN0YW1wKSB7Ci0g
ICAgICAgIHZhciBuZXdCdWlsZEluZGV4ID0gZ19idWlsZEluZGljZXNCeVRpbWVzdGFtcFtnX2N1
cnJlbnRTdGF0ZS5idWlsZFRpbWVzdGFtcF07Ci0KLSAgICAgICAgaWYgKG5ld0J1aWxkSW5kZXgg
PT0gZ19jdXJyZW50QnVpbGRJbmRleCkgewotICAgICAgICAgICAgLy8gVGhpcyBoYXBwZW5zIHdo
ZW4gc2VsZWN0QnVpbGQgaXMgY2FsbGVkLCB3aGljaCB1cGRhdGVzIHRoZSBVSQotICAgICAgICAg
ICAgLy8gaW1tZWRpYXRlbHksIGluIGFkZGl0aW9uIHRvIHVwZGF0aW5nIHRoZSBsb2NhdGlvbiBo
YXNoICh3ZSBkb24ndAotICAgICAgICAgICAgLy8ganVzdCByZWx5IG9uIHRoZSBoYXNoIGNoYW5n
ZSBzaW5jZSB3ZSBkb24ndCB3YW50IHRvIHJlZ2VuZXJhdGUgdGhlCi0gICAgICAgICAgICAvLyB3
aG9sZSBwYWdlIGp1c3QgYmVjYXVzZSB0aGUgdXNlciBjbGlja2VkIG9uIHNvbWV0aGluZykKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfSBlbHNlIGlmIChuZXdCdWlsZEluZGV4KQotICAg
ICAgICAgICAgZ19jdXJyZW50QnVpbGRJbmRleCA9IG5ld0J1aWxkSW5kZXg7Ci0gICAgfQotCi0g
ICAgaW5pdEN1cnJlbnRCdWlsZGVyVGVzdFJlc3VsdHMoKTsKLQotICAgICQoJ3Rlc3QtdHlwZS1z
d2l0Y2hlcicpLmlubmVySFRNTCA9IHVpLmh0bWwudGVzdFR5cGVTd2l0Y2hlciggZmFsc2UsCi0g
ICAgICAgIHVpLmh0bWwuY2hlY2tib3goJ2lnbm9yZUZsYWt5VGVzdHMnLCAnSWdub3JlIGZsYWt5
IHRlc3RzJywgZ19jdXJyZW50U3RhdGUuaWdub3JlRmxha3lUZXN0cywgJ2dfY3VycmVudEJ1aWxk
SW5kZXggPSAtMScpCi0gICAgKTsKLQotICAgIHVwZGF0ZVRpbWVsaW5lRm9yQnVpbGRlcigpOwot
fQotCi1mdW5jdGlvbiBpbml0Q3VycmVudEJ1aWxkZXJUZXN0UmVzdWx0cygpCi17Ci0gICAgdmFy
IHN0YXJ0VGltZSA9IERhdGUubm93KCk7Ci0gICAgZ19jdXJyZW50QnVpbGRlclRlc3RSZXN1bHRz
ID0gZGVjb21wcmVzc1Jlc3VsdHMoZ19yZXN1bHRzQnlCdWlsZGVyW2dfY3VycmVudFN0YXRlLmJ1
aWxkZXIgfHwgY3VycmVudEJ1aWxkZXJHcm91cCgpLmRlZmF1bHRCdWlsZGVyKCldKTsKLSAgICBj
b25zb2xlLmxvZyggJ1RpbWUgdG8gZ2V0IHRlc3QgcmVzdWx0cyBieSBidWlsZDogJyArIChEYXRl
Lm5vdygpIC0gc3RhcnRUaW1lKSk7Ci19Ci0KLWZ1bmN0aW9uIGhhbmRsZVZhbGlkSGFzaFBhcmFt
ZXRlcihrZXksIHZhbHVlKQotewotICAgIHN3aXRjaChrZXkpIHsKLSAgICBjYXNlICdidWlsZGVy
JzoKLSAgICAgICAgdmFsaWRhdGVQYXJhbWV0ZXIoZ19jdXJyZW50U3RhdGUsIGtleSwgdmFsdWUs
Ci0gICAgICAgICAgICBmdW5jdGlvbigpIHsgcmV0dXJuIHZhbHVlIGluIGN1cnJlbnRCdWlsZGVy
cygpOyB9KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSAnYnVpbGRUaW1lc3RhbXAn
OgotICAgICAgICBnX2N1cnJlbnRTdGF0ZS5idWlsZFRpbWVzdGFtcCA9IHBhcnNlSW50KHZhbHVl
LCAxMCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2UgJ2lnbm9yZUZsYWt5VGVzdHMn
OgotICAgICAgICBnX2N1cnJlbnRTdGF0ZS5pZ25vcmVGbGFreVRlc3RzID0gdmFsdWUgPT0gJ3Ry
dWUnOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotfQotCi1nX2RlZmF1bHREYXNoYm9hcmRTcGVjaWZpY1N0YXRlVmFsdWVz
ID0gewotICAgIGJ1aWxkZXI6IG51bGwsCi0gICAgYnVpbGRUaW1lc3RhbXA6IC0xLAotICAgIGln
bm9yZUZsYWt5VGVzdHM6IHRydWUKLX07Ci0KLURCX1NQRUNJRklDX0lOVkFMSURBVElOR19QQVJB
TUVURVJTID0gewotICAgICd0ZXN0VHlwZSc6ICdidWlsZGVyJywKLSAgICAnZ3JvdXAnOiAnYnVp
bGRlcicKLX07Ci0KLWZ1bmN0aW9uIHNob3VsZFNob3dXZWJLaXRSZXZpc2lvbnNPbmx5KCkKLXsK
LSAgICByZXR1cm4gaXNUaXBPZlRyZWVXZWJLaXRCdWlsZGVyKCk7Ci19Ci0KLWZ1bmN0aW9uIHVw
ZGF0ZVRpbWVsaW5lRm9yQnVpbGRlcigpCi17Ci0gICAgdmFyIGJ1aWxkZXIgPSBnX2N1cnJlbnRT
dGF0ZS5idWlsZGVyIHx8IGN1cnJlbnRCdWlsZGVyR3JvdXAoKS5kZWZhdWx0QnVpbGRlcigpOwot
ICAgIHZhciByZXN1bHRzID0gZ19yZXN1bHRzQnlCdWlsZGVyW2J1aWxkZXJdOwotICAgIHZhciBn
cmFwaERhdGEgPSBbXTsKLQotICAgIHZhciBhbm5vdGF0aW9ucyA9IFtdOwotCi0gICAgLy8gRHln
cmFwaCBwcmVmZXJzIHRvIGJlIGhhbmRlZCBkYXRhIGluIGNocm9ub2xvZ2ljYWwgb3JkZXIuCi0g
ICAgZm9yICh2YXIgaSA9IHJlc3VsdHNbRklYQUJMRV9DT1VOVFNfS0VZXS5sZW5ndGggLSAxOyBp
ID49IDA7IGktLSkgewotICAgICAgICB2YXIgYnVpbGREYXRlID0gbmV3IERhdGUocmVzdWx0c1tU
SU1FU1RBTVBTX0tFWV1baV0gKiAxMDAwKTsKLSAgICAgICAgLy8gRklYTUU6IEZpbmQgYSBiZXR0
ZXIgd2F5IHRvIGV4Y2x1ZGUgb3V0bGllcnMuIFRoaXMgaXMganVzdCBzbyB3ZQotICAgICAgICAv
LyBleGNsdWRlIHJ1bnMgd2hlcmUgZXZlcnkgdGVzdCBmYWlsZWQuCi0gICAgICAgIHZhciBmYWls
dXJlQ291bnQgPSBNYXRoLm1pbihyZXN1bHRzW0ZJWEFCTEVfQ09VTlRfS0VZXVtpXSwgMTAwMDAp
OwotCi0gICAgICAgIGlmIChnX2N1cnJlbnRTdGF0ZS5pZ25vcmVGbGFreVRlc3RzKQotICAgICAg
ICAgICAgZmFpbHVyZUNvdW50IC09IGdfY3VycmVudEJ1aWxkZXJUZXN0UmVzdWx0cy5mbGFreURl
bHRhc0J5QnVpbGRbaV0udG90YWwgfHwgMDsKLQotICAgICAgICBncmFwaERhdGEucHVzaChbYnVp
bGREYXRlLCBmYWlsdXJlQ291bnRdKTsKLQotICAgICAgICBpZiAoIXNob3VsZFNob3dXZWJLaXRS
ZXZpc2lvbnNPbmx5KCkgJiYgKHJlc3VsdHNbV0VCS0lUX1JFVklTSU9OU19LRVldW2ldICE9IHJl
c3VsdHNbV0VCS0lUX1JFVklTSU9OU19LRVldW2kgKyAxXSkpIHsKLSAgICAgICAgICAgIGFubm90
YXRpb25zLnB1c2goewotICAgICAgICAgICAgICAgIHNlcmllczogRkFJTElOR19URVNUU19EQVRB
U0VUX05BTUUsCi0gICAgICAgICAgICAgICAgeDogYnVpbGREYXRlLAotICAgICAgICAgICAgICAg
IHNob3J0VGV4dDogJ1InLAotICAgICAgICAgICAgICAgIHRleHQ6ICdXZWJLaXQgcm9sbDogcicg
KyByZXN1bHRzW1dFQktJVF9SRVZJU0lPTlNfS0VZXVtpICsgMV0gKyAnIHRvICcgKyByZXN1bHRz
W1dFQktJVF9SRVZJU0lPTlNfS0VZXVtpXQotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICB2YXIgd2luZG93V2lkdGggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xp
ZW50V2lkdGg7Ci0gICAgdmFyIHdpbmRvd0hlaWdodCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVu
dC5jbGllbnRIZWlnaHQ7Ci0gICAgdmFyIHN3aXRjaGVyTm9kZSA9ICQoJ3Rlc3QtdHlwZS1zd2l0
Y2hlcicpOwotICAgIHZhciBpbnNwZWN0b3JOb2RlID0gJCgnaW5zcGVjdG9yLWNvbnRhaW5lcicp
OwotICAgIHZhciBncmFwaFdpZHRoID0gd2luZG93V2lkdGggLSAyMCAtIGluc3BlY3Rvck5vZGUu
b2Zmc2V0V2lkdGg7Ci0gICAgdmFyIGdyYXBoSGVpZ2h0ID0gd2luZG93SGVpZ2h0IC0gc3dpdGNo
ZXJOb2RlLm9mZnNldFRvcCAtIHN3aXRjaGVyTm9kZS5vZmZzZXRIZWlnaHQgLSAyMDsKLQotICAg
IHZhciBjb250YWluZXJOb2RlID0gJCgndGltZWxpbmUtY29udGFpbmVyJyk7Ci0gICAgY29udGFp
bmVyTm9kZS5zdHlsZS5oZWlnaHQgPSBncmFwaEhlaWdodCArICdweCc7Ci0gICAgY29udGFpbmVy
Tm9kZS5zdHlsZS53aWR0aCA9IGdyYXBoV2lkdGggKyAncHgnOwotICAgIGluc3BlY3Rvck5vZGUu
c3R5bGUuaGVpZ2h0ID0gZ3JhcGhIZWlnaHQgKyAncHgnOwotCi0gICAgZ19keWdyYXBoID0gbmV3
IER5Z3JhcGgoCi0gICAgICAgIGNvbnRhaW5lck5vZGUsCi0gICAgICAgIGdyYXBoRGF0YSwgewot
ICAgICAgICAgICAgbGFiZWxzOiBbJ0RhdGUnLCBGQUlMSU5HX1RFU1RTX0RBVEFTRVRfTkFNRV0s
Ci0gICAgICAgICAgICB3aWR0aDogZ3JhcGhXaWR0aCwKLSAgICAgICAgICAgIGhlaWdodDogZ3Jh
cGhIZWlnaHQsCi0gICAgICAgICAgICBjbGlja0NhbGxiYWNrOiBmdW5jdGlvbihldmVudCwgZGF0
ZSkgewotICAgICAgICAgICAgICAgIHNlbGVjdEJ1aWxkKHJlc3VsdHMsIGJ1aWxkZXIsIGdfZHln
cmFwaCwgZ19idWlsZEluZGljZXNCeVRpbWVzdGFtcFtkYXRlXSk7Ci0gICAgICAgICAgICB9LAot
ICAgICAgICAgICAgZHJhd0NhbGxiYWNrOiBmdW5jdGlvbihkeWdyYXBoLCBpc0luaXRpYWwpIHsK
LSAgICAgICAgICAgICAgICBpZiAoaXNJbml0aWFsKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICAgICAgdXBkYXRlQnVpbGRJbmRpY2F0b3IocmVzdWx0cywgZHlncmFw
aCk7Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAgLy8geFZhbHVlUGFyc2VyIGlzIG5lY2Vz
c2FyeSBmb3IgYW5ub3RhdGlvbnMgdG8gd29yaywgZXZlbiB0aG91Z2ggd2UKLSAgICAgICAgICAg
IC8vIGFscmVhZHkgaGF2ZSBEYXRlIGluc3RhbmNlcwotICAgICAgICAgICAgeFZhbHVlUGFyc2Vy
OiBmdW5jdGlvbihpbnB1dCkgeyByZXR1cm4gaW5wdXQuZ2V0VGltZSgpOyB9Ci0gICAgICAgIH0p
OwotICAgIGlmIChhbm5vdGF0aW9ucy5sZW5ndGgpCi0gICAgICAgIGdfZHlncmFwaC5zZXRBbm5v
dGF0aW9ucyhhbm5vdGF0aW9ucyk7Ci0KLSAgICBpbnNwZWN0b3JOb2RlLnN0eWxlLnZpc2liaWxp
dHkgPSAndmlzaWJsZSc7Ci0KLSAgICBpZiAoZ19jdXJyZW50QnVpbGRJbmRleCAhPSAtMSkKLSAg
ICAgICAgc2VsZWN0QnVpbGQocmVzdWx0cywgYnVpbGRlciwgZ19keWdyYXBoLCBnX2N1cnJlbnRC
dWlsZEluZGV4KTsKLX0KLQotZnVuY3Rpb24gc2VsZWN0QnVpbGQocmVzdWx0cywgYnVpbGRlciwg
ZHlncmFwaCwgaW5kZXgpCi17Ci0gICAgZ19jdXJyZW50QnVpbGRJbmRleCA9IGluZGV4OwotICAg
IHVwZGF0ZUJ1aWxkSW5kaWNhdG9yKHJlc3VsdHMsIGR5Z3JhcGgpOwotICAgIHVwZGF0ZUJ1aWxk
SW5zcGVjdG9yKHJlc3VsdHMsIGJ1aWxkZXIsIGR5Z3JhcGgsIGluZGV4KTsKLSAgICBzZXRRdWVy
eVBhcmFtZXRlcignYnVpbGRUaW1lc3RhbXAnLCByZXN1bHRzW1RJTUVTVEFNUFNfS0VZXVtpbmRl
eF0gKiAxMDAwKTsKLX0KLQotZnVuY3Rpb24gdXBkYXRlQnVpbGRJbmRpY2F0b3IocmVzdWx0cywg
ZHlncmFwaCkKLXsKLSAgICB2YXIgaW5kaWNhdG9yTm9kZSA9ICQoJ2luZGljYXRvcicpOwotCi0g
ICAgaWYgKCFpbmRpY2F0b3JOb2RlKSB7Ci0gICAgICAgIHZhciBjb250YWluZXJOb2RlID0gJCgn
dGltZWxpbmUtY29udGFpbmVyJyk7Ci0gICAgICAgIGluZGljYXRvck5vZGUgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdkaXYnKTsKLSAgICAgICAgaW5kaWNhdG9yTm9kZS5pZCA9ICdpbmRpY2F0
b3InOwotICAgICAgICBpbmRpY2F0b3JOb2RlLnN0eWxlLmhlaWdodCA9IGNvbnRhaW5lck5vZGUu
b2Zmc2V0SGVpZ2h0ICsgJ3B4JzsKLSAgICAgICAgY29udGFpbmVyTm9kZS5hcHBlbmRDaGlsZChp
bmRpY2F0b3JOb2RlKTsKLSAgICB9Ci0KLSAgICBpZiAoZ19jdXJyZW50QnVpbGRJbmRleCA9PSAt
MSkKLSAgICAgICAgaW5kaWNhdG9yTm9kZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwotICAgIGVs
c2UgewotICAgICAgICBpbmRpY2F0b3JOb2RlLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwotICAg
ICAgICB2YXIgYnVpbGREYXRlID0gbmV3IERhdGUocmVzdWx0c1tUSU1FU1RBTVBTX0tFWV1bZ19j
dXJyZW50QnVpbGRJbmRleF0gKiAxMDAwKTsKLSAgICAgICAgdmFyIGRvbUNvb3JkcyA9IGR5Z3Jh
cGgudG9Eb21Db29yZHMoYnVpbGREYXRlLCAwKTsKLSAgICAgICAgaW5kaWNhdG9yTm9kZS5zdHls
ZS5sZWZ0ID0gZG9tQ29vcmRzWzBdICsgJ3B4JzsKLSAgICB9Ci19Ci0KLWZ1bmN0aW9uIHVwZGF0
ZUJ1aWxkSW5zcGVjdG9yKHJlc3VsdHMsIGJ1aWxkZXIsIGR5Z3JhcGgsIGluZGV4KQotewotICAg
IHZhciBodG1sID0gJzx0YWJsZSBpZD0iaW5zcGVjdG9yLXRhYmxlIj48Y2FwdGlvbj5EZXRhaWxz
PC9jYXB0aW9uPic7Ci0KLSAgICBmdW5jdGlvbiBhZGRSb3cobGFiZWwsIHZhbHVlKQotICAgIHsK
LSAgICAgICAgaHRtbCArPSAnPHRyPjx0ZCBjbGFzcz0ibGFiZWwiPicgKyBsYWJlbCArICc8L3Rk
Pjx0ZD4nICsgdmFsdWUgKyAnPC90ZD48L3RyPic7Ci0gICAgfQotCi0gICAgLy8gQnVpbGRlciBh
bmQgcmVzdWx0cyBsaW5rcwotICAgIHZhciBidWlsZE51bWJlciA9IHJlc3VsdHNbQlVJTERfTlVN
QkVSU19LRVldW2luZGV4XTsKLSAgICBhZGRSb3coJycsICcnKTsKLSAgICB2YXIgbWFzdGVyID0g
YnVpbGRlck1hc3RlcihidWlsZGVyKTsKLSAgICB2YXIgYnVpbGRVcmwgPSBtYXN0ZXIubG9nUGF0
aChidWlsZGVyLCByZXN1bHRzW0JVSUxEX05VTUJFUlNfS0VZXVtpbmRleF0pOwotICAgIGlmICht
YXN0ZXIubmFtZSA9PSBXRUJLSVRfQlVJTERFUl9NQVNURVIpIHsKLSAgICAgICAgdmFyIHJlc3Vs
dHNVcmwgPSAnaHR0cDovL2J1aWxkLndlYmtpdC5vcmcvcmVzdWx0cy8nICsgYnVpbGRlciArICcv
cicgKyByZXN1bHRzW1dFQktJVF9SRVZJU0lPTlNfS0VZXVtpbmRleF0gKwotICAgICAgICAgICAg
JyAoJyArIHJlc3VsdHNbQlVJTERfTlVNQkVSU19LRVldW2luZGV4XSArICcpJzsKLSAgICB9IGVs
c2UgewotICAgICAgICB2YXIgcmVzdWx0c1VybCA9ICdodHRwOi8vYnVpbGQuY2hyb21pdW0ub3Jn
L2YvY2hyb21pdW0vbGF5b3V0X3Rlc3RfcmVzdWx0cy8nICsKLSAgICAgICAgICAgIGN1cnJlbnRC
dWlsZGVycygpW2J1aWxkZXJdICsgJy8nICsgcmVzdWx0c1tDSFJPTUVfUkVWSVNJT05TX0tFWV1b
aW5kZXhdOwotICAgIH0KLQotICAgIGFkZFJvdygnQnVpbGQ6JywgJzxhIGhyZWY9IicgKyBidWls
ZFVybCArICciIHRhcmdldD0iX2JsYW5rIj4nICsgYnVpbGROdW1iZXIgKyAnPC9hPiAoPGEgaHJl
Zj0iJyArIHJlc3VsdHNVcmwgKyAnIiB0YXJnZXQ9Il9ibGFuayI+cmVzdWx0czwvYT4pJyk7Ci0K
LSAgICAvLyBSZXZpc2lvbiBsaW5rKHMpCi0gICAgaWYgKCFzaG91bGRTaG93V2ViS2l0UmV2aXNp
b25zT25seSgpKQotICAgICAgICBhZGRSb3coJ0Nocm9taXVtIGNoYW5nZTonLCB1aS5odG1sLmNo
cm9taXVtUmV2aXNpb25MaW5rKHJlc3VsdHMsIGluZGV4KSk7Ci0gICAgYWRkUm93KCdXZWJLaXQg
Y2hhbmdlOicsIHVpLmh0bWwud2ViS2l0UmV2aXNpb25MaW5rKHJlc3VsdHMsIGluZGV4KSk7Ci0K
LSAgICAvLyBUZXN0IHN0YXR1cy9jb3VudHMKLSAgICBhZGRSb3coJycsICcnKTsKLQotICAgIGZ1
bmN0aW9uIGFkZE51bWJlclJvdyhsYWJlbCwgY3VycmVudFZhbHVlLCBwcmV2aW91c1ZhbHVlKQot
ICAgIHsKLSAgICAgICAgdmFyIGRlbHRhID0gY3VycmVudFZhbHVlIC0gcHJldmlvdXNWYWx1ZTsK
LSAgICAgICAgdmFyIGRlbHRhVGV4dCA9ICcnCi0gICAgICAgIGlmIChkZWx0YSA8IDApCi0gICAg
ICAgICAgICBkZWx0YVRleHQgPSAnIDxzcGFuIGNsYXNzPSJkZWx0YSBuZWdhdGl2ZSI+JyArIGRl
bHRhICsgJzwvc3Bhbj4nOwotICAgICAgICBlbHNlIGlmIChkZWx0YSA+IDApCi0gICAgICAgICAg
ICBkZWx0YVRleHQgPSAnIDxzcGFuIGNsYXNzPSJkZWx0YSBwb3NpdGl2ZSI+KycgKyBkZWx0YSAr
ICc8L3NwYW4+JzsKLQotICAgICAgICBhZGRSb3cobGFiZWwsIGN1cnJlbnRWYWx1ZSArIGRlbHRh
VGV4dCk7Ci0gICAgfQotCi0gICAgdmFyIGV4cGVjdGF0aW9ucyA9IGV4cGVjdGF0aW9uc01hcCgp
OwotICAgIHZhciBmbGFreURlbHRhc0J5QnVpbGQgPSBnX2N1cnJlbnRCdWlsZGVyVGVzdFJlc3Vs
dHMuZmxha3lEZWx0YXNCeUJ1aWxkOwotICAgIGZvciAodmFyIGV4cGVjdGF0aW9uS2V5IGluIGV4
cGVjdGF0aW9ucykgewotICAgICAgICBpZiAoZXhwZWN0YXRpb25LZXkgaW4gcmVzdWx0c1tGSVhB
QkxFX0NPVU5UU19LRVldW2luZGV4XSkgewotICAgICAgICAgICAgdmFyIGN1cnJlbnRDb3VudCA9
IHJlc3VsdHNbRklYQUJMRV9DT1VOVFNfS0VZXVtpbmRleF1bZXhwZWN0YXRpb25LZXldOwotICAg
ICAgICAgICAgdmFyIHByZXZpb3VzQ291bnQgPSByZXN1bHRzW0ZJWEFCTEVfQ09VTlRTX0tFWV1b
aW5kZXggKyAxXVtleHBlY3RhdGlvbktleV07Ci0gICAgICAgICAgICBpZiAoZ19jdXJyZW50U3Rh
dGUuaWdub3JlRmxha3lUZXN0cykgewotICAgICAgICAgICAgICAgIGN1cnJlbnRDb3VudCAtPSBm
bGFreURlbHRhc0J5QnVpbGRbaW5kZXhdW2V4cGVjdGF0aW9uS2V5XSB8fCAwOwotICAgICAgICAg
ICAgICAgIHByZXZpb3VzQ291bnQgLT0gZmxha3lEZWx0YXNCeUJ1aWxkW2luZGV4ICsgMV1bZXhw
ZWN0YXRpb25LZXldIHx8IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBhZGROdW1iZXJS
b3coZXhwZWN0YXRpb25zW2V4cGVjdGF0aW9uS2V5XSwgY3VycmVudENvdW50LCBwcmV2aW91c0Nv
dW50KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHZhciBjdXJyZW50VG90YWwgPSByZXN1bHRz
W0ZJWEFCTEVfQ09VTlRfS0VZXVtpbmRleF07Ci0gICAgdmFyIHByZXZpb3VzVG90YWwgPSByZXN1
bHRzW0ZJWEFCTEVfQ09VTlRfS0VZXVtpbmRleCArIDFdOwotICAgIGlmIChnX2N1cnJlbnRTdGF0
ZS5pZ25vcmVGbGFreVRlc3RzKSB7Ci0gICAgICAgIGN1cnJlbnRUb3RhbCAtPSBmbGFreURlbHRh
c0J5QnVpbGRbaW5kZXhdLnRvdGFsIHx8IDA7Ci0gICAgICAgIHByZXZpb3VzVG90YWwgLT0gZmxh
a3lEZWx0YXNCeUJ1aWxkW2luZGV4ICsgMV0udG90YWwgfHwgMDsKLSAgICB9Ci0gICAgYWRkTnVt
YmVyUm93KCdUb3RhbCBmYWlsaW5nIHRlc3RzOicsIGN1cnJlbnRUb3RhbCwgcHJldmlvdXNUb3Rh
bCk7Ci0KLSAgICBodG1sICs9ICc8L3RhYmxlPic7Ci0KLSAgICBodG1sICs9ICc8ZGl2IGlkPSJj
aGFuZ2VzLWJ1dHRvbiIgY2xhc3M9ImJ1dHRvbnMiPic7Ci0gICAgaHRtbCArPSAnPGJ1dHRvbj5T
aG93IGNoYW5nZWQgdGVzdCByZXN1bHRzPC9idXR0b24+JzsKLSAgICBodG1sICs9ICc8L2Rpdj4n
OwotCi0gICAgaHRtbCArPSAnPGRpdiBpZD0iYnVpbGQtYnV0dG9ucyIgY2xhc3M9ImJ1dHRvbnMi
Pic7Ci0gICAgaHRtbCArPSAnPGJ1dHRvbj5QcmV2aW91cyBidWlsZDwvYnV0dG9uPiA8YnV0dG9u
Pk5leHQgYnVpbGQ8L2J1dHRvbj4nOwotICAgIGh0bWwgKz0gJzwvZGl2Pic7Ci0KLSAgICB2YXIg
aW5zcGVjdG9yTm9kZSA9ICQoJ2luc3BlY3Rvci1jb250YWluZXInKTsKLSAgICBpbnNwZWN0b3JO
b2RlLmlubmVySFRNTCA9IGh0bWw7Ci0KLSAgICBpbnNwZWN0b3JOb2RlLmdldEVsZW1lbnRzQnlU
YWdOYW1lKCdidXR0b24nKVswXS5vbmNsaWNrID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHNob3dS
ZXN1bHRzRGVsdGEoaW5kZXgsIGJ1aWxkTnVtYmVyLCBidWlsZFVybCwgcmVzdWx0c1VybCk7Ci0g
ICAgfTsKLSAgICBpbnNwZWN0b3JOb2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKVsx
XS5vbmNsaWNrID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHNlbGVjdEJ1aWxkKHJlc3VsdHMsIGJ1
aWxkZXIsIGR5Z3JhcGgsIGluZGV4ICsgMSk7Ci0gICAgfTsKLSAgICBpbnNwZWN0b3JOb2RlLmdl
dEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKVsyXS5vbmNsaWNrID0gZnVuY3Rpb24oKSB7Ci0g
ICAgICAgIHNlbGVjdEJ1aWxkKHJlc3VsdHMsIGJ1aWxkZXIsIGR5Z3JhcGgsIGluZGV4IC0gMSk7
Ci0gICAgfTsKLX0KLQotZnVuY3Rpb24gc2hvd1Jlc3VsdHNEZWx0YShpbmRleCwgYnVpbGROdW1i
ZXIsIGJ1aWxkVXJsLCByZXN1bHRzVXJsKQotewotICAgIHZhciBmbGFreVRlc3RzID0gZ19jdXJy
ZW50QnVpbGRlclRlc3RSZXN1bHRzLmZsYWt5VGVzdHM7Ci0gICAgdmFyIGN1cnJlbnRSZXN1bHRz
ID0gZ19jdXJyZW50QnVpbGRlclRlc3RSZXN1bHRzLnJlc3VsdHNCeUJ1aWxkW2luZGV4XTsKLSAg
ICB2YXIgdGVzdE5hbWVzID0gZ19jdXJyZW50QnVpbGRlclRlc3RSZXN1bHRzLnRlc3ROYW1lczsK
LSAgICB2YXIgcHJldmlvdXNSZXN1bHRzID0gZ19jdXJyZW50QnVpbGRlclRlc3RSZXN1bHRzLnJl
c3VsdHNCeUJ1aWxkW2luZGV4ICsgMV07Ci0gICAgdmFyIGV4cGVjdGF0aW9ucyA9IGV4cGVjdGF0
aW9uc01hcCgpOwotCi0gICAgdmFyIGRlbHRhcyA9IHt9OwotICAgIGZ1bmN0aW9uIGFkZERlbHRh
KGNhdGVnb3J5LCB0ZXN0SW5kZXgpCi0gICAgewotICAgICAgICBpZiAoZ19jdXJyZW50U3RhdGUu
aWdub3JlRmxha3lUZXN0cyAmJiBmbGFreVRlc3RzW3Rlc3RJbmRleF0pCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIGlmICghKGNhdGVnb3J5IGluIGRlbHRhcykpCi0gICAgICAgICAgICBk
ZWx0YXNbY2F0ZWdvcnldID0gW107Ci0gICAgICAgIHZhciB0ZXN0TmFtZSA9IHRlc3ROYW1lc1t0
ZXN0SW5kZXhdOwotICAgICAgICB2YXIgZmxha2luZXNzRGFzaGJvYXJkVXJsID0gJ2ZsYWtpbmVz
c19kYXNoYm9hcmQuaHRtbCcgKyAobG9jYXRpb24uaGFzaCA/IGxvY2F0aW9uLmhhc2ggKyAnJicg
OiAnIycpICsgJ3Rlc3RzPScgKyB0ZXN0TmFtZTsKLSAgICAgICAgdmFyIGh0bWwgPSAnPGEgaHJl
Zj0iJyArIGZsYWtpbmVzc0Rhc2hib2FyZFVybCArICciPicgKyB0ZXN0TmFtZSArICc8L2E+JzsK
LSAgICAgICAgaWYgKGZsYWt5VGVzdHNbdGVzdEluZGV4XSkKLSAgICAgICAgICAgIGh0bWwgKz0g
JyA8c3BhbiBzdHlsZT0iY29sb3I6ICNmNjYiPnBvc3NpYmx5IGZsYWt5PC9zcGFuPic7Ci0gICAg
ICAgIGRlbHRhc1tjYXRlZ29yeV0ucHVzaChodG1sKTsKLSAgICB9Ci0KLSAgICBmb3IgKHZhciB0
ZXN0SW5kZXggPSAwOyB0ZXN0SW5kZXggPCBjdXJyZW50UmVzdWx0cy5sZW5ndGg7IHRlc3RJbmRl
eCsrKSB7Ci0gICAgICAgIGlmIChjdXJyZW50UmVzdWx0c1t0ZXN0SW5kZXhdID09PSB1bmRlZmlu
ZWQpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAocHJldmlvdXNSZXN1bHRz
W3Rlc3RJbmRleF0gIT09IHVuZGVmaW5lZCkgewotICAgICAgICAgICAgaWYgKGN1cnJlbnRSZXN1
bHRzW3Rlc3RJbmRleF0gPT0gcHJldmlvdXNSZXN1bHRzW3Rlc3RJbmRleF0pCi0gICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBhZGREZWx0YSgnV2FzIDxiPicgKyBleHBlY3Rh
dGlvbnNbcHJldmlvdXNSZXN1bHRzW3Rlc3RJbmRleF1dICsgJzwvYj4gbm93IDxiPicgKyBleHBl
Y3RhdGlvbnNbY3VycmVudFJlc3VsdHNbdGVzdEluZGV4XV0gKyAnPC9iPicsIHRlc3RJbmRleCk7
Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgYWRkRGVsdGEoJ05ld2x5IDxiPicgKyBleHBl
Y3RhdGlvbnNbY3VycmVudFJlc3VsdHNbdGVzdEluZGV4XV0gKyAnPC9iPicsIHRlc3RJbmRleCk7
Ci0gICAgfQotCi0gICAgZm9yICh2YXIgdGVzdEluZGV4ID0gMDsgdGVzdEluZGV4IDwgcHJldmlv
dXNSZXN1bHRzLmxlbmd0aDsgdGVzdEluZGV4KyspIHsKLSAgICAgICAgaWYgKHByZXZpb3VzUmVz
dWx0c1t0ZXN0SW5kZXhdID09PSB1bmRlZmluZWQpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgaWYgKGN1cnJlbnRSZXN1bHRzW3Rlc3RJbmRleF0gPT09IHVuZGVmaW5lZCkKLSAgICAg
ICAgICAgIGFkZERlbHRhKCdXYXMgPGI+JyArIGV4cGVjdGF0aW9uc1twcmV2aW91c1Jlc3VsdHNb
dGVzdEluZGV4XV0gKyAnPC9iPicsIHRlc3RJbmRleCk7Ci0gICAgfQotCi0gICAgdmFyIGh0bWwg
PSAnJzsKLQotICAgIGh0bWwgKz0gJzxoZWFkPjxiYXNlIHRhcmdldD0iX2JsYW5rIj48L2hlYWQ+
JzsKLSAgICBodG1sICs9ICc8aDE+Q2hhbmdlcyBpbiB0ZXN0IHJlc3VsdHM8L2gxPic7Ci0KLSAg
ICBodG1sICs9ICc8cD5Gb3IgYnVpbGQgPGEgaHJlZj0iJyArIGJ1aWxkVXJsICsgJyIgdGFyZ2V0
PSJfYmxhbmsiPicgKwotICAgICAgICBidWlsZE51bWJlciArICc8L2E+ICcgKyAnKDxhIGhyZWY9
IicgKyByZXN1bHRzVXJsICsKLSAgICAgICAgJyIgdGFyZ2V0PSJfYmxhbmsiPnJlc3VsdHM8L2E+
KTwvcD4nOwotCi0gICAgZm9yICh2YXIgZGVsdGFDYXRlZ29yeSBpbiBkZWx0YXMpIHsKLSAgICAg
ICAgaHRtbCArPSAnPHA+PGRpdj4nICsgZGVsdGFDYXRlZ29yeSArICcgKCcgKyBkZWx0YXNbZGVs
dGFDYXRlZ29yeV0ubGVuZ3RoICsgJyk8L2Rpdj48dWw+JzsKLSAgICAgICAgZGVsdGFzW2RlbHRh
Q2F0ZWdvcnldLmZvckVhY2goZnVuY3Rpb24oZGVsdGFIdG1sKSB7Ci0gICAgICAgICAgICBodG1s
ICs9ICc8bGk+JyArIGRlbHRhSHRtbCArICc8L2xpPic7Ci0gICAgICAgIH0pOwotICAgICAgICBo
dG1sICs9ICc8L3VsPjwvcD4nOwotICAgIH0KLQotICAgIHZhciBkZWx0YVdpbmRvdyA9IHdpbmRv
dy5vcGVuKCk7Ci0gICAgZGVsdGFXaW5kb3cuZG9jdW1lbnQud3JpdGUoaHRtbCk7Ci19Ci0KLWRv
Y3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBmdW5jdGlvbihlKSB7Ci0gICAgaWYg
KGdfY3VycmVudEJ1aWxkSW5kZXggPT0gLTEpCi0gICAgICAgIHJldHVybjsKLQotICAgIHZhciBi
dWlsZGVyID0gZ19jdXJyZW50U3RhdGUuYnVpbGRlciB8fCBjdXJyZW50QnVpbGRlckdyb3VwKCku
ZGVmYXVsdEJ1aWxkZXIoKTsKLSAgICBzd2l0Y2ggKGUua2V5SWRlbnRpZmllcikgewotICAgIGNh
c2UgJ0xlZnQnOgotICAgICAgICBzZWxlY3RCdWlsZCgKLSAgICAgICAgICAgIGdfcmVzdWx0c0J5
QnVpbGRlcltidWlsZGVyXSwKLSAgICAgICAgICAgIGJ1aWxkZXIsCi0gICAgICAgICAgICBnX2R5
Z3JhcGgsCi0gICAgICAgICAgICBnX2N1cnJlbnRCdWlsZEluZGV4ICsgMSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgJ1JpZ2h0JzoKLSAgICAgICAgc2VsZWN0QnVpbGQoCi0gICAgICAgICAg
ICBnX3Jlc3VsdHNCeUJ1aWxkZXJbYnVpbGRlcl0sCi0gICAgICAgICAgICBidWlsZGVyLAotICAg
ICAgICAgICAgZ19keWdyYXBoLAotICAgICAgICAgICAgZ19jdXJyZW50QnVpbGRJbmRleCAtIDEp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci19KTsKLTwvc2NyaXB0PgogPC9oZWFkPgogPGJvZHk+
CiAgICAgPGRpdiBpZD0idGVzdC10eXBlLXN3aXRjaGVyIj48L2Rpdj4KZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvdGltZWxpbmVfZXhwbG9yZXIu
anMgYi9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL3RpbWVsaW5lX2V4
cGxvcmVyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNlODM0YmUwMWZmNDJlYTU3NjI3OTIyMGY4MWI3NmIzNzBi
MmFkN2MKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1k
YXNoYm9hcmRzL3RpbWVsaW5lX2V4cGxvcmVyLmpzCkBAIC0wLDAgKzEsNDg4IEBACisvLyBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
Ly8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorLy8gaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorLy8gZGlzdHJpYnV0
aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKy8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
Ly8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KK3ZhciBGQUlMSU5HX1RFU1RTX0RB
VEFTRVRfTkFNRSA9ICdGYWlsaW5nIHRlc3RzJzsKKwordmFyIGdfZHlncmFwaDsKK3ZhciBnX2J1
aWxkSW5kaWNlc0J5VGltZXN0YW1wID0ge307Cit2YXIgZ19jdXJyZW50QnVpbGRJbmRleCA9IC0x
OwordmFyIGdfY3VycmVudEJ1aWxkZXJUZXN0UmVzdWx0czsKKworLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCisvLyBNZXRob2RzIGFuZCBvYmplY3RzIGZyb20gZGFzaGJvYXJkX2Jhc2UuanMgdG8gb3Zl
cnJpZGUuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK2Z1bmN0aW9uIGdlbmVyYXRlUGFnZSgpCit7
CisgICAgZ19idWlsZEluZGljZXNCeVRpbWVzdGFtcCA9IHt9OworICAgIHZhciByZXN1bHRzID0g
Z19yZXN1bHRzQnlCdWlsZGVyW2dfY3VycmVudFN0YXRlLmJ1aWxkZXIgfHwgY3VycmVudEJ1aWxk
ZXJHcm91cCgpLmRlZmF1bHRCdWlsZGVyKCldOworCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBy
ZXN1bHRzW0ZJWEFCTEVfQ09VTlRTX0tFWV0ubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgdmFyIGJ1
aWxkRGF0ZSA9IG5ldyBEYXRlKHJlc3VsdHNbVElNRVNUQU1QU19LRVldW2ldICogMTAwMCk7Cisg
ICAgICAgIGdfYnVpbGRJbmRpY2VzQnlUaW1lc3RhbXBbYnVpbGREYXRlLmdldFRpbWUoKV0gPSBp
OworICAgIH0KKworICAgIGlmIChnX2N1cnJlbnRTdGF0ZS5idWlsZFRpbWVzdGFtcCAhPSAtMSAm
JiBnX2N1cnJlbnRTdGF0ZS5idWlsZFRpbWVzdGFtcCBpbiBnX2J1aWxkSW5kaWNlc0J5VGltZXN0
YW1wKSB7CisgICAgICAgIHZhciBuZXdCdWlsZEluZGV4ID0gZ19idWlsZEluZGljZXNCeVRpbWVz
dGFtcFtnX2N1cnJlbnRTdGF0ZS5idWlsZFRpbWVzdGFtcF07CisKKyAgICAgICAgaWYgKG5ld0J1
aWxkSW5kZXggPT0gZ19jdXJyZW50QnVpbGRJbmRleCkgeworICAgICAgICAgICAgLy8gVGhpcyBo
YXBwZW5zIHdoZW4gc2VsZWN0QnVpbGQgaXMgY2FsbGVkLCB3aGljaCB1cGRhdGVzIHRoZSBVSQor
ICAgICAgICAgICAgLy8gaW1tZWRpYXRlbHksIGluIGFkZGl0aW9uIHRvIHVwZGF0aW5nIHRoZSBs
b2NhdGlvbiBoYXNoICh3ZSBkb24ndAorICAgICAgICAgICAgLy8ganVzdCByZWx5IG9uIHRoZSBo
YXNoIGNoYW5nZSBzaW5jZSB3ZSBkb24ndCB3YW50IHRvIHJlZ2VuZXJhdGUgdGhlCisgICAgICAg
ICAgICAvLyB3aG9sZSBwYWdlIGp1c3QgYmVjYXVzZSB0aGUgdXNlciBjbGlja2VkIG9uIHNvbWV0
aGluZykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIGlmIChuZXdCdWlsZElu
ZGV4KQorICAgICAgICAgICAgZ19jdXJyZW50QnVpbGRJbmRleCA9IG5ld0J1aWxkSW5kZXg7Cisg
ICAgfQorCisgICAgaW5pdEN1cnJlbnRCdWlsZGVyVGVzdFJlc3VsdHMoKTsKKworICAgICQoJ3Rl
c3QtdHlwZS1zd2l0Y2hlcicpLmlubmVySFRNTCA9IHVpLmh0bWwudGVzdFR5cGVTd2l0Y2hlcigg
ZmFsc2UsCisgICAgICAgIHVpLmh0bWwuY2hlY2tib3goJ2lnbm9yZUZsYWt5VGVzdHMnLCAnSWdu
b3JlIGZsYWt5IHRlc3RzJywgZ19jdXJyZW50U3RhdGUuaWdub3JlRmxha3lUZXN0cywgJ2dfY3Vy
cmVudEJ1aWxkSW5kZXggPSAtMScpCisgICAgKTsKKworICAgIHVwZGF0ZVRpbWVsaW5lRm9yQnVp
bGRlcigpOworfQorCitmdW5jdGlvbiBpbml0Q3VycmVudEJ1aWxkZXJUZXN0UmVzdWx0cygpCit7
CisgICAgdmFyIHN0YXJ0VGltZSA9IERhdGUubm93KCk7CisgICAgZ19jdXJyZW50QnVpbGRlclRl
c3RSZXN1bHRzID0gX2RlY29tcHJlc3NSZXN1bHRzKGdfcmVzdWx0c0J5QnVpbGRlcltnX2N1cnJl
bnRTdGF0ZS5idWlsZGVyIHx8IGN1cnJlbnRCdWlsZGVyR3JvdXAoKS5kZWZhdWx0QnVpbGRlcigp
XSk7CisgICAgY29uc29sZS5sb2coICdUaW1lIHRvIGdldCB0ZXN0IHJlc3VsdHMgYnkgYnVpbGQ6
ICcgKyAoRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSkpOworfQorCitmdW5jdGlvbiBoYW5kbGVWYWxp
ZEhhc2hQYXJhbWV0ZXIoa2V5LCB2YWx1ZSkKK3sKKyAgICBzd2l0Y2goa2V5KSB7CisgICAgY2Fz
ZSAnYnVpbGRlcic6CisgICAgICAgIHZhbGlkYXRlUGFyYW1ldGVyKGdfY3VycmVudFN0YXRlLCBr
ZXksIHZhbHVlLAorICAgICAgICAgICAgZnVuY3Rpb24oKSB7IHJldHVybiB2YWx1ZSBpbiBjdXJy
ZW50QnVpbGRlcnMoKTsgfSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgJ2J1aWxk
VGltZXN0YW1wJzoKKyAgICAgICAgZ19jdXJyZW50U3RhdGUuYnVpbGRUaW1lc3RhbXAgPSBwYXJz
ZUludCh2YWx1ZSwgMTApOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlICdpZ25vcmVG
bGFreVRlc3RzJzoKKyAgICAgICAgZ19jdXJyZW50U3RhdGUuaWdub3JlRmxha3lUZXN0cyA9IHZh
bHVlID09ICd0cnVlJzsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworZ19kZWZhdWx0RGFzaGJvYXJkU3BlY2lmaWNT
dGF0ZVZhbHVlcyA9IHsKKyAgICBidWlsZGVyOiBudWxsLAorICAgIGJ1aWxkVGltZXN0YW1wOiAt
MSwKKyAgICBpZ25vcmVGbGFreVRlc3RzOiB0cnVlCit9OworCitEQl9TUEVDSUZJQ19JTlZBTElE
QVRJTkdfUEFSQU1FVEVSUyA9IHsKKyAgICAndGVzdFR5cGUnOiAnYnVpbGRlcicsCisgICAgJ2dy
b3VwJzogJ2J1aWxkZXInCit9OworCitmdW5jdGlvbiBzaG91bGRTaG93V2ViS2l0UmV2aXNpb25z
T25seSgpCit7CisgICAgcmV0dXJuIGlzVGlwT2ZUcmVlV2ViS2l0QnVpbGRlcigpOworfQorCitm
dW5jdGlvbiB1cGRhdGVUaW1lbGluZUZvckJ1aWxkZXIoKQoreworICAgIHZhciBidWlsZGVyID0g
Z19jdXJyZW50U3RhdGUuYnVpbGRlciB8fCBjdXJyZW50QnVpbGRlckdyb3VwKCkuZGVmYXVsdEJ1
aWxkZXIoKTsKKyAgICB2YXIgcmVzdWx0cyA9IGdfcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyXTsK
KyAgICB2YXIgZ3JhcGhEYXRhID0gW107CisKKyAgICB2YXIgYW5ub3RhdGlvbnMgPSBbXTsKKwor
ICAgIC8vIER5Z3JhcGggcHJlZmVycyB0byBiZSBoYW5kZWQgZGF0YSBpbiBjaHJvbm9sb2dpY2Fs
IG9yZGVyLgorICAgIGZvciAodmFyIGkgPSByZXN1bHRzW0ZJWEFCTEVfQ09VTlRTX0tFWV0ubGVu
Z3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgdmFyIGJ1aWxkRGF0ZSA9IG5ldyBEYXRl
KHJlc3VsdHNbVElNRVNUQU1QU19LRVldW2ldICogMTAwMCk7CisgICAgICAgIC8vIEZJWE1FOiBG
aW5kIGEgYmV0dGVyIHdheSB0byBleGNsdWRlIG91dGxpZXJzLiBUaGlzIGlzIGp1c3Qgc28gd2UK
KyAgICAgICAgLy8gZXhjbHVkZSBydW5zIHdoZXJlIGV2ZXJ5IHRlc3QgZmFpbGVkLgorICAgICAg
ICB2YXIgZmFpbHVyZUNvdW50ID0gTWF0aC5taW4ocmVzdWx0c1tGSVhBQkxFX0NPVU5UX0tFWV1b
aV0sIDEwMDAwKTsKKworICAgICAgICBpZiAoZ19jdXJyZW50U3RhdGUuaWdub3JlRmxha3lUZXN0
cykKKyAgICAgICAgICAgIGZhaWx1cmVDb3VudCAtPSBnX2N1cnJlbnRCdWlsZGVyVGVzdFJlc3Vs
dHMuZmxha3lEZWx0YXNCeUJ1aWxkW2ldLnRvdGFsIHx8IDA7CisKKyAgICAgICAgZ3JhcGhEYXRh
LnB1c2goW2J1aWxkRGF0ZSwgZmFpbHVyZUNvdW50XSk7CisKKyAgICAgICAgaWYgKCFzaG91bGRT
aG93V2ViS2l0UmV2aXNpb25zT25seSgpICYmIChyZXN1bHRzW1dFQktJVF9SRVZJU0lPTlNfS0VZ
XVtpXSAhPSByZXN1bHRzW1dFQktJVF9SRVZJU0lPTlNfS0VZXVtpICsgMV0pKSB7CisgICAgICAg
ICAgICBhbm5vdGF0aW9ucy5wdXNoKHsKKyAgICAgICAgICAgICAgICBzZXJpZXM6IEZBSUxJTkdf
VEVTVFNfREFUQVNFVF9OQU1FLAorICAgICAgICAgICAgICAgIHg6IGJ1aWxkRGF0ZSwKKyAgICAg
ICAgICAgICAgICBzaG9ydFRleHQ6ICdSJywKKyAgICAgICAgICAgICAgICB0ZXh0OiAnV2ViS2l0
IHJvbGw6IHInICsgcmVzdWx0c1tXRUJLSVRfUkVWSVNJT05TX0tFWV1baSArIDFdICsgJyB0byAn
ICsgcmVzdWx0c1tXRUJLSVRfUkVWSVNJT05TX0tFWV1baV0KKyAgICAgICAgICAgIH0pOworICAg
ICAgICB9CisgICAgfQorCisgICAgdmFyIHdpbmRvd1dpZHRoID0gZG9jdW1lbnQuZG9jdW1lbnRF
bGVtZW50LmNsaWVudFdpZHRoOworICAgIHZhciB3aW5kb3dIZWlnaHQgPSBkb2N1bWVudC5kb2N1
bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0OworICAgIHZhciBzd2l0Y2hlck5vZGUgPSAkKCd0ZXN0
LXR5cGUtc3dpdGNoZXInKTsKKyAgICB2YXIgaW5zcGVjdG9yTm9kZSA9ICQoJ2luc3BlY3Rvci1j
b250YWluZXInKTsKKyAgICB2YXIgZ3JhcGhXaWR0aCA9IHdpbmRvd1dpZHRoIC0gMjAgLSBpbnNw
ZWN0b3JOb2RlLm9mZnNldFdpZHRoOworICAgIHZhciBncmFwaEhlaWdodCA9IHdpbmRvd0hlaWdo
dCAtIHN3aXRjaGVyTm9kZS5vZmZzZXRUb3AgLSBzd2l0Y2hlck5vZGUub2Zmc2V0SGVpZ2h0IC0g
MjA7CisKKyAgICB2YXIgY29udGFpbmVyTm9kZSA9ICQoJ3RpbWVsaW5lLWNvbnRhaW5lcicpOwor
ICAgIGNvbnRhaW5lck5vZGUuc3R5bGUuaGVpZ2h0ID0gZ3JhcGhIZWlnaHQgKyAncHgnOworICAg
IGNvbnRhaW5lck5vZGUuc3R5bGUud2lkdGggPSBncmFwaFdpZHRoICsgJ3B4JzsKKyAgICBpbnNw
ZWN0b3JOb2RlLnN0eWxlLmhlaWdodCA9IGdyYXBoSGVpZ2h0ICsgJ3B4JzsKKworICAgIGdfZHln
cmFwaCA9IG5ldyBEeWdyYXBoKAorICAgICAgICBjb250YWluZXJOb2RlLAorICAgICAgICBncmFw
aERhdGEsIHsKKyAgICAgICAgICAgIGxhYmVsczogWydEYXRlJywgRkFJTElOR19URVNUU19EQVRB
U0VUX05BTUVdLAorICAgICAgICAgICAgd2lkdGg6IGdyYXBoV2lkdGgsCisgICAgICAgICAgICBo
ZWlnaHQ6IGdyYXBoSGVpZ2h0LAorICAgICAgICAgICAgY2xpY2tDYWxsYmFjazogZnVuY3Rpb24o
ZXZlbnQsIGRhdGUpIHsKKyAgICAgICAgICAgICAgICBzZWxlY3RCdWlsZChyZXN1bHRzLCBidWls
ZGVyLCBnX2R5Z3JhcGgsIGdfYnVpbGRJbmRpY2VzQnlUaW1lc3RhbXBbZGF0ZV0pOworICAgICAg
ICAgICAgfSwKKyAgICAgICAgICAgIGRyYXdDYWxsYmFjazogZnVuY3Rpb24oZHlncmFwaCwgaXNJ
bml0aWFsKSB7CisgICAgICAgICAgICAgICAgaWYgKGlzSW5pdGlhbCkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIHVwZGF0ZUJ1aWxkSW5kaWNhdG9yKHJlc3Vs
dHMsIGR5Z3JhcGgpOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIC8vIHhWYWx1ZVBhcnNl
ciBpcyBuZWNlc3NhcnkgZm9yIGFubm90YXRpb25zIHRvIHdvcmssIGV2ZW4gdGhvdWdoIHdlCisg
ICAgICAgICAgICAvLyBhbHJlYWR5IGhhdmUgRGF0ZSBpbnN0YW5jZXMKKyAgICAgICAgICAgIHhW
YWx1ZVBhcnNlcjogZnVuY3Rpb24oaW5wdXQpIHsgcmV0dXJuIGlucHV0LmdldFRpbWUoKTsgfQor
ICAgICAgICB9KTsKKyAgICBpZiAoYW5ub3RhdGlvbnMubGVuZ3RoKQorICAgICAgICBnX2R5Z3Jh
cGguc2V0QW5ub3RhdGlvbnMoYW5ub3RhdGlvbnMpOworCisgICAgaW5zcGVjdG9yTm9kZS5zdHls
ZS52aXNpYmlsaXR5ID0gJ3Zpc2libGUnOworCisgICAgaWYgKGdfY3VycmVudEJ1aWxkSW5kZXgg
IT0gLTEpCisgICAgICAgIHNlbGVjdEJ1aWxkKHJlc3VsdHMsIGJ1aWxkZXIsIGdfZHlncmFwaCwg
Z19jdXJyZW50QnVpbGRJbmRleCk7Cit9CisKK2Z1bmN0aW9uIHNlbGVjdEJ1aWxkKHJlc3VsdHMs
IGJ1aWxkZXIsIGR5Z3JhcGgsIGluZGV4KQoreworICAgIGdfY3VycmVudEJ1aWxkSW5kZXggPSBp
bmRleDsKKyAgICB1cGRhdGVCdWlsZEluZGljYXRvcihyZXN1bHRzLCBkeWdyYXBoKTsKKyAgICB1
cGRhdGVCdWlsZEluc3BlY3RvcihyZXN1bHRzLCBidWlsZGVyLCBkeWdyYXBoLCBpbmRleCk7Cisg
ICAgc2V0UXVlcnlQYXJhbWV0ZXIoJ2J1aWxkVGltZXN0YW1wJywgcmVzdWx0c1tUSU1FU1RBTVBT
X0tFWV1baW5kZXhdICogMTAwMCk7Cit9CisKK2Z1bmN0aW9uIHVwZGF0ZUJ1aWxkSW5kaWNhdG9y
KHJlc3VsdHMsIGR5Z3JhcGgpCit7CisgICAgdmFyIGluZGljYXRvck5vZGUgPSAkKCdpbmRpY2F0
b3InKTsKKworICAgIGlmICghaW5kaWNhdG9yTm9kZSkgeworICAgICAgICB2YXIgY29udGFpbmVy
Tm9kZSA9ICQoJ3RpbWVsaW5lLWNvbnRhaW5lcicpOworICAgICAgICBpbmRpY2F0b3JOb2RlID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICAgIGluZGljYXRvck5vZGUuaWQg
PSAnaW5kaWNhdG9yJzsKKyAgICAgICAgaW5kaWNhdG9yTm9kZS5zdHlsZS5oZWlnaHQgPSBjb250
YWluZXJOb2RlLm9mZnNldEhlaWdodCArICdweCc7CisgICAgICAgIGNvbnRhaW5lck5vZGUuYXBw
ZW5kQ2hpbGQoaW5kaWNhdG9yTm9kZSk7CisgICAgfQorCisgICAgaWYgKGdfY3VycmVudEJ1aWxk
SW5kZXggPT0gLTEpCisgICAgICAgIGluZGljYXRvck5vZGUuc3R5bGUuZGlzcGxheSA9ICdub25l
JzsKKyAgICBlbHNlIHsKKyAgICAgICAgaW5kaWNhdG9yTm9kZS5zdHlsZS5kaXNwbGF5ID0gJ2Js
b2NrJzsKKyAgICAgICAgdmFyIGJ1aWxkRGF0ZSA9IG5ldyBEYXRlKHJlc3VsdHNbVElNRVNUQU1Q
U19LRVldW2dfY3VycmVudEJ1aWxkSW5kZXhdICogMTAwMCk7CisgICAgICAgIHZhciBkb21Db29y
ZHMgPSBkeWdyYXBoLnRvRG9tQ29vcmRzKGJ1aWxkRGF0ZSwgMCk7CisgICAgICAgIGluZGljYXRv
ck5vZGUuc3R5bGUubGVmdCA9IGRvbUNvb3Jkc1swXSArICdweCc7CisgICAgfQorfQorCitmdW5j
dGlvbiB1cGRhdGVCdWlsZEluc3BlY3RvcihyZXN1bHRzLCBidWlsZGVyLCBkeWdyYXBoLCBpbmRl
eCkKK3sKKyAgICB2YXIgaHRtbCA9ICc8dGFibGUgaWQ9Imluc3BlY3Rvci10YWJsZSI+PGNhcHRp
b24+RGV0YWlsczwvY2FwdGlvbj4nOworCisgICAgZnVuY3Rpb24gYWRkUm93KGxhYmVsLCB2YWx1
ZSkKKyAgICB7CisgICAgICAgIGh0bWwgKz0gJzx0cj48dGQgY2xhc3M9ImxhYmVsIj4nICsgbGFi
ZWwgKyAnPC90ZD48dGQ+JyArIHZhbHVlICsgJzwvdGQ+PC90cj4nOworICAgIH0KKworICAgIC8v
IEJ1aWxkZXIgYW5kIHJlc3VsdHMgbGlua3MKKyAgICB2YXIgYnVpbGROdW1iZXIgPSByZXN1bHRz
W0JVSUxEX05VTUJFUlNfS0VZXVtpbmRleF07CisgICAgYWRkUm93KCcnLCAnJyk7CisgICAgdmFy
IG1hc3RlciA9IGJ1aWxkZXJNYXN0ZXIoYnVpbGRlcik7CisgICAgdmFyIGJ1aWxkVXJsID0gbWFz
dGVyLmxvZ1BhdGgoYnVpbGRlciwgcmVzdWx0c1tCVUlMRF9OVU1CRVJTX0tFWV1baW5kZXhdKTsK
KyAgICBpZiAobWFzdGVyLm5hbWUgPT0gV0VCS0lUX0JVSUxERVJfTUFTVEVSKSB7CisgICAgICAg
IHZhciByZXN1bHRzVXJsID0gJ2h0dHA6Ly9idWlsZC53ZWJraXQub3JnL3Jlc3VsdHMvJyArIGJ1
aWxkZXIgKyAnL3InICsgcmVzdWx0c1tXRUJLSVRfUkVWSVNJT05TX0tFWV1baW5kZXhdICsKKyAg
ICAgICAgICAgICcgKCcgKyByZXN1bHRzW0JVSUxEX05VTUJFUlNfS0VZXVtpbmRleF0gKyAnKSc7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgdmFyIHJlc3VsdHNVcmwgPSAnaHR0cDovL2J1aWxkLmNo
cm9taXVtLm9yZy9mL2Nocm9taXVtL2xheW91dF90ZXN0X3Jlc3VsdHMvJyArCisgICAgICAgICAg
ICBjdXJyZW50QnVpbGRlcnMoKVtidWlsZGVyXSArICcvJyArIHJlc3VsdHNbQ0hST01FX1JFVklT
SU9OU19LRVldW2luZGV4XTsKKyAgICB9CisKKyAgICBhZGRSb3coJ0J1aWxkOicsICc8YSBocmVm
PSInICsgYnVpbGRVcmwgKyAnIiB0YXJnZXQ9Il9ibGFuayI+JyArIGJ1aWxkTnVtYmVyICsgJzwv
YT4gKDxhIGhyZWY9IicgKyByZXN1bHRzVXJsICsgJyIgdGFyZ2V0PSJfYmxhbmsiPnJlc3VsdHM8
L2E+KScpOworCisgICAgLy8gUmV2aXNpb24gbGluayhzKQorICAgIGlmICghc2hvdWxkU2hvd1dl
YktpdFJldmlzaW9uc09ubHkoKSkKKyAgICAgICAgYWRkUm93KCdDaHJvbWl1bSBjaGFuZ2U6Jywg
dWkuaHRtbC5jaHJvbWl1bVJldmlzaW9uTGluayhyZXN1bHRzLCBpbmRleCkpOworICAgIGFkZFJv
dygnV2ViS2l0IGNoYW5nZTonLCB1aS5odG1sLndlYktpdFJldmlzaW9uTGluayhyZXN1bHRzLCBp
bmRleCkpOworCisgICAgLy8gVGVzdCBzdGF0dXMvY291bnRzCisgICAgYWRkUm93KCcnLCAnJyk7
CisKKyAgICBmdW5jdGlvbiBhZGROdW1iZXJSb3cobGFiZWwsIGN1cnJlbnRWYWx1ZSwgcHJldmlv
dXNWYWx1ZSkKKyAgICB7CisgICAgICAgIHZhciBkZWx0YSA9IGN1cnJlbnRWYWx1ZSAtIHByZXZp
b3VzVmFsdWU7CisgICAgICAgIHZhciBkZWx0YVRleHQgPSAnJworICAgICAgICBpZiAoZGVsdGEg
PCAwKQorICAgICAgICAgICAgZGVsdGFUZXh0ID0gJyA8c3BhbiBjbGFzcz0iZGVsdGEgbmVnYXRp
dmUiPicgKyBkZWx0YSArICc8L3NwYW4+JzsKKyAgICAgICAgZWxzZSBpZiAoZGVsdGEgPiAwKQor
ICAgICAgICAgICAgZGVsdGFUZXh0ID0gJyA8c3BhbiBjbGFzcz0iZGVsdGEgcG9zaXRpdmUiPisn
ICsgZGVsdGEgKyAnPC9zcGFuPic7CisKKyAgICAgICAgYWRkUm93KGxhYmVsLCBjdXJyZW50VmFs
dWUgKyBkZWx0YVRleHQpOworICAgIH0KKworICAgIHZhciBleHBlY3RhdGlvbnMgPSBleHBlY3Rh
dGlvbnNNYXAoKTsKKyAgICB2YXIgZmxha3lEZWx0YXNCeUJ1aWxkID0gZ19jdXJyZW50QnVpbGRl
clRlc3RSZXN1bHRzLmZsYWt5RGVsdGFzQnlCdWlsZDsKKyAgICBmb3IgKHZhciBleHBlY3RhdGlv
bktleSBpbiBleHBlY3RhdGlvbnMpIHsKKyAgICAgICAgaWYgKGV4cGVjdGF0aW9uS2V5IGluIHJl
c3VsdHNbRklYQUJMRV9DT1VOVFNfS0VZXVtpbmRleF0pIHsKKyAgICAgICAgICAgIHZhciBjdXJy
ZW50Q291bnQgPSByZXN1bHRzW0ZJWEFCTEVfQ09VTlRTX0tFWV1baW5kZXhdW2V4cGVjdGF0aW9u
S2V5XTsKKyAgICAgICAgICAgIHZhciBwcmV2aW91c0NvdW50ID0gcmVzdWx0c1tGSVhBQkxFX0NP
VU5UU19LRVldW2luZGV4ICsgMV1bZXhwZWN0YXRpb25LZXldOworICAgICAgICAgICAgaWYgKGdf
Y3VycmVudFN0YXRlLmlnbm9yZUZsYWt5VGVzdHMpIHsKKyAgICAgICAgICAgICAgICBjdXJyZW50
Q291bnQgLT0gZmxha3lEZWx0YXNCeUJ1aWxkW2luZGV4XVtleHBlY3RhdGlvbktleV0gfHwgMDsK
KyAgICAgICAgICAgICAgICBwcmV2aW91c0NvdW50IC09IGZsYWt5RGVsdGFzQnlCdWlsZFtpbmRl
eCArIDFdW2V4cGVjdGF0aW9uS2V5XSB8fCAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YWRkTnVtYmVyUm93KGV4cGVjdGF0aW9uc1tleHBlY3RhdGlvbktleV0sIGN1cnJlbnRDb3VudCwg
cHJldmlvdXNDb3VudCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2YXIgY3VycmVudFRvdGFs
ID0gcmVzdWx0c1tGSVhBQkxFX0NPVU5UX0tFWV1baW5kZXhdOworICAgIHZhciBwcmV2aW91c1Rv
dGFsID0gcmVzdWx0c1tGSVhBQkxFX0NPVU5UX0tFWV1baW5kZXggKyAxXTsKKyAgICBpZiAoZ19j
dXJyZW50U3RhdGUuaWdub3JlRmxha3lUZXN0cykgeworICAgICAgICBjdXJyZW50VG90YWwgLT0g
Zmxha3lEZWx0YXNCeUJ1aWxkW2luZGV4XS50b3RhbCB8fCAwOworICAgICAgICBwcmV2aW91c1Rv
dGFsIC09IGZsYWt5RGVsdGFzQnlCdWlsZFtpbmRleCArIDFdLnRvdGFsIHx8IDA7CisgICAgfQor
ICAgIGFkZE51bWJlclJvdygnVG90YWwgZmFpbGluZyB0ZXN0czonLCBjdXJyZW50VG90YWwsIHBy
ZXZpb3VzVG90YWwpOworCisgICAgaHRtbCArPSAnPC90YWJsZT4nOworCisgICAgaHRtbCArPSAn
PGRpdiBpZD0iY2hhbmdlcy1idXR0b24iIGNsYXNzPSJidXR0b25zIj4nOworICAgIGh0bWwgKz0g
JzxidXR0b24+U2hvdyBjaGFuZ2VkIHRlc3QgcmVzdWx0czwvYnV0dG9uPic7CisgICAgaHRtbCAr
PSAnPC9kaXY+JzsKKworICAgIGh0bWwgKz0gJzxkaXYgaWQ9ImJ1aWxkLWJ1dHRvbnMiIGNsYXNz
PSJidXR0b25zIj4nOworICAgIGh0bWwgKz0gJzxidXR0b24+UHJldmlvdXMgYnVpbGQ8L2J1dHRv
bj4gPGJ1dHRvbj5OZXh0IGJ1aWxkPC9idXR0b24+JzsKKyAgICBodG1sICs9ICc8L2Rpdj4nOwor
CisgICAgdmFyIGluc3BlY3Rvck5vZGUgPSAkKCdpbnNwZWN0b3ItY29udGFpbmVyJyk7CisgICAg
aW5zcGVjdG9yTm9kZS5pbm5lckhUTUwgPSBodG1sOworCisgICAgaW5zcGVjdG9yTm9kZS5nZXRF
bGVtZW50c0J5VGFnTmFtZSgnYnV0dG9uJylbMF0ub25jbGljayA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICBzaG93UmVzdWx0c0RlbHRhKGluZGV4LCBidWlsZE51bWJlciwgYnVpbGRVcmwsIHJlc3Vs
dHNVcmwpOworICAgIH07CisgICAgaW5zcGVjdG9yTm9kZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgn
YnV0dG9uJylbMV0ub25jbGljayA9IGZ1bmN0aW9uKCkgeworICAgICAgICBzZWxlY3RCdWlsZChy
ZXN1bHRzLCBidWlsZGVyLCBkeWdyYXBoLCBpbmRleCArIDEpOworICAgIH07CisgICAgaW5zcGVj
dG9yTm9kZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYnV0dG9uJylbMl0ub25jbGljayA9IGZ1bmN0
aW9uKCkgeworICAgICAgICBzZWxlY3RCdWlsZChyZXN1bHRzLCBidWlsZGVyLCBkeWdyYXBoLCBp
bmRleCAtIDEpOworICAgIH07Cit9CisKK2Z1bmN0aW9uIHNob3dSZXN1bHRzRGVsdGEoaW5kZXgs
IGJ1aWxkTnVtYmVyLCBidWlsZFVybCwgcmVzdWx0c1VybCkKK3sKKyAgICB2YXIgZmxha3lUZXN0
cyA9IGdfY3VycmVudEJ1aWxkZXJUZXN0UmVzdWx0cy5mbGFreVRlc3RzOworICAgIHZhciBjdXJy
ZW50UmVzdWx0cyA9IGdfY3VycmVudEJ1aWxkZXJUZXN0UmVzdWx0cy5yZXN1bHRzQnlCdWlsZFtp
bmRleF07CisgICAgdmFyIHRlc3ROYW1lcyA9IGdfY3VycmVudEJ1aWxkZXJUZXN0UmVzdWx0cy50
ZXN0TmFtZXM7CisgICAgdmFyIHByZXZpb3VzUmVzdWx0cyA9IGdfY3VycmVudEJ1aWxkZXJUZXN0
UmVzdWx0cy5yZXN1bHRzQnlCdWlsZFtpbmRleCArIDFdOworICAgIHZhciBleHBlY3RhdGlvbnMg
PSBleHBlY3RhdGlvbnNNYXAoKTsKKworICAgIHZhciBkZWx0YXMgPSB7fTsKKyAgICBmdW5jdGlv
biBhZGREZWx0YShjYXRlZ29yeSwgdGVzdEluZGV4KQorICAgIHsKKyAgICAgICAgaWYgKGdfY3Vy
cmVudFN0YXRlLmlnbm9yZUZsYWt5VGVzdHMgJiYgZmxha3lUZXN0c1t0ZXN0SW5kZXhdKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoIShjYXRlZ29yeSBpbiBkZWx0YXMpKQorICAg
ICAgICAgICAgZGVsdGFzW2NhdGVnb3J5XSA9IFtdOworICAgICAgICB2YXIgdGVzdE5hbWUgPSB0
ZXN0TmFtZXNbdGVzdEluZGV4XTsKKyAgICAgICAgdmFyIGZsYWtpbmVzc0Rhc2hib2FyZFVybCA9
ICdmbGFraW5lc3NfZGFzaGJvYXJkLmh0bWwnICsgKGxvY2F0aW9uLmhhc2ggPyBsb2NhdGlvbi5o
YXNoICsgJyYnIDogJyMnKSArICd0ZXN0cz0nICsgdGVzdE5hbWU7CisgICAgICAgIHZhciBodG1s
ID0gJzxhIGhyZWY9IicgKyBmbGFraW5lc3NEYXNoYm9hcmRVcmwgKyAnIj4nICsgdGVzdE5hbWUg
KyAnPC9hPic7CisgICAgICAgIGlmIChmbGFreVRlc3RzW3Rlc3RJbmRleF0pCisgICAgICAgICAg
ICBodG1sICs9ICcgPHNwYW4gc3R5bGU9ImNvbG9yOiAjZjY2Ij5wb3NzaWJseSBmbGFreTwvc3Bh
bj4nOworICAgICAgICBkZWx0YXNbY2F0ZWdvcnldLnB1c2goaHRtbCk7CisgICAgfQorCisgICAg
Zm9yICh2YXIgdGVzdEluZGV4ID0gMDsgdGVzdEluZGV4IDwgY3VycmVudFJlc3VsdHMubGVuZ3Ro
OyB0ZXN0SW5kZXgrKykgeworICAgICAgICBpZiAoY3VycmVudFJlc3VsdHNbdGVzdEluZGV4XSA9
PT0gdW5kZWZpbmVkKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKHByZXZp
b3VzUmVzdWx0c1t0ZXN0SW5kZXhdICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgIGlmIChj
dXJyZW50UmVzdWx0c1t0ZXN0SW5kZXhdID09IHByZXZpb3VzUmVzdWx0c1t0ZXN0SW5kZXhdKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYWRkRGVsdGEoJ1dhcyA8Yj4n
ICsgZXhwZWN0YXRpb25zW3ByZXZpb3VzUmVzdWx0c1t0ZXN0SW5kZXhdXSArICc8L2I+IG5vdyA8
Yj4nICsgZXhwZWN0YXRpb25zW2N1cnJlbnRSZXN1bHRzW3Rlc3RJbmRleF1dICsgJzwvYj4nLCB0
ZXN0SW5kZXgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGFkZERlbHRhKCdOZXdseSA8
Yj4nICsgZXhwZWN0YXRpb25zW2N1cnJlbnRSZXN1bHRzW3Rlc3RJbmRleF1dICsgJzwvYj4nLCB0
ZXN0SW5kZXgpOworICAgIH0KKworICAgIGZvciAodmFyIHRlc3RJbmRleCA9IDA7IHRlc3RJbmRl
eCA8IHByZXZpb3VzUmVzdWx0cy5sZW5ndGg7IHRlc3RJbmRleCsrKSB7CisgICAgICAgIGlmIChw
cmV2aW91c1Jlc3VsdHNbdGVzdEluZGV4XSA9PT0gdW5kZWZpbmVkKQorICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIGlmIChjdXJyZW50UmVzdWx0c1t0ZXN0SW5kZXhdID09PSB1bmRlZmlu
ZWQpCisgICAgICAgICAgICBhZGREZWx0YSgnV2FzIDxiPicgKyBleHBlY3RhdGlvbnNbcHJldmlv
dXNSZXN1bHRzW3Rlc3RJbmRleF1dICsgJzwvYj4nLCB0ZXN0SW5kZXgpOworICAgIH0KKworICAg
IHZhciBodG1sID0gJyc7CisKKyAgICBodG1sICs9ICc8aGVhZD48YmFzZSB0YXJnZXQ9Il9ibGFu
ayI+PC9oZWFkPic7CisgICAgaHRtbCArPSAnPGgxPkNoYW5nZXMgaW4gdGVzdCByZXN1bHRzPC9o
MT4nOworCisgICAgaHRtbCArPSAnPHA+Rm9yIGJ1aWxkIDxhIGhyZWY9IicgKyBidWlsZFVybCAr
ICciIHRhcmdldD0iX2JsYW5rIj4nICsKKyAgICAgICAgYnVpbGROdW1iZXIgKyAnPC9hPiAnICsg
Jyg8YSBocmVmPSInICsgcmVzdWx0c1VybCArCisgICAgICAgICciIHRhcmdldD0iX2JsYW5rIj5y
ZXN1bHRzPC9hPik8L3A+JzsKKworICAgIGZvciAodmFyIGRlbHRhQ2F0ZWdvcnkgaW4gZGVsdGFz
KSB7CisgICAgICAgIGh0bWwgKz0gJzxwPjxkaXY+JyArIGRlbHRhQ2F0ZWdvcnkgKyAnICgnICsg
ZGVsdGFzW2RlbHRhQ2F0ZWdvcnldLmxlbmd0aCArICcpPC9kaXY+PHVsPic7CisgICAgICAgIGRl
bHRhc1tkZWx0YUNhdGVnb3J5XS5mb3JFYWNoKGZ1bmN0aW9uKGRlbHRhSHRtbCkgeworICAgICAg
ICAgICAgaHRtbCArPSAnPGxpPicgKyBkZWx0YUh0bWwgKyAnPC9saT4nOworICAgICAgICB9KTsK
KyAgICAgICAgaHRtbCArPSAnPC91bD48L3A+JzsKKyAgICB9CisKKyAgICB2YXIgZGVsdGFXaW5k
b3cgPSB3aW5kb3cub3BlbigpOworICAgIGRlbHRhV2luZG93LmRvY3VtZW50LndyaXRlKGh0bWwp
OworfQorCit2YXIgX0ZBSUxVUkVfRVhQRUNUQVRJT05TID0geworICAgICdUJzogMSwKKyAgICAn
Ric6IDEsCisgICAgJ0MnOiAxLAorICAgICdJJzogMSwKKyAgICAnWic6IDEKK307CisKKy8vICJE
ZWNvbXByZXNzZXMiIHRoZSBSTEUtZW5jb2Rpbmcgb2YgdGVzdCByZXN1bHRzIHNvIHRoYXQgd2Ug
Y2FuIHF1ZXJ5IGl0CisvLyBieSBidWlsZCBpbmRleCBhbmQgdGVzdCBuYW1lLgorLy8KKy8vIEBw
YXJhbSB7T2JqZWN0fSByZXN1bHRzIHJlc3VsdHMgZm9yIHRoZSBjdXJyZW50IGJ1aWxkZXIKKy8v
IEByZXR1cm4gT2JqZWN0IHdpdGggdGhlc2UgcHJvcGVydGllczoKKy8vICAgICAtIHRlc3ROYW1l
czogYXJyYXkgbWFwcGluZyB0ZXN0IGluZGV4IHRvIHRlc3QgbmFtZXMuCisvLyAgICAgLSByZXN1
bHRzQnlCdWlsZDogYXJyYXkgb2YgYnVpbGRzLCBmb3IgZWFjaCBidWlsZCBhIChzcGFyc2UpIGFy
cmF5IG9mIHRlc3QgcmVzdWx0cyBieSB0ZXN0IGluZGV4LgorLy8gICAgIC0gZmxha3lUZXN0czog
YXJyYXkgd2l0aCB0aGUgYm9vbGVhbiB2YWx1ZSB0cnVlIGF0IHRlc3QgaW5kaWNlcyB0aGF0IGFy
ZSBjb25zaWRlcmVkIGZsYWt5IChtb3JlIHRoYW4gb25lIHNpbmdsZS1idWlsZCBmYWlsdXJlKS4K
Ky8vICAgICAtIGZsYWt5RGVsdGFzQnlCdWlsZDogYXJyYXkgb2YgYnVpbGRzLCBmb3IgZWFjaCBi
dWlsZCBhIGNvdW50IG9mIGZsYWt5IHRlc3QgcmVzdWx0cyBieSBleHBlY3RhdGlvbiwgYXMgd2Vs
bCBhcyBhIHRvdGFsLgorZnVuY3Rpb24gX2RlY29tcHJlc3NSZXN1bHRzKGJ1aWxkZXJSZXN1bHRz
KQoreworICAgIHZhciBidWlsZGVyVGVzdFJlc3VsdHMgPSBidWlsZGVyUmVzdWx0c1tURVNUU19L
RVldOworICAgIHZhciBidWlsZENvdW50ID0gYnVpbGRlclJlc3VsdHNbRklYQUJMRV9DT1VOVFNf
S0VZXS5sZW5ndGg7CisgICAgdmFyIHJlc3VsdHNCeUJ1aWxkID0gbmV3IEFycmF5KGJ1aWxkQ291
bnQpOworICAgIHZhciBmbGFreURlbHRhc0J5QnVpbGQgPSBuZXcgQXJyYXkoYnVpbGRDb3VudCk7
CisKKyAgICAvLyBQcmUtc2l6aW5nIHRoZSB0ZXN0IHJlc3VsdCBhcnJheXMgZm9yIGVhY2ggYnVp
bGQgc2F2ZXMgdXMgfjI1MG1zCisgICAgdmFyIHRlc3RDb3VudCA9IDA7CisgICAgZm9yICh2YXIg
dGVzdE5hbWUgaW4gYnVpbGRlclRlc3RSZXN1bHRzKQorICAgICAgICB0ZXN0Q291bnQrKzsKKyAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IGJ1aWxkQ291bnQ7IGkrKykgeworICAgICAgICByZXN1bHRz
QnlCdWlsZFtpXSA9IG5ldyBBcnJheSh0ZXN0Q291bnQpOworICAgICAgICByZXN1bHRzQnlCdWls
ZFtpXVt0ZXN0Q291bnQgLSAxXSA9IHVuZGVmaW5lZDsKKyAgICAgICAgZmxha3lEZWx0YXNCeUJ1
aWxkW2ldID0ge307CisgICAgfQorCisgICAgLy8gVXNpbmcgaW5kaWNlcyBpbnN0ZWFkIG9mIHRo
ZSBmdWxsIHRlc3QgbmFtZXMgZm9yIGVhY2ggYnVpbGQgc2F2ZXMgdXMKKyAgICAvLyB+MTUwMG1z
CisgICAgdmFyIHRlc3RJbmRleCA9IDA7CisgICAgdmFyIHRlc3ROYW1lcyA9IG5ldyBBcnJheSh0
ZXN0Q291bnQpOworICAgIHZhciBmbGFreVRlc3RzID0gbmV3IEFycmF5KHRlc3RDb3VudCk7CisK
KyAgICAvLyBEZWNvbXByZXNzIGFuZCAiaW52ZXJ0IiB0ZXN0IHJlc3VsdHMgKGJ5IGJ1aWxkIGlu
c3RlYWQgb2YgYnkgdGVzdCkgYW5kCisgICAgLy8gZGV0ZXJtaW5lIHdoaWNoIGFyZSBmbGFreS4K
KyAgICBmb3IgKHZhciB0ZXN0TmFtZSBpbiBidWlsZGVyVGVzdFJlc3VsdHMpIHsKKyAgICAgICAg
dmFyIG9uZUJ1aWxkRmFpbHVyZUNvdW50ID0gMDsKKworICAgICAgICB0ZXN0TmFtZXNbdGVzdElu
ZGV4XSA9IHRlc3ROYW1lOworICAgICAgICB2YXIgdGVzdFJlc3VsdHMgPSBidWlsZGVyVGVzdFJl
c3VsdHNbdGVzdE5hbWVdLnJlc3VsdHM7CisgICAgICAgIGZvciAodmFyIGkgPSAwLCBybGVSZXN1
bHQsIGN1cnJlbnRCdWlsZEluZGV4ID0gMDsgKHJsZVJlc3VsdCA9IHRlc3RSZXN1bHRzW2ldKSAm
JiBjdXJyZW50QnVpbGRJbmRleCA8IGJ1aWxkQ291bnQ7IGkrKykgeworICAgICAgICAgICAgdmFy
IGNvdW50ID0gcmxlUmVzdWx0W1JMRS5MRU5HVEhdOworICAgICAgICAgICAgdmFyIHZhbHVlID0g
cmxlUmVzdWx0W1JMRS5WQUxVRV07CisKKyAgICAgICAgICAgIGlmIChjb3VudCA9PSAxICYmIHZh
bHVlIGluIF9GQUlMVVJFX0VYUEVDVEFUSU9OUykKKyAgICAgICAgICAgICAgICBvbmVCdWlsZEZh
aWx1cmVDb3VudCsrOworCisgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvdW50OyBq
KyspIHsKKyAgICAgICAgICAgICAgICByZXN1bHRzQnlCdWlsZFtjdXJyZW50QnVpbGRJbmRleCsr
XVt0ZXN0SW5kZXhdID0gdmFsdWU7CisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRCdWlsZElu
ZGV4ID09IGJ1aWxkQ291bnQpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKG9uZUJ1aWxkRmFpbHVyZUNvdW50ID4gMikK
KyAgICAgICAgICAgIGZsYWt5VGVzdHNbdGVzdEluZGV4XSA9IHRydWU7CisKKyAgICAgICAgdGVz
dEluZGV4Kys7CisgICAgfQorCisgICAgLy8gTm93IHRoYXQgd2Uga25vdyB3aGljaCB0ZXN0cyBh
cmUgZmxha3ksIGNvdW50IHRoZSB0ZXN0IHJlc3VsdHMgdGhhdCBhcmUKKyAgICAvLyBmcm9tIGZs
YWt5IHRlc3RzIGZvciBlYWNoIGJ1aWxkLgorICAgIHRlc3RJbmRleCA9IDA7CisgICAgZm9yICh2
YXIgdGVzdE5hbWUgaW4gYnVpbGRlclRlc3RSZXN1bHRzKSB7CisgICAgICAgIGlmICghZmxha3lU
ZXN0c1t0ZXN0SW5kZXgrK10pCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICB2YXIg
dGVzdFJlc3VsdHMgPSBidWlsZGVyVGVzdFJlc3VsdHNbdGVzdE5hbWVdLnJlc3VsdHM7CisgICAg
ICAgIGZvciAodmFyIGkgPSAwLCBybGVSZXN1bHQsIGN1cnJlbnRCdWlsZEluZGV4ID0gMDsgKHJs
ZVJlc3VsdCA9IHRlc3RSZXN1bHRzW2ldKSAmJiBjdXJyZW50QnVpbGRJbmRleCA8IGJ1aWxkQ291
bnQ7IGkrKykgeworICAgICAgICAgICAgdmFyIGNvdW50ID0gcmxlUmVzdWx0W1JMRS5MRU5HVEhd
OworICAgICAgICAgICAgdmFyIHZhbHVlID0gcmxlUmVzdWx0W1JMRS5WQUxVRV07CisKKyAgICAg
ICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY291bnQ7IGorKykgeworICAgICAgICAgICAgICAg
IHZhciBidWlsZFRlc3RSZXN1bHRzID0gZmxha3lEZWx0YXNCeUJ1aWxkW2N1cnJlbnRCdWlsZElu
ZGV4KytdOworICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFkZEZsYWt5RGVsdGEoa2V5KQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCEoa2V5IGluIGJ1aWxkVGVz
dFJlc3VsdHMpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRUZXN0UmVzdWx0c1trZXld
ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRUZXN0UmVzdWx0c1trZXldKys7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGFkZEZsYWt5RGVsdGEodmFsdWUpOworICAg
ICAgICAgICAgICAgIGlmICh2YWx1ZSAhPSAnUCcgJiYgdmFsdWUgIT0gJ04nKQorICAgICAgICAg
ICAgICAgICAgICBhZGRGbGFreURlbHRhKCd0b3RhbCcpOworICAgICAgICAgICAgICAgIGlmIChj
dXJyZW50QnVpbGRJbmRleCA9PSBidWlsZENvdW50KQorICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB7CisgICAg
ICAgIHRlc3ROYW1lczogdGVzdE5hbWVzLAorICAgICAgICByZXN1bHRzQnlCdWlsZDogcmVzdWx0
c0J5QnVpbGQsCisgICAgICAgIGZsYWt5VGVzdHM6IGZsYWt5VGVzdHMsCisgICAgICAgIGZsYWt5
RGVsdGFzQnlCdWlsZDogZmxha3lEZWx0YXNCeUJ1aWxkCisgICAgfTsKK30KKworZG9jdW1lbnQu
YWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGZ1bmN0aW9uKGUpIHsKKyAgICBpZiAoZ19jdXJy
ZW50QnVpbGRJbmRleCA9PSAtMSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdmFyIGJ1aWxkZXIg
PSBnX2N1cnJlbnRTdGF0ZS5idWlsZGVyIHx8IGN1cnJlbnRCdWlsZGVyR3JvdXAoKS5kZWZhdWx0
QnVpbGRlcigpOworICAgIHN3aXRjaCAoZS5rZXlJZGVudGlmaWVyKSB7CisgICAgY2FzZSAnTGVm
dCc6CisgICAgICAgIHNlbGVjdEJ1aWxkKAorICAgICAgICAgICAgZ19yZXN1bHRzQnlCdWlsZGVy
W2J1aWxkZXJdLAorICAgICAgICAgICAgYnVpbGRlciwKKyAgICAgICAgICAgIGdfZHlncmFwaCwK
KyAgICAgICAgICAgIGdfY3VycmVudEJ1aWxkSW5kZXggKyAxKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSAnUmlnaHQnOgorICAgICAgICBzZWxlY3RCdWlsZCgKKyAgICAgICAgICAgIGdfcmVz
dWx0c0J5QnVpbGRlcltidWlsZGVyXSwKKyAgICAgICAgICAgIGJ1aWxkZXIsCisgICAgICAgICAg
ICBnX2R5Z3JhcGgsCisgICAgICAgICAgICBnX2N1cnJlbnRCdWlsZEluZGV4IC0gMSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KK30pOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>193211</attachid>
            <date>2013-03-14 17:59:08 -0700</date>
            <delta_ts>2013-03-18 12:58:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-112188-20130314175504.patch</filename>
            <type>text/plain</type>
            <size>40948</size>
            <attacher name="Julie Parent">jparent</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ1ODYxCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOTI2ZjcxNjIyZjU5YmM2Yzc1ZThhNzZhODBjMTZjNmU4
M2M3ZThmNy4uNGYzMGEzOGY5MWMxMWYzYWRmYzNhMjQ1OWQzMjY0NTAwMDI0MWJlNiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2
IEBACisyMDEzLTAzLTEyICBKdWxpZSBQYXJlbnQgIDxqcGFyZW50QGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBDbGVhbnVwOiBNb3ZlIHRpbWVsaW5lX2V4cG9yZXIganMgb3V0IG9mIGh0bWwgZmls
ZSBpbnRvIGpzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTEyMTg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAg
IAorICAgICAgICBNb3ZlcyB0aGUgamF2YXNjcmlwdCBvdXQgb2YgdGhlIGh0bWwgZmlsZSBhbmQg
aW50byBhIG5ldyBqcyBmaWxlLgorICAgICAgICBUaGlzIGZvbGxvd3MgdGhlIGZvcm1hdCBvZiBm
bGFraW5lc3NfZGFzaGJvYXJkLntodG1sfGpzfS4KKyAgICAgICAgCisgICAgICAgIEFsc28gbW92
ZXMgY29kZSBmcm9tIGRhc2hib2FyZF9iYXNlIHRoYXQgaXMgdXNlZCBvbmx5IGJ5IHRoaXMgb25l
CisgICAgICAgIGRhc2hib2FyZCwgYW5kIG1ha2VzIGl0IHByaXZhdGUgdG8gdGhlIGRhc2hib2Fy
ZC4KKworICAgICAgICAqIFRlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvZGFzaGJv
YXJkX2Jhc2UuanM6CisgICAgICAgICogVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJk
cy90aW1lbGluZV9leHBsb3Jlci5odG1sOgorICAgICAgICAqIFRlc3RSZXN1bHRTZXJ2ZXIvc3Rh
dGljLWRhc2hib2FyZHMvdGltZWxpbmVfZXhwbG9yZXIuanM6IENvcGllZCBmcm9tIFRvb2xzL1Rl
c3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvdGltZWxpbmVfZXhwbG9yZXIuaHRtbC4K
KyAgICAgICAgKGdlbmVyYXRlUGFnZSk6CisgICAgICAgIChpbml0Q3VycmVudEJ1aWxkZXJUZXN0
UmVzdWx0cyk6CisgICAgICAgIChzaG91bGRTaG93V2ViS2l0UmV2aXNpb25zT25seSk6CisgICAg
ICAgICh1cGRhdGVUaW1lbGluZUZvckJ1aWxkZXIuKToKKyAgICAgICAgKHVwZGF0ZVRpbWVsaW5l
Rm9yQnVpbGRlcik6CisgICAgICAgIChzZWxlY3RCdWlsZCk6CisgICAgICAgICh1cGRhdGVCdWls
ZEluZGljYXRvcik6CisgICAgICAgICguYWRkUm93KToKKyAgICAgICAgKC5hZGROdW1iZXJSb3cp
OgorICAgICAgICAoLmluc3BlY3Rvck5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUuMC5vbmNsaWNr
KToKKyAgICAgICAgKC5pbnNwZWN0b3JOb2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lLjEub25jbGlj
ayk6CisgICAgICAgICguaW5zcGVjdG9yTm9kZS5nZXRFbGVtZW50c0J5VGFnTmFtZS4yLm9uY2xp
Y2spOgorICAgICAgICAodXBkYXRlQnVpbGRJbnNwZWN0b3IpOgorICAgICAgICAoc2hvd1Jlc3Vs
dHNEZWx0YSk6CisgICAgICAgIChkZWNvbXByZXNzUmVzdWx0cy5hZGRGbGFreURlbHRhKToKKyAg
ICAgICAgKGRlY29tcHJlc3NSZXN1bHRzKToKKwogMjAxMy0wMy0xNCAgSnVsaWUgUGFyZW50ICA8
anBhcmVudEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQ2xlYW51cDogUmVtb3ZlIGdfcmVzb3Vy
Y2VMb2FkZXIuCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNo
Ym9hcmRzL2Rhc2hib2FyZF9iYXNlLmpzIGIvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMt
ZGFzaGJvYXJkcy9kYXNoYm9hcmRfYmFzZS5qcwppbmRleCAxZDIyZDNkN2QxNWQ3NzQ1MDk4OWVk
NjQ3ZTBlMDBiYTNiZTA1YmFmLi5hNjU2ZDg1YzYwZjg2MzIxNzI3ODkwZTFkNThiOTI2M2Q1MmRh
MWI1IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRz
L2Rhc2hib2FyZF9iYXNlLmpzCisrKyBiL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRh
c2hib2FyZHMvZGFzaGJvYXJkX2Jhc2UuanMKQEAgLTg0LDE0ICs4NCw2IEBAIHZhciBMQVlPVVRf
VEVTVF9FWFBFQ1RBVElPTlNfTUFQXyA9IHsKICAgICAnTyc6ICdNSVNTSU5HJwogfTsKIAotdmFy
IEZBSUxVUkVfRVhQRUNUQVRJT05TXyA9IHsKLSAgICAnVCc6IDEsCi0gICAgJ0YnOiAxLAotICAg
ICdDJzogMSwKLSAgICAnSSc6IDEsCi0gICAgJ1onOiAxCi19OwotCiAvLyBNYXAgb2YgcGFyYW1l
dGVyIHRvIG90aGVyIHBhcmFtZXRlciBpdCBpbnZhbGlkYXRlcy4KIHZhciBDUk9TU19EQl9JTlZB
TElEQVRJTkdfUEFSQU1FVEVSUyA9IHsKICAgICAndGVzdFR5cGUnOiAnZ3JvdXAnCkBAIC01MjEs
MTAwICs1MTMsNCBAQCBmdW5jdGlvbiB0b2dnbGVRdWVyeVBhcmFtZXRlcihwYXJhbSkKIGZ1bmN0
aW9uIHF1ZXJ5UGFyYW1ldGVyVmFsdWUocGFyYW1ldGVyKQogewogICAgIHJldHVybiBnX2N1cnJl
bnRTdGF0ZVtwYXJhbWV0ZXJdIHx8IGdfY3Jvc3NEYXNoYm9hcmRTdGF0ZVtwYXJhbWV0ZXJdOwot
fQotCi0vLyAiRGVjb21wcmVzc2VzIiB0aGUgUkxFLWVuY29kaW5nIG9mIHRlc3QgcmVzdWx0cyBz
byB0aGF0IHdlIGNhbiBxdWVyeSBpdAotLy8gYnkgYnVpbGQgaW5kZXggYW5kIHRlc3QgbmFtZS4K
LS8vCi0vLyBAcGFyYW0ge09iamVjdH0gcmVzdWx0cyByZXN1bHRzIGZvciB0aGUgY3VycmVudCBi
dWlsZGVyCi0vLyBAcmV0dXJuIE9iamVjdCB3aXRoIHRoZXNlIHByb3BlcnRpZXM6Ci0vLyAgICAg
LSB0ZXN0TmFtZXM6IGFycmF5IG1hcHBpbmcgdGVzdCBpbmRleCB0byB0ZXN0IG5hbWVzLgotLy8g
ICAgIC0gcmVzdWx0c0J5QnVpbGQ6IGFycmF5IG9mIGJ1aWxkcywgZm9yIGVhY2ggYnVpbGQgYSAo
c3BhcnNlKSBhcnJheSBvZiB0ZXN0IHJlc3VsdHMgYnkgdGVzdCBpbmRleC4KLS8vICAgICAtIGZs
YWt5VGVzdHM6IGFycmF5IHdpdGggdGhlIGJvb2xlYW4gdmFsdWUgdHJ1ZSBhdCB0ZXN0IGluZGlj
ZXMgdGhhdCBhcmUgY29uc2lkZXJlZCBmbGFreSAobW9yZSB0aGFuIG9uZSBzaW5nbGUtYnVpbGQg
ZmFpbHVyZSkuCi0vLyAgICAgLSBmbGFreURlbHRhc0J5QnVpbGQ6IGFycmF5IG9mIGJ1aWxkcywg
Zm9yIGVhY2ggYnVpbGQgYSBjb3VudCBvZiBmbGFreSB0ZXN0IHJlc3VsdHMgYnkgZXhwZWN0YXRp
b24sIGFzIHdlbGwgYXMgYSB0b3RhbC4KLWZ1bmN0aW9uIGRlY29tcHJlc3NSZXN1bHRzKGJ1aWxk
ZXJSZXN1bHRzKQotewotICAgIHZhciBidWlsZGVyVGVzdFJlc3VsdHMgPSBidWlsZGVyUmVzdWx0
c1tURVNUU19LRVldOwotICAgIHZhciBidWlsZENvdW50ID0gYnVpbGRlclJlc3VsdHNbRklYQUJM
RV9DT1VOVFNfS0VZXS5sZW5ndGg7Ci0gICAgdmFyIHJlc3VsdHNCeUJ1aWxkID0gbmV3IEFycmF5
KGJ1aWxkQ291bnQpOwotICAgIHZhciBmbGFreURlbHRhc0J5QnVpbGQgPSBuZXcgQXJyYXkoYnVp
bGRDb3VudCk7Ci0KLSAgICAvLyBQcmUtc2l6aW5nIHRoZSB0ZXN0IHJlc3VsdCBhcnJheXMgZm9y
IGVhY2ggYnVpbGQgc2F2ZXMgdXMgfjI1MG1zCi0gICAgdmFyIHRlc3RDb3VudCA9IDA7Ci0gICAg
Zm9yICh2YXIgdGVzdE5hbWUgaW4gYnVpbGRlclRlc3RSZXN1bHRzKQotICAgICAgICB0ZXN0Q291
bnQrKzsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ1aWxkQ291bnQ7IGkrKykgewotICAgICAg
ICByZXN1bHRzQnlCdWlsZFtpXSA9IG5ldyBBcnJheSh0ZXN0Q291bnQpOwotICAgICAgICByZXN1
bHRzQnlCdWlsZFtpXVt0ZXN0Q291bnQgLSAxXSA9IHVuZGVmaW5lZDsKLSAgICAgICAgZmxha3lE
ZWx0YXNCeUJ1aWxkW2ldID0ge307Ci0gICAgfQotCi0gICAgLy8gVXNpbmcgaW5kaWNlcyBpbnN0
ZWFkIG9mIHRoZSBmdWxsIHRlc3QgbmFtZXMgZm9yIGVhY2ggYnVpbGQgc2F2ZXMgdXMKLSAgICAv
LyB+MTUwMG1zCi0gICAgdmFyIHRlc3RJbmRleCA9IDA7Ci0gICAgdmFyIHRlc3ROYW1lcyA9IG5l
dyBBcnJheSh0ZXN0Q291bnQpOwotICAgIHZhciBmbGFreVRlc3RzID0gbmV3IEFycmF5KHRlc3RD
b3VudCk7Ci0KLSAgICAvLyBEZWNvbXByZXNzIGFuZCAiaW52ZXJ0IiB0ZXN0IHJlc3VsdHMgKGJ5
IGJ1aWxkIGluc3RlYWQgb2YgYnkgdGVzdCkgYW5kCi0gICAgLy8gZGV0ZXJtaW5lIHdoaWNoIGFy
ZSBmbGFreS4KLSAgICBmb3IgKHZhciB0ZXN0TmFtZSBpbiBidWlsZGVyVGVzdFJlc3VsdHMpIHsK
LSAgICAgICAgdmFyIG9uZUJ1aWxkRmFpbHVyZUNvdW50ID0gMDsKLQotICAgICAgICB0ZXN0TmFt
ZXNbdGVzdEluZGV4XSA9IHRlc3ROYW1lOwotICAgICAgICB2YXIgdGVzdFJlc3VsdHMgPSBidWls
ZGVyVGVzdFJlc3VsdHNbdGVzdE5hbWVdLnJlc3VsdHM7Ci0gICAgICAgIGZvciAodmFyIGkgPSAw
LCBybGVSZXN1bHQsIGN1cnJlbnRCdWlsZEluZGV4ID0gMDsgKHJsZVJlc3VsdCA9IHRlc3RSZXN1
bHRzW2ldKSAmJiBjdXJyZW50QnVpbGRJbmRleCA8IGJ1aWxkQ291bnQ7IGkrKykgewotICAgICAg
ICAgICAgdmFyIGNvdW50ID0gcmxlUmVzdWx0W1JMRS5MRU5HVEhdOwotICAgICAgICAgICAgdmFy
IHZhbHVlID0gcmxlUmVzdWx0W1JMRS5WQUxVRV07Ci0KLSAgICAgICAgICAgIGlmIChjb3VudCA9
PSAxICYmIHZhbHVlIGluIEZBSUxVUkVfRVhQRUNUQVRJT05TXykKLSAgICAgICAgICAgICAgICBv
bmVCdWlsZEZhaWx1cmVDb3VudCsrOwotCi0gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8
IGNvdW50OyBqKyspIHsKLSAgICAgICAgICAgICAgICByZXN1bHRzQnlCdWlsZFtjdXJyZW50QnVp
bGRJbmRleCsrXVt0ZXN0SW5kZXhdID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnJl
bnRCdWlsZEluZGV4ID09IGJ1aWxkQ291bnQpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG9uZUJ1aWxkRmFpbHVyZUNv
dW50ID4gMikKLSAgICAgICAgICAgIGZsYWt5VGVzdHNbdGVzdEluZGV4XSA9IHRydWU7Ci0KLSAg
ICAgICAgdGVzdEluZGV4Kys7Ci0gICAgfQotCi0gICAgLy8gTm93IHRoYXQgd2Uga25vdyB3aGlj
aCB0ZXN0cyBhcmUgZmxha3ksIGNvdW50IHRoZSB0ZXN0IHJlc3VsdHMgdGhhdCBhcmUKLSAgICAv
LyBmcm9tIGZsYWt5IHRlc3RzIGZvciBlYWNoIGJ1aWxkLgotICAgIHRlc3RJbmRleCA9IDA7Ci0g
ICAgZm9yICh2YXIgdGVzdE5hbWUgaW4gYnVpbGRlclRlc3RSZXN1bHRzKSB7Ci0gICAgICAgIGlm
ICghZmxha3lUZXN0c1t0ZXN0SW5kZXgrK10pCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAg
ICAgICB2YXIgdGVzdFJlc3VsdHMgPSBidWlsZGVyVGVzdFJlc3VsdHNbdGVzdE5hbWVdLnJlc3Vs
dHM7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwLCBybGVSZXN1bHQsIGN1cnJlbnRCdWlsZEluZGV4
ID0gMDsgKHJsZVJlc3VsdCA9IHRlc3RSZXN1bHRzW2ldKSAmJiBjdXJyZW50QnVpbGRJbmRleCA8
IGJ1aWxkQ291bnQ7IGkrKykgewotICAgICAgICAgICAgdmFyIGNvdW50ID0gcmxlUmVzdWx0W1JM
RS5MRU5HVEhdOwotICAgICAgICAgICAgdmFyIHZhbHVlID0gcmxlUmVzdWx0W1JMRS5WQUxVRV07
Ci0KLSAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY291bnQ7IGorKykgewotICAgICAg
ICAgICAgICAgIHZhciBidWlsZFRlc3RSZXN1bHRzID0gZmxha3lEZWx0YXNCeUJ1aWxkW2N1cnJl
bnRCdWlsZEluZGV4KytdOwotICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFkZEZsYWt5RGVsdGEo
a2V5KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCEoa2V5IGlu
IGJ1aWxkVGVzdFJlc3VsdHMpKQotICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRUZXN0UmVz
dWx0c1trZXldID0gMDsKLSAgICAgICAgICAgICAgICAgICAgYnVpbGRUZXN0UmVzdWx0c1trZXld
Kys7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGFkZEZsYWt5RGVsdGEodmFs
dWUpOwotICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPSAnUCcgJiYgdmFsdWUgIT0gJ04nKQot
ICAgICAgICAgICAgICAgICAgICBhZGRGbGFreURlbHRhKCd0b3RhbCcpOwotICAgICAgICAgICAg
ICAgIGlmIChjdXJyZW50QnVpbGRJbmRleCA9PSBidWlsZENvdW50KQotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVy
biB7Ci0gICAgICAgIHRlc3ROYW1lczogdGVzdE5hbWVzLAotICAgICAgICByZXN1bHRzQnlCdWls
ZDogcmVzdWx0c0J5QnVpbGQsCi0gICAgICAgIGZsYWt5VGVzdHM6IGZsYWt5VGVzdHMsCi0gICAg
ICAgIGZsYWt5RGVsdGFzQnlCdWlsZDogZmxha3lEZWx0YXNCeUJ1aWxkCi0gICAgfTsKLX0KK30K
XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UmVzdWx0
U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL3RpbWVsaW5lX2V4cGxvcmVyLmh0bWwgYi9Ub29scy9U
ZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL3RpbWVsaW5lX2V4cGxvcmVyLmh0bWwK
aW5kZXggZDJmYzRhNDVlZGZmZDA5NzA0ZTk3Zjg4ZTlmNmNiNDM1Njc0YmE0YS4uYjJjYmM1Mjcz
ZGE2MzE5ZjI5NjRkZDRkMjIwZDMzYzc5N2NiNDEwOCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFJl
c3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy90aW1lbGluZV9leHBsb3Jlci5odG1sCisrKyBi
L1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvdGltZWxpbmVfZXhwbG9y
ZXIuaHRtbApAQCAtMTAwLDM3MSArMTAwLDggQEAgYm9keSB7CiA8c2NyaXB0IHNyYz0ibG9hZGVy
LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJzdHJpbmcuanMiPjwvc2NyaXB0PgogPHNjcmlw
dCBzcmM9ImRhc2hib2FyZF9iYXNlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJ0aW1lbGlu
ZV9leHBsb3Jlci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0idWkuanMiPjwvc2NyaXB0Pgot
PHNjcmlwdD4KLXZhciBGQUlMSU5HX1RFU1RTX0RBVEFTRVRfTkFNRSA9ICdGYWlsaW5nIHRlc3Rz
JzsKLQotdmFyIGdfZHlncmFwaDsKLXZhciBnX2J1aWxkSW5kaWNlc0J5VGltZXN0YW1wID0ge307
Ci12YXIgZ19jdXJyZW50QnVpbGRJbmRleCA9IC0xOwotdmFyIGdfY3VycmVudEJ1aWxkZXJUZXN0
UmVzdWx0czsKLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBNZXRob2RzIGFuZCBvYmplY3Rz
IGZyb20gZGFzaGJvYXJkX2Jhc2UuanMgdG8gb3ZlcnJpZGUuCi0vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8KLWZ1bmN0aW9uIGdlbmVyYXRlUGFnZSgpCi17Ci0gICAgZ19idWlsZEluZGljZXNCeVRpbWVz
dGFtcCA9IHt9OwotICAgIHZhciByZXN1bHRzID0gZ19yZXN1bHRzQnlCdWlsZGVyW2dfY3VycmVu
dFN0YXRlLmJ1aWxkZXIgfHwgY3VycmVudEJ1aWxkZXJHcm91cCgpLmRlZmF1bHRCdWlsZGVyKCld
OwotCi0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzW0ZJWEFCTEVfQ09VTlRTX0tFWV0u
bGVuZ3RoOyBpKyspIHsKLSAgICAgICAgdmFyIGJ1aWxkRGF0ZSA9IG5ldyBEYXRlKHJlc3VsdHNb
VElNRVNUQU1QU19LRVldW2ldICogMTAwMCk7Ci0gICAgICAgIGdfYnVpbGRJbmRpY2VzQnlUaW1l
c3RhbXBbYnVpbGREYXRlLmdldFRpbWUoKV0gPSBpOwotICAgIH0KLQotICAgIGlmIChnX2N1cnJl
bnRTdGF0ZS5idWlsZFRpbWVzdGFtcCAhPSAtMSAmJiBnX2N1cnJlbnRTdGF0ZS5idWlsZFRpbWVz
dGFtcCBpbiBnX2J1aWxkSW5kaWNlc0J5VGltZXN0YW1wKSB7Ci0gICAgICAgIHZhciBuZXdCdWls
ZEluZGV4ID0gZ19idWlsZEluZGljZXNCeVRpbWVzdGFtcFtnX2N1cnJlbnRTdGF0ZS5idWlsZFRp
bWVzdGFtcF07Ci0KLSAgICAgICAgaWYgKG5ld0J1aWxkSW5kZXggPT0gZ19jdXJyZW50QnVpbGRJ
bmRleCkgewotICAgICAgICAgICAgLy8gVGhpcyBoYXBwZW5zIHdoZW4gc2VsZWN0QnVpbGQgaXMg
Y2FsbGVkLCB3aGljaCB1cGRhdGVzIHRoZSBVSQotICAgICAgICAgICAgLy8gaW1tZWRpYXRlbHks
IGluIGFkZGl0aW9uIHRvIHVwZGF0aW5nIHRoZSBsb2NhdGlvbiBoYXNoICh3ZSBkb24ndAotICAg
ICAgICAgICAgLy8ganVzdCByZWx5IG9uIHRoZSBoYXNoIGNoYW5nZSBzaW5jZSB3ZSBkb24ndCB3
YW50IHRvIHJlZ2VuZXJhdGUgdGhlCi0gICAgICAgICAgICAvLyB3aG9sZSBwYWdlIGp1c3QgYmVj
YXVzZSB0aGUgdXNlciBjbGlja2VkIG9uIHNvbWV0aGluZykKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfSBlbHNlIGlmIChuZXdCdWlsZEluZGV4KQotICAgICAgICAgICAgZ19jdXJyZW50
QnVpbGRJbmRleCA9IG5ld0J1aWxkSW5kZXg7Ci0gICAgfQotCi0gICAgaW5pdEN1cnJlbnRCdWls
ZGVyVGVzdFJlc3VsdHMoKTsKLQotICAgICQoJ3Rlc3QtdHlwZS1zd2l0Y2hlcicpLmlubmVySFRN
TCA9IHVpLmh0bWwudGVzdFR5cGVTd2l0Y2hlciggZmFsc2UsCi0gICAgICAgIHVpLmh0bWwuY2hl
Y2tib3goJ2lnbm9yZUZsYWt5VGVzdHMnLCAnSWdub3JlIGZsYWt5IHRlc3RzJywgZ19jdXJyZW50
U3RhdGUuaWdub3JlRmxha3lUZXN0cywgJ2dfY3VycmVudEJ1aWxkSW5kZXggPSAtMScpCi0gICAg
KTsKLQotICAgIHVwZGF0ZVRpbWVsaW5lRm9yQnVpbGRlcigpOwotfQotCi1mdW5jdGlvbiBpbml0
Q3VycmVudEJ1aWxkZXJUZXN0UmVzdWx0cygpCi17Ci0gICAgdmFyIHN0YXJ0VGltZSA9IERhdGUu
bm93KCk7Ci0gICAgZ19jdXJyZW50QnVpbGRlclRlc3RSZXN1bHRzID0gZGVjb21wcmVzc1Jlc3Vs
dHMoZ19yZXN1bHRzQnlCdWlsZGVyW2dfY3VycmVudFN0YXRlLmJ1aWxkZXIgfHwgY3VycmVudEJ1
aWxkZXJHcm91cCgpLmRlZmF1bHRCdWlsZGVyKCldKTsKLSAgICBjb25zb2xlLmxvZyggJ1RpbWUg
dG8gZ2V0IHRlc3QgcmVzdWx0cyBieSBidWlsZDogJyArIChEYXRlLm5vdygpIC0gc3RhcnRUaW1l
KSk7Ci19Ci0KLWZ1bmN0aW9uIGhhbmRsZVZhbGlkSGFzaFBhcmFtZXRlcihrZXksIHZhbHVlKQot
ewotICAgIHN3aXRjaChrZXkpIHsKLSAgICBjYXNlICdidWlsZGVyJzoKLSAgICAgICAgdmFsaWRh
dGVQYXJhbWV0ZXIoZ19jdXJyZW50U3RhdGUsIGtleSwgdmFsdWUsCi0gICAgICAgICAgICBmdW5j
dGlvbigpIHsgcmV0dXJuIHZhbHVlIGluIGN1cnJlbnRCdWlsZGVycygpOyB9KTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgY2FzZSAnYnVpbGRUaW1lc3RhbXAnOgotICAgICAgICBnX2N1cnJl
bnRTdGF0ZS5idWlsZFRpbWVzdGFtcCA9IHBhcnNlSW50KHZhbHVlLCAxMCk7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIGNhc2UgJ2lnbm9yZUZsYWt5VGVzdHMnOgotICAgICAgICBnX2N1cnJl
bnRTdGF0ZS5pZ25vcmVGbGFreVRlc3RzID0gdmFsdWUgPT0gJ3RydWUnOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQot
Ci1nX2RlZmF1bHREYXNoYm9hcmRTcGVjaWZpY1N0YXRlVmFsdWVzID0gewotICAgIGJ1aWxkZXI6
IG51bGwsCi0gICAgYnVpbGRUaW1lc3RhbXA6IC0xLAotICAgIGlnbm9yZUZsYWt5VGVzdHM6IHRy
dWUKLX07Ci0KLURCX1NQRUNJRklDX0lOVkFMSURBVElOR19QQVJBTUVURVJTID0gewotICAgICd0
ZXN0VHlwZSc6ICdidWlsZGVyJywKLSAgICAnZ3JvdXAnOiAnYnVpbGRlcicKLX07Ci0KLWZ1bmN0
aW9uIHNob3VsZFNob3dXZWJLaXRSZXZpc2lvbnNPbmx5KCkKLXsKLSAgICByZXR1cm4gaXNUaXBP
ZlRyZWVXZWJLaXRCdWlsZGVyKCk7Ci19Ci0KLWZ1bmN0aW9uIHVwZGF0ZVRpbWVsaW5lRm9yQnVp
bGRlcigpCi17Ci0gICAgdmFyIGJ1aWxkZXIgPSBnX2N1cnJlbnRTdGF0ZS5idWlsZGVyIHx8IGN1
cnJlbnRCdWlsZGVyR3JvdXAoKS5kZWZhdWx0QnVpbGRlcigpOwotICAgIHZhciByZXN1bHRzID0g
Z19yZXN1bHRzQnlCdWlsZGVyW2J1aWxkZXJdOwotICAgIHZhciBncmFwaERhdGEgPSBbXTsKLQot
ICAgIHZhciBhbm5vdGF0aW9ucyA9IFtdOwotCi0gICAgLy8gRHlncmFwaCBwcmVmZXJzIHRvIGJl
IGhhbmRlZCBkYXRhIGluIGNocm9ub2xvZ2ljYWwgb3JkZXIuCi0gICAgZm9yICh2YXIgaSA9IHJl
c3VsdHNbRklYQUJMRV9DT1VOVFNfS0VZXS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgewotICAg
ICAgICB2YXIgYnVpbGREYXRlID0gbmV3IERhdGUocmVzdWx0c1tUSU1FU1RBTVBTX0tFWV1baV0g
KiAxMDAwKTsKLSAgICAgICAgLy8gRklYTUU6IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIGV4Y2x1ZGUg
b3V0bGllcnMuIFRoaXMgaXMganVzdCBzbyB3ZQotICAgICAgICAvLyBleGNsdWRlIHJ1bnMgd2hl
cmUgZXZlcnkgdGVzdCBmYWlsZWQuCi0gICAgICAgIHZhciBmYWlsdXJlQ291bnQgPSBNYXRoLm1p
bihyZXN1bHRzW0ZJWEFCTEVfQ09VTlRfS0VZXVtpXSwgMTAwMDApOwotCi0gICAgICAgIGlmIChn
X2N1cnJlbnRTdGF0ZS5pZ25vcmVGbGFreVRlc3RzKQotICAgICAgICAgICAgZmFpbHVyZUNvdW50
IC09IGdfY3VycmVudEJ1aWxkZXJUZXN0UmVzdWx0cy5mbGFreURlbHRhc0J5QnVpbGRbaV0udG90
YWwgfHwgMDsKLQotICAgICAgICBncmFwaERhdGEucHVzaChbYnVpbGREYXRlLCBmYWlsdXJlQ291
bnRdKTsKLQotICAgICAgICBpZiAoIXNob3VsZFNob3dXZWJLaXRSZXZpc2lvbnNPbmx5KCkgJiYg
KHJlc3VsdHNbV0VCS0lUX1JFVklTSU9OU19LRVldW2ldICE9IHJlc3VsdHNbV0VCS0lUX1JFVklT
SU9OU19LRVldW2kgKyAxXSkpIHsKLSAgICAgICAgICAgIGFubm90YXRpb25zLnB1c2goewotICAg
ICAgICAgICAgICAgIHNlcmllczogRkFJTElOR19URVNUU19EQVRBU0VUX05BTUUsCi0gICAgICAg
ICAgICAgICAgeDogYnVpbGREYXRlLAotICAgICAgICAgICAgICAgIHNob3J0VGV4dDogJ1InLAot
ICAgICAgICAgICAgICAgIHRleHQ6ICdXZWJLaXQgcm9sbDogcicgKyByZXN1bHRzW1dFQktJVF9S
RVZJU0lPTlNfS0VZXVtpICsgMV0gKyAnIHRvICcgKyByZXN1bHRzW1dFQktJVF9SRVZJU0lPTlNf
S0VZXVtpXQotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2YXIgd2lu
ZG93V2lkdGggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7Ci0gICAgdmFy
IHdpbmRvd0hlaWdodCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7Ci0g
ICAgdmFyIHN3aXRjaGVyTm9kZSA9ICQoJ3Rlc3QtdHlwZS1zd2l0Y2hlcicpOwotICAgIHZhciBp
bnNwZWN0b3JOb2RlID0gJCgnaW5zcGVjdG9yLWNvbnRhaW5lcicpOwotICAgIHZhciBncmFwaFdp
ZHRoID0gd2luZG93V2lkdGggLSAyMCAtIGluc3BlY3Rvck5vZGUub2Zmc2V0V2lkdGg7Ci0gICAg
dmFyIGdyYXBoSGVpZ2h0ID0gd2luZG93SGVpZ2h0IC0gc3dpdGNoZXJOb2RlLm9mZnNldFRvcCAt
IHN3aXRjaGVyTm9kZS5vZmZzZXRIZWlnaHQgLSAyMDsKLQotICAgIHZhciBjb250YWluZXJOb2Rl
ID0gJCgndGltZWxpbmUtY29udGFpbmVyJyk7Ci0gICAgY29udGFpbmVyTm9kZS5zdHlsZS5oZWln
aHQgPSBncmFwaEhlaWdodCArICdweCc7Ci0gICAgY29udGFpbmVyTm9kZS5zdHlsZS53aWR0aCA9
IGdyYXBoV2lkdGggKyAncHgnOwotICAgIGluc3BlY3Rvck5vZGUuc3R5bGUuaGVpZ2h0ID0gZ3Jh
cGhIZWlnaHQgKyAncHgnOwotCi0gICAgZ19keWdyYXBoID0gbmV3IER5Z3JhcGgoCi0gICAgICAg
IGNvbnRhaW5lck5vZGUsCi0gICAgICAgIGdyYXBoRGF0YSwgewotICAgICAgICAgICAgbGFiZWxz
OiBbJ0RhdGUnLCBGQUlMSU5HX1RFU1RTX0RBVEFTRVRfTkFNRV0sCi0gICAgICAgICAgICB3aWR0
aDogZ3JhcGhXaWR0aCwKLSAgICAgICAgICAgIGhlaWdodDogZ3JhcGhIZWlnaHQsCi0gICAgICAg
ICAgICBjbGlja0NhbGxiYWNrOiBmdW5jdGlvbihldmVudCwgZGF0ZSkgewotICAgICAgICAgICAg
ICAgIHNlbGVjdEJ1aWxkKHJlc3VsdHMsIGJ1aWxkZXIsIGdfZHlncmFwaCwgZ19idWlsZEluZGlj
ZXNCeVRpbWVzdGFtcFtkYXRlXSk7Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAgZHJhd0Nh
bGxiYWNrOiBmdW5jdGlvbihkeWdyYXBoLCBpc0luaXRpYWwpIHsKLSAgICAgICAgICAgICAgICBp
ZiAoaXNJbml0aWFsKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAg
ICAgdXBkYXRlQnVpbGRJbmRpY2F0b3IocmVzdWx0cywgZHlncmFwaCk7Ci0gICAgICAgICAgICB9
LAotICAgICAgICAgICAgLy8geFZhbHVlUGFyc2VyIGlzIG5lY2Vzc2FyeSBmb3IgYW5ub3RhdGlv
bnMgdG8gd29yaywgZXZlbiB0aG91Z2ggd2UKLSAgICAgICAgICAgIC8vIGFscmVhZHkgaGF2ZSBE
YXRlIGluc3RhbmNlcwotICAgICAgICAgICAgeFZhbHVlUGFyc2VyOiBmdW5jdGlvbihpbnB1dCkg
eyByZXR1cm4gaW5wdXQuZ2V0VGltZSgpOyB9Ci0gICAgICAgIH0pOwotICAgIGlmIChhbm5vdGF0
aW9ucy5sZW5ndGgpCi0gICAgICAgIGdfZHlncmFwaC5zZXRBbm5vdGF0aW9ucyhhbm5vdGF0aW9u
cyk7Ci0KLSAgICBpbnNwZWN0b3JOb2RlLnN0eWxlLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7Ci0K
LSAgICBpZiAoZ19jdXJyZW50QnVpbGRJbmRleCAhPSAtMSkKLSAgICAgICAgc2VsZWN0QnVpbGQo
cmVzdWx0cywgYnVpbGRlciwgZ19keWdyYXBoLCBnX2N1cnJlbnRCdWlsZEluZGV4KTsKLX0KLQot
ZnVuY3Rpb24gc2VsZWN0QnVpbGQocmVzdWx0cywgYnVpbGRlciwgZHlncmFwaCwgaW5kZXgpCi17
Ci0gICAgZ19jdXJyZW50QnVpbGRJbmRleCA9IGluZGV4OwotICAgIHVwZGF0ZUJ1aWxkSW5kaWNh
dG9yKHJlc3VsdHMsIGR5Z3JhcGgpOwotICAgIHVwZGF0ZUJ1aWxkSW5zcGVjdG9yKHJlc3VsdHMs
IGJ1aWxkZXIsIGR5Z3JhcGgsIGluZGV4KTsKLSAgICBzZXRRdWVyeVBhcmFtZXRlcignYnVpbGRU
aW1lc3RhbXAnLCByZXN1bHRzW1RJTUVTVEFNUFNfS0VZXVtpbmRleF0gKiAxMDAwKTsKLX0KLQot
ZnVuY3Rpb24gdXBkYXRlQnVpbGRJbmRpY2F0b3IocmVzdWx0cywgZHlncmFwaCkKLXsKLSAgICB2
YXIgaW5kaWNhdG9yTm9kZSA9ICQoJ2luZGljYXRvcicpOwotCi0gICAgaWYgKCFpbmRpY2F0b3JO
b2RlKSB7Ci0gICAgICAgIHZhciBjb250YWluZXJOb2RlID0gJCgndGltZWxpbmUtY29udGFpbmVy
Jyk7Ci0gICAgICAgIGluZGljYXRvck5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYn
KTsKLSAgICAgICAgaW5kaWNhdG9yTm9kZS5pZCA9ICdpbmRpY2F0b3InOwotICAgICAgICBpbmRp
Y2F0b3JOb2RlLnN0eWxlLmhlaWdodCA9IGNvbnRhaW5lck5vZGUub2Zmc2V0SGVpZ2h0ICsgJ3B4
JzsKLSAgICAgICAgY29udGFpbmVyTm9kZS5hcHBlbmRDaGlsZChpbmRpY2F0b3JOb2RlKTsKLSAg
ICB9Ci0KLSAgICBpZiAoZ19jdXJyZW50QnVpbGRJbmRleCA9PSAtMSkKLSAgICAgICAgaW5kaWNh
dG9yTm9kZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwotICAgIGVsc2UgewotICAgICAgICBpbmRp
Y2F0b3JOb2RlLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwotICAgICAgICB2YXIgYnVpbGREYXRl
ID0gbmV3IERhdGUocmVzdWx0c1tUSU1FU1RBTVBTX0tFWV1bZ19jdXJyZW50QnVpbGRJbmRleF0g
KiAxMDAwKTsKLSAgICAgICAgdmFyIGRvbUNvb3JkcyA9IGR5Z3JhcGgudG9Eb21Db29yZHMoYnVp
bGREYXRlLCAwKTsKLSAgICAgICAgaW5kaWNhdG9yTm9kZS5zdHlsZS5sZWZ0ID0gZG9tQ29vcmRz
WzBdICsgJ3B4JzsKLSAgICB9Ci19Ci0KLWZ1bmN0aW9uIHVwZGF0ZUJ1aWxkSW5zcGVjdG9yKHJl
c3VsdHMsIGJ1aWxkZXIsIGR5Z3JhcGgsIGluZGV4KQotewotICAgIHZhciBodG1sID0gJzx0YWJs
ZSBpZD0iaW5zcGVjdG9yLXRhYmxlIj48Y2FwdGlvbj5EZXRhaWxzPC9jYXB0aW9uPic7Ci0KLSAg
ICBmdW5jdGlvbiBhZGRSb3cobGFiZWwsIHZhbHVlKQotICAgIHsKLSAgICAgICAgaHRtbCArPSAn
PHRyPjx0ZCBjbGFzcz0ibGFiZWwiPicgKyBsYWJlbCArICc8L3RkPjx0ZD4nICsgdmFsdWUgKyAn
PC90ZD48L3RyPic7Ci0gICAgfQotCi0gICAgLy8gQnVpbGRlciBhbmQgcmVzdWx0cyBsaW5rcwot
ICAgIHZhciBidWlsZE51bWJlciA9IHJlc3VsdHNbQlVJTERfTlVNQkVSU19LRVldW2luZGV4XTsK
LSAgICBhZGRSb3coJycsICcnKTsKLSAgICB2YXIgbWFzdGVyID0gYnVpbGRlck1hc3RlcihidWls
ZGVyKTsKLSAgICB2YXIgYnVpbGRVcmwgPSBtYXN0ZXIubG9nUGF0aChidWlsZGVyLCByZXN1bHRz
W0JVSUxEX05VTUJFUlNfS0VZXVtpbmRleF0pOwotICAgIGlmIChtYXN0ZXIubmFtZSA9PSBXRUJL
SVRfQlVJTERFUl9NQVNURVIpIHsKLSAgICAgICAgdmFyIHJlc3VsdHNVcmwgPSAnaHR0cDovL2J1
aWxkLndlYmtpdC5vcmcvcmVzdWx0cy8nICsgYnVpbGRlciArICcvcicgKyByZXN1bHRzW1dFQktJ
VF9SRVZJU0lPTlNfS0VZXVtpbmRleF0gKwotICAgICAgICAgICAgJyAoJyArIHJlc3VsdHNbQlVJ
TERfTlVNQkVSU19LRVldW2luZGV4XSArICcpJzsKLSAgICB9IGVsc2UgewotICAgICAgICB2YXIg
cmVzdWx0c1VybCA9ICdodHRwOi8vYnVpbGQuY2hyb21pdW0ub3JnL2YvY2hyb21pdW0vbGF5b3V0
X3Rlc3RfcmVzdWx0cy8nICsKLSAgICAgICAgICAgIGN1cnJlbnRCdWlsZGVycygpW2J1aWxkZXJd
ICsgJy8nICsgcmVzdWx0c1tDSFJPTUVfUkVWSVNJT05TX0tFWV1baW5kZXhdOwotICAgIH0KLQot
ICAgIGFkZFJvdygnQnVpbGQ6JywgJzxhIGhyZWY9IicgKyBidWlsZFVybCArICciIHRhcmdldD0i
X2JsYW5rIj4nICsgYnVpbGROdW1iZXIgKyAnPC9hPiAoPGEgaHJlZj0iJyArIHJlc3VsdHNVcmwg
KyAnIiB0YXJnZXQ9Il9ibGFuayI+cmVzdWx0czwvYT4pJyk7Ci0KLSAgICAvLyBSZXZpc2lvbiBs
aW5rKHMpCi0gICAgaWYgKCFzaG91bGRTaG93V2ViS2l0UmV2aXNpb25zT25seSgpKQotICAgICAg
ICBhZGRSb3coJ0Nocm9taXVtIGNoYW5nZTonLCB1aS5odG1sLmNocm9taXVtUmV2aXNpb25MaW5r
KHJlc3VsdHMsIGluZGV4KSk7Ci0gICAgYWRkUm93KCdXZWJLaXQgY2hhbmdlOicsIHVpLmh0bWwu
d2ViS2l0UmV2aXNpb25MaW5rKHJlc3VsdHMsIGluZGV4KSk7Ci0KLSAgICAvLyBUZXN0IHN0YXR1
cy9jb3VudHMKLSAgICBhZGRSb3coJycsICcnKTsKLQotICAgIGZ1bmN0aW9uIGFkZE51bWJlclJv
dyhsYWJlbCwgY3VycmVudFZhbHVlLCBwcmV2aW91c1ZhbHVlKQotICAgIHsKLSAgICAgICAgdmFy
IGRlbHRhID0gY3VycmVudFZhbHVlIC0gcHJldmlvdXNWYWx1ZTsKLSAgICAgICAgdmFyIGRlbHRh
VGV4dCA9ICcnCi0gICAgICAgIGlmIChkZWx0YSA8IDApCi0gICAgICAgICAgICBkZWx0YVRleHQg
PSAnIDxzcGFuIGNsYXNzPSJkZWx0YSBuZWdhdGl2ZSI+JyArIGRlbHRhICsgJzwvc3Bhbj4nOwot
ICAgICAgICBlbHNlIGlmIChkZWx0YSA+IDApCi0gICAgICAgICAgICBkZWx0YVRleHQgPSAnIDxz
cGFuIGNsYXNzPSJkZWx0YSBwb3NpdGl2ZSI+KycgKyBkZWx0YSArICc8L3NwYW4+JzsKLQotICAg
ICAgICBhZGRSb3cobGFiZWwsIGN1cnJlbnRWYWx1ZSArIGRlbHRhVGV4dCk7Ci0gICAgfQotCi0g
ICAgdmFyIGV4cGVjdGF0aW9ucyA9IGV4cGVjdGF0aW9uc01hcCgpOwotICAgIHZhciBmbGFreURl
bHRhc0J5QnVpbGQgPSBnX2N1cnJlbnRCdWlsZGVyVGVzdFJlc3VsdHMuZmxha3lEZWx0YXNCeUJ1
aWxkOwotICAgIGZvciAodmFyIGV4cGVjdGF0aW9uS2V5IGluIGV4cGVjdGF0aW9ucykgewotICAg
ICAgICBpZiAoZXhwZWN0YXRpb25LZXkgaW4gcmVzdWx0c1tGSVhBQkxFX0NPVU5UU19LRVldW2lu
ZGV4XSkgewotICAgICAgICAgICAgdmFyIGN1cnJlbnRDb3VudCA9IHJlc3VsdHNbRklYQUJMRV9D
T1VOVFNfS0VZXVtpbmRleF1bZXhwZWN0YXRpb25LZXldOwotICAgICAgICAgICAgdmFyIHByZXZp
b3VzQ291bnQgPSByZXN1bHRzW0ZJWEFCTEVfQ09VTlRTX0tFWV1baW5kZXggKyAxXVtleHBlY3Rh
dGlvbktleV07Ci0gICAgICAgICAgICBpZiAoZ19jdXJyZW50U3RhdGUuaWdub3JlRmxha3lUZXN0
cykgewotICAgICAgICAgICAgICAgIGN1cnJlbnRDb3VudCAtPSBmbGFreURlbHRhc0J5QnVpbGRb
aW5kZXhdW2V4cGVjdGF0aW9uS2V5XSB8fCAwOwotICAgICAgICAgICAgICAgIHByZXZpb3VzQ291
bnQgLT0gZmxha3lEZWx0YXNCeUJ1aWxkW2luZGV4ICsgMV1bZXhwZWN0YXRpb25LZXldIHx8IDA7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBhZGROdW1iZXJSb3coZXhwZWN0YXRpb25zW2V4
cGVjdGF0aW9uS2V5XSwgY3VycmVudENvdW50LCBwcmV2aW91c0NvdW50KTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHZhciBjdXJyZW50VG90YWwgPSByZXN1bHRzW0ZJWEFCTEVfQ09VTlRfS0VZ
XVtpbmRleF07Ci0gICAgdmFyIHByZXZpb3VzVG90YWwgPSByZXN1bHRzW0ZJWEFCTEVfQ09VTlRf
S0VZXVtpbmRleCArIDFdOwotICAgIGlmIChnX2N1cnJlbnRTdGF0ZS5pZ25vcmVGbGFreVRlc3Rz
KSB7Ci0gICAgICAgIGN1cnJlbnRUb3RhbCAtPSBmbGFreURlbHRhc0J5QnVpbGRbaW5kZXhdLnRv
dGFsIHx8IDA7Ci0gICAgICAgIHByZXZpb3VzVG90YWwgLT0gZmxha3lEZWx0YXNCeUJ1aWxkW2lu
ZGV4ICsgMV0udG90YWwgfHwgMDsKLSAgICB9Ci0gICAgYWRkTnVtYmVyUm93KCdUb3RhbCBmYWls
aW5nIHRlc3RzOicsIGN1cnJlbnRUb3RhbCwgcHJldmlvdXNUb3RhbCk7Ci0KLSAgICBodG1sICs9
ICc8L3RhYmxlPic7Ci0KLSAgICBodG1sICs9ICc8ZGl2IGlkPSJjaGFuZ2VzLWJ1dHRvbiIgY2xh
c3M9ImJ1dHRvbnMiPic7Ci0gICAgaHRtbCArPSAnPGJ1dHRvbj5TaG93IGNoYW5nZWQgdGVzdCBy
ZXN1bHRzPC9idXR0b24+JzsKLSAgICBodG1sICs9ICc8L2Rpdj4nOwotCi0gICAgaHRtbCArPSAn
PGRpdiBpZD0iYnVpbGQtYnV0dG9ucyIgY2xhc3M9ImJ1dHRvbnMiPic7Ci0gICAgaHRtbCArPSAn
PGJ1dHRvbj5QcmV2aW91cyBidWlsZDwvYnV0dG9uPiA8YnV0dG9uPk5leHQgYnVpbGQ8L2J1dHRv
bj4nOwotICAgIGh0bWwgKz0gJzwvZGl2Pic7Ci0KLSAgICB2YXIgaW5zcGVjdG9yTm9kZSA9ICQo
J2luc3BlY3Rvci1jb250YWluZXInKTsKLSAgICBpbnNwZWN0b3JOb2RlLmlubmVySFRNTCA9IGh0
bWw7Ci0KLSAgICBpbnNwZWN0b3JOb2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKVsw
XS5vbmNsaWNrID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHNob3dSZXN1bHRzRGVsdGEoaW5kZXgs
IGJ1aWxkTnVtYmVyLCBidWlsZFVybCwgcmVzdWx0c1VybCk7Ci0gICAgfTsKLSAgICBpbnNwZWN0
b3JOb2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKVsxXS5vbmNsaWNrID0gZnVuY3Rp
b24oKSB7Ci0gICAgICAgIHNlbGVjdEJ1aWxkKHJlc3VsdHMsIGJ1aWxkZXIsIGR5Z3JhcGgsIGlu
ZGV4ICsgMSk7Ci0gICAgfTsKLSAgICBpbnNwZWN0b3JOb2RlLmdldEVsZW1lbnRzQnlUYWdOYW1l
KCdidXR0b24nKVsyXS5vbmNsaWNrID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHNlbGVjdEJ1aWxk
KHJlc3VsdHMsIGJ1aWxkZXIsIGR5Z3JhcGgsIGluZGV4IC0gMSk7Ci0gICAgfTsKLX0KLQotZnVu
Y3Rpb24gc2hvd1Jlc3VsdHNEZWx0YShpbmRleCwgYnVpbGROdW1iZXIsIGJ1aWxkVXJsLCByZXN1
bHRzVXJsKQotewotICAgIHZhciBmbGFreVRlc3RzID0gZ19jdXJyZW50QnVpbGRlclRlc3RSZXN1
bHRzLmZsYWt5VGVzdHM7Ci0gICAgdmFyIGN1cnJlbnRSZXN1bHRzID0gZ19jdXJyZW50QnVpbGRl
clRlc3RSZXN1bHRzLnJlc3VsdHNCeUJ1aWxkW2luZGV4XTsKLSAgICB2YXIgdGVzdE5hbWVzID0g
Z19jdXJyZW50QnVpbGRlclRlc3RSZXN1bHRzLnRlc3ROYW1lczsKLSAgICB2YXIgcHJldmlvdXNS
ZXN1bHRzID0gZ19jdXJyZW50QnVpbGRlclRlc3RSZXN1bHRzLnJlc3VsdHNCeUJ1aWxkW2luZGV4
ICsgMV07Ci0gICAgdmFyIGV4cGVjdGF0aW9ucyA9IGV4cGVjdGF0aW9uc01hcCgpOwotCi0gICAg
dmFyIGRlbHRhcyA9IHt9OwotICAgIGZ1bmN0aW9uIGFkZERlbHRhKGNhdGVnb3J5LCB0ZXN0SW5k
ZXgpCi0gICAgewotICAgICAgICBpZiAoZ19jdXJyZW50U3RhdGUuaWdub3JlRmxha3lUZXN0cyAm
JiBmbGFreVRlc3RzW3Rlc3RJbmRleF0pCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlm
ICghKGNhdGVnb3J5IGluIGRlbHRhcykpCi0gICAgICAgICAgICBkZWx0YXNbY2F0ZWdvcnldID0g
W107Ci0gICAgICAgIHZhciB0ZXN0TmFtZSA9IHRlc3ROYW1lc1t0ZXN0SW5kZXhdOwotICAgICAg
ICB2YXIgZmxha2luZXNzRGFzaGJvYXJkVXJsID0gJ2ZsYWtpbmVzc19kYXNoYm9hcmQuaHRtbCcg
KyAobG9jYXRpb24uaGFzaCA/IGxvY2F0aW9uLmhhc2ggKyAnJicgOiAnIycpICsgJ3Rlc3RzPScg
KyB0ZXN0TmFtZTsKLSAgICAgICAgdmFyIGh0bWwgPSAnPGEgaHJlZj0iJyArIGZsYWtpbmVzc0Rh
c2hib2FyZFVybCArICciPicgKyB0ZXN0TmFtZSArICc8L2E+JzsKLSAgICAgICAgaWYgKGZsYWt5
VGVzdHNbdGVzdEluZGV4XSkKLSAgICAgICAgICAgIGh0bWwgKz0gJyA8c3BhbiBzdHlsZT0iY29s
b3I6ICNmNjYiPnBvc3NpYmx5IGZsYWt5PC9zcGFuPic7Ci0gICAgICAgIGRlbHRhc1tjYXRlZ29y
eV0ucHVzaChodG1sKTsKLSAgICB9Ci0KLSAgICBmb3IgKHZhciB0ZXN0SW5kZXggPSAwOyB0ZXN0
SW5kZXggPCBjdXJyZW50UmVzdWx0cy5sZW5ndGg7IHRlc3RJbmRleCsrKSB7Ci0gICAgICAgIGlm
IChjdXJyZW50UmVzdWx0c1t0ZXN0SW5kZXhdID09PSB1bmRlZmluZWQpCi0gICAgICAgICAgICBj
b250aW51ZTsKLQotICAgICAgICBpZiAocHJldmlvdXNSZXN1bHRzW3Rlc3RJbmRleF0gIT09IHVu
ZGVmaW5lZCkgewotICAgICAgICAgICAgaWYgKGN1cnJlbnRSZXN1bHRzW3Rlc3RJbmRleF0gPT0g
cHJldmlvdXNSZXN1bHRzW3Rlc3RJbmRleF0pCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICBhZGREZWx0YSgnV2FzIDxiPicgKyBleHBlY3RhdGlvbnNbcHJldmlvdXNSZXN1
bHRzW3Rlc3RJbmRleF1dICsgJzwvYj4gbm93IDxiPicgKyBleHBlY3RhdGlvbnNbY3VycmVudFJl
c3VsdHNbdGVzdEluZGV4XV0gKyAnPC9iPicsIHRlc3RJbmRleCk7Ci0gICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgYWRkRGVsdGEoJ05ld2x5IDxiPicgKyBleHBlY3RhdGlvbnNbY3VycmVudFJl
c3VsdHNbdGVzdEluZGV4XV0gKyAnPC9iPicsIHRlc3RJbmRleCk7Ci0gICAgfQotCi0gICAgZm9y
ICh2YXIgdGVzdEluZGV4ID0gMDsgdGVzdEluZGV4IDwgcHJldmlvdXNSZXN1bHRzLmxlbmd0aDsg
dGVzdEluZGV4KyspIHsKLSAgICAgICAgaWYgKHByZXZpb3VzUmVzdWx0c1t0ZXN0SW5kZXhdID09
PSB1bmRlZmluZWQpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGN1cnJlbnRS
ZXN1bHRzW3Rlc3RJbmRleF0gPT09IHVuZGVmaW5lZCkKLSAgICAgICAgICAgIGFkZERlbHRhKCdX
YXMgPGI+JyArIGV4cGVjdGF0aW9uc1twcmV2aW91c1Jlc3VsdHNbdGVzdEluZGV4XV0gKyAnPC9i
PicsIHRlc3RJbmRleCk7Ci0gICAgfQotCi0gICAgdmFyIGh0bWwgPSAnJzsKLQotICAgIGh0bWwg
Kz0gJzxoZWFkPjxiYXNlIHRhcmdldD0iX2JsYW5rIj48L2hlYWQ+JzsKLSAgICBodG1sICs9ICc8
aDE+Q2hhbmdlcyBpbiB0ZXN0IHJlc3VsdHM8L2gxPic7Ci0KLSAgICBodG1sICs9ICc8cD5Gb3Ig
YnVpbGQgPGEgaHJlZj0iJyArIGJ1aWxkVXJsICsgJyIgdGFyZ2V0PSJfYmxhbmsiPicgKwotICAg
ICAgICBidWlsZE51bWJlciArICc8L2E+ICcgKyAnKDxhIGhyZWY9IicgKyByZXN1bHRzVXJsICsK
LSAgICAgICAgJyIgdGFyZ2V0PSJfYmxhbmsiPnJlc3VsdHM8L2E+KTwvcD4nOwotCi0gICAgZm9y
ICh2YXIgZGVsdGFDYXRlZ29yeSBpbiBkZWx0YXMpIHsKLSAgICAgICAgaHRtbCArPSAnPHA+PGRp
dj4nICsgZGVsdGFDYXRlZ29yeSArICcgKCcgKyBkZWx0YXNbZGVsdGFDYXRlZ29yeV0ubGVuZ3Ro
ICsgJyk8L2Rpdj48dWw+JzsKLSAgICAgICAgZGVsdGFzW2RlbHRhQ2F0ZWdvcnldLmZvckVhY2go
ZnVuY3Rpb24oZGVsdGFIdG1sKSB7Ci0gICAgICAgICAgICBodG1sICs9ICc8bGk+JyArIGRlbHRh
SHRtbCArICc8L2xpPic7Ci0gICAgICAgIH0pOwotICAgICAgICBodG1sICs9ICc8L3VsPjwvcD4n
OwotICAgIH0KLQotICAgIHZhciBkZWx0YVdpbmRvdyA9IHdpbmRvdy5vcGVuKCk7Ci0gICAgZGVs
dGFXaW5kb3cuZG9jdW1lbnQud3JpdGUoaHRtbCk7Ci19Ci0KLWRvY3VtZW50LmFkZEV2ZW50TGlz
dGVuZXIoJ2tleWRvd24nLCBmdW5jdGlvbihlKSB7Ci0gICAgaWYgKGdfY3VycmVudEJ1aWxkSW5k
ZXggPT0gLTEpCi0gICAgICAgIHJldHVybjsKLQotICAgIHZhciBidWlsZGVyID0gZ19jdXJyZW50
U3RhdGUuYnVpbGRlciB8fCBjdXJyZW50QnVpbGRlckdyb3VwKCkuZGVmYXVsdEJ1aWxkZXIoKTsK
LSAgICBzd2l0Y2ggKGUua2V5SWRlbnRpZmllcikgewotICAgIGNhc2UgJ0xlZnQnOgotICAgICAg
ICBzZWxlY3RCdWlsZCgKLSAgICAgICAgICAgIGdfcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyXSwK
LSAgICAgICAgICAgIGJ1aWxkZXIsCi0gICAgICAgICAgICBnX2R5Z3JhcGgsCi0gICAgICAgICAg
ICBnX2N1cnJlbnRCdWlsZEluZGV4ICsgMSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgJ1Jp
Z2h0JzoKLSAgICAgICAgc2VsZWN0QnVpbGQoCi0gICAgICAgICAgICBnX3Jlc3VsdHNCeUJ1aWxk
ZXJbYnVpbGRlcl0sCi0gICAgICAgICAgICBidWlsZGVyLAotICAgICAgICAgICAgZ19keWdyYXBo
LAotICAgICAgICAgICAgZ19jdXJyZW50QnVpbGRJbmRleCAtIDEpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci19KTsKLQotd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigp
IHsKLSAgICB2YXIgcmVzb3VyY2VMb2FkZXIgPSBuZXcgbG9hZGVyLkxvYWRlcihpbnRpYWxpemVI
aXN0b3J5KTsKLSAgICByZXNvdXJjZUxvYWRlci5sb2FkKCk7Ci19LCBmYWxzZSk7Ci08L3Njcmlw
dD4KIDwvaGVhZD4KIDxib2R5PgogICAgIDxkaXYgaWQ9InRlc3QtdHlwZS1zd2l0Y2hlciI+PC9k
aXY+CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRz
L3RpbWVsaW5lX2V4cGxvcmVyLmpzIGIvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFz
aGJvYXJkcy90aW1lbGluZV9leHBsb3Jlci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MTBlNDRlNDFmYjFhN2Uw
ZGM5NDE1OWY3OTM0NzhkN2M5M2Y1ZmFkCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFJl
c3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy90aW1lbGluZV9leHBsb3Jlci5qcwpAQCAtMCww
ICsxLDQ5MyBAQAorLy8gQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLworLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6Cisv
LworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKy8v
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKy8vIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisvLyB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8v
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCit2
YXIgRkFJTElOR19URVNUU19EQVRBU0VUX05BTUUgPSAnRmFpbGluZyB0ZXN0cyc7CisKK3ZhciBn
X2R5Z3JhcGg7Cit2YXIgZ19idWlsZEluZGljZXNCeVRpbWVzdGFtcCA9IHt9OwordmFyIGdfY3Vy
cmVudEJ1aWxkSW5kZXggPSAtMTsKK3ZhciBnX2N1cnJlbnRCdWlsZGVyVGVzdFJlc3VsdHM7CisK
Ky8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gTWV0aG9kcyBhbmQgb2JqZWN0cyBmcm9tIGRhc2hi
b2FyZF9iYXNlLmpzIHRvIG92ZXJyaWRlLgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCitmdW5jdGlv
biBnZW5lcmF0ZVBhZ2UoKQoreworICAgIGdfYnVpbGRJbmRpY2VzQnlUaW1lc3RhbXAgPSB7fTsK
KyAgICB2YXIgcmVzdWx0cyA9IGdfcmVzdWx0c0J5QnVpbGRlcltnX2N1cnJlbnRTdGF0ZS5idWls
ZGVyIHx8IGN1cnJlbnRCdWlsZGVyR3JvdXAoKS5kZWZhdWx0QnVpbGRlcigpXTsKKworICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0c1tGSVhBQkxFX0NPVU5UU19LRVldLmxlbmd0aDsgaSsr
KSB7CisgICAgICAgIHZhciBidWlsZERhdGUgPSBuZXcgRGF0ZShyZXN1bHRzW1RJTUVTVEFNUFNf
S0VZXVtpXSAqIDEwMDApOworICAgICAgICBnX2J1aWxkSW5kaWNlc0J5VGltZXN0YW1wW2J1aWxk
RGF0ZS5nZXRUaW1lKCldID0gaTsKKyAgICB9CisKKyAgICBpZiAoZ19jdXJyZW50U3RhdGUuYnVp
bGRUaW1lc3RhbXAgIT0gLTEgJiYgZ19jdXJyZW50U3RhdGUuYnVpbGRUaW1lc3RhbXAgaW4gZ19i
dWlsZEluZGljZXNCeVRpbWVzdGFtcCkgeworICAgICAgICB2YXIgbmV3QnVpbGRJbmRleCA9IGdf
YnVpbGRJbmRpY2VzQnlUaW1lc3RhbXBbZ19jdXJyZW50U3RhdGUuYnVpbGRUaW1lc3RhbXBdOwor
CisgICAgICAgIGlmIChuZXdCdWlsZEluZGV4ID09IGdfY3VycmVudEJ1aWxkSW5kZXgpIHsKKyAg
ICAgICAgICAgIC8vIFRoaXMgaGFwcGVucyB3aGVuIHNlbGVjdEJ1aWxkIGlzIGNhbGxlZCwgd2hp
Y2ggdXBkYXRlcyB0aGUgVUkKKyAgICAgICAgICAgIC8vIGltbWVkaWF0ZWx5LCBpbiBhZGRpdGlv
biB0byB1cGRhdGluZyB0aGUgbG9jYXRpb24gaGFzaCAod2UgZG9uJ3QKKyAgICAgICAgICAgIC8v
IGp1c3QgcmVseSBvbiB0aGUgaGFzaCBjaGFuZ2Ugc2luY2Ugd2UgZG9uJ3Qgd2FudCB0byByZWdl
bmVyYXRlIHRoZQorICAgICAgICAgICAgLy8gd2hvbGUgcGFnZSBqdXN0IGJlY2F1c2UgdGhlIHVz
ZXIgY2xpY2tlZCBvbiBzb21ldGhpbmcpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0g
ZWxzZSBpZiAobmV3QnVpbGRJbmRleCkKKyAgICAgICAgICAgIGdfY3VycmVudEJ1aWxkSW5kZXgg
PSBuZXdCdWlsZEluZGV4OworICAgIH0KKworICAgIGluaXRDdXJyZW50QnVpbGRlclRlc3RSZXN1
bHRzKCk7CisKKyAgICAkKCd0ZXN0LXR5cGUtc3dpdGNoZXInKS5pbm5lckhUTUwgPSB1aS5odG1s
LnRlc3RUeXBlU3dpdGNoZXIoIGZhbHNlLAorICAgICAgICB1aS5odG1sLmNoZWNrYm94KCdpZ25v
cmVGbGFreVRlc3RzJywgJ0lnbm9yZSBmbGFreSB0ZXN0cycsIGdfY3VycmVudFN0YXRlLmlnbm9y
ZUZsYWt5VGVzdHMsICdnX2N1cnJlbnRCdWlsZEluZGV4ID0gLTEnKQorICAgICk7CisKKyAgICB1
cGRhdGVUaW1lbGluZUZvckJ1aWxkZXIoKTsKK30KKworZnVuY3Rpb24gaW5pdEN1cnJlbnRCdWls
ZGVyVGVzdFJlc3VsdHMoKQoreworICAgIHZhciBzdGFydFRpbWUgPSBEYXRlLm5vdygpOworICAg
IGdfY3VycmVudEJ1aWxkZXJUZXN0UmVzdWx0cyA9IF9kZWNvbXByZXNzUmVzdWx0cyhnX3Jlc3Vs
dHNCeUJ1aWxkZXJbZ19jdXJyZW50U3RhdGUuYnVpbGRlciB8fCBjdXJyZW50QnVpbGRlckdyb3Vw
KCkuZGVmYXVsdEJ1aWxkZXIoKV0pOworICAgIGNvbnNvbGUubG9nKCAnVGltZSB0byBnZXQgdGVz
dCByZXN1bHRzIGJ5IGJ1aWxkOiAnICsgKERhdGUubm93KCkgLSBzdGFydFRpbWUpKTsKK30KKwor
ZnVuY3Rpb24gaGFuZGxlVmFsaWRIYXNoUGFyYW1ldGVyKGtleSwgdmFsdWUpCit7CisgICAgc3dp
dGNoKGtleSkgeworICAgIGNhc2UgJ2J1aWxkZXInOgorICAgICAgICB2YWxpZGF0ZVBhcmFtZXRl
cihnX2N1cnJlbnRTdGF0ZSwga2V5LCB2YWx1ZSwKKyAgICAgICAgICAgIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gdmFsdWUgaW4gY3VycmVudEJ1aWxkZXJzKCk7IH0pOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBjYXNlICdidWlsZFRpbWVzdGFtcCc6CisgICAgICAgIGdfY3VycmVudFN0YXRlLmJ1
aWxkVGltZXN0YW1wID0gcGFyc2VJbnQodmFsdWUsIDEwKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgY2FzZSAnaWdub3JlRmxha3lUZXN0cyc6CisgICAgICAgIGdfY3VycmVudFN0YXRlLmln
bm9yZUZsYWt5VGVzdHMgPSB2YWx1ZSA9PSAndHJ1ZSc7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2dfZGVmYXVs
dERhc2hib2FyZFNwZWNpZmljU3RhdGVWYWx1ZXMgPSB7CisgICAgYnVpbGRlcjogbnVsbCwKKyAg
ICBidWlsZFRpbWVzdGFtcDogLTEsCisgICAgaWdub3JlRmxha3lUZXN0czogdHJ1ZQorfTsKKwor
REJfU1BFQ0lGSUNfSU5WQUxJREFUSU5HX1BBUkFNRVRFUlMgPSB7CisgICAgJ3Rlc3RUeXBlJzog
J2J1aWxkZXInLAorICAgICdncm91cCc6ICdidWlsZGVyJworfTsKKworZnVuY3Rpb24gc2hvdWxk
U2hvd1dlYktpdFJldmlzaW9uc09ubHkoKQoreworICAgIHJldHVybiBpc1RpcE9mVHJlZVdlYktp
dEJ1aWxkZXIoKTsKK30KKworZnVuY3Rpb24gdXBkYXRlVGltZWxpbmVGb3JCdWlsZGVyKCkKK3sK
KyAgICB2YXIgYnVpbGRlciA9IGdfY3VycmVudFN0YXRlLmJ1aWxkZXIgfHwgY3VycmVudEJ1aWxk
ZXJHcm91cCgpLmRlZmF1bHRCdWlsZGVyKCk7CisgICAgdmFyIHJlc3VsdHMgPSBnX3Jlc3VsdHNC
eUJ1aWxkZXJbYnVpbGRlcl07CisgICAgdmFyIGdyYXBoRGF0YSA9IFtdOworCisgICAgdmFyIGFu
bm90YXRpb25zID0gW107CisKKyAgICAvLyBEeWdyYXBoIHByZWZlcnMgdG8gYmUgaGFuZGVkIGRh
dGEgaW4gY2hyb25vbG9naWNhbCBvcmRlci4KKyAgICBmb3IgKHZhciBpID0gcmVzdWx0c1tGSVhB
QkxFX0NPVU5UU19LRVldLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgIHZhciBi
dWlsZERhdGUgPSBuZXcgRGF0ZShyZXN1bHRzW1RJTUVTVEFNUFNfS0VZXVtpXSAqIDEwMDApOwor
ICAgICAgICAvLyBGSVhNRTogRmluZCBhIGJldHRlciB3YXkgdG8gZXhjbHVkZSBvdXRsaWVycy4g
VGhpcyBpcyBqdXN0IHNvIHdlCisgICAgICAgIC8vIGV4Y2x1ZGUgcnVucyB3aGVyZSBldmVyeSB0
ZXN0IGZhaWxlZC4KKyAgICAgICAgdmFyIGZhaWx1cmVDb3VudCA9IE1hdGgubWluKHJlc3VsdHNb
RklYQUJMRV9DT1VOVF9LRVldW2ldLCAxMDAwMCk7CisKKyAgICAgICAgaWYgKGdfY3VycmVudFN0
YXRlLmlnbm9yZUZsYWt5VGVzdHMpCisgICAgICAgICAgICBmYWlsdXJlQ291bnQgLT0gZ19jdXJy
ZW50QnVpbGRlclRlc3RSZXN1bHRzLmZsYWt5RGVsdGFzQnlCdWlsZFtpXS50b3RhbCB8fCAwOwor
CisgICAgICAgIGdyYXBoRGF0YS5wdXNoKFtidWlsZERhdGUsIGZhaWx1cmVDb3VudF0pOworCisg
ICAgICAgIGlmICghc2hvdWxkU2hvd1dlYktpdFJldmlzaW9uc09ubHkoKSAmJiAocmVzdWx0c1tX
RUJLSVRfUkVWSVNJT05TX0tFWV1baV0gIT0gcmVzdWx0c1tXRUJLSVRfUkVWSVNJT05TX0tFWV1b
aSArIDFdKSkgeworICAgICAgICAgICAgYW5ub3RhdGlvbnMucHVzaCh7CisgICAgICAgICAgICAg
ICAgc2VyaWVzOiBGQUlMSU5HX1RFU1RTX0RBVEFTRVRfTkFNRSwKKyAgICAgICAgICAgICAgICB4
OiBidWlsZERhdGUsCisgICAgICAgICAgICAgICAgc2hvcnRUZXh0OiAnUicsCisgICAgICAgICAg
ICAgICAgdGV4dDogJ1dlYktpdCByb2xsOiByJyArIHJlc3VsdHNbV0VCS0lUX1JFVklTSU9OU19L
RVldW2kgKyAxXSArICcgdG8gJyArIHJlc3VsdHNbV0VCS0lUX1JFVklTSU9OU19LRVldW2ldCisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZhciB3aW5kb3dXaWR0aCA9
IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDsKKyAgICB2YXIgd2luZG93SGVp
Z2h0ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDsKKyAgICB2YXIgc3dp
dGNoZXJOb2RlID0gJCgndGVzdC10eXBlLXN3aXRjaGVyJyk7CisgICAgdmFyIGluc3BlY3Rvck5v
ZGUgPSAkKCdpbnNwZWN0b3ItY29udGFpbmVyJyk7CisgICAgdmFyIGdyYXBoV2lkdGggPSB3aW5k
b3dXaWR0aCAtIDIwIC0gaW5zcGVjdG9yTm9kZS5vZmZzZXRXaWR0aDsKKyAgICB2YXIgZ3JhcGhI
ZWlnaHQgPSB3aW5kb3dIZWlnaHQgLSBzd2l0Y2hlck5vZGUub2Zmc2V0VG9wIC0gc3dpdGNoZXJO
b2RlLm9mZnNldEhlaWdodCAtIDIwOworCisgICAgdmFyIGNvbnRhaW5lck5vZGUgPSAkKCd0aW1l
bGluZS1jb250YWluZXInKTsKKyAgICBjb250YWluZXJOb2RlLnN0eWxlLmhlaWdodCA9IGdyYXBo
SGVpZ2h0ICsgJ3B4JzsKKyAgICBjb250YWluZXJOb2RlLnN0eWxlLndpZHRoID0gZ3JhcGhXaWR0
aCArICdweCc7CisgICAgaW5zcGVjdG9yTm9kZS5zdHlsZS5oZWlnaHQgPSBncmFwaEhlaWdodCAr
ICdweCc7CisKKyAgICBnX2R5Z3JhcGggPSBuZXcgRHlncmFwaCgKKyAgICAgICAgY29udGFpbmVy
Tm9kZSwKKyAgICAgICAgZ3JhcGhEYXRhLCB7CisgICAgICAgICAgICBsYWJlbHM6IFsnRGF0ZScs
IEZBSUxJTkdfVEVTVFNfREFUQVNFVF9OQU1FXSwKKyAgICAgICAgICAgIHdpZHRoOiBncmFwaFdp
ZHRoLAorICAgICAgICAgICAgaGVpZ2h0OiBncmFwaEhlaWdodCwKKyAgICAgICAgICAgIGNsaWNr
Q2FsbGJhY2s6IGZ1bmN0aW9uKGV2ZW50LCBkYXRlKSB7CisgICAgICAgICAgICAgICAgc2VsZWN0
QnVpbGQocmVzdWx0cywgYnVpbGRlciwgZ19keWdyYXBoLCBnX2J1aWxkSW5kaWNlc0J5VGltZXN0
YW1wW2RhdGVdKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBkcmF3Q2FsbGJhY2s6IGZ1
bmN0aW9uKGR5Z3JhcGgsIGlzSW5pdGlhbCkgeworICAgICAgICAgICAgICAgIGlmIChpc0luaXRp
YWwpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB1cGRhdGVC
dWlsZEluZGljYXRvcihyZXN1bHRzLCBkeWdyYXBoKTsKKyAgICAgICAgICAgIH0sCisgICAgICAg
ICAgICAvLyB4VmFsdWVQYXJzZXIgaXMgbmVjZXNzYXJ5IGZvciBhbm5vdGF0aW9ucyB0byB3b3Jr
LCBldmVuIHRob3VnaCB3ZQorICAgICAgICAgICAgLy8gYWxyZWFkeSBoYXZlIERhdGUgaW5zdGFu
Y2VzCisgICAgICAgICAgICB4VmFsdWVQYXJzZXI6IGZ1bmN0aW9uKGlucHV0KSB7IHJldHVybiBp
bnB1dC5nZXRUaW1lKCk7IH0KKyAgICAgICAgfSk7CisgICAgaWYgKGFubm90YXRpb25zLmxlbmd0
aCkKKyAgICAgICAgZ19keWdyYXBoLnNldEFubm90YXRpb25zKGFubm90YXRpb25zKTsKKworICAg
IGluc3BlY3Rvck5vZGUuc3R5bGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJzsKKworICAgIGlmIChn
X2N1cnJlbnRCdWlsZEluZGV4ICE9IC0xKQorICAgICAgICBzZWxlY3RCdWlsZChyZXN1bHRzLCBi
dWlsZGVyLCBnX2R5Z3JhcGgsIGdfY3VycmVudEJ1aWxkSW5kZXgpOworfQorCitmdW5jdGlvbiBz
ZWxlY3RCdWlsZChyZXN1bHRzLCBidWlsZGVyLCBkeWdyYXBoLCBpbmRleCkKK3sKKyAgICBnX2N1
cnJlbnRCdWlsZEluZGV4ID0gaW5kZXg7CisgICAgdXBkYXRlQnVpbGRJbmRpY2F0b3IocmVzdWx0
cywgZHlncmFwaCk7CisgICAgdXBkYXRlQnVpbGRJbnNwZWN0b3IocmVzdWx0cywgYnVpbGRlciwg
ZHlncmFwaCwgaW5kZXgpOworICAgIHNldFF1ZXJ5UGFyYW1ldGVyKCdidWlsZFRpbWVzdGFtcCcs
IHJlc3VsdHNbVElNRVNUQU1QU19LRVldW2luZGV4XSAqIDEwMDApOworfQorCitmdW5jdGlvbiB1
cGRhdGVCdWlsZEluZGljYXRvcihyZXN1bHRzLCBkeWdyYXBoKQoreworICAgIHZhciBpbmRpY2F0
b3JOb2RlID0gJCgnaW5kaWNhdG9yJyk7CisKKyAgICBpZiAoIWluZGljYXRvck5vZGUpIHsKKyAg
ICAgICAgdmFyIGNvbnRhaW5lck5vZGUgPSAkKCd0aW1lbGluZS1jb250YWluZXInKTsKKyAgICAg
ICAgaW5kaWNhdG9yTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAg
ICBpbmRpY2F0b3JOb2RlLmlkID0gJ2luZGljYXRvcic7CisgICAgICAgIGluZGljYXRvck5vZGUu
c3R5bGUuaGVpZ2h0ID0gY29udGFpbmVyTm9kZS5vZmZzZXRIZWlnaHQgKyAncHgnOworICAgICAg
ICBjb250YWluZXJOb2RlLmFwcGVuZENoaWxkKGluZGljYXRvck5vZGUpOworICAgIH0KKworICAg
IGlmIChnX2N1cnJlbnRCdWlsZEluZGV4ID09IC0xKQorICAgICAgICBpbmRpY2F0b3JOb2RlLnN0
eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgICAgZWxzZSB7CisgICAgICAgIGluZGljYXRvck5vZGUu
c3R5bGUuZGlzcGxheSA9ICdibG9jayc7CisgICAgICAgIHZhciBidWlsZERhdGUgPSBuZXcgRGF0
ZShyZXN1bHRzW1RJTUVTVEFNUFNfS0VZXVtnX2N1cnJlbnRCdWlsZEluZGV4XSAqIDEwMDApOwor
ICAgICAgICB2YXIgZG9tQ29vcmRzID0gZHlncmFwaC50b0RvbUNvb3JkcyhidWlsZERhdGUsIDAp
OworICAgICAgICBpbmRpY2F0b3JOb2RlLnN0eWxlLmxlZnQgPSBkb21Db29yZHNbMF0gKyAncHgn
OworICAgIH0KK30KKworZnVuY3Rpb24gdXBkYXRlQnVpbGRJbnNwZWN0b3IocmVzdWx0cywgYnVp
bGRlciwgZHlncmFwaCwgaW5kZXgpCit7CisgICAgdmFyIGh0bWwgPSAnPHRhYmxlIGlkPSJpbnNw
ZWN0b3ItdGFibGUiPjxjYXB0aW9uPkRldGFpbHM8L2NhcHRpb24+JzsKKworICAgIGZ1bmN0aW9u
IGFkZFJvdyhsYWJlbCwgdmFsdWUpCisgICAgeworICAgICAgICBodG1sICs9ICc8dHI+PHRkIGNs
YXNzPSJsYWJlbCI+JyArIGxhYmVsICsgJzwvdGQ+PHRkPicgKyB2YWx1ZSArICc8L3RkPjwvdHI+
JzsKKyAgICB9CisKKyAgICAvLyBCdWlsZGVyIGFuZCByZXN1bHRzIGxpbmtzCisgICAgdmFyIGJ1
aWxkTnVtYmVyID0gcmVzdWx0c1tCVUlMRF9OVU1CRVJTX0tFWV1baW5kZXhdOworICAgIGFkZFJv
dygnJywgJycpOworICAgIHZhciBtYXN0ZXIgPSBidWlsZGVyTWFzdGVyKGJ1aWxkZXIpOworICAg
IHZhciBidWlsZFVybCA9IG1hc3Rlci5sb2dQYXRoKGJ1aWxkZXIsIHJlc3VsdHNbQlVJTERfTlVN
QkVSU19LRVldW2luZGV4XSk7CisgICAgaWYgKG1hc3Rlci5uYW1lID09IFdFQktJVF9CVUlMREVS
X01BU1RFUikgeworICAgICAgICB2YXIgcmVzdWx0c1VybCA9ICdodHRwOi8vYnVpbGQud2Via2l0
Lm9yZy9yZXN1bHRzLycgKyBidWlsZGVyICsgJy9yJyArIHJlc3VsdHNbV0VCS0lUX1JFVklTSU9O
U19LRVldW2luZGV4XSArCisgICAgICAgICAgICAnICgnICsgcmVzdWx0c1tCVUlMRF9OVU1CRVJT
X0tFWV1baW5kZXhdICsgJyknOworICAgIH0gZWxzZSB7CisgICAgICAgIHZhciByZXN1bHRzVXJs
ID0gJ2h0dHA6Ly9idWlsZC5jaHJvbWl1bS5vcmcvZi9jaHJvbWl1bS9sYXlvdXRfdGVzdF9yZXN1
bHRzLycgKworICAgICAgICAgICAgY3VycmVudEJ1aWxkZXJzKClbYnVpbGRlcl0gKyAnLycgKyBy
ZXN1bHRzW0NIUk9NRV9SRVZJU0lPTlNfS0VZXVtpbmRleF07CisgICAgfQorCisgICAgYWRkUm93
KCdCdWlsZDonLCAnPGEgaHJlZj0iJyArIGJ1aWxkVXJsICsgJyIgdGFyZ2V0PSJfYmxhbmsiPicg
KyBidWlsZE51bWJlciArICc8L2E+ICg8YSBocmVmPSInICsgcmVzdWx0c1VybCArICciIHRhcmdl
dD0iX2JsYW5rIj5yZXN1bHRzPC9hPiknKTsKKworICAgIC8vIFJldmlzaW9uIGxpbmsocykKKyAg
ICBpZiAoIXNob3VsZFNob3dXZWJLaXRSZXZpc2lvbnNPbmx5KCkpCisgICAgICAgIGFkZFJvdygn
Q2hyb21pdW0gY2hhbmdlOicsIHVpLmh0bWwuY2hyb21pdW1SZXZpc2lvbkxpbmsocmVzdWx0cywg
aW5kZXgpKTsKKyAgICBhZGRSb3coJ1dlYktpdCBjaGFuZ2U6JywgdWkuaHRtbC53ZWJLaXRSZXZp
c2lvbkxpbmsocmVzdWx0cywgaW5kZXgpKTsKKworICAgIC8vIFRlc3Qgc3RhdHVzL2NvdW50cwor
ICAgIGFkZFJvdygnJywgJycpOworCisgICAgZnVuY3Rpb24gYWRkTnVtYmVyUm93KGxhYmVsLCBj
dXJyZW50VmFsdWUsIHByZXZpb3VzVmFsdWUpCisgICAgeworICAgICAgICB2YXIgZGVsdGEgPSBj
dXJyZW50VmFsdWUgLSBwcmV2aW91c1ZhbHVlOworICAgICAgICB2YXIgZGVsdGFUZXh0ID0gJycK
KyAgICAgICAgaWYgKGRlbHRhIDwgMCkKKyAgICAgICAgICAgIGRlbHRhVGV4dCA9ICcgPHNwYW4g
Y2xhc3M9ImRlbHRhIG5lZ2F0aXZlIj4nICsgZGVsdGEgKyAnPC9zcGFuPic7CisgICAgICAgIGVs
c2UgaWYgKGRlbHRhID4gMCkKKyAgICAgICAgICAgIGRlbHRhVGV4dCA9ICcgPHNwYW4gY2xhc3M9
ImRlbHRhIHBvc2l0aXZlIj4rJyArIGRlbHRhICsgJzwvc3Bhbj4nOworCisgICAgICAgIGFkZFJv
dyhsYWJlbCwgY3VycmVudFZhbHVlICsgZGVsdGFUZXh0KTsKKyAgICB9CisKKyAgICB2YXIgZXhw
ZWN0YXRpb25zID0gZXhwZWN0YXRpb25zTWFwKCk7CisgICAgdmFyIGZsYWt5RGVsdGFzQnlCdWls
ZCA9IGdfY3VycmVudEJ1aWxkZXJUZXN0UmVzdWx0cy5mbGFreURlbHRhc0J5QnVpbGQ7CisgICAg
Zm9yICh2YXIgZXhwZWN0YXRpb25LZXkgaW4gZXhwZWN0YXRpb25zKSB7CisgICAgICAgIGlmIChl
eHBlY3RhdGlvbktleSBpbiByZXN1bHRzW0ZJWEFCTEVfQ09VTlRTX0tFWV1baW5kZXhdKSB7Cisg
ICAgICAgICAgICB2YXIgY3VycmVudENvdW50ID0gcmVzdWx0c1tGSVhBQkxFX0NPVU5UU19LRVld
W2luZGV4XVtleHBlY3RhdGlvbktleV07CisgICAgICAgICAgICB2YXIgcHJldmlvdXNDb3VudCA9
IHJlc3VsdHNbRklYQUJMRV9DT1VOVFNfS0VZXVtpbmRleCArIDFdW2V4cGVjdGF0aW9uS2V5XTsK
KyAgICAgICAgICAgIGlmIChnX2N1cnJlbnRTdGF0ZS5pZ25vcmVGbGFreVRlc3RzKSB7CisgICAg
ICAgICAgICAgICAgY3VycmVudENvdW50IC09IGZsYWt5RGVsdGFzQnlCdWlsZFtpbmRleF1bZXhw
ZWN0YXRpb25LZXldIHx8IDA7CisgICAgICAgICAgICAgICAgcHJldmlvdXNDb3VudCAtPSBmbGFr
eURlbHRhc0J5QnVpbGRbaW5kZXggKyAxXVtleHBlY3RhdGlvbktleV0gfHwgMDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGFkZE51bWJlclJvdyhleHBlY3RhdGlvbnNbZXhwZWN0YXRpb25L
ZXldLCBjdXJyZW50Q291bnQsIHByZXZpb3VzQ291bnQpOworICAgICAgICB9CisgICAgfQorCisg
ICAgdmFyIGN1cnJlbnRUb3RhbCA9IHJlc3VsdHNbRklYQUJMRV9DT1VOVF9LRVldW2luZGV4XTsK
KyAgICB2YXIgcHJldmlvdXNUb3RhbCA9IHJlc3VsdHNbRklYQUJMRV9DT1VOVF9LRVldW2luZGV4
ICsgMV07CisgICAgaWYgKGdfY3VycmVudFN0YXRlLmlnbm9yZUZsYWt5VGVzdHMpIHsKKyAgICAg
ICAgY3VycmVudFRvdGFsIC09IGZsYWt5RGVsdGFzQnlCdWlsZFtpbmRleF0udG90YWwgfHwgMDsK
KyAgICAgICAgcHJldmlvdXNUb3RhbCAtPSBmbGFreURlbHRhc0J5QnVpbGRbaW5kZXggKyAxXS50
b3RhbCB8fCAwOworICAgIH0KKyAgICBhZGROdW1iZXJSb3coJ1RvdGFsIGZhaWxpbmcgdGVzdHM6
JywgY3VycmVudFRvdGFsLCBwcmV2aW91c1RvdGFsKTsKKworICAgIGh0bWwgKz0gJzwvdGFibGU+
JzsKKworICAgIGh0bWwgKz0gJzxkaXYgaWQ9ImNoYW5nZXMtYnV0dG9uIiBjbGFzcz0iYnV0dG9u
cyI+JzsKKyAgICBodG1sICs9ICc8YnV0dG9uPlNob3cgY2hhbmdlZCB0ZXN0IHJlc3VsdHM8L2J1
dHRvbj4nOworICAgIGh0bWwgKz0gJzwvZGl2Pic7CisKKyAgICBodG1sICs9ICc8ZGl2IGlkPSJi
dWlsZC1idXR0b25zIiBjbGFzcz0iYnV0dG9ucyI+JzsKKyAgICBodG1sICs9ICc8YnV0dG9uPlBy
ZXZpb3VzIGJ1aWxkPC9idXR0b24+IDxidXR0b24+TmV4dCBidWlsZDwvYnV0dG9uPic7CisgICAg
aHRtbCArPSAnPC9kaXY+JzsKKworICAgIHZhciBpbnNwZWN0b3JOb2RlID0gJCgnaW5zcGVjdG9y
LWNvbnRhaW5lcicpOworICAgIGluc3BlY3Rvck5vZGUuaW5uZXJIVE1MID0gaHRtbDsKKworICAg
IGluc3BlY3Rvck5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpWzBdLm9uY2xpY2sg
PSBmdW5jdGlvbigpIHsKKyAgICAgICAgc2hvd1Jlc3VsdHNEZWx0YShpbmRleCwgYnVpbGROdW1i
ZXIsIGJ1aWxkVXJsLCByZXN1bHRzVXJsKTsKKyAgICB9OworICAgIGluc3BlY3Rvck5vZGUuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpWzFdLm9uY2xpY2sgPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgc2VsZWN0QnVpbGQocmVzdWx0cywgYnVpbGRlciwgZHlncmFwaCwgaW5kZXggKyAxKTsK
KyAgICB9OworICAgIGluc3BlY3Rvck5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicp
WzJdLm9uY2xpY2sgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgc2VsZWN0QnVpbGQocmVzdWx0cywg
YnVpbGRlciwgZHlncmFwaCwgaW5kZXggLSAxKTsKKyAgICB9OworfQorCitmdW5jdGlvbiBzaG93
UmVzdWx0c0RlbHRhKGluZGV4LCBidWlsZE51bWJlciwgYnVpbGRVcmwsIHJlc3VsdHNVcmwpCit7
CisgICAgdmFyIGZsYWt5VGVzdHMgPSBnX2N1cnJlbnRCdWlsZGVyVGVzdFJlc3VsdHMuZmxha3lU
ZXN0czsKKyAgICB2YXIgY3VycmVudFJlc3VsdHMgPSBnX2N1cnJlbnRCdWlsZGVyVGVzdFJlc3Vs
dHMucmVzdWx0c0J5QnVpbGRbaW5kZXhdOworICAgIHZhciB0ZXN0TmFtZXMgPSBnX2N1cnJlbnRC
dWlsZGVyVGVzdFJlc3VsdHMudGVzdE5hbWVzOworICAgIHZhciBwcmV2aW91c1Jlc3VsdHMgPSBn
X2N1cnJlbnRCdWlsZGVyVGVzdFJlc3VsdHMucmVzdWx0c0J5QnVpbGRbaW5kZXggKyAxXTsKKyAg
ICB2YXIgZXhwZWN0YXRpb25zID0gZXhwZWN0YXRpb25zTWFwKCk7CisKKyAgICB2YXIgZGVsdGFz
ID0ge307CisgICAgZnVuY3Rpb24gYWRkRGVsdGEoY2F0ZWdvcnksIHRlc3RJbmRleCkKKyAgICB7
CisgICAgICAgIGlmIChnX2N1cnJlbnRTdGF0ZS5pZ25vcmVGbGFreVRlc3RzICYmIGZsYWt5VGVz
dHNbdGVzdEluZGV4XSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKCEoY2F0ZWdv
cnkgaW4gZGVsdGFzKSkKKyAgICAgICAgICAgIGRlbHRhc1tjYXRlZ29yeV0gPSBbXTsKKyAgICAg
ICAgdmFyIHRlc3ROYW1lID0gdGVzdE5hbWVzW3Rlc3RJbmRleF07CisgICAgICAgIHZhciBmbGFr
aW5lc3NEYXNoYm9hcmRVcmwgPSAnZmxha2luZXNzX2Rhc2hib2FyZC5odG1sJyArIChsb2NhdGlv
bi5oYXNoID8gbG9jYXRpb24uaGFzaCArICcmJyA6ICcjJykgKyAndGVzdHM9JyArIHRlc3ROYW1l
OworICAgICAgICB2YXIgaHRtbCA9ICc8YSBocmVmPSInICsgZmxha2luZXNzRGFzaGJvYXJkVXJs
ICsgJyI+JyArIHRlc3ROYW1lICsgJzwvYT4nOworICAgICAgICBpZiAoZmxha3lUZXN0c1t0ZXN0
SW5kZXhdKQorICAgICAgICAgICAgaHRtbCArPSAnIDxzcGFuIHN0eWxlPSJjb2xvcjogI2Y2NiI+
cG9zc2libHkgZmxha3k8L3NwYW4+JzsKKyAgICAgICAgZGVsdGFzW2NhdGVnb3J5XS5wdXNoKGh0
bWwpOworICAgIH0KKworICAgIGZvciAodmFyIHRlc3RJbmRleCA9IDA7IHRlc3RJbmRleCA8IGN1
cnJlbnRSZXN1bHRzLmxlbmd0aDsgdGVzdEluZGV4KyspIHsKKyAgICAgICAgaWYgKGN1cnJlbnRS
ZXN1bHRzW3Rlc3RJbmRleF0gPT09IHVuZGVmaW5lZCkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgIGlmIChwcmV2aW91c1Jlc3VsdHNbdGVzdEluZGV4XSAhPT0gdW5kZWZpbmVkKSB7
CisgICAgICAgICAgICBpZiAoY3VycmVudFJlc3VsdHNbdGVzdEluZGV4XSA9PSBwcmV2aW91c1Jl
c3VsdHNbdGVzdEluZGV4XSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IGFkZERlbHRhKCdXYXMgPGI+JyArIGV4cGVjdGF0aW9uc1twcmV2aW91c1Jlc3VsdHNbdGVzdElu
ZGV4XV0gKyAnPC9iPiBub3cgPGI+JyArIGV4cGVjdGF0aW9uc1tjdXJyZW50UmVzdWx0c1t0ZXN0
SW5kZXhdXSArICc8L2I+JywgdGVzdEluZGV4KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICBhZGREZWx0YSgnTmV3bHkgPGI+JyArIGV4cGVjdGF0aW9uc1tjdXJyZW50UmVzdWx0c1t0ZXN0
SW5kZXhdXSArICc8L2I+JywgdGVzdEluZGV4KTsKKyAgICB9CisKKyAgICBmb3IgKHZhciB0ZXN0
SW5kZXggPSAwOyB0ZXN0SW5kZXggPCBwcmV2aW91c1Jlc3VsdHMubGVuZ3RoOyB0ZXN0SW5kZXgr
KykgeworICAgICAgICBpZiAocHJldmlvdXNSZXN1bHRzW3Rlc3RJbmRleF0gPT09IHVuZGVmaW5l
ZCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoY3VycmVudFJlc3VsdHNbdGVz
dEluZGV4XSA9PT0gdW5kZWZpbmVkKQorICAgICAgICAgICAgYWRkRGVsdGEoJ1dhcyA8Yj4nICsg
ZXhwZWN0YXRpb25zW3ByZXZpb3VzUmVzdWx0c1t0ZXN0SW5kZXhdXSArICc8L2I+JywgdGVzdElu
ZGV4KTsKKyAgICB9CisKKyAgICB2YXIgaHRtbCA9ICcnOworCisgICAgaHRtbCArPSAnPGhlYWQ+
PGJhc2UgdGFyZ2V0PSJfYmxhbmsiPjwvaGVhZD4nOworICAgIGh0bWwgKz0gJzxoMT5DaGFuZ2Vz
IGluIHRlc3QgcmVzdWx0czwvaDE+JzsKKworICAgIGh0bWwgKz0gJzxwPkZvciBidWlsZCA8YSBo
cmVmPSInICsgYnVpbGRVcmwgKyAnIiB0YXJnZXQ9Il9ibGFuayI+JyArCisgICAgICAgIGJ1aWxk
TnVtYmVyICsgJzwvYT4gJyArICcoPGEgaHJlZj0iJyArIHJlc3VsdHNVcmwgKworICAgICAgICAn
IiB0YXJnZXQ9Il9ibGFuayI+cmVzdWx0czwvYT4pPC9wPic7CisKKyAgICBmb3IgKHZhciBkZWx0
YUNhdGVnb3J5IGluIGRlbHRhcykgeworICAgICAgICBodG1sICs9ICc8cD48ZGl2PicgKyBkZWx0
YUNhdGVnb3J5ICsgJyAoJyArIGRlbHRhc1tkZWx0YUNhdGVnb3J5XS5sZW5ndGggKyAnKTwvZGl2
Pjx1bD4nOworICAgICAgICBkZWx0YXNbZGVsdGFDYXRlZ29yeV0uZm9yRWFjaChmdW5jdGlvbihk
ZWx0YUh0bWwpIHsKKyAgICAgICAgICAgIGh0bWwgKz0gJzxsaT4nICsgZGVsdGFIdG1sICsgJzwv
bGk+JzsKKyAgICAgICAgfSk7CisgICAgICAgIGh0bWwgKz0gJzwvdWw+PC9wPic7CisgICAgfQor
CisgICAgdmFyIGRlbHRhV2luZG93ID0gd2luZG93Lm9wZW4oKTsKKyAgICBkZWx0YVdpbmRvdy5k
b2N1bWVudC53cml0ZShodG1sKTsKK30KKwordmFyIF9GQUlMVVJFX0VYUEVDVEFUSU9OUyA9IHsK
KyAgICAnVCc6IDEsCisgICAgJ0YnOiAxLAorICAgICdDJzogMSwKKyAgICAnSSc6IDEsCisgICAg
J1onOiAxCit9OworCisvLyAiRGVjb21wcmVzc2VzIiB0aGUgUkxFLWVuY29kaW5nIG9mIHRlc3Qg
cmVzdWx0cyBzbyB0aGF0IHdlIGNhbiBxdWVyeSBpdAorLy8gYnkgYnVpbGQgaW5kZXggYW5kIHRl
c3QgbmFtZS4KKy8vCisvLyBAcGFyYW0ge09iamVjdH0gcmVzdWx0cyByZXN1bHRzIGZvciB0aGUg
Y3VycmVudCBidWlsZGVyCisvLyBAcmV0dXJuIE9iamVjdCB3aXRoIHRoZXNlIHByb3BlcnRpZXM6
CisvLyAgICAgLSB0ZXN0TmFtZXM6IGFycmF5IG1hcHBpbmcgdGVzdCBpbmRleCB0byB0ZXN0IG5h
bWVzLgorLy8gICAgIC0gcmVzdWx0c0J5QnVpbGQ6IGFycmF5IG9mIGJ1aWxkcywgZm9yIGVhY2gg
YnVpbGQgYSAoc3BhcnNlKSBhcnJheSBvZiB0ZXN0IHJlc3VsdHMgYnkgdGVzdCBpbmRleC4KKy8v
ICAgICAtIGZsYWt5VGVzdHM6IGFycmF5IHdpdGggdGhlIGJvb2xlYW4gdmFsdWUgdHJ1ZSBhdCB0
ZXN0IGluZGljZXMgdGhhdCBhcmUgY29uc2lkZXJlZCBmbGFreSAobW9yZSB0aGFuIG9uZSBzaW5n
bGUtYnVpbGQgZmFpbHVyZSkuCisvLyAgICAgLSBmbGFreURlbHRhc0J5QnVpbGQ6IGFycmF5IG9m
IGJ1aWxkcywgZm9yIGVhY2ggYnVpbGQgYSBjb3VudCBvZiBmbGFreSB0ZXN0IHJlc3VsdHMgYnkg
ZXhwZWN0YXRpb24sIGFzIHdlbGwgYXMgYSB0b3RhbC4KK2Z1bmN0aW9uIF9kZWNvbXByZXNzUmVz
dWx0cyhidWlsZGVyUmVzdWx0cykKK3sKKyAgICB2YXIgYnVpbGRlclRlc3RSZXN1bHRzID0gYnVp
bGRlclJlc3VsdHNbVEVTVFNfS0VZXTsKKyAgICB2YXIgYnVpbGRDb3VudCA9IGJ1aWxkZXJSZXN1
bHRzW0ZJWEFCTEVfQ09VTlRTX0tFWV0ubGVuZ3RoOworICAgIHZhciByZXN1bHRzQnlCdWlsZCA9
IG5ldyBBcnJheShidWlsZENvdW50KTsKKyAgICB2YXIgZmxha3lEZWx0YXNCeUJ1aWxkID0gbmV3
IEFycmF5KGJ1aWxkQ291bnQpOworCisgICAgLy8gUHJlLXNpemluZyB0aGUgdGVzdCByZXN1bHQg
YXJyYXlzIGZvciBlYWNoIGJ1aWxkIHNhdmVzIHVzIH4yNTBtcworICAgIHZhciB0ZXN0Q291bnQg
PSAwOworICAgIGZvciAodmFyIHRlc3ROYW1lIGluIGJ1aWxkZXJUZXN0UmVzdWx0cykKKyAgICAg
ICAgdGVzdENvdW50Kys7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWlsZENvdW50OyBpKysp
IHsKKyAgICAgICAgcmVzdWx0c0J5QnVpbGRbaV0gPSBuZXcgQXJyYXkodGVzdENvdW50KTsKKyAg
ICAgICAgcmVzdWx0c0J5QnVpbGRbaV1bdGVzdENvdW50IC0gMV0gPSB1bmRlZmluZWQ7CisgICAg
ICAgIGZsYWt5RGVsdGFzQnlCdWlsZFtpXSA9IHt9OworICAgIH0KKworICAgIC8vIFVzaW5nIGlu
ZGljZXMgaW5zdGVhZCBvZiB0aGUgZnVsbCB0ZXN0IG5hbWVzIGZvciBlYWNoIGJ1aWxkIHNhdmVz
IHVzCisgICAgLy8gfjE1MDBtcworICAgIHZhciB0ZXN0SW5kZXggPSAwOworICAgIHZhciB0ZXN0
TmFtZXMgPSBuZXcgQXJyYXkodGVzdENvdW50KTsKKyAgICB2YXIgZmxha3lUZXN0cyA9IG5ldyBB
cnJheSh0ZXN0Q291bnQpOworCisgICAgLy8gRGVjb21wcmVzcyBhbmQgImludmVydCIgdGVzdCBy
ZXN1bHRzIChieSBidWlsZCBpbnN0ZWFkIG9mIGJ5IHRlc3QpIGFuZAorICAgIC8vIGRldGVybWlu
ZSB3aGljaCBhcmUgZmxha3kuCisgICAgZm9yICh2YXIgdGVzdE5hbWUgaW4gYnVpbGRlclRlc3RS
ZXN1bHRzKSB7CisgICAgICAgIHZhciBvbmVCdWlsZEZhaWx1cmVDb3VudCA9IDA7CisKKyAgICAg
ICAgdGVzdE5hbWVzW3Rlc3RJbmRleF0gPSB0ZXN0TmFtZTsKKyAgICAgICAgdmFyIHRlc3RSZXN1
bHRzID0gYnVpbGRlclRlc3RSZXN1bHRzW3Rlc3ROYW1lXS5yZXN1bHRzOworICAgICAgICBmb3Ig
KHZhciBpID0gMCwgcmxlUmVzdWx0LCBjdXJyZW50QnVpbGRJbmRleCA9IDA7IChybGVSZXN1bHQg
PSB0ZXN0UmVzdWx0c1tpXSkgJiYgY3VycmVudEJ1aWxkSW5kZXggPCBidWlsZENvdW50OyBpKysp
IHsKKyAgICAgICAgICAgIHZhciBjb3VudCA9IHJsZVJlc3VsdFtSTEUuTEVOR1RIXTsKKyAgICAg
ICAgICAgIHZhciB2YWx1ZSA9IHJsZVJlc3VsdFtSTEUuVkFMVUVdOworCisgICAgICAgICAgICBp
ZiAoY291bnQgPT0gMSAmJiB2YWx1ZSBpbiBfRkFJTFVSRV9FWFBFQ1RBVElPTlMpCisgICAgICAg
ICAgICAgICAgb25lQnVpbGRGYWlsdXJlQ291bnQrKzsKKworICAgICAgICAgICAgZm9yICh2YXIg
aiA9IDA7IGogPCBjb3VudDsgaisrKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0c0J5QnVpbGRb
Y3VycmVudEJ1aWxkSW5kZXgrK11bdGVzdEluZGV4XSA9IHZhbHVlOworICAgICAgICAgICAgICAg
IGlmIChjdXJyZW50QnVpbGRJbmRleCA9PSBidWlsZENvdW50KQorICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChvbmVCdWls
ZEZhaWx1cmVDb3VudCA+IDIpCisgICAgICAgICAgICBmbGFreVRlc3RzW3Rlc3RJbmRleF0gPSB0
cnVlOworCisgICAgICAgIHRlc3RJbmRleCsrOworICAgIH0KKworICAgIC8vIE5vdyB0aGF0IHdl
IGtub3cgd2hpY2ggdGVzdHMgYXJlIGZsYWt5LCBjb3VudCB0aGUgdGVzdCByZXN1bHRzIHRoYXQg
YXJlCisgICAgLy8gZnJvbSBmbGFreSB0ZXN0cyBmb3IgZWFjaCBidWlsZC4KKyAgICB0ZXN0SW5k
ZXggPSAwOworICAgIGZvciAodmFyIHRlc3ROYW1lIGluIGJ1aWxkZXJUZXN0UmVzdWx0cykgewor
ICAgICAgICBpZiAoIWZsYWt5VGVzdHNbdGVzdEluZGV4KytdKQorICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgdmFyIHRlc3RSZXN1bHRzID0gYnVpbGRlclRlc3RSZXN1bHRzW3Rlc3RO
YW1lXS5yZXN1bHRzOworICAgICAgICBmb3IgKHZhciBpID0gMCwgcmxlUmVzdWx0LCBjdXJyZW50
QnVpbGRJbmRleCA9IDA7IChybGVSZXN1bHQgPSB0ZXN0UmVzdWx0c1tpXSkgJiYgY3VycmVudEJ1
aWxkSW5kZXggPCBidWlsZENvdW50OyBpKyspIHsKKyAgICAgICAgICAgIHZhciBjb3VudCA9IHJs
ZVJlc3VsdFtSTEUuTEVOR1RIXTsKKyAgICAgICAgICAgIHZhciB2YWx1ZSA9IHJsZVJlc3VsdFtS
TEUuVkFMVUVdOworCisgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvdW50OyBqKysp
IHsKKyAgICAgICAgICAgICAgICB2YXIgYnVpbGRUZXN0UmVzdWx0cyA9IGZsYWt5RGVsdGFzQnlC
dWlsZFtjdXJyZW50QnVpbGRJbmRleCsrXTsKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiBhZGRG
bGFreURlbHRhKGtleSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlm
ICghKGtleSBpbiBidWlsZFRlc3RSZXN1bHRzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1
aWxkVGVzdFJlc3VsdHNba2V5XSA9IDA7CisgICAgICAgICAgICAgICAgICAgIGJ1aWxkVGVzdFJl
c3VsdHNba2V5XSsrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhZGRGbGFr
eURlbHRhKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT0gJ1AnICYmIHZhbHVl
ICE9ICdOJykKKyAgICAgICAgICAgICAgICAgICAgYWRkRmxha3lEZWx0YSgndG90YWwnKTsKKyAg
ICAgICAgICAgICAgICBpZiAoY3VycmVudEJ1aWxkSW5kZXggPT0gYnVpbGRDb3VudCkKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4geworICAgICAgICB0ZXN0TmFtZXM6IHRlc3ROYW1lcywKKyAgICAgICAgcmVz
dWx0c0J5QnVpbGQ6IHJlc3VsdHNCeUJ1aWxkLAorICAgICAgICBmbGFreVRlc3RzOiBmbGFreVRl
c3RzLAorICAgICAgICBmbGFreURlbHRhc0J5QnVpbGQ6IGZsYWt5RGVsdGFzQnlCdWlsZAorICAg
IH07Cit9CisKK2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBmdW5jdGlvbihl
KSB7CisgICAgaWYgKGdfY3VycmVudEJ1aWxkSW5kZXggPT0gLTEpCisgICAgICAgIHJldHVybjsK
KworICAgIHZhciBidWlsZGVyID0gZ19jdXJyZW50U3RhdGUuYnVpbGRlciB8fCBjdXJyZW50QnVp
bGRlckdyb3VwKCkuZGVmYXVsdEJ1aWxkZXIoKTsKKyAgICBzd2l0Y2ggKGUua2V5SWRlbnRpZmll
cikgeworICAgIGNhc2UgJ0xlZnQnOgorICAgICAgICBzZWxlY3RCdWlsZCgKKyAgICAgICAgICAg
IGdfcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyXSwKKyAgICAgICAgICAgIGJ1aWxkZXIsCisgICAg
ICAgICAgICBnX2R5Z3JhcGgsCisgICAgICAgICAgICBnX2N1cnJlbnRCdWlsZEluZGV4ICsgMSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgJ1JpZ2h0JzoKKyAgICAgICAgc2VsZWN0QnVpbGQo
CisgICAgICAgICAgICBnX3Jlc3VsdHNCeUJ1aWxkZXJbYnVpbGRlcl0sCisgICAgICAgICAgICBi
dWlsZGVyLAorICAgICAgICAgICAgZ19keWdyYXBoLAorICAgICAgICAgICAgZ19jdXJyZW50QnVp
bGRJbmRleCAtIDEpOworICAgICAgICBicmVhazsKKyAgICB9Cit9KTsKKword2luZG93LmFkZEV2
ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpIHsKKyAgICB2YXIgcmVzb3VyY2VMb2FkZXIg
PSBuZXcgbG9hZGVyLkxvYWRlcihpbnRpYWxpemVIaXN0b3J5KTsKKyAgICByZXNvdXJjZUxvYWRl
ci5sb2FkKCk7Cit9LCBmYWxzZSk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>