<?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>49566</bug_id>
          
          <creation_ts>2010-11-15 15:16:08 -0800</creation_ts>
          <short_desc>tracking bug for all of the multiprocess NRWT issues</short_desc>
          <delta_ts>2011-02-18 19:26:15 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</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>
          <dependson>49567</dependson>
    
    <dependson>49571</dependson>
    
    <dependson>49573</dependson>
    
    <dependson>49768</dependson>
    
    <dependson>49773</dependson>
    
    <dependson>49777</dependson>
    
    <dependson>49779</dependson>
    
    <dependson>50381</dependson>
    
    <dependson>52194</dependson>
    
    <dependson>53156</dependson>
    
    <dependson>53157</dependson>
    
    <dependson>53158</dependson>
    
    <dependson>53471</dependson>
    
    <dependson>53477</dependson>
    
    <dependson>53656</dependson>
    
    <dependson>54067</dependson>
    
    <dependson>54068</dependson>
    
    <dependson>54070</dependson>
    
    <dependson>54071</dependson>
    
    <dependson>54072</dependson>
    
    <dependson>54074</dependson>
    
    <dependson>54079</dependson>
    
    <dependson>54082</dependson>
          <blocked>36622</blocked>
    
    <blocked>38300</blocked>
    
    <blocked>43565</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Pranke">dpranke</reporter>
          <assigned_to name="Dirk Pranke">dpranke</assigned_to>
          <cc>eric</cc>
    
    <cc>hayato</cc>
    
    <cc>koz</cc>
    
    <cc>mihaip</cc>
    
    <cc>ojan</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>309466</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-15 15:16:08 -0800</bug_when>
    <thetext>Just filing an uber-bug to help track all of the NRWT threading/multiprocess changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339424</commentid>
    <comment_count>1</comment_count>
      <attachid>80004</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-24 18:11:45 -0800</bug_when>
    <thetext>Created attachment 80004
merge in from 52194, checkpoint against tip of tree as of r72362</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339426</commentid>
    <comment_count>2</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-24 18:12:15 -0800</bug_when>
    <thetext>*** Bug 52194 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>342815</commentid>
    <comment_count>3</comment_count>
      <attachid>80680</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-31 14:27:18 -0800</bug_when>
    <thetext>Created attachment 80680
rebase merge to r77148</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343095</commentid>
    <comment_count>4</comment_count>
      <attachid>80732</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-02-01 02:21:21 -0800</bug_when>
    <thetext>Created attachment 80732
rebase to r77212</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345929</commentid>
    <comment_count>5</comment_count>
      <attachid>81324</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-02-04 16:58:29 -0800</bug_when>
    <thetext>Created attachment 81324
full patch from tip-of-tree @ r77682</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345931</commentid>
    <comment_count>6</comment_count>
      <attachid>81325</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-02-04 16:59:54 -0800</bug_when>
    <thetext>Created attachment 81325
incremental patch from bug 53656</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347891</commentid>
    <comment_count>7</comment_count>
      <attachid>81730</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-02-08 19:05:11 -0800</bug_when>
    <thetext>Created attachment 81730
merge to r77998</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347895</commentid>
    <comment_count>8</comment_count>
      <attachid>81731</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-02-08 19:30:40 -0800</bug_when>
    <thetext>Created attachment 81731
fix typos, review code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348070</commentid>
    <comment_count>9</comment_count>
      <attachid>81773</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-02-09 01:47:20 -0800</bug_when>
    <thetext>Created attachment 81773
final patch??</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348727</commentid>
    <comment_count>10</comment_count>
      <attachid>81898</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-02-09 17:17:23 -0800</bug_when>
    <thetext>Created attachment 81898
attachment 81733 rebased to r78159</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350207</commentid>
    <comment_count>11</comment_count>
      <attachid>82223</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-02-11 18:55:34 -0800</bug_when>
    <thetext>Created attachment 82223
roll up changes from bugs 54071, 54072, 54074, 54079, 54082, rebase to r78302</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354004</commentid>
    <comment_count>12</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-02-18 19:26:08 -0800</bug_when>
    <thetext>This is now fixed. I will file separate bugs to track enabling NRWT on the various bots and platforms.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80004</attachid>
            <date>2011-01-24 18:11:45 -0800</date>
            <delta_ts>2011-01-31 14:27:15 -0800</delta_ts>
            <desc>merge in from 52194, checkpoint against tip of tree as of r72362</desc>
            <filename>bug-49566-20110124181144.patch</filename>
            <type>text/plain</type>
            <size>72829</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAyMGIw
NTM5YzFlYWRiMTViMmMyMzY4NTY3MzAyY2RmNmU5YTMzMTkyLi5jMWI0YjRiYTcxZmI5NWY5ODI0
MjUxMzFkM2Q2ZjBiYjAwNTEyZDE4IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMDEtMTAgIERpcmsgUHJhbmtl
ICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgbmV3LXJ1bi13ZWJraXQtdGVzdHM6IGNoZWNrcG9pbnQgbWVyZ2Ug
b2YgZHVhbC1tb2RlIG11bHRpcHJvY2Vzc2luZyB3b3JrCisKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5NTY2CisKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyX3dvcmtlcl9icm9rZXIu
cHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL21hbmFnZXJfd29ya2VyX2Jyb2tlcl91bml0dGVzdC5weTogQWRkZWQuCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWVzc2Fn
ZV9icm9rZXIyLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tlcjJfdW5pdHRlc3QucHk6IEFkZGVkLgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rl
c3RfcnVubmVyMi5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvbGF5b3V0X3BhY2thZ2Uvd29ya2VyLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHk6CisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9tYWMucHk6CisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tYWMucHk6CisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weToKKwogMjAxMS0wMS0y
NCAgQW5kcmVhcyBLbGluZyAgPGtsaW5nQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgRGFyaW4gQWRsZXIuCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyX3dvcmtlcl9icm9rZXIucHkgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyX3dvcmtl
cl9icm9rZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTI4YTdiYjRjMzAzNDU3MWQzNTFjOTJlNDAyYWMyNjI1
Yjc4YTMzNwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2xheW91dF9wYWNrYWdlL21hbmFnZXJfd29ya2VyX2Jyb2tlci5weQpAQCAtMCwwICsx
LDMyNSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3Ry
aWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIk1vZHVsZSBmb3IgaGFuZGxpbmcgbWVzc2Fn
ZXMgYW5kIGNvbmN1cnJlbmN5IGZvciBydW4td2Via2l0LXRlc3RzLgorCitUZXN0aW5nIGlzIGFj
Y29tcGxpc2hlZCBieSBoYXZpbmcgYSBtYW5hZ2VyIChUZXN0UnVubmVyKSBnYXRoZXIgYWxsIG9m
IHRoZQordGVzdHMgdG8gYmUgcnVuLCBhbmQgc2VuZGluZyBtZXNzYWdlcyB0byBhIHBvb2wgb2Yg
d29ya2VycyAoVGVzdFNoZWxsVGhyZWFkcykKK3RvIHJ1biBlYWNoIHRlc3QuIEVhY2ggd29ya2Vy
IGNvbW11bmljYXRlcyB3aXRoIG9uZSBkcml2ZXIgKHVzdWFsbHkKK0R1bXBSZW5kZXJUcmVlKSB0
byBydW4gb25lIHRlc3QgYXQgYSB0aW1lIGFuZCB0aGVuIGNvbXBhcmUgdGhlIG91dHB1dCBhZ2Fp
bnN0Cit3aGF0IHdlIGV4cGVjdGVkIHRvIGdldC4KKworVGhpcyBtb2R1bGVzIGltcGxlbWVudHMg
YSBtZXNzYWdlIGJyb2tlciB0aGF0IGNvbm5lY3RzIHRoZSBtYW5hZ2VyIHRvIHRoZQord29ya2Vy
czogaXQgcHJvdmlkZXMgYSBtZXNzYWdpbmcgYWJzdHJhY3Rpb24gYW5kIG1lc3NhZ2UgbG9vcHMs
IGFuZAoraGFuZGxlcyBsYXVuY2hpbmcgdGhyZWFkcyBhbmQvb3IgcHJvY2Vzc2VzIGRlcGVuZGlu
ZyBvbiB0aGUgcmVxdWVzdGVkCitjb25maWd1cmF0aW9uLgorCitCb3RoIE1hbmFnZXJzIGFuZCBX
b3JrZXJzIGFyZSByZXF1aXJlZCB0byBpbXBsZW1lbnQgdGhlIG1ldGhvZHMgaW4gdGhlCitCcm9r
ZXJDbGllbnQgaW50ZXJmYWNlIC8gYWJzdHJhY3QgYmFzZSBjbGFzcyBpbiBvcmRlciB0byB0aGUg
bWVzc2FnZQorYnJva2VyIHRvIHByb3Blcmx5IGNvbW11bmljYXRlIHdpdGggdGhlbS4KKworRXZl
cnl0aGluZyBzdGFydHMgYnkgY2FsbGluZyBnZXQoKSB0byBvYnRhaW4gYW4gaW5pdGlhbCByZWZl
cmVuY2UgdG8gYSBicm9rZXIuCitUaGUgYnJva2VyIGlzIG1lZGlhdGVkIGJ5IGEgQ29ubmVjdGlv
biBvYmplY3QgdGhhdCBwcm92aWRlcyBzb21lIHN5bnRhY3RpYworc3VnYXIgdG8gcmVwcmVzZW50
IHRoZSBNYW5hZ2VyIGFuZCBXb3JrZXIgZW5kcG9pbnRzLiBUeXBpY2FsbHkgdGhlCittYW5hZ2Vy
IHRoZW4gY2FsbHMgc3RhcnRfd29ya2VyKCkgcmVwZWF0ZWRseSB0byBsYXVuY2ggd29ya2VycyAo
d2hpY2ggYXJlCit1c3VhbGx5IHJ1biBpbiBzZXBhcmF0ZSB0aHJlYWRzIG9yIHByb2Nlc3NlcyBh
cyBjb250cm9sbGVkIGJ5IHRoZQorLS13b3JrZXItbW9kZWwgcnVudGltZSBmbGFnKSwgb3B0aW9u
YWxseSBzZXRzIHVwIHNvbWUgdGltZXJzLCBhbmQgdGhlbgoraW52b2tlcyBydW5fbWVzc2FnZV9s
b29wKCkuCisiIiIKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IFF1ZXVlCitp
bXBvcnQgc3lzCitpbXBvcnQgdGhyZWFkCitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgdGltZQor
aW1wb3J0IHRyYWNlYmFjaworCisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykK
KworZnJvbSB3ZWJraXRweSBpbXBvcnQgbGF5b3V0X3Rlc3RzCitmcm9tIHdlYmtpdHB5LmxheW91
dF90ZXN0cyBpbXBvcnQgcG9ydAorCitpbXBvcnQgbWVzc2FnZV9icm9rZXIyCisKKyMKKyMgSGFu
ZGxlIFB5dGhvbiA8IDIuNiB3aGVyZSBtdWx0aXByb2Nlc3NpbmcgaXNuJ3QgYXZhaWxhYmxlLgor
IwordHJ5OgorICAgIF9tdWx0aXByb2Nlc3NpbmdfaXNfYXZhaWxhYmxlID0gVHJ1ZQorICAgIGZy
b20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBQcm9jZXNzIGFzIF9NdWx0aXByb2Nlc3NpbmdfUHJv
Y2VzcworICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBRdWV1ZSBhcyBfTXVsdGlwcm9j
ZXNzaW5nX1F1ZXVlCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgX211bHRpcHJvY2Vzc2luZ19p
c19hdmFpbGFibGUgPSBGYWxzZQorICAgIF9NdWx0aXByb2Nlc3NpbmdfUHJvY2VzcyA9IHRocmVh
ZGluZy5UaHJlYWQKKyAgICBfTXVsdGlwcm9jZXNzaW5nX1F1ZXVlID0gUXVldWUuUXVldWUKKwor
CisjCisjIFRvcGljIG5hbWVzIGZvciBNYW5hZ2VyIDwtPiBXb3JrZXIgbWVzc2FnaW5nCisjCitN
QU5BR0VSX1RPUElDID0gJ21hbmFnZXJzJworQU5ZX1dPUktFUl9UT1BJQyA9ICd3b3JrZXJzJwor
CisKK2RlZiBydW50aW1lX29wdGlvbnMoKToKKyAgICByZXR1cm4gbWVzc2FnZV9icm9rZXIyLnJ1
bnRpbWVfb3B0aW9ucygpCisKKworZGVmIGdldChwb3J0LCBvcHRpb25zLCBtYW5hZ2VyLCB3b3Jr
ZXJfY2xhc3MpOgorICAgICIiIlJldHVybiBhIGNvbm5lY3Rpb24gdG8gYSBtYW5hZ2VyL3dvcmtl
ciBtZXNzYWdlX2Jyb2tlcgorCisgICAgQXJnczoKKyAgICAgICAgcG9ydCAtIGhhbmRsZSB0byBs
YXlvdXRfdGVzdHMvcG9ydCBvYmplY3QgZm9yIHBvcnQtc3BlY2lmaWMgc3R1ZmYKKyAgICAgICAg
b3B0aW9ucyAtIG9wdHBhcnNlIGFyZ3VtZW50IGZvciBjb21tYW5kLWxpbmUgb3B0aW9ucworICAg
ICAgICBtYW5hZ2VyIC0gb2JqZWN0IHRvIGRpc3BhdGNoIHJlcGxpZXMgdG8KKyAgICAgICAgd29y
a2VyX2NsYXNzIC0gdHlwZSBvZiB3b3JrZXJzIHRvIGNyZWF0ZS4gVGhpcyBjbGFzcyBtdXN0IGlt
cGxlbWVudAorICAgICAgICAgICAgdGhlIG1ldGhvZHMgaW4gdGhlIENsaWVudEludGVyZmFjZS4K
KyAgICBSZXR1cm5zOgorICAgICAgICBBIGhhbmRsZSB0byBhbiBvYmplY3QgdGhhdCB3aWxsIHRh
bGsgdG8gYSBtZXNzYWdlIGJyb2tlciBjb25maWd1cmVkCisgICAgICAgIGZvciB0aGUgbm9ybWFs
IG1hbmFnZXIvd29ya2VyIGNvbW11bmljYXRpb24uCisgICAgIiIiCisgICAgd29ya2VyX21vZGVs
ID0gb3B0aW9ucy53b3JrZXJfbW9kZWwKKyAgICBpZiB3b3JrZXJfbW9kZWwgPT0gJ2lubGluZSc6
CisgICAgICAgIHF1ZXVlX2NsYXNzID0gUXVldWUuUXVldWUKKyAgICAgICAgbWFuYWdlcl9jbGFz
cyA9IF9JbmxpbmVNYW5hZ2VyCisgICAgZWxpZiB3b3JrZXJfbW9kZWwgPT0gJ3RocmVhZHMnOgor
ICAgICAgICBxdWV1ZV9jbGFzcyA9IFF1ZXVlLlF1ZXVlCisgICAgICAgIG1hbmFnZXJfY2xhc3Mg
PSBfVGhyZWFkZWRNYW5hZ2VyCisgICAgZWxpZiB3b3JrZXJfbW9kZWwgPT0gJ3Byb2Nlc3Nlcycg
YW5kIF9tdWx0aXByb2Nlc3NpbmdfaXNfYXZhaWxhYmxlOgorICAgICAgICBxdWV1ZV9jbGFzcyA9
IF9NdWx0aXByb2Nlc3NpbmdfUXVldWUKKyAgICAgICAgbWFuYWdlcl9jbGFzcyA9IF9NdWx0aVBy
b2Nlc3NNYW5hZ2VyCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5zdXBw
b3J0ZWQgdmFsdWUgZm9yIC0td29ya2VyLW1vZGVsOiAlcyIgJQorICAgICAgICAgICAgICAgICAg
ICAgICAgIHdvcmtlcl9tb2RlbCkKKworICAgIGJyb2tlciA9IG1lc3NhZ2VfYnJva2VyMi5Ccm9r
ZXIob3B0aW9ucywgcXVldWVfY2xhc3MpCisgICAgcmV0dXJuIG1hbmFnZXJfY2xhc3MoYnJva2Vy
LCBwb3J0LCBvcHRpb25zLCBtYW5hZ2VyLCB3b3JrZXJfY2xhc3MpCisKKworY2xhc3MgX01hbmFn
ZXJDb25uZWN0aW9uKG1lc3NhZ2VfYnJva2VyMi5Ccm9rZXJDb25uZWN0aW9uKToKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgYnJva2VyLCBvcHRpb25zLCBtYW5hZ2VyLCB3b3JrZXJfY2xhc3MpOgor
ICAgICAgICBtZXNzYWdlX2Jyb2tlcjIuQnJva2VyQ29ubmVjdGlvbi5fX2luaXRfXyhzZWxmLCBi
cm9rZXIsIE1BTkFHRVJfVE9QSUMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQU5ZX1dPUktFUl9UT1BJQykKKyAgICAgICAgc2VsZi5fYnJva2VyID0g
YnJva2VyCisgICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCisgICAgICAgIHNlbGYuX21h
bmFnZXIgPSBtYW5hZ2VyCisgICAgICAgIHNlbGYuX3dvcmtlcl9jb25uZWN0aW9uX2NsYXNzID0g
Tm9uZQorICAgICAgICBzZWxmLl93b3JrZXJfY2xhc3MgPSB3b3JrZXJfY2xhc3MKKworICAgIGRl
ZiBfbWFrZV93b3JrZXJfY29ubmVjdGlvbihzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVt
ZW50ZWRFcnJvcgorCisgICAgZGVmIF9tYWtlX3dvcmtlcihzZWxmLCB3b3JrZXJfY29ubmVjdGlv
biwgd29ya2VyX251bWJlciwgKiprd2FyZ3MpOgorICAgICAgICByZXR1cm4gc2VsZi5fd29ya2Vy
X2NsYXNzKHdvcmtlcl9jb25uZWN0aW9uLCB3b3JrZXJfbnVtYmVyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMsICoqa3dhcmdzKQorCisgICAgZGVmIGNs
aWVudChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX21hbmFnZXIKKworICAgIGRlZiBzdGFy
dF93b3JrZXIoc2VsZiwgd29ya2VyX251bWJlciwgKiprd2FyZ3MpOgorICAgICAgICB3b3JrZXJf
Y29ubmVjdGlvbiA9IHNlbGYuX21ha2Vfd29ya2VyX2Nvbm5lY3Rpb24oKQorICAgICAgICB3b3Jr
ZXIgPSBzZWxmLl9tYWtlX3dvcmtlcih3b3JrZXJfY29ubmVjdGlvbiwgd29ya2VyX251bWJlciwg
Kiprd2FyZ3MpCisgICAgICAgIHdvcmtlcl9jb25uZWN0aW9uLnNldF93b3JrZXIod29ya2VyKQor
ICAgICAgICB3b3JrZXJfY29ubmVjdGlvbi5zdGFydCgpCisgICAgICAgIHJldHVybiB3b3JrZXJf
Y29ubmVjdGlvbgorCisKK2NsYXNzIF9JbmxpbmVNYW5hZ2VyKF9NYW5hZ2VyQ29ubmVjdGlvbik6
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb2tlciwgcG9ydCwgb3B0aW9ucywgbWFuYWdlciwg
d29ya2VyX2NsYXNzKToKKyAgICAgICAgX01hbmFnZXJDb25uZWN0aW9uLl9faW5pdF9fKHNlbGYs
IGJyb2tlciwgb3B0aW9ucywgbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdvcmtlcl9jbGFzcykKKyAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKKyAgICAgICAg
c2VsZi5faW5saW5lX3dvcmtlciA9IE5vbmUKKworICAgIGRlZiBfbWFrZV93b3JrZXJfY29ubmVj
dGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5faW5saW5lX3dvcmtlciA9IF9JbmxpbmVXb3JrZXIo
c2VsZi5fYnJva2VyLCBzZWxmLl9wb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZWxmLl9tYW5hZ2VyKQorICAgICAgICByZXR1cm4gc2VsZi5faW5saW5l
X3dvcmtlcgorCisgICAgZGVmIHJ1bl9tZXNzYWdlX2xvb3Aoc2VsZiwgZGVsYXlfc2Vjcz1Ob25l
KToKKyAgICAgICAgIyBOb3RlIHRoYXQgZGVsYXlfc2VjcyBpcyBpZ25vcmVkIGluIHRoaXMgY2Fz
ZSBzaW5jZSB3ZSBjYW4ndCBlYXNpbHkKKyAgICAgICAgIyBpbXBsZW1lbnQgaXQuCisgICAgICAg
IHNlbGYuX2lubGluZV93b3JrZXIucnVuKCkKKyAgICAgICAgc2VsZi5fYnJva2VyLnJ1bl9hbGxf
cGVuZGluZyhNQU5BR0VSX1RPUElDLCBzZWxmLl9tYW5hZ2VyKQorCisKK2NsYXNzIF9UaHJlYWRl
ZE1hbmFnZXIoX01hbmFnZXJDb25uZWN0aW9uKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYnJv
a2VyLCBwb3J0LCBvcHRpb25zLCBtYW5hZ2VyLCB3b3JrZXJfY2xhc3MpOgorICAgICAgICBfTWFu
YWdlckNvbm5lY3Rpb24uX19pbml0X18oc2VsZiwgYnJva2VyLCBvcHRpb25zLCBtYW5hZ2VyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyX2NsYXNzKQorICAgICAg
ICBzZWxmLl9wb3J0ID0gcG9ydAorCisgICAgZGVmIF9tYWtlX3dvcmtlcl9jb25uZWN0aW9uKHNl
bGYpOgorICAgICAgICByZXR1cm4gX1RocmVhZGVkV29ya2VyKHNlbGYuX2Jyb2tlciwgc2VsZi5f
cG9ydCkKKworCitjbGFzcyBfTXVsdGlQcm9jZXNzTWFuYWdlcihfTWFuYWdlckNvbm5lY3Rpb24p
OgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXIsIHBvcnQsIG9wdGlvbnMsIG1hbmFnZXIs
IHdvcmtlcl9jbGFzcyk6CisgICAgICAgIF9NYW5hZ2VyQ29ubmVjdGlvbi5fX2luaXRfXyhzZWxm
LCBicm9rZXIsIG9wdGlvbnMsIG1hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3b3JrZXJfY2xhc3MpCisgICAgICAgIHNlbGYuX3BsYXRmb3JtX25hbWUgPSBwb3J0
Lm5hbWUoKQorCisgICAgZGVmIF9tYWtlX3dvcmtlcl9jb25uZWN0aW9uKHNlbGYpOgorICAgICAg
ICByZXR1cm4gX011bHRpUHJvY2Vzc1dvcmtlcihzZWxmLl9icm9rZXIsIHNlbGYuX3BsYXRmb3Jt
X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMp
CisKKworY2xhc3MgX1dvcmtlckNvbm5lY3Rpb24obWVzc2FnZV9icm9rZXIyLkJyb2tlckNvbm5l
Y3Rpb24pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXIpOgorICAgICAgICBtZXNzYWdl
X2Jyb2tlcjIuQnJva2VyQ29ubmVjdGlvbi5fX2luaXRfXyhzZWxmLCBicm9rZXIsIEFOWV9XT1JL
RVJfVE9QSUMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTUFOQUdFUl9UT1BJQykKKyAgICAgICAgc2VsZi5fd29ya2VyID0gTm9uZQorCisgICAgZGVm
IHNldF93b3JrZXIoc2VsZiwgd29ya2VyKToKKyAgICAgICAgc2VsZi5fd29ya2VyID0gd29ya2Vy
CisgICAgICAgIHNlbGYubmFtZSA9IHdvcmtlci5uYW1lKCkKKworICAgIGRlZiBjbGllbnQoc2Vs
Zik6CisgICAgICAgIHJldHVybiBzZWxmLl93b3JrZXIKKworICAgIGRlZiBzdGFydChzZWxmKToK
KyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHJ1bihzZWxmKToK
KyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHlpZWxkX3RvX2Jy
b2tlcihzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGNhbmNlbChzZWxmKToKKyAgICAg
ICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGlzX2FsaXZlKHNlbGYpOgor
ICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgam9pbihzZWxmLCB0
aW1lb3V0KToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGxv
Z193ZWRnZWRfd29ya2VyKHNlbGYsIHRlc3RfbmFtZSk6CisgICAgICAgIHJhaXNlIE5vdEltcGxl
bWVudGVkRXJyb3IKKworCitjbGFzcyBfSW5saW5lV29ya2VyKF9Xb3JrZXJDb25uZWN0aW9uKToK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCBwb3J0LCBtYW5hZ2VyKToKKyAgICAgICAg
X1dvcmtlckNvbm5lY3Rpb24uX19pbml0X18oc2VsZiwgYnJva2VyKQorICAgICAgICBzZWxmLl9w
b3J0ID0gcG9ydAorICAgICAgICBzZWxmLl9tYW5hZ2VyID0gbWFuYWdlcgorICAgICAgICBzZWxm
Ll9hbGl2ZSA9IEZhbHNlCisKKyAgICBkZWYgc3RhcnQoc2VsZik6CisgICAgICAgIHBhc3MKKwor
ICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgIHNlbGYuX2FsaXZlID0gVHJ1ZQorICAgICAgICBz
ZWxmLl93b3JrZXIucnVuKHNlbGYuX3BvcnQpCisgICAgICAgIHNlbGYuX2FsaXZlID0gRmFsc2UK
KworICAgIGRlZiB5aWVsZF90b19icm9rZXIoc2VsZik6CisgICAgICAgIHNlbGYuX2Jyb2tlci5y
dW5fYWxsX3BlbmRpbmcoTUFOQUdFUl9UT1BJQywgc2VsZi5fbWFuYWdlcikKKworICAgIGRlZiBj
YW5jZWwoc2VsZik6CisgICAgICAgIHNlbGYuX3dvcmtlci5jYW5jZWwoKQorCisgICAgZGVmIGlz
X2FsaXZlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fYWxpdmUKKworICAgIGRlZiBqb2lu
KHNlbGYsIHRpbWVvdXQpOgorICAgICAgICBhc3NlcnQgbm90IHNlbGYuaXNfYWxpdmUoKQorCisg
ICAgZGVmIGxvZ193ZWRnZWRfd29ya2VyKHNlbGYsIHRlc3RfbmFtZSk6CisgICAgICAgIHJhaXNl
IEFzc2VydGlvbkVycm9yKCJfSW5saW5lV29ya2VyLmxvZ193ZWRnZWRfd29ya2VyKCkgY2FsbGVk
IikKKworCitjbGFzcyBfVGhyZWFkZWRXb3JrZXIodGhyZWFkaW5nLlRocmVhZCwgX1dvcmtlckNv
bm5lY3Rpb24pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXIsIHBvcnQpOgorICAgICAg
ICB0aHJlYWRpbmcuVGhyZWFkLl9faW5pdF9fKHNlbGYpCisgICAgICAgIF9Xb3JrZXJDb25uZWN0
aW9uLl9faW5pdF9fKHNlbGYsIGJyb2tlcikKKyAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKKwor
ICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgICMgRklYTUU6IFdlIGNhbiByZW1vdmUgdGhpcyBv
bmNlIGV2ZXJ5b25lIGlzIG9uIDIuNi4KKyAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgJ2lk
ZW50Jyk6CisgICAgICAgICAgICBzZWxmLmlkZW50ID0gdGhyZWFkLmdldF9pZGVudCgpCisgICAg
ICAgIHNlbGYuX3dvcmtlci5ydW4oc2VsZi5fcG9ydCkKKworICAgIGRlZiBjYW5jZWwoc2VsZik6
CisgICAgICAgIHNlbGYuX3dvcmtlci5jYW5jZWwoKQorCisgICAgZGVmIGlzX2FsaXZlKHNlbGYp
OgorICAgICAgICAjIEZJWE1FOiBXZSBjYW4gcmVtb3ZlIHRoaXMgb25jZSBldmVyeW9uZSBpcyBv
biAyLjYuCisgICAgICAgIHNlbGYuaXNBbGl2ZSgpCisKKyAgICBkZWYgbG9nX3dlZGdlZF93b3Jr
ZXIoc2VsZiwgdGVzdF9uYW1lKToKKyAgICAgICAgdGlkID0gc2VsZi5pZGVudAorICAgICAgICBz
dGFjayA9IF9maW5kX3RocmVhZF9zdGFjayh0aWQpCisgICAgICAgIGFzc2VydChzdGFjayBpcyBu
b3QgTm9uZSkKKyAgICAgICAgX2xvZy5lcnJvcigiJXMgKHRpZCAlZCkgaXMgd2VkZ2VkIG9uIHRl
c3QgJXMiICUKKyAgICAgICAgICAgICAgICAgICAoc2VsZi5uYW1lLCB0aWQsIHRlc3RfbmFtZSkp
CisgICAgICAgIF9sb2dfc3RhY2soc3RhY2spCisKKworY2xhc3MgX011bHRpUHJvY2Vzc1dvcmtl
cihfTXVsdGlwcm9jZXNzaW5nX1Byb2Nlc3MsIF9Xb3JrZXJDb25uZWN0aW9uKToKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgYnJva2VyLCBwbGF0Zm9ybV9uYW1lLCBvcHRpb25zKToKKyAgICAgICAg
X011bHRpcHJvY2Vzc2luZ19Qcm9jZXNzLl9faW5pdF9fKHNlbGYpCisgICAgICAgIF9Xb3JrZXJD
b25uZWN0aW9uLl9faW5pdF9fKHNlbGYsIGJyb2tlcikKKyAgICAgICAgc2VsZi5fb3B0aW9ucyA9
IG9wdGlvbnMKKyAgICAgICAgc2VsZi5fcGxhdGZvcm1fbmFtZSA9IHBsYXRmb3JtX25hbWUKKwor
ICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgICMgUmUtY29uZmlndXJlIHRoZSBsb2dnZXIuCisg
ICAgICAgICMgRklYTUU6IGZpZ3VyZSBvdXQgaG93IHRvIGdldCBhIGhhbmRsZSB0byB0aGUgcmln
aHQgc3RyZWFtLgorICAgICAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKCkKKyAgICAgICAgcG9ydCA9
IGxheW91dF90ZXN0cy5wb3J0LmdldChzZWxmLl9wbGF0Zm9ybV9uYW1lLCBzZWxmLl9vcHRpb25z
KQorICAgICAgICBzZWxmLl93b3JrZXIucnVuKHBvcnQpCisKKyAgICBkZWYgY2FuY2VsKHNlbGYp
OgorICAgICAgICBzZWxmLnRlcm1pbmF0ZSgpCisKKyAgICBkZWYgbG9nX3dlZGdlZF93b3JrZXIo
c2VsZiwgdGVzdF9uYW1lKToKKyAgICAgICAgX2xvZy5lcnJvcigiJXMgKHBpZCAlZCkgaXMgd2Vk
Z2VkIG9uIHRlc3QgJXMiICUKKyAgICAgICAgICAgICAgICAgICAoc2VsZi5uYW1lLCBzZWxmLnBp
ZCwgdGVzdF9uYW1lKSkKKworCitkZWYgX2ZpbmRfdGhyZWFkX3N0YWNrKHRpZCk6CisgICAgIiIi
UmV0dXJucyBhIHN0YWNrIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIGR1bXAgYSBzdGFjayB0
cmFjZSBmb3IKKyAgICB0aGUgZ2l2ZW4gdGhyZWFkIGlkIChvciBOb25lIGlmIHRoZSBpZCBpcyBu
b3QgZm91bmQpLiIiIgorICAgIGZvciB0aHJlYWRfaWQsIHN0YWNrIGluIHN5cy5fY3VycmVudF9m
cmFtZXMoKS5pdGVtcygpOgorICAgICAgICBpZiB0aHJlYWRfaWQgPT0gdGlkOgorICAgICAgICAg
ICAgcmV0dXJuIHN0YWNrCisgICAgcmV0dXJuIE5vbmUKKworCitkZWYgX2xvZ19zdGFjayhzdGFj
ayk6CisgICAgIiIiTG9nIGEgc3RhY2sgdHJhY2UgdG8gbG9nLmVycm9yKCkuIiIiCisgICAgZm9y
IGZpbGVuYW1lLCBsaW5lbm8sIG5hbWUsIGxpbmUgaW4gdHJhY2ViYWNrLmV4dHJhY3Rfc3RhY2so
c3RhY2spOgorICAgICAgICBfbG9nLmVycm9yKCdGaWxlOiAiJXMiLCBsaW5lICVkLCBpbiAlcycg
JSAoZmlsZW5hbWUsIGxpbmVubywgbmFtZSkpCisgICAgICAgIGlmIGxpbmU6CisgICAgICAgICAg
ICBfbG9nLmVycm9yKCcgICVzJyAlIGxpbmUuc3RyaXAoKSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21hbmFnZXJfd29ya2Vy
X2Jyb2tlcl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L2xheW91dF9wYWNrYWdlL21hbmFnZXJfd29ya2VyX2Jyb2tlcl91bml0dGVzdC5weQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4wZWYxYjQ1NzNmZmY0ODZiMjIyMzhhN2FiNzY3M2I3ZDU5MzM4YjZiCi0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2th
Z2UvbWFuYWdlcl93b3JrZXJfYnJva2VyX3VuaXR0ZXN0LnB5CkBAIC0wLDAgKzEsMzExIEBACisj
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIwor
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgor
IyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKworaW1wb3J0IG9wdHBhcnNlCitpbXBvcnQgUXVldWUKK2ltcG9ydCBz
eXMKK2ltcG9ydCB1bml0dGVzdAorCit0cnk6CisgICAgX211bHRpcHJvY2Vzc2luZ19pc19hdmFp
bGFibGUgPSBUcnVlCisgICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFF1ZXVlIGFzIF9N
dWx0aXByb2Nlc3NpbmdfUXVldWUKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBfbXVsdGlwcm9j
ZXNzaW5nX2lzX2F2YWlsYWJsZSA9IEZhbHNlCisgICAgX011bHRpcHJvY2Vzc2luZ19RdWV1ZSA9
IFF1ZXVlLlF1ZXVlCisKKworZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBvdXRw
dXRjYXB0dXJlCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cyBpbXBvcnQgcG9ydAorCitpbXBv
cnQgbWVzc2FnZV9icm9rZXIyCitpbXBvcnQgbWFuYWdlcl93b3JrZXJfYnJva2VyCitpbXBvcnQg
cHJpbnRpbmcKKworCitjbGFzcyBUZXN0V29ya2VyKG1lc3NhZ2VfYnJva2VyMi5DbGllbnRJbnRl
cmZhY2UpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXIsIHdvcmtlcl9udW1iZXIsIG9w
dGlvbnMsICoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5fYnJva2VyID0gYnJva2VyCisgICAgICAg
IHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCisgICAgICAgIHNlbGYuX3dvcmtlcl9udW1iZXIgPSB3
b3JrZXJfbnVtYmVyCisgICAgICAgIHNlbGYuX25hbWUgPSAnVGVzdFdvcmtlci8lZCcgJSB3b3Jr
ZXJfbnVtYmVyCisgICAgICAgIHNlbGYuX2NhbmNlbGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5f
c3RvcHBlZCA9IEZhbHNlCisgICAgICAgIHNlbGYuX3N0YXJ0aW5nX3F1ZXVlID0ga3dhcmdzLmdl
dCgnc3RhcnRpbmdfcXVldWUnKQorICAgICAgICBzZWxmLl9zdG9wcGluZ19xdWV1ZSA9IGt3YXJn
cy5nZXQoJ3N0b3BwaW5nX3F1ZXVlJykKKworICAgIGRlZiBjYW5jZWwoc2VsZik6CisgICAgICAg
IHNlbGYuX2NhbmNlbGVkID0gVHJ1ZQorCisgICAgZGVmIGhhbmRsZV9zdG9wKHNlbGYsIHNyYyk6
CisgICAgICAgIHNlbGYuX3N0b3BwZWQgPSBUcnVlCisKKyAgICBkZWYgaGFuZGxlX3Rlc3Qoc2Vs
Ziwgc3JjLCBhbl9pbnQsIGFfc3RyKToKKyAgICAgICAgYXNzZXJ0IGFuX2ludCA9PSAxCisgICAg
ICAgIGFzc2VydCBhX3N0ciA9PSAiaGVsbG8sIHdvcmxkIgorICAgICAgICBzZWxmLl9icm9rZXIu
cG9zdF9tZXNzYWdlKCd0ZXN0JywgMiwgJ2hpLCBldmVyeWJvZHknKQorCisgICAgZGVmIGlzX2Rv
bmUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9zdG9wcGVkIG9yIHNlbGYuX2NhbmNlbGVk
CisKKyAgICBkZWYgbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX25hbWUKKworICAg
IGRlZiBzdGFydChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHJ1bihzZWxmLCBwb3J0
KToKKyAgICAgICAgaWYgc2VsZi5fc3RhcnRpbmdfcXVldWU6CisgICAgICAgICAgICBzZWxmLl9z
dGFydGluZ19xdWV1ZS5wdXQoJycpCisgICAgICAgIGlmIHNlbGYuX3N0b3BwaW5nX3F1ZXVlOgor
ICAgICAgICAgICAgc2VsZi5fc3RvcHBpbmdfcXVldWUuZ2V0KCkKKyAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgc2VsZi5fYnJva2VyLnJ1bl9tZXNzYWdlX2xvb3AoKQorICAgICAgICAgICAgc2Vs
Zi5fYnJva2VyLnlpZWxkX3RvX2Jyb2tlcigpCisgICAgICAgICAgICBzZWxmLl9icm9rZXIucG9z
dF9tZXNzYWdlKCdkb25lJykKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAg
ICAgIHNlbGYuX2Jyb2tlci5wb3N0X21lc3NhZ2UoJ2V4Y2VwdGlvbicsICh0eXBlKGUpLCBzdHIo
ZSksIE5vbmUpKQorCisKK2RlZiBnZXRfb3B0aW9ucyh3b3JrZXJfbW9kZWwpOgorICAgIG9wdGlv
bl9saXN0ID0gbWVzc2FnZV9icm9rZXIyLnJ1bnRpbWVfb3B0aW9ucygpCisgICAgcGFyc2VyID0g
b3B0cGFyc2UuT3B0aW9uUGFyc2VyKG9wdGlvbl9saXN0PW9wdGlvbl9saXN0KQorICAgIG9wdGlv
bnMsIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyhhcmdzPVsnLS13b3JrZXItbW9kZWwnLCB3b3Jr
ZXJfbW9kZWxdKQorICAgIHJldHVybiBvcHRpb25zCisKKworZGVmIG1ha2VfYnJva2VyKG1hbmFn
ZXIsIHdvcmtlcl9tb2RlbCk6CisgICAgb3B0aW9ucyA9IGdldF9vcHRpb25zKHdvcmtlcl9tb2Rl
bCkKKyAgICByZXR1cm4gbWFuYWdlcl93b3JrZXJfYnJva2VyLmdldChwb3J0LmdldCgidGVzdCIp
LCBvcHRpb25zLCBtYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFRlc3RXb3JrZXIpCisKKworY2xhc3MgRnVuY3Rpb25UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6
CisgICAgZGVmIHRlc3RfZ2V0X19pbmxpbmUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZShtYWtlX2Jyb2tlcihzZWxmLCAnaW5saW5lJykgaXMgbm90IE5vbmUpCisKKyAgICBkZWYgdGVz
dF9nZXRfX3RocmVhZHMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYWtlX2Jyb2tl
cihzZWxmLCAndGhyZWFkcycpIGlzIG5vdCBOb25lKQorCisgICAgZGVmIHRlc3RfZ2V0X19wcm9j
ZXNzZXMoc2VsZik6CisgICAgICAgIGlmIF9tdWx0aXByb2Nlc3NpbmdfaXNfYXZhaWxhYmxlOgor
ICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1ha2VfYnJva2VyKHNlbGYsICdwcm9jZXNzZXMn
KSBpcyBub3QgTm9uZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFp
c2VzKFZhbHVlRXJyb3IsIG1ha2VfYnJva2VyLCBzZWxmLCAncHJvY2Vzc2VzJykKKworICAgIGRl
ZiB0ZXN0X2dldF9fdW5rbm93bihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFs
dWVFcnJvciwgbWFrZV9icm9rZXIsIHNlbGYsICd1bmtub3duJykKKworCitjbGFzcyBfVGVzdHNN
aXhpbihvYmplY3QpOgorICAgICIiIk1peGluIGNsYXNzIHRoYXQgaW1wbGVtZW50cyBhIHNlcmll
cyBvZiB0ZXN0cyB0byBlbmZvcmNlIHRoZQorICAgIGNvbnRyYWN0IGFsbCBpbXBsZW1lbnRhdGlv
bnMgbXVzdCBmb2xsb3cuIiIiCisKKyAgICAjCisgICAgIyBNZXRob2RzIHRvIGltcGxlbWVudCB0
aGUgTWFuYWdlciBzaWRlIG9mIHRoZSBDbGllbnRJbnRlcmZhY2UKKyAgICAjCisgICAgZGVmIG5h
bWUoc2VsZik6CisgICAgICAgIHJldHVybiAnVGVzdGVyJworCisgICAgZGVmIGlzX2RvbmUoc2Vs
Zik6CisgICAgICAgIHJldHVybiBzZWxmLl9kb25lCisKKyAgICAjCisgICAgIyBIYW5kbGVycyBm
b3IgdGhlIG1lc3NhZ2VzIHRoZSBUZXN0V29ya2VyIG1heSBzZW5kLgorICAgICMKKyAgICBkZWYg
aGFuZGxlX2RvbmUoc2VsZiwgc3JjKToKKyAgICAgICAgc2VsZi5fZG9uZSA9IFRydWUKKworICAg
IGRlZiBoYW5kbGVfdGVzdChzZWxmLCBzcmMsIGFuX2ludCwgYV9zdHIpOgorICAgICAgICBzZWxm
Ll9hbl9pbnQgPSBhbl9pbnQKKyAgICAgICAgc2VsZi5fYV9zdHIgPSBhX3N0cgorCisgICAgZGVm
IGhhbmRsZV9leGNlcHRpb24oc2VsZiwgc3JjLCBleGNfaW5mbyk6CisgICAgICAgIHNlbGYuX2V4
Y2VwdGlvbiA9IGV4Y19pbmZvCisgICAgICAgIHNlbGYuX2RvbmUgPSBUcnVlCisKKyAgICAjCisg
ICAgIyBUZXN0aW5nIGhlbHBlciBtZXRob2RzCisgICAgIworICAgIGRlZiBzZXRVcChzZWxmKToK
KyAgICAgICAgc2VsZi5fYW5faW50ID0gTm9uZQorICAgICAgICBzZWxmLl9hX3N0ciA9IE5vbmUK
KyAgICAgICAgc2VsZi5fYnJva2VyID0gTm9uZQorICAgICAgICBzZWxmLl9kb25lID0gRmFsc2UK
KyAgICAgICAgc2VsZi5fZXhjZXB0aW9uID0gTm9uZQorICAgICAgICBzZWxmLl93b3JrZXJfbW9k
ZWwgPSBOb25lCisKKyAgICBkZWYgbWFrZV9icm9rZXIoc2VsZik6CisgICAgICAgIHNlbGYuX2Jy
b2tlciA9IG1ha2VfYnJva2VyKHNlbGYsIHNlbGYuX3dvcmtlcl9tb2RlbCkKKworICAgICMKKyAg
ICAjIEFjdHVhbCB1bml0IHRlc3RzCisgICAgIworICAgIGRlZiB0ZXN0X2NhbmNlbChzZWxmKToK
KyAgICAgICAgaWYgbm90IHNlbGYuX3dvcmtlcl9tb2RlbDoKKyAgICAgICAgICAgIHJldHVybgor
ICAgICAgICBzZWxmLm1ha2VfYnJva2VyKCkKKyAgICAgICAgd29ya2VyID0gc2VsZi5fYnJva2Vy
LnN0YXJ0X3dvcmtlcigwKQorICAgICAgICB3b3JrZXIuY2FuY2VsKCkKKyAgICAgICAgc2VsZi5f
YnJva2VyLnBvc3RfbWVzc2FnZSgndGVzdCcsIDEsICdoZWxsbywgd29ybGQnKQorICAgICAgICB3
b3JrZXIuam9pbigwLjUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uod29ya2VyLmlzX2FsaXZl
KCkpCisKKyAgICBkZWYgdGVzdF9kb25lKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5fd29y
a2VyX21vZGVsOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYubWFrZV9icm9rZXIo
KQorICAgICAgICB3b3JrZXIgPSBzZWxmLl9icm9rZXIuc3RhcnRfd29ya2VyKDApCisgICAgICAg
IHNlbGYuX2Jyb2tlci5wb3N0X21lc3NhZ2UoJ3Rlc3QnLCAxLCAnaGVsbG8sIHdvcmxkJykKKyAg
ICAgICAgc2VsZi5fYnJva2VyLnBvc3RfbWVzc2FnZSgnc3RvcCcpCisgICAgICAgIHNlbGYuX2Jy
b2tlci5ydW5fbWVzc2FnZV9sb29wKCkKKyAgICAgICAgd29ya2VyLmpvaW4oMC41KQorICAgICAg
ICBzZWxmLmFzc2VydEZhbHNlKHdvcmtlci5pc19hbGl2ZSgpKQorICAgICAgICBzZWxmLmFzc2Vy
dFRydWUoc2VsZi5pc19kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYW5f
aW50LCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2Ffc3RyLCAnaGksIGV2ZXJ5
Ym9keScpCisKKyAgICBkZWYgdGVzdF9sb2dfd2VkZ2VkX3dvcmtlcihzZWxmKToKKyAgICAgICAg
aWYgbm90IHNlbGYuX3dvcmtlcl9tb2RlbDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBz
dGFydGluZ19xdWV1ZSA9IHNlbGYucXVldWUoKQorICAgICAgICBzdG9wcGluZ19xdWV1ZSA9IHNl
bGYucXVldWUoKQorICAgICAgICBzZWxmLm1ha2VfYnJva2VyKCkKKyAgICAgICAgb2MgPSBvdXRw
dXRjYXB0dXJlLk91dHB1dENhcHR1cmUoKQorICAgICAgICBvYy5jYXB0dXJlX291dHB1dCgpCisg
ICAgICAgIHdvcmtlciA9IHNlbGYuX2Jyb2tlci5zdGFydF93b3JrZXIoMCwKKyAgICAgICAgICAg
IHN0YXJ0aW5nX3F1ZXVlPXN0YXJ0aW5nX3F1ZXVlLCBzdG9wcGluZ19xdWV1ZT1zdG9wcGluZ19x
dWV1ZSkKKyAgICAgICAgc3RhcnRpbmdfcXVldWUuZ2V0KCkKKyAgICAgICAgd29ya2VyLmxvZ193
ZWRnZWRfd29ya2VyKCd0ZXN0X25hbWUnKQorICAgICAgICBzdG9wcGluZ19xdWV1ZS5wdXQoJycp
CisgICAgICAgIHNlbGYuX2Jyb2tlci5wb3N0X21lc3NhZ2UoJ3N0b3AnKQorICAgICAgICBzZWxm
Ll9icm9rZXIucnVuX21lc3NhZ2VfbG9vcCgpCisgICAgICAgIHdvcmtlci5qb2luKDAuNSkKKyAg
ICAgICAgb2MucmVzdG9yZV9vdXRwdXQoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHdvcmtl
ci5pc19hbGl2ZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5pc19kb25lKCkpCisK
KyAgICBkZWYgdGVzdF91bmtub3duX21lc3NhZ2Uoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxm
Ll93b3JrZXJfbW9kZWw6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5tYWtlX2Jy
b2tlcigpCisgICAgICAgIHdvcmtlciA9IHNlbGYuX2Jyb2tlci5zdGFydF93b3JrZXIoMCkKKyAg
ICAgICAgc2VsZi5fYnJva2VyLnBvc3RfbWVzc2FnZSgndW5rbm93bicpCisgICAgICAgIHNlbGYu
X2Jyb2tlci5ydW5fbWVzc2FnZV9sb29wKCkKKyAgICAgICAgd29ya2VyLmpvaW4oMC41KQorCisg
ICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmlzX2RvbmUoKSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRGYWxzZSh3b3JrZXIuaXNfYWxpdmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2Vs
Zi5fZXhjZXB0aW9uWzBdLCBWYWx1ZUVycm9yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhz
ZWxmLl9leGNlcHRpb25bMV0sCisgICAgICAgICAgICAiVGVzdFdvcmtlci8wOiByZWNlaXZlZCBt
ZXNzYWdlICd1bmtub3duJyBpdCBjb3VsZG4ndCBoYW5kbGUiKQorCisKK2NsYXNzIElubGluZUJy
b2tlclRlc3RzKF9UZXN0c01peGluLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVw
KHNlbGYpOgorICAgICAgICBfVGVzdHNNaXhpbi5zZXRVcChzZWxmKQorICAgICAgICBzZWxmLl93
b3JrZXJfbW9kZWwgPSAnaW5saW5lJworCisgICAgZGVmIHRlc3RfbG9nX3dlZGdlZF93b3JrZXIo
c2VsZik6CisgICAgICAgIHNlbGYubWFrZV9icm9rZXIoKQorICAgICAgICB3b3JrZXIgPSBzZWxm
Ll9icm9rZXIuc3RhcnRfd29ya2VyKDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2Vy
dGlvbkVycm9yLCB3b3JrZXIubG9nX3dlZGdlZF93b3JrZXIsIE5vbmUpCisKKworY2xhc3MgTXVs
dGlQcm9jZXNzQnJva2VyVGVzdHMoX1Rlc3RzTWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAg
ICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIF9UZXN0c01peGluLnNldFVwKHNlbGYpCisgICAg
ICAgIGlmIF9tdWx0aXByb2Nlc3NpbmdfaXNfYXZhaWxhYmxlOgorICAgICAgICAgICAgc2VsZi5f
d29ya2VyX21vZGVsID0gJ3Byb2Nlc3NlcycKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNl
bGYuX3dvcmtlcl9tb2RlbCA9IE5vbmUKKworICAgIGRlZiBxdWV1ZShzZWxmKToKKyAgICAgICAg
cmV0dXJuIF9NdWx0aXByb2Nlc3NpbmdfUXVldWUoKQorCisKK2NsYXNzIFRocmVhZGVkQnJva2Vy
VGVzdHMoX1Rlc3RzTWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgcXVldWUoc2Vs
Zik6CisgICAgICAgIHJldHVybiBRdWV1ZS5RdWV1ZSgpCisKKyAgICBkZWYgc2V0VXAoc2VsZik6
CisgICAgICAgIF9UZXN0c01peGluLnNldFVwKHNlbGYpCisgICAgICAgIHNlbGYuX3dvcmtlcl9t
b2RlbCA9ICd0aHJlYWRzJworCisKK2NsYXNzIEZ1bmN0aW9uc1Rlc3QodW5pdHRlc3QuVGVzdENh
c2UpOgorICAgIGRlZiB0ZXN0X2ZpbmRfdGhyZWFkX3N0YWNrX2ZvdW5kKHNlbGYpOgorICAgICAg
ICBpZCwgc3RhY2sgPSBzeXMuX2N1cnJlbnRfZnJhbWVzKCkuaXRlbXMoKVswXQorICAgICAgICBm
b3VuZF9zdGFjayA9IG1hbmFnZXJfd29ya2VyX2Jyb2tlci5fZmluZF90aHJlYWRfc3RhY2soaWQp
CisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZm91bmRfc3RhY2ssIE5vbmUpCisKKyAgICBk
ZWYgdGVzdF9maW5kX3RocmVhZF9zdGFja19ub3RfZm91bmQoc2VsZik6CisgICAgICAgIGZvdW5k
X3N0YWNrID0gbWFuYWdlcl93b3JrZXJfYnJva2VyLl9maW5kX3RocmVhZF9zdGFjaygwKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKGZvdW5kX3N0YWNrLCBOb25lKQorCisgICAgZGVmIHRlc3Rf
bG9nX3N0YWNrKHNlbGYpOgorICAgICAgICBpZCwgc3RhY2sgPSBzeXMuX2N1cnJlbnRfZnJhbWVz
KCkuaXRlbXMoKVswXQorICAgICAgICBvYyA9IG91dHB1dGNhcHR1cmUuT3V0cHV0Q2FwdHVyZSgp
CisgICAgICAgICMgRklYTUU6IHZlcmlmeSBvdXRwdXQ/CisgICAgICAgIG9jLmNhcHR1cmVfb3V0
cHV0KCkKKyAgICAgICAgbWFuYWdlcl93b3JrZXJfYnJva2VyLl9sb2dfc3RhY2soc3RhY2spCisg
ICAgICAgIG9jLnJlc3RvcmVfb3V0cHV0KCkKKworICAgIGRlZiB0ZXN0X3J1bnRpbWVfb3B0aW9u
cyhzZWxmKToKKyAgICAgICAgb3B0aW9uX2xpc3QgPSBtYW5hZ2VyX3dvcmtlcl9icm9rZXIucnVu
dGltZV9vcHRpb25zKCkKKyAgICAgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKG9w
dGlvbl9saXN0PW9wdGlvbl9saXN0KQorICAgICAgICBvcHRpb25zLCBhcmdzID0gcGFyc2VyLnBh
cnNlX2FyZ3MoW10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcHRpb25zKQorCisKK2NsYXNz
IEludGVyZmFjZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVGhlc2UgdGVzdHMgbW9z
dGx5IGV4aXN0IHRvIHBhY2lmeSBjb3ZlcmFnZS4KKworICAgICMgRklYTUU6IFRoZXJlIG11c3Qg
YmUgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMgYW5kIGFsc28gdmVyaWZ5CisgICAgIyB0aGF0IGNs
YXNzZXMgZG8gaW1wbGVtZW50IGV2ZXJ5IGFic3RyYWN0IG1ldGhvZCBpbiBhbiBpbnRlcmZhY2Uu
CisgICAgZGVmIHRlc3RfbWFuYWdlcmNvbm5lY3Rpb25faXNfYWJzdHJhY3Qoc2VsZik6CisgICAg
ICAgICMgVGVzdCB0aGF0IGFsbCB0aGUgYmFzZSBjbGFzcyBtZXRob2RzIGFyZSBhYnN0cmFjdCBh
bmQgaGF2ZSB0aGUKKyAgICAgICAgIyBzaWduYXR1cmUgd2UgZXhwZWN0LgorICAgICAgICBicm9r
ZXIgPSBtYWtlX2Jyb2tlcihzZWxmLCAnaW5saW5lJykKKyAgICAgICAgb2JqID0gbWFuYWdlcl93
b3JrZXJfYnJva2VyLl9NYW5hZ2VyQ29ubmVjdGlvbihicm9rZXIuX2Jyb2tlciwgTm9uZSwgc2Vs
ZiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwg
b2JqLl9tYWtlX3dvcmtlcl9jb25uZWN0aW9uKQorCisgICAgZGVmIHRlc3Rfd29ya2VyY29ubmVj
dGlvbl9pc19hYnN0cmFjdChzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgYWxsIHRoZSBiYXNl
IGNsYXNzIG1ldGhvZHMgYXJlIGFic3RyYWN0IGFuZCBoYXZlIHRoZQorICAgICAgICAjIHNpZ25h
dHVyZSB3ZSBleHBlY3QuCisgICAgICAgIGJyb2tlciA9IG1ha2VfYnJva2VyKHNlbGYsICdpbmxp
bmUnKQorICAgICAgICBvYmogPSBtYW5hZ2VyX3dvcmtlcl9icm9rZXIuX1dvcmtlckNvbm5lY3Rp
b24oYnJva2VyLl9icm9rZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVu
dGVkRXJyb3IsIG9iai5zdGFydCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVt
ZW50ZWRFcnJvciwgb2JqLnJ1bikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVt
ZW50ZWRFcnJvciwgb2JqLmNhbmNlbCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1w
bGVtZW50ZWRFcnJvciwgb2JqLmlzX2FsaXZlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhO
b3RJbXBsZW1lbnRlZEVycm9yLCBvYmouam9pbiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRS
YWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgb2JqLmxvZ193ZWRnZWRfd29ya2VyLCBOb25lKQor
CisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYg
LS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2Fn
ZS9tZXNzYWdlX2Jyb2tlcjIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tlcjIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjQ2ZjUwZTZm
Njc4ZDVhOWEwY2FlYWIyYjgyYmNkNmFmOGU0MzY3YwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2VfYnJv
a2VyMi5weQpAQCAtMCwwICsxLDIwNCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisj
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIk1vZHVsZSBm
b3IgaGFuZGxpbmcgbWVzc2FnZXMgYW5kIGNvbmN1cnJlbmN5IGZvciBydW4td2Via2l0LXRlc3Rz
LgorCitUZXN0aW5nIGlzIGFjY29tcGxpc2hlZCBieSBoYXZpbmcgYSBtYW5hZ2VyIChUZXN0UnVu
bmVyKSBnYXRoZXIgYWxsIG9mIHRoZQordGVzdHMgdG8gYmUgcnVuLCBhbmQgc2VuZGluZyBtZXNz
YWdlcyB0byBhIHBvb2wgb2Ygd29ya2VycyAoVGVzdFNoZWxsVGhyZWFkcykKK3RvIHJ1biBlYWNo
IHRlc3QuIEVhY2ggd29ya2VyIGNvbW11bmljYXRlcyB3aXRoIG9uZSBkcml2ZXIgKHVzdWFsbHkK
K0R1bXBSZW5kZXJUcmVlKSB0byBydW4gb25lIHRlc3QgYXQgYSB0aW1lIGFuZCB0aGVuIGNvbXBh
cmUgdGhlIG91dHB1dCBhZ2FpbnN0Cit3aGF0IHdlIGV4cGVjdGVkIHRvIGdldC4KKworVGhpcyBt
b2R1bGVzIGltcGxlbWVudHMgYSBtZXNzYWdlIGJyb2tlciB0aGF0IGNvbm5lY3RzIHRoZSBtYW5h
Z2VyIHRvIHRoZQord29ya2VyczogaXQgcHJvdmlkZXMgYSBtZXNzYWdpbmcgYWJzdHJhY3Rpb24g
YW5kIG1lc3NhZ2UgbG9vcHMsIGFuZAoraGFuZGxlcyBsYXVuY2hpbmcgdGhyZWFkcyBhbmQvb3Ig
cHJvY2Vzc2VzIGRlcGVuZGluZyBvbiB0aGUgcmVxdWVzdGVkCitjb25maWd1cmF0aW9uLgorCitC
b3RoIE1hbmFnZXJzIGFuZCBXb3JrZXJzIGFyZSByZXF1aXJlZCB0byBpbXBsZW1lbnQgdGhlIG1l
dGhvZHMgaW4gdGhlCitCcm9rZXJDbGllbnQgaW50ZXJmYWNlIC8gYWJzdHJhY3QgYmFzZSBjbGFz
cyBpbiBvcmRlciB0byB0aGUgbWVzc2FnZQorYnJva2VyIHRvIHByb3Blcmx5IGNvbW11bmljYXRl
IHdpdGggdGhlbS4KKworRXZlcnl0aGluZyBzdGFydHMgYnkgY2FsbGluZyBnZXQoKSB0byBvYnRh
aW4gYW4gaW5pdGlhbCByZWZlcmVuY2UgdG8gYSBicm9rZXIuCitUaGUgYnJva2VyIGlzIG1lZGlh
dGVkIGJ5IGEgQ29ubmVjdGlvbiBvYmplY3QgdGhhdCBwcm92aWRlcyBzb21lIHN5bnRhY3RpYwor
c3VnYXIgdG8gcmVwcmVzZW50IHRoZSBNYW5hZ2VyIGFuZCBXb3JrZXIgZW5kcG9pbnRzLiBUeXBp
Y2FsbHkgdGhlCittYW5hZ2VyIHRoZW4gY2FsbHMgc3RhcnRfd29ya2VyKCkgcmVwZWF0ZWRseSB0
byBsYXVuY2ggd29ya2VycyAod2hpY2ggYXJlCit1c3VhbGx5IHJ1biBpbiBzZXBhcmF0ZSB0aHJl
YWRzIG9yIHByb2Nlc3NlcyBhcyBjb250cm9sbGVkIGJ5IHRoZQorLS13b3JrZXItbW9kZWwgcnVu
dGltZSBmbGFnKSwgb3B0aW9uYWxseSBzZXRzIHVwIHNvbWUgdGltZXJzLCBhbmQgdGhlbgoraW52
b2tlcyBydW5fbWVzc2FnZV9sb29wKCkuCisiIiIKKworaW1wb3J0IGNQaWNrbGUKK2ltcG9ydCBs
b2dnaW5nCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCBRdWV1ZQoraW1wb3J0IHRpbWUKKworCitf
bG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisKKworY2xhc3MgQ2xpZW50SW50ZXJm
YWNlKG9iamVjdCk6CisgICAgIiIiQWJzdHJhY3QgYmFzZSBjbGFzcyAvIGludGVyZmFjZSB0aGF0
IGFsbCBtZXNzYWdlIGJyb2tlciBjbGllbnRzIG11c3QKKyAgICBpbXBsZW1lbnQuIEluIGFkZGl0
aW9uIHRvIHRoZSBtZXRob2RzIGJlbG93LCBieSBjb252ZW50aW9uIGNsaWVudHMKKyAgICBpbXBs
ZW1lbnQgcm91dGluZXMgb2YgdGhlIHNpZ25hdHVyZSB0eXBlCisKKyAgICAgICAgaGFuZGxlX01F
U1NBR0VfTkFNRShzZWxmLCBzcmMsIC4uLik6CisKKyAgICB3aGVyZSBNRVNTQUdFX05BTUUgbWF0
Y2hlcyB0aGUgc3RyaW5nIHBhc3NlZCB0byBwb3N0X21lc3NhZ2UoKSwgYW5kCisgICAgc3JjIGlu
ZGljYXRlcyB0aGUgbmFtZSBvZiB0aGUgc2VuZGVyLiBJZiB0aGUgbWVzc2FnZSBjb250YWlucyB2
YWx1ZXMgaW4KKyAgICB0aGUgbWVzc2FnZSBib2R5LCB0aG9zZSB3aWxsIGJlIHByb3ZpZGVkIGFz
IG9wdHBhcmFtcy4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXJfY29ubmVjdGlv
biwgd29ya2VyX251bWJlciwgb3B0aW9ucywgKiprd2FyZ3MpOgorICAgICAgICByYWlzZSBOb3RJ
bXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgY2FuY2VsKHNlbGYpOgorICAgICAgICAiIiJDYWxs
ZWQgKGlmIHBvc3NpYmxlKSB0byBub3RpZnkgdGhlIHdvcmtlciB0aGF0IGl0IGhhcyBiZWVuIGFi
b3J0ZWQuCisKKyAgICAgICAgT25seSB3b3JrZXJzIG5lZWQgaW1wbGVtZW50IHRoaXMgbWV0aG9k
LiBXb3JrZXJzIGNhbm5vdCByZWx5IG9uIHRoaXMKKyAgICAgICAgbWV0aG9kIGFsd2F5cyBiZWlu
ZyBjYWxsZWQuIEZvciBleGFtcGxlLCB3b3JrZXJzIHJ1bm5pbmcgaW4gdGhlaXIKKyAgICAgICAg
b3duIHByb2Nlc3NlcyBtYXkgYmUga2lsbGVkIGRpcmVjdGx5IGluc3RlYWQgb2YgaW52b2tpbmcg
dGhpcyBtZXRob2QKKyAgICAgICAgYW5kIHdhaXRpbmcgZm9yIHRoZSB0aGUgd29ya2VyIHRvIGV4
aXQuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBpc19k
b25lKHNlbGYpOgorICAgICAgICAiIiJDYWxsZWQgZnJvbSBpbnNpZGUgcnVuX21lc3NhZ2VfbG9v
cCgpIHRvIGluZGljYXRlIHdoZXRoZXIgdG8gZXhpdC4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1w
bGVtZW50ZWRFcnJvcgorCisgICAgZGVmIG5hbWUoc2VsZik6CisgICAgICAgICIiIlJldHVybiBh
IG5hbWUgdGhhdCBpZGVudGlmaWVzIHRoZSB3b3JrZXIgb3IgbWFuYWdlci4iIiIKKyAgICAgICAg
cmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHJ1bihzZWxmLCBwb3J0KToKKyAg
ICAgICAgIiIiT25seSB3b3JrZXJzIG5lZWQgaW1wbGVtZW50IHRoaXMgbWV0aG9kLiIiIgorICAg
ICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKworZGVmIHJ1bnRpbWVfb3B0aW9ucygp
OgorICAgICIiIlJldHVybiBhIGxpc3Qgb2Ygb3B0cGFyc2UuT3B0aW9uIG9iamVjdHMgZm9yIGFu
eSBydW50aW1lIHZhbHVlcyB1c2VkCisgICAgYnkgdGhpcyBtZXRob2QuIiIiCisgICAgb3B0aW9u
cyA9IFsKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0td29ya2VyLW1vZGVsIiwgYWN0
aW9uPSJzdG9yZSIsCisgICAgICAgICAgICBoZWxwPSgiY29udHJvbHMgd29ya2VyIG1vZGVsLiBW
YWxpZCB2YWx1ZXMgYXJlICIKKyAgICAgICAgICAgICInaW5saW5lJywgJ3RocmVhZHMnLCBhbmQg
J3Byb2Nlc3NlcycuIikpLAorICAgIF0KKyAgICByZXR1cm4gb3B0aW9ucworCisKK2NsYXNzIEJy
b2tlcihvYmplY3QpOgorICAgICIiIlRoaXMgY2xhc3MgaW1wbGVtZW50cyBhIGdlbmVyaWMgbWVz
c2FnZSBicm9rZXIuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb3B0aW9ucywgcXVldWVf
bWFrZXIpOgorICAgICAgICAiIiJSZXR1cm4gYSBtZXNzYWdlIGJyb2tlciBmb3IgbWFuYWdlci93
b3JrZXIgY29tbXVuaWNhdGlvbi4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgb3B0aW9u
czogYSBydW50aW1lIG9wdGlvbiBjbGFzcyBmcm9tIG9wdHBhcnNlCisgICAgICAgICIiIgorICAg
ICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucworICAgICAgICBzZWxmLl9xdWV1ZV9tYWtlciA9
IHF1ZXVlX21ha2VyCisgICAgICAgIHNlbGYuX3RvcGljcyA9IHt9CisKKyAgICBkZWYgYWRkX3Rv
cGljKHNlbGYsIHRvcGljX25hbWUpOgorICAgICAgICBpZiB0b3BpY19uYW1lIG5vdCBpbiBzZWxm
Ll90b3BpY3M6CisgICAgICAgICAgICBzZWxmLl90b3BpY3NbdG9waWNfbmFtZV0gPSBzZWxmLl9x
dWV1ZV9tYWtlcigpCisKKyAgICBkZWYgX2ZpbmRfdG9waWMoc2VsZiwgdG9waWNfbmFtZSk6Cisg
ICAgICAgIHJldHVybiBzZWxmLl90b3BpY3NbdG9waWNfbmFtZV0KKworICAgIGRlZiBwb3N0X21l
c3NhZ2Uoc2VsZiwgY2xpZW50LCB0b3BpY19uYW1lLCBtZXNzYWdlX25hbWUsICpvcHRhcmdzKToK
KyAgICAgICAgIiIiUG9zdCBhIG1lc3NhZ2UgdG8gdGhlIGFwcHJvcHJpYXRlIHRvcGljIHF1ZXVl
LiIiIgorICAgICAgICBtZXNzYWdlID0gX01lc3NhZ2UoY2xpZW50Lm5hbWUoKSwgdG9waWNfbmFt
ZSwgbWVzc2FnZV9uYW1lLCBvcHRhcmdzKQorICAgICAgICB0b3BpYyA9IHNlbGYuX2ZpbmRfdG9w
aWModG9waWNfbmFtZSkKKyAgICAgICAgdG9waWMucHV0KF9NZXNzYWdlLmR1bXBzKG1lc3NhZ2Up
KQorCisgICAgZGVmIHJ1bl9tZXNzYWdlX2xvb3Aoc2VsZiwgdG9waWNfbmFtZSwgY2xpZW50LCBk
ZWxheV9zZWNzPU5vbmUpOgorICAgICAgICAiIiJMb29wIHByb2Nlc3NpbmcgbWVzc2FnZXMgdW50
aWwgY2xpZW50LmlzX2RvbmUoKSBvciBkZWxheSBwYXNzZXMuIiIiCisgICAgICAgIGFzc2VydCBk
ZWxheV9zZWNzIGlzIE5vbmUgb3IgZGVsYXlfc2VjcyA+IDAsICJydW5fbWVzc2FnZV9sb29wKCk6
IGRlbGF5IG11c3QgYmUgTm9uZSBvciBhIHBvc2l0aXZlIG51bWJlciIKKyAgICAgICAgc2VsZi5f
cnVuX2xvb3AodG9waWNfbmFtZSwgY2xpZW50LCBUcnVlLCBkZWxheV9zZWNzKQorCisgICAgZGVm
IHJ1bl9hbGxfcGVuZGluZyhzZWxmLCB0b3BpY19uYW1lLCBjbGllbnQpOgorICAgICAgICAiIiJQ
cm9jZXNzIG1lc3NhZ2VzIHVudGlsIGNsaWVudC5pc19kb25lKCkgb3IgY2FsbGVyIHdvdWxkIGJs
b2NrLiIiIgorICAgICAgICBzZWxmLl9ydW5fbG9vcCh0b3BpY19uYW1lLCBjbGllbnQsIGJsb2Nr
PUZhbHNlLCBkZWxheV9zZWNzPU5vbmUpCisKKyAgICBkZWYgX3J1bl9sb29wKHNlbGYsIHRvcGlj
X25hbWUsIGNsaWVudCwgYmxvY2ssIGRlbGF5X3NlY3MpOgorICAgICAgICB0b3BpYyA9IHNlbGYu
X2ZpbmRfdG9waWModG9waWNfbmFtZSkKKyAgICAgICAgd2hpbGUgbm90IGNsaWVudC5pc19kb25l
KCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcyA9IHRvcGljLmdldChibG9j
aywgZGVsYXlfc2VjcykKKyAgICAgICAgICAgIGV4Y2VwdCBRdWV1ZS5FbXB0eToKKyAgICAgICAg
ICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIG1zZyA9IF9NZXNzYWdlLmxvYWRzKHMpCisgICAg
ICAgICAgICBzZWxmLl9kaXNwYXRjaF9tZXNzYWdlKG1zZywgY2xpZW50KQorCisgICAgZGVmIF9k
aXNwYXRjaF9tZXNzYWdlKHNlbGYsIG1lc3NhZ2UsIGNsaWVudCk6CisgICAgICAgIGlmIG5vdCBo
YXNhdHRyKGNsaWVudCwgJ2hhbmRsZV8nICsgbWVzc2FnZS5uYW1lKToKKyAgICAgICAgICAgIHJh
aXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAiJXM6IHJlY2VpdmVkIG1lc3NhZ2UgJyVz
JyBpdCBjb3VsZG4ndCBoYW5kbGUiICUKKyAgICAgICAgICAgICAgIChjbGllbnQubmFtZSgpLCBt
ZXNzYWdlLm5hbWUpKQorICAgICAgICBvcHRhcmdzID0gbWVzc2FnZS5ib2R5CisgICAgICAgIG1l
c3NhZ2VfaGFuZGxlciA9IGdldGF0dHIoY2xpZW50LCAnaGFuZGxlXycgKyBtZXNzYWdlLm5hbWUp
CisgICAgICAgIG1lc3NhZ2VfaGFuZGxlcihtZXNzYWdlLnNyYywgKm9wdGFyZ3MpCisKKworY2xh
c3MgX01lc3NhZ2Uob2JqZWN0KToKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGxvYWRzKHN0
cik6CisgICAgICAgIG9iaiA9IGNQaWNrbGUubG9hZHMoc3RyKQorICAgICAgICBhc3NlcnQoaXNp
bnN0YW5jZShvYmosIF9NZXNzYWdlKSkKKyAgICAgICAgcmV0dXJuIG9iagorCisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIHNyYywgdG9waWNfbmFtZSwgbWVzc2FnZV9uYW1lLCBtZXNzYWdlX2JvZHkp
OgorICAgICAgICBzZWxmLnNyYyA9IHNyYworICAgICAgICBzZWxmLnRvcGljX25hbWUgPSB0b3Bp
Y19uYW1lCisgICAgICAgIHNlbGYubmFtZSA9IG1lc3NhZ2VfbmFtZQorICAgICAgICBzZWxmLmJv
ZHkgPSBtZXNzYWdlX2JvZHkKKworICAgIGRlZiBkdW1wcyhzZWxmKToKKyAgICAgICAgcmV0dXJu
IGNQaWNrbGUuZHVtcHMoc2VsZikKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAg
cmV0dXJuICgiX01lc3NhZ2UoZnJvbT0nJXMnLCB0b3BpY19uYW1lPSclcycsIG1lc3NhZ2VfbmFt
ZT0nJXMnKSIgJQorICAgICAgICAgICAgICAgIChzZWxmLnNyYywgc2VsZi50b3BpY19uYW1lLCBz
ZWxmLm5hbWUpKQorCisKK2NsYXNzIEJyb2tlckNvbm5lY3Rpb24ob2JqZWN0KToKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgYnJva2VyLCBydW5fdG9waWMsIHBvc3RfdG9waWMpOgorICAgICAgICBz
ZWxmLl9icm9rZXIgPSBicm9rZXIKKyAgICAgICAgc2VsZi5fcG9zdF90b3BpYyA9IHBvc3RfdG9w
aWMKKyAgICAgICAgc2VsZi5fcnVuX3RvcGljID0gcnVuX3RvcGljCisgICAgICAgIGJyb2tlci5h
ZGRfdG9waWMocnVuX3RvcGljKQorICAgICAgICBicm9rZXIuYWRkX3RvcGljKHBvc3RfdG9waWMp
CisKKyAgICBkZWYgY2xpZW50KHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVy
cm9yCisKKyAgICBkZWYgcnVuX21lc3NhZ2VfbG9vcChzZWxmLCBkZWxheV9zZWNzPU5vbmUpOgor
ICAgICAgICBzZWxmLl9icm9rZXIucnVuX21lc3NhZ2VfbG9vcChzZWxmLl9ydW5fdG9waWMsIHNl
bGYuY2xpZW50KCksIGRlbGF5X3NlY3MpCisKKyAgICBkZWYgcG9zdF9tZXNzYWdlKHNlbGYsIG1l
c3NhZ2VfbmFtZSwgKm1lc3NhZ2VfYXJncyk6CisgICAgICAgIHNlbGYuX2Jyb2tlci5wb3N0X21l
c3NhZ2Uoc2VsZi5jbGllbnQoKSwgc2VsZi5fcG9zdF90b3BpYywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtZXNzYWdlX25hbWUsICptZXNzYWdlX2FyZ3MpCmRpZmYgLS1naXQg
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXNz
YWdlX2Jyb2tlcjJfdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tlcjJfdW5pdHRlc3QucHkKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZTk2ZjA1ZWM1YzlhODE3YTQ2NWM2OTA1ZDc4ZGE0OGM3YzNlNThjMwotLS0gL2Rldi9udWxs
CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdl
L21lc3NhZ2VfYnJva2VyMl91bml0dGVzdC5weQpAQCAtMCwwICsxLDEwMiBAQAorIyBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisj
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBtZXNz
YWdlX2Jyb2tlcjIKKworCitjbGFzcyBGdW5jdGlvbnNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToK
KyAgICBkZWYgdGVzdF9ydW50aW1lX29wdGlvbnMoc2VsZik6CisgICAgICAgIG9wdGlvbl9saXN0
ID0gbWVzc2FnZV9icm9rZXIyLnJ1bnRpbWVfb3B0aW9ucygpCisgICAgICAgIHBhcnNlciA9IG9w
dHBhcnNlLk9wdGlvblBhcnNlcihvcHRpb25fbGlzdD1vcHRpb25fbGlzdCkKKyAgICAgICAgb3B0
aW9ucywgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKFtdKQorICAgICAgICBzZWxmLmFzc2VydFRy
dWUob3B0aW9ucykKKworCitjbGFzcyBNZXNzYWdlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Cisg
ICAgZGVmIHRlc3RfX25vX2JvZHkoc2VsZik6CisgICAgICAgIG1zZyA9IG1lc3NhZ2VfYnJva2Vy
Mi5fTWVzc2FnZSgnc3JjJywgJ3RvcGljX25hbWUnLCAnbWVzc2FnZV9uYW1lJywgTm9uZSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIobXNnKSkKKyAgICAgICAgcyA9IG1zZy5kdW1wcygp
CisgICAgICAgIG5ld19tc2cgPSBtZXNzYWdlX2Jyb2tlcjIuX01lc3NhZ2UubG9hZHMocykKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdfbXNnLm5hbWUsICdtZXNzYWdlX25hbWUnKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld19tc2cuYm9keSwgTm9uZSkKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChuZXdfbXNnLnRvcGljX25hbWUsICd0b3BpY19uYW1lJykKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChuZXdfbXNnLnNyYywgJ3NyYycpCisKKyAgICBkZWYgdGVzdF9fYm9keShz
ZWxmKToKKyAgICAgICAgbXNnID0gbWVzc2FnZV9icm9rZXIyLl9NZXNzYWdlKCdzcmMnLCAndG9w
aWNfbmFtZScsICdtZXNzYWdlX25hbWUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoJ2JvZHknLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIobXNnKSkK
KyAgICAgICAgcyA9IG1zZy5kdW1wcygpCisgICAgICAgIG5ld19tc2cgPSBtZXNzYWdlX2Jyb2tl
cjIuX01lc3NhZ2UubG9hZHMocykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdfbXNnLm5h
bWUsICdtZXNzYWdlX25hbWUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld19tc2cuYm9k
eSwgKCdib2R5JywgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3X21zZy50b3BpY19u
YW1lLCAndG9waWNfbmFtZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3X21zZy5zcmMs
ICdzcmMnKQorCisKK2NsYXNzIEludGVyZmFjZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAg
ICMgVGhlc2UgdGVzdHMgbW9zdGx5IGV4aXN0IHRvIHBhY2lmeSBjb3ZlcmFnZS4KKworICAgICMg
RklYTUU6IFRoZXJlIG11c3QgYmUgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMgYW5kIGFsc28gdmVy
aWZ5CisgICAgIyB0aGF0IGNsYXNzZXMgZG8gaW1wbGVtZW50IGV2ZXJ5IGFic3RyYWN0IG1ldGhv
ZCBpbiBhbiBpbnRlcmZhY2UuCisKKyAgICBkZWYgdGVzdF9jbGllbnRpbnRlcmZhY2VfaXNfYWJz
dHJhY3Qoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IHdlIGNhbid0IGNyZWF0ZSBhbiBpbnN0
YW5jZSBkaXJlY3RseS4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRF
cnJvciwgbWVzc2FnZV9icm9rZXIyLkNsaWVudEludGVyZmFjZSwKKyAgICAgICAgICAgIE5vbmUs
IE5vbmUsIE5vbmUpCisKKyAgICAgICAgY2xhc3MgVGVzdENsaWVudChtZXNzYWdlX2Jyb2tlcjIu
Q2xpZW50SW50ZXJmYWNlKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqb3B0YXJn
cyk6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICMgVGVzdCB0aGF0IGFsbCB0aGUg
YmFzZSBjbGFzcyBtZXRob2RzIGFyZSBhYnN0cmFjdCBhbmQgaGF2ZSB0aGUKKyAgICAgICAgIyBz
aWduYXR1cmUgd2UgZXhwZWN0LgorICAgICAgICBvYmogPSBUZXN0Q2xpZW50KCkKKyAgICAgICAg
c2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgb2JqLmNhbmNlbCkKKyAgICAg
ICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgb2JqLmlzX2RvbmUpCisg
ICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIG9iai5uYW1lKQor
ICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBvYmoucnVuLCBO
b25lKQorCisgICAgZGVmIHRlc3RfYnJva2VyY29ubmVjdGlvbl9pc19hYnN0cmFjdChzZWxmKToK
KyAgICAgICAgY2xhc3MgVGVzdEJyb2tlckNvbm5lY3Rpb24obWVzc2FnZV9icm9rZXIyLkJyb2tl
ckNvbm5lY3Rpb24pOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsICpvcHRhcmdzKToK
KyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgIyBUZXN0IHRoYXQgYWxsIHRoZSBiYXNl
IGNsYXNzIG1ldGhvZHMgYXJlIGFic3RyYWN0IGFuZCBoYXZlIHRoZQorICAgICAgICAjIHNpZ25h
dHVyZSB3ZSBleHBlY3QuCisgICAgICAgIGJyb2tlciA9IG1lc3NhZ2VfYnJva2VyMi5Ccm9rZXIo
Tm9uZSwgTm9uZSkKKyAgICAgICAgb2JqID0gVGVzdEJyb2tlckNvbm5lY3Rpb24oYnJva2VyLCAi
Zm9vIiwgImJhciIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJy
b3IsIG9iai5jbGllbnQpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0
dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfcnVubmVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9ydW5uZXIucHkKaW5kZXggNmMwNzg1
MDBlYWViN2E5ODg4ODViMjE4NDlkMGE2NWViYjIwZjIwMi4uYjNmMDgyODA1ODAxYmFhODc2NmJh
Y2ExNGM2MGIyMzdiMjZmN2ExNiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9ydW5uZXIucHkKKysrIGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9ydW5uZXIucHkK
QEAgLTczMSwyOCArNzMxLDMxIEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICAgICBleGNl
cHQgUXVldWUuRW1wdHk6CiAgICAgICAgICAgICAgICAgcmV0dXJuCiAKLSAgICAgICAgICAgIGV4
cGVjdGVkID0gc2VsZi5fZXhwZWN0YXRpb25zLm1hdGNoZXNfYW5fZXhwZWN0ZWRfcmVzdWx0KAot
ICAgICAgICAgICAgICAgIHJlc3VsdC5maWxlbmFtZSwgcmVzdWx0LnR5cGUsIHNlbGYuX29wdGlv
bnMucGl4ZWxfdGVzdHMpCi0gICAgICAgICAgICByZXN1bHRfc3VtbWFyeS5hZGQocmVzdWx0LCBl
eHBlY3RlZCkKLSAgICAgICAgICAgIGV4cF9zdHIgPSBzZWxmLl9leHBlY3RhdGlvbnMuZ2V0X2V4
cGVjdGF0aW9uc19zdHJpbmcoCi0gICAgICAgICAgICAgICAgcmVzdWx0LmZpbGVuYW1lKQotICAg
ICAgICAgICAgZ290X3N0ciA9IHNlbGYuX2V4cGVjdGF0aW9ucy5leHBlY3RhdGlvbl90b19zdHJp
bmcocmVzdWx0LnR5cGUpCi0gICAgICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3Rlc3RfcmVz
dWx0KHJlc3VsdCwgZXhwZWN0ZWQsIGV4cF9zdHIsIGdvdF9zdHIpCi0gICAgICAgICAgICBzZWxm
Ll9wcmludGVyLnByaW50X3Byb2dyZXNzKHJlc3VsdF9zdW1tYXJ5LCBzZWxmLl9yZXRyeWluZywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVzdF9maWxl
c19saXN0KQotCi0gICAgICAgICAgICBkZWYgaW50ZXJydXB0X2lmX2F0X2ZhaWx1cmVfbGltaXQo
bGltaXQsIGNvdW50LCBtZXNzYWdlKToKLSAgICAgICAgICAgICAgICBpZiBsaW1pdCBhbmQgY291
bnQgPj0gbGltaXQ6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIFRlc3RSdW5JbnRlcnJ1cHRl
ZEV4Y2VwdGlvbihtZXNzYWdlICUgY291bnQpCi0KLSAgICAgICAgICAgIGludGVycnVwdF9pZl9h
dF9mYWlsdXJlX2xpbWl0KAotICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMuZXhpdF9hZnRl
cl9uX2ZhaWx1cmVzLAotICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5LnVuZXhwZWN0ZWRf
ZmFpbHVyZXMsCi0gICAgICAgICAgICAgICAgIkFib3J0aW5nIHJ1biBzaW5jZSAlZCBmYWlsdXJl
cyB3ZXJlIHJlYWNoZWQiKQotICAgICAgICAgICAgaW50ZXJydXB0X2lmX2F0X2ZhaWx1cmVfbGlt
aXQoCi0gICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5leGl0X2FmdGVyX25fY3Jhc2hlc19v
cl90aW1lb3V0cywKLSAgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeS51bmV4cGVjdGVkX2Ny
YXNoZXNfb3JfdGltZW91dHMsCi0gICAgICAgICAgICAgICAgIkFib3J0aW5nIHJ1biBzaW5jZSAl
ZCBjcmFzaGVzIG9yIHRpbWVvdXRzIHdlcmUgcmVhY2hlZCIpCisgICAgICAgICAgICBzZWxmLl91
cGRhdGVfc3VtbWFyeV93aXRoX3Jlc3VsdChyZXN1bHRfc3VtbWFyeSwgcmVzdWx0KQorCisgICAg
ZGVmIF91cGRhdGVfc3VtbWFyeV93aXRoX3Jlc3VsdChzZWxmLCByZXN1bHRfc3VtbWFyeSwgcmVz
dWx0KToKKyAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLl9leHBlY3RhdGlvbnMubWF0Y2hlc19hbl9l
eHBlY3RlZF9yZXN1bHQoCisgICAgICAgICAgICByZXN1bHQuZmlsZW5hbWUsIHJlc3VsdC50eXBl
LCBzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RzKQorICAgICAgICByZXN1bHRfc3VtbWFyeS5hZGQo
cmVzdWx0LCBleHBlY3RlZCkKKyAgICAgICAgZXhwX3N0ciA9IHNlbGYuX2V4cGVjdGF0aW9ucy5n
ZXRfZXhwZWN0YXRpb25zX3N0cmluZygKKyAgICAgICAgICAgIHJlc3VsdC5maWxlbmFtZSkKKyAg
ICAgICAgZ290X3N0ciA9IHNlbGYuX2V4cGVjdGF0aW9ucy5leHBlY3RhdGlvbl90b19zdHJpbmco
cmVzdWx0LnR5cGUpCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGVzdF9yZXN1bHQocmVz
dWx0LCBleHBlY3RlZCwgZXhwX3N0ciwgZ290X3N0cikKKyAgICAgICAgc2VsZi5fcHJpbnRlci5w
cmludF9wcm9ncmVzcyhyZXN1bHRfc3VtbWFyeSwgc2VsZi5fcmV0cnlpbmcsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVzdF9maWxlc19saXN0KQorCisg
ICAgICAgIGRlZiBpbnRlcnJ1cHRfaWZfYXRfZmFpbHVyZV9saW1pdChsaW1pdCwgY291bnQsIG1l
c3NhZ2UpOgorICAgICAgICAgICAgaWYgbGltaXQgYW5kIGNvdW50ID49IGxpbWl0OgorICAgICAg
ICAgICAgICAgIHJhaXNlIFRlc3RSdW5JbnRlcnJ1cHRlZEV4Y2VwdGlvbihtZXNzYWdlICUgY291
bnQpCisKKyAgICAgICAgaW50ZXJydXB0X2lmX2F0X2ZhaWx1cmVfbGltaXQoCisgICAgICAgICAg
ICBzZWxmLl9vcHRpb25zLmV4aXRfYWZ0ZXJfbl9mYWlsdXJlcywKKyAgICAgICAgICAgIHJlc3Vs
dF9zdW1tYXJ5LnVuZXhwZWN0ZWRfZmFpbHVyZXMsCisgICAgICAgICAgICAiQWJvcnRpbmcgcnVu
IHNpbmNlICVkIGZhaWx1cmVzIHdlcmUgcmVhY2hlZCIpCisgICAgICAgIGludGVycnVwdF9pZl9h
dF9mYWlsdXJlX2xpbWl0KAorICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5leGl0X2FmdGVyX25f
Y3Jhc2hlc19vcl90aW1lb3V0cywKKyAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5LnVuZXhwZWN0
ZWRfY3Jhc2hlc19vcl90aW1lb3V0cywKKyAgICAgICAgICAgICJBYm9ydGluZyBydW4gc2luY2Ug
JWQgY3Jhc2hlcyBvciB0aW1lb3V0cyB3ZXJlIHJlYWNoZWQiKQogCiAgICAgZGVmIF9jbG9iYmVy
X29sZF9yZXN1bHRzKHNlbGYpOgogICAgICAgICAjIEp1c3QgY2xvYmJlciB0aGUgYWN0dWFsIHRl
c3QgcmVzdWx0cyBkaXJlY3RvcmllcyBzaW5jZSB0aGUgb3RoZXIKZGlmZiAtLWdpdCBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfcnVubmVy
Mi5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdl
L3Rlc3RfcnVubmVyMi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YjBiYTY3NjBmYjZjYWNlZmI2YzM5Mzc1MDMx
NTYzZGE4ZGY2ZTJkCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9ydW5uZXIyLnB5CkBAIC0wLDAgKzEsMjE4
IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMg
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
IyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiIKK1RoZSBU
ZXN0UnVubmVyIGNsYXNzIHJ1bnMgYSBzZXJpZXMgb2YgdGVzdHMgKFRlc3RUeXBlIGludGVyZmFj
ZSkgYWdhaW5zdCBhIHNldAorb2YgdGVzdCBmaWxlcy4gIElmIGEgdGVzdCBmaWxlIGZhaWxzIGEg
VGVzdFR5cGUsIGl0IHJldHVybnMgYSBsaXN0IFRlc3RGYWlsdXJlCitvYmplY3RzIHRvIHRoZSBU
ZXN0UnVubmVyLiAgVGhlIFRlc3RSdW5uZXIgdGhlbiBhZ2dyZWdhdGVzIHRoZSBUZXN0RmFpbHVy
ZXMgdG8KK2NyZWF0ZSBhIGZpbmFsIHJlcG9ydC4KKyIiIgorCitpbXBvcnQgdGltZQorCitmcm9t
IHdlYmtpdHB5LnRvb2wgaW1wb3J0IGdyYW1tYXIKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBt
YW5hZ2VyX3dvcmtlcl9icm9rZXIKK2ltcG9ydCB0ZXN0X3J1bm5lcgoraW1wb3J0IHdvcmtlcgor
CitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisKKworY2xhc3MgX1dvcmtlclN0
YXRlKG9iamVjdCk6CisgICAgIiIiQSBjbGFzcyBmb3IgdGhlIFRlc3RSdW5uZXIvbWFuYWdlciB0
byB1c2UgdG8gdHJhY2sgdGhlIGN1cnJlbnQgc3RhdGUKKyAgICBvZiB0aGUgd29ya2Vycy4iIiIK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgbnVtYmVyLCB3b3JrZXIpOgorICAgICAgICBzZWxmLndv
cmtlciA9IHdvcmtlcgorICAgICAgICBzZWxmLm51bWJlciA9IG51bWJlcgorICAgICAgICBzZWxm
LmRvbmUgPSBGYWxzZQorICAgICAgICBzZWxmLm5leHRfdGltZW91dCA9IE5vbmUKKyAgICAgICAg
c2VsZi53ZWRnZWQgPSBGYWxzZQorICAgICAgICBzZWxmLnN0YXRzID0ge30KKyAgICAgICAgc2Vs
Zi5zdGF0c1snbmFtZSddID0gd29ya2VyLm5hbWUKKyAgICAgICAgc2VsZi5zdGF0c1snbnVtX3Rl
c3RzJ10gPSAwCisgICAgICAgIHNlbGYuc3RhdHNbJ3RvdGFsX3RpbWUnXSA9IDAKKworICAgIGRl
ZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJfV29ya2VyU3RhdGUoIiArIHN0cihz
ZWxmLl9fZGljdF9fKSArICIpIgorCisKK2NsYXNzIFRlc3RSdW5uZXIyKHRlc3RfcnVubmVyLlRl
c3RSdW5uZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zLCBwcmludGVy
KToKKyAgICAgICAgdGVzdF9ydW5uZXIuVGVzdFJ1bm5lci5fX2luaXRfXyhzZWxmLCBwb3J0LCBv
cHRpb25zLCBwcmludGVyKQorICAgICAgICBzZWxmLl9tZXNzYWdlX2Jyb2tlciA9IE5vbmUKKwor
ICAgICAgICAjIFRoaXMgbWFwcyB3b3JrZXIgbmFtZXMgdG8gdGhlIHN0YXRlIHdlIGFyZSB0cmFj
a2luZyBmb3IgZWFjaCBvZiB0aGVtLgorICAgICAgICBzZWxmLl93b3JrZXJzID0ge30KKworICAg
IGRlZiBpc19kb25lKHNlbGYpOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBuYW1l
KHNlbGYpOgorICAgICAgICByZXR1cm4gJ1Rlc3RSdW5uZXIyJworCisgICAgZGVmIF9ydW5fdGVz
dHMoc2VsZiwgZmlsZV9saXN0LCByZXN1bHRfc3VtbWFyeSk6CisgICAgICAgICIiIlJ1bnMgdGhl
IHRlc3RzIGluIHRoZSBmaWxlX2xpc3QuCisKKyAgICAgICAgUmV0dXJuOiBBIHR1cGxlIChrZXli
b2FyZF9pbnRlcnJ1cHRlZCwgdGhyZWFkX3RpbWluZ3MsIHRlc3RfdGltaW5ncywKKyAgICAgICAg
ICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzKQorICAgICAgICAgICAga2V5Ym9hcmRfaW50ZXJy
dXB0ZWQgaXMgd2hldGhlciBzb21lb25lIHR5cGVkIEN0cmxeQworICAgICAgICAgICAgdGhyZWFk
X3RpbWluZ3MgaXMgYSBsaXN0IG9mIGRpY3RzIHdpdGggdGhlIHRvdGFsIHJ1bnRpbWUKKyAgICAg
ICAgICAgICAgb2YgZWFjaCB0aHJlYWQgd2l0aCAnbmFtZScsICdudW1fdGVzdHMnLCAndG90YWxf
dGltZScgcHJvcGVydGllcworICAgICAgICAgICAgdGVzdF90aW1pbmdzIGlzIGEgbGlzdCBvZiB0
aW1pbmdzIGZvciBlYWNoIHNoYXJkZWQgc3ViZGlyZWN0b3J5CisgICAgICAgICAgICAgIG9mIHRo
ZSBmb3JtIFt0aW1lLCBkaXJlY3RvcnlfbmFtZSwgbnVtX3Rlc3RzXQorICAgICAgICAgICAgaW5k
aXZpZHVhbF90ZXN0X3RpbWluZ3MgaXMgYSBsaXN0IG9mIHJ1biB0aW1lcyBmb3IgZWFjaCB0ZXN0
CisgICAgICAgICAgICAgIGluIHRoZSBmb3JtIHtmaWxlbmFtZTpmaWxlbmFtZSwgdGVzdF9ydW5f
dGltZTp0ZXN0X3J1bl90aW1lfQorICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnk6IHN1bW1hcnkg
b2JqZWN0IHRvIHBvcHVsYXRlIHdpdGggdGhlIHJlc3VsdHMKKyAgICAgICAgIiIiCisgICAgICAg
IG51bV93b3JrZXJzID0gc2VsZi5fbnVtX3dvcmtlcnMoKQorCisgICAgICAgIHNlbGYuX2N1cnJl
bnRfZmlsZV9saXN0ID0gZmlsZV9saXN0CisgICAgICAgIHNlbGYuX2N1cnJlbnRfcmVzdWx0X3N1
bW1hcnkgPSByZXN1bHRfc3VtbWFyeQorCisgICAgICAgIHNlbGYuX2FsbF9yZXN1bHRzID0gW10K
KyAgICAgICAgc2VsZi5fZ3JvdXBfc3RhdHMgPSB7fQorICAgICAgICBzZWxmLl93b3JrZXJzID0g
e30KKworICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgnU2hhcmRpbmcgdGVzdHMg
Li4uJykKKyAgICAgICAgdGVzdF9saXN0cyA9IHNlbGYuX3NoYXJkX3Rlc3RzKGZpbGVfbGlzdCwK
KyAgICAgICAgICAgIG51bV93b3JrZXJzID4gMSBhbmQgbm90IHNlbGYuX29wdGlvbnMuZXhwZXJp
bWVudGFsX2Z1bGx5X3BhcmFsbGVsKQorICAgICAgICBfbG9nLmRlYnVnKCJVc2luZyAlZCBzaGFy
ZHMiICUgbGVuKHRlc3RfbGlzdHMpKQorCisgICAgICAgIGJyb2tlciA9IG1hbmFnZXJfd29ya2Vy
X2Jyb2tlci5nZXQoc2VsZi5fcG9ydCwgc2VsZi5fb3B0aW9ucywgc2VsZiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXIuV29ya2VyKQorCisgICAgICAg
IHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCdTdGFydGluZyAlcyAuLi4nICUKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhbW1hci5wbHVyYWxpemUoJ3dvcmtlcicsIG51
bV93b3JrZXJzKSkKKyAgICAgICAgZm9yIHdvcmtlcl9udW1iZXIgaW4geHJhbmdlKG51bV93b3Jr
ZXJzKToKKyAgICAgICAgICAgIHcgPSBicm9rZXIuc3RhcnRfd29ya2VyKHdvcmtlcl9udW1iZXIp
CisgICAgICAgICAgICB3cyA9IF9Xb3JrZXJTdGF0ZSh3b3JrZXJfbnVtYmVyLCB3KQorICAgICAg
ICAgICAgc2VsZi5fd29ya2Vyc1t3Lm5hbWVdID0gd3MKKyAgICAgICAgICAgIHRpbWUuc2xlZXAo
MC4xKQorCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCJTdGFydGluZyB0ZXN0
aW5nIC4uLiIpCisgICAgICAgIGZvciB0ZXN0X2xpc3QgaW4gdGVzdF9saXN0czoKKyAgICAgICAg
ICAgIGJyb2tlci5wb3N0X21lc3NhZ2UoJ3Rlc3RfbGlzdCcsIHRlc3RfbGlzdFswXSwgdGVzdF9s
aXN0WzFdKQorCisgICAgICAgICMgVGVsbCB0aGUgd29ya2VycyB0byBzaHV0IGRvd24gYWZ0ZXIg
dGhleSdyZSBkb25lIHJ1bm5pbmcgYWxsIHRoZQorICAgICAgICAjIHRlc3RzLgorICAgICAgICBm
b3IgaSBpbiB4cmFuZ2UobnVtX3dvcmtlcnMpOgorICAgICAgICAgICAgYnJva2VyLnBvc3RfbWVz
c2FnZSgnc3RvcCcpCisKKyAgICAgICAgaW50ZXJydXB0ZWQgPSBGYWxzZQorICAgICAgICBrZXli
b2FyZF9pbnRlcnJ1cHRlZCA9IEZhbHNlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIG5v
dCBzZWxmLl9vcHRpb25zLmRyeV9ydW46CisgICAgICAgICAgICAgICAgd2hpbGUgbm90IHNlbGYu
X2NoZWNrX2lmX2RvbmUoKToKKyAgICAgICAgICAgICAgICAgICAgYnJva2VyLnJ1bl9tZXNzYWdl
X2xvb3AoZGVsYXlfc2Vjcz0xLjApCisKKyAgICAgICAgICAgICAgICBmb3IgdyBpbiBzZWxmLl93
b3JrZXJzLnZhbHVlcygpOgorICAgICAgICAgICAgICAgICAgICBpZiBub3Qgdy53ZWRnZWQgYW5k
IHcud29ya2VyLmlzX2FsaXZlKCk6CisgICAgICAgICAgICAgICAgICAgICAgICB3Lndvcmtlci5q
b2luKDAuNSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCBub3Qgdy53b3JrZXIuaXNf
YWxpdmUoKQorCisgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAg
IF9sb2cuaW5mbygiSW50ZXJydXB0ZWQsIGV4aXRpbmciKQorICAgICAgICAgICAgZm9yIHcgaW4g
c2VsZi5fd29ya2Vycy52YWx1ZXMoKToKKyAgICAgICAgICAgICAgICB3Lndvcmtlci5jYW5jZWwo
KQorICAgICAgICAgICAga2V5Ym9hcmRfaW50ZXJydXB0ZWQgPSBUcnVlCisgICAgICAgIGV4Y2Vw
dCB0ZXN0X3J1bm5lci5UZXN0UnVuSW50ZXJydXB0ZWRFeGNlcHRpb24sIGU6CisgICAgICAgICAg
ICBfbG9nLmluZm8oZS5yZWFzb24pCisgICAgICAgICAgICBicm9rZXIuY2FuY2VsX3dvcmtlcnMo
KQorICAgICAgICAgICAgaW50ZXJydXB0ZWQgPSBUcnVlCisgICAgICAgIGV4Y2VwdDoKKyAgICAg
ICAgICAgICMgVW5leHBlY3RlZCBleGNlcHRpb247IGRvbid0IHRyeSB0byBjbGVhbiB1cCB3b3Jr
ZXJzLgorICAgICAgICAgICAgX2xvZy5pbmZvKCJFeGNlcHRpb24gcmFpc2VkLCBleGl0aW5nIikK
KyAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgdGhyZWFkX3RpbWluZ3MgPSBbdy5zdGF0cyBm
b3IgdyBpbiBzZWxmLl93b3JrZXJzLnZhbHVlcygpXQorICAgICAgICByZXR1cm4gKGludGVycnVw
dGVkLCBrZXlib2FyZF9pbnRlcnJ1cHRlZCwgdGhyZWFkX3RpbWluZ3MsCisgICAgICAgICAgICAg
ICAgc2VsZi5fZ3JvdXBfc3RhdHMsIHNlbGYuX2FsbF9yZXN1bHRzKQorCisgICAgZGVmIF9jaGVj
a19pZl9kb25lKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIHRydWUgaWZmIGFsbCB0aGUgd29y
a2VycyBoYXZlIGVpdGhlciBjb21wbGV0ZWQgb3Igd2VkZ2VkLiIiIgorICAgICAgICBkb25lID0g
VHJ1ZQorICAgICAgICB0ID0gdGltZS50aW1lKCkKKyAgICAgICAgZm9yIHcgaW4gc2VsZi5fd29y
a2Vycy52YWx1ZXMoKToKKyAgICAgICAgICAgIGlmIG5vdCB3LmRvbmUgYW5kIG5vdCB3LndlZGdl
ZDoKKyAgICAgICAgICAgICAgICBuZXh0X3RpbWVvdXQgPSB3Lm5leHRfdGltZW91dAorICAgICAg
ICAgICAgICAgIFdFREdFX1BBRERJTkcgPSA0MC4wCisgICAgICAgICAgICAgICAgaWYgbmV4dF90
aW1lb3V0IGFuZCB0ID4gbmV4dF90aW1lb3V0ICsgV0VER0VfUEFERElORzoKKyAgICAgICAgICAg
ICAgICAgICAgX2xvZy5lcnJvcignJykKKyAgICAgICAgICAgICAgICAgICAgdy53b3JrZXIubG9n
X3dlZGdlZF93b3JrZXIody5jdXJyZW50X3Rlc3RfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAg
X2xvZy5lcnJvcignJykKKyAgICAgICAgICAgICAgICAgICAgdy53ZWRnZWQgPSBUcnVlCisgICAg
ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZG9uZSA9IEZhbHNlCisKKyAg
ICAgICAgaWYgZG9uZToKKyAgICAgICAgICAgIGlmIGFueShbdy53ZWRnZWQgZm9yIHcgaW4gc2Vs
Zi5fd29ya2Vycy52YWx1ZXMoKV0pOgorICAgICAgICAgICAgICAgIF9sb2cuZXJyb3IoJycpCisg
ICAgICAgICAgICAgICAgX2xvZy5lcnJvcignUmVtYWluaW5nIHdvcmtlcnMgYXJlIHdlZGdlZCwg
YmFpbGluZyBvdXQuJykKKyAgICAgICAgICAgICAgICBfbG9nLmVycm9yKCcnKQorICAgICAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCdObyB3ZWRnZWQgdGhyZWFkcycp
CisgICAgICAgIHJldHVybiBkb25lCisKKyAgICBkZWYgaGFuZGxlX3N0YXJ0ZWRfdGVzdChzZWxm
LCBzcmMsIHRlc3RfaW5mbywgaGFuZ190aW1lb3V0KToKKyAgICAgICAgdyA9IHNlbGYuX3dvcmtl
cnNbc3JjXQorICAgICAgICB3LmN1cnJlbnRfdGVzdF9uYW1lID0gc2VsZi5fcG9ydC5yZWxhdGl2
ZV90ZXN0X2ZpbGVuYW1lKAorICAgICAgICAgICAgdGVzdF9pbmZvLmZpbGVuYW1lKQorICAgICAg
ICB3Lm5leHRfdGltZW91dCA9IHRpbWUudGltZSgpICsgaGFuZ190aW1lb3V0CisKKyAgICBkZWYg
aGFuZGxlX2RvbmUoc2VsZiwgc3JjKToKKyAgICAgICAgdyA9IHNlbGYuX3dvcmtlcnNbc3JjXQor
ICAgICAgICB3LmRvbmUgPSBUcnVlCisKKyAgICBkZWYgaGFuZGxlX2ZpbmlzaGVkX3Rlc3Qoc2Vs
Ziwgc3JjLCByZXN1bHQsIGVsYXBzZWRfdGltZSk6CisgICAgICAgICIiIlVwZGF0ZSB0aGUgc3Vt
bWFyeSBhbmQgcHJpbnQgcmVzdWx0cyB3aXRoIGFueSBjb21wbGV0ZWQgdGVzdHMuIiIiCisgICAg
ICAgIHcgPSBzZWxmLl93b3JrZXJzW3NyY10KKyAgICAgICAgdy5uZXh0X3RpbWVvdXQgPSBOb25l
CisgICAgICAgIHcuY3VycmVudF90ZXN0ID0gTm9uZQorCisgICAgICAgIGlmIHcud2VkZ2VkOgor
ICAgICAgICAgICAgIyBIbW0uIFRoaXMgc2hvdWxkbid0IGhhcHBlbiBpZiB3ZSBoYXZlIG91ciB0
aW1lb3V0cworICAgICAgICAgICAgIyB0dW5lZCBwcm9wZXJseS4KKyAgICAgICAgICAgIF9sb2cu
ZXJyb3IoIiVzIHVud2VkZ2VkIiwgdy5uYW1lKQorCisgICAgICAgIHNlbGYuX3VwZGF0ZV93b3Jr
ZXJfc3RhdHMoc3JjLCByZXN1bHQsIGVsYXBzZWRfdGltZSkKKworICAgICAgICBzZWxmLl91cGRh
dGVfc3VtbWFyeV93aXRoX3Jlc3VsdChzZWxmLl9jdXJyZW50X3Jlc3VsdF9zdW1tYXJ5LCByZXN1
bHQpCisKKyAgICBkZWYgaGFuZGxlX2ZpbmlzaGVkX2xpc3Qoc2VsZiwgc3JjLCBsaXN0X25hbWUs
IG51bV90ZXN0cywgZWxhcHNlZF90aW1lKToKKyAgICAgICAgc2VsZi5fZ3JvdXBfc3RhdHNbbGlz
dF9uYW1lXSA9IChudW1fdGVzdHMsIGVsYXBzZWRfdGltZSkKKworICAgIGRlZiBoYW5kbGVfZXhj
ZXB0aW9uKHNlbGYsIHNyYywgZXhjZXB0aW9uX2luZm8pOgorICAgICAgICByYWlzZSBleGNlcHRp
b25faW5mbworCisgICAgZGVmIF91cGRhdGVfd29ya2VyX3N0YXRzKHNlbGYsIHNyYywgcmVzdWx0
LCBlbGFwc2VkX3RpbWUpOgorICAgICAgICBzZWxmLl93b3JrZXJzW3NyY10uc3RhdHNbJ3RvdGFs
X3RpbWUnXSArPSBlbGFwc2VkX3RpbWUKKyAgICAgICAgc2VsZi5fd29ya2Vyc1tzcmNdLnN0YXRz
WydudW1fdGVzdHMnXSArPSAxCisgICAgICAgIHNlbGYuX2FsbF9yZXN1bHRzLmFwcGVuZChyZXN1
bHQpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlv
dXRfcGFja2FnZS93b3JrZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS93b3JrZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzA2NzZmNzliYjg2ZDRjZTVh
Nzg1YzE1ZDBiOWVjYzdjNGYxODA4MgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3dvcmtlci5weQpAQCAtMCwwICsx
LDQxMiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR2Fib3Ig
UmFwY3NhbnlpIChyZ2Fib3JAaW5mLnUtc3plZ2VkLmh1KSwgVW5pdmVyc2l0eSBvZiBTemVnZWQK
KyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlv
bi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisj
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
IyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIkEgVGhyZWFkIG9iamVjdCBmb3IgcnVubmluZyBEdW1w
UmVuZGVyVHJlZSBhbmQgcHJvY2Vzc2luZyBVUkxzIGZyb20gYQorc2hhcmVkIHF1ZXVlLgorCitF
YWNoIHRocmVhZCBydW5zIGEgc2VwYXJhdGUgaW5zdGFuY2Ugb2YgdGhlIER1bXBSZW5kZXJUcmVl
IGJpbmFyeSBhbmQgdmFsaWRhdGVzCit0aGUgb3V0cHV0LiAgV2hlbiB0aGVyZSBhcmUgbm8gbW9y
ZSBVUkxzIHRvIHByb2Nlc3MgaW4gdGhlIHNoYXJlZCBxdWV1ZSwgdGhlCit0aHJlYWQgZXhpdHMu
CisiIiIKKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudAorCitpbXBvcnQg
Y29kZWNzCitpbXBvcnQgY29weQoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IHNp
Z25hbAoraW1wb3J0IHN5cworaW1wb3J0IHRocmVhZGluZworaW1wb3J0IHRpbWUKK2ltcG9ydCB0
cmFjZWJhY2sKKworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMudGVzdF90eXBlcyBpbXBvcnQg
aW1hZ2VfZGlmZgorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMudGVzdF90eXBlcyBpbXBvcnQg
dGVzdF90eXBlX2Jhc2UKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnRlc3RfdHlwZXMgaW1w
b3J0IHRleHRfZGlmZgorCitpbXBvcnQgbWVzc2FnZV9icm9rZXIyCitpbXBvcnQgdGVzdF9mYWls
dXJlcworaW1wb3J0IHRlc3Rfb3V0cHV0CitpbXBvcnQgdGVzdF9yZXN1bHRzCisKK19sb2cgPSBs
b2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKKworCitjbGFzcyBXb3JrZXIobWVzc2FnZV9icm9r
ZXIyLkNsaWVudEludGVyZmFjZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb2tlciwgd29y
a2VyX251bWJlciwgb3B0aW9ucyk6CisgICAgICAgIHNlbGYuX2Jyb2tlciA9IGJyb2tlcgorICAg
ICAgICBzZWxmLl93b3JrZXJfbnVtYmVyID0gd29ya2VyX251bWJlcgorICAgICAgICBzZWxmLl9v
cHRpb25zID0gb3B0aW9ucworICAgICAgICBzZWxmLl9uYW1lID0gJ3dvcmtlci8lZCcgJSB3b3Jr
ZXJfbnVtYmVyCisgICAgICAgIHNlbGYuX2NhbmNlbGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5f
ZG9uZSA9IEZhbHNlCisKKyAgICAgICAgc2VsZi5fcG9ydCA9IE5vbmUKKyAgICAgICAgc2VsZi5f
YmF0Y2hfY291bnQgPSAwCisgICAgICAgIHNlbGYuX2JhdGNoX3NpemUgPSAwCisgICAgICAgIHNl
bGYuX2RyaXZlciA9IE5vbmUKKyAgICAgICAgc2VsZi5faGF2ZV9odHRwX2xvY2sgPSBGYWxzZQor
ICAgICAgICBzZWxmLl90ZXN0X3R5cGVzID0gW10KKyAgICAgICAgc2VsZi5fdGVzdF9hcmdzID0g
W10KKyAgICAgICAgc2VsZi5fdGVzdHNfcnVuX2ZpbGUgPSBOb25lCisKKyAgICBkZWYgX2RlZmVy
cmVkX2luaXQoc2VsZiwgcG9ydCk6CisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CisgICAgICAg
IHNlbGYuX2JhdGNoX3NpemUgPSBzZWxmLl9vcHRpb25zLmJhdGNoX3NpemUKKyAgICAgICAgZm9y
IGNscyBpbiBzZWxmLl9nZXRfdGVzdF90eXBlX2NsYXNzZXMoKToKKyAgICAgICAgICAgIHNlbGYu
X3Rlc3RfdHlwZXMuYXBwZW5kKGNscyhzZWxmLl9wb3J0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMucmVzdWx0c19kaXJlY3RvcnkpKQorICAg
ICAgICBzZWxmLl90ZXN0X2FyZ3MgPSBzZWxmLl9nZXRfdGVzdF9hcmdzKHNlbGYuX3dvcmtlcl9u
dW1iZXIpCisKKyAgICAgICAgIyBBcHBlbmQgdGVzdHMgd2UncmUgcnVubmluZyB0byB0aGUgZXhp
c3RpbmcgdGVzdHNfcnVuLnR4dCBmaWxlLgorICAgICAgICAjIFRoaXMgaXMgY3JlYXRlZCBpbiBy
dW5fd2Via2l0X3Rlc3RzLnB5Ol9QcmVwYXJlTGlzdHNBbmRQcmludE91dHB1dC4KKyAgICAgICAg
dGVzdHNfcnVuX2ZpbGVuYW1lID0gb3MucGF0aC5qb2luKHNlbGYuX29wdGlvbnMucmVzdWx0c19k
aXJlY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVz
dHNfcnVuLnR4dCIpCisgICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9maWxlID0gY29kZWNzLm9wZW4o
dGVzdHNfcnVuX2ZpbGVuYW1lLCAiYSIsICJ1dGYtOCIpCisKKyAgICBkZWYgX19kZWxfXyhzZWxm
KToKKyAgICAgICAgc2VsZi5fY2xlYW51cCgpCisKKyAgICBkZWYgX2dldF90ZXN0X2FyZ3Moc2Vs
Ziwgd29ya2VyX251bWJlcik6CisgICAgICAgICIiIlJldHVybnMgdGhlIHR1cGxlIG9mIGFyZ3Vt
ZW50cyBmb3IgdGVzdHMgYW5kIGZvciBEdW1wUmVuZGVyVHJlZS4iIiIKKyAgICAgICAgdGVzdF9h
cmdzID0gdGVzdF90eXBlX2Jhc2UuVGVzdEFyZ3VtZW50cygpCisgICAgICAgIHRlc3RfYXJncy5u
ZXdfYmFzZWxpbmUgPSBzZWxmLl9vcHRpb25zLm5ld19iYXNlbGluZQorICAgICAgICB0ZXN0X2Fy
Z3MucmVzZXRfcmVzdWx0cyA9IHNlbGYuX29wdGlvbnMucmVzZXRfcmVzdWx0cworICAgICAgICBy
ZXR1cm4gdGVzdF9hcmdzCisKKyAgICBkZWYgX2dldF90ZXN0X3R5cGVfY2xhc3NlcyhzZWxmKToK
KyAgICAgICAgY2xhc3NlcyA9IFt0ZXh0X2RpZmYuVGVzdFRleHREaWZmXQorICAgICAgICBpZiBz
ZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RzOgorICAgICAgICAgICAgY2xhc3Nlcy5hcHBlbmQoaW1h
Z2VfZGlmZi5JbWFnZURpZmYpCisgICAgICAgIHJldHVybiBjbGFzc2VzCisKKyAgICBkZWYgY2Fu
Y2VsKHNlbGYpOgorICAgICAgICAiIiJBdHRlbXB0IHRvIGFib3J0IHByb2Nlc3NpbmcgKGJlc3Qg
ZWZmb3J0KS4iIiIKKyAgICAgICAgc2VsZi5fY2FuY2VsZWQgPSBUcnVlCisKKyAgICBkZWYgaXNf
ZG9uZShzZWxmKToKKyAgICAgICAgIyBUaGlzIGlzIHVzZWQgZm9yIGFzc2VydGlvbiBjaGVja2lu
ZyBpbiB0aGUgbWFuYWdlci4KKyAgICAgICAgcmV0dXJuIHNlbGYuX2RvbmUgb3Igc2VsZi5fY2Fu
Y2VsZWQKKworICAgIGRlZiBuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQor
CisgICAgZGVmIHJ1bihzZWxmLCBwb3J0KToKKyAgICAgICAgc2VsZi5fZGVmZXJyZWRfaW5pdChw
b3J0KQorCisgICAgICAgIGV4Y2VwdGlvbl9tc2cgPSAiIgorICAgICAgICBfbG9nLmRlYnVnKCcl
cyBzdGFydGluZycgJSBzZWxmLl9uYW1lKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNl
bGYuX2Jyb2tlci5ydW5fbWVzc2FnZV9sb29wKCkKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmlz
X2RvbmUoKToKKyAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigiJXM6IHJhbiBv
dXQgb2YgbWVzc2FnZXMgaW4gd29ya2VyIHF1ZXVlLiIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAlIHNlbGYuX25hbWUpCisgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVy
cnVwdDoKKyAgICAgICAgICAgIGV4Y2VwdGlvbl9tc2cgPSAiLCBpbnRlcnJ1cHRlZCIKKyAgICAg
ICAgZXhjZXB0OgorICAgICAgICAgICAgZXhjZXB0aW9uX21zZyA9ICIsIGV4Y2VwdGlvbiByYWlz
ZWQiCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyBkb25lJXMi
ICUgKHNlbGYuX25hbWUsIGV4Y2VwdGlvbl9tc2cpKQorICAgICAgICAgICAgaWYgZXhjZXB0aW9u
X21zZzoKKyAgICAgICAgICAgICAgICBleGNfaW5mbyA9IHN5cy5leGNfaW5mbygpCisgICAgICAg
ICAgICAgICAgc2VsZi5fbG9nX3RyYWNlYmFjayhleGNfaW5mb1syXSkKKyAgICAgICAgICAgICAg
ICAjIEZJWE1FOiBGaWd1cmUgb3V0IGhvdyB0byBzZW5kIGEgbWVzc2FnZSB3aXRoIGEgdHJhY2Vi
YWNrLgorICAgICAgICAgICAgICAgIHNlbGYuX2Jyb2tlci5wb3N0X21lc3NhZ2UoJ2V4Y2VwdGlv
bicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXhjX2luZm9b
MF0sIGV4Y19pbmZvWzFdLCBOb25lKSkKKyAgICAgICAgICAgIHNlbGYuX2Jyb2tlci5wb3N0X21l
c3NhZ2UoJ2RvbmUnKQorICAgICAgICAgICAgc2VsZi5fY2xlYW51cCgpCisKKyAgICBkZWYgX2xv
Z190cmFjZWJhY2soc2VsZiwgdGIpOgorICAgICAgICBzdGFjayA9IHRyYWNlYmFjay5leHRyYWN0
X3RiKHRiKQorICAgICAgICBmb3IgZnJhbWVfc3RyIGluIHRyYWNlYmFjay5mb3JtYXRfbGlzdChz
dGFjayk6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBmcmFtZV9zdHIuc3BsaXQoJ1xuJyk6Cisg
ICAgICAgICAgICAgICAgaWYgbGluZToKKyAgICAgICAgICAgICAgICAgICAgX2xvZy5lcnJvcigi
ICAlcyIgJSBsaW5lKQorCisgICAgZGVmIF9jbGVhbnVwKHNlbGYpOgorICAgICAgICBzZWxmLl9r
aWxsX2R1bXBfcmVuZGVyX3RyZWUoKQorICAgICAgICBpZiBzZWxmLl9oYXZlX2h0dHBfbG9jazoK
KyAgICAgICAgICAgIHNlbGYuX3N0b3Bfc2VydmVyc193aXRoX2xvY2soKQorICAgICAgICBpZiBz
ZWxmLl90ZXN0c19ydW5fZmlsZToKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9maWxlLmNs
b3NlKCkKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9maWxlID0gTm9uZQorCisgICAgZGVm
IGhhbmRsZV90ZXN0X2xpc3Qoc2VsZiwgc3JjLCBsaXN0X25hbWUsIHRlc3RfbGlzdCk6CisgICAg
ICAgIGlmIGxpc3RfbmFtZSA9PSAidGVzdHNfdG9faHR0cF9sb2NrIiBhbmQgc2VsZi5fcG9ydC5s
b2NrX3BvbGljeSgpID09ICJvbmUiOgorICAgICAgICAgICAgc2VsZi5fc3RhcnRfc2VydmVyc193
aXRoX2xvY2soKQorCisgICAgICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQorICAgICAgICBu
dW1fdGVzdHMgPSAwCisgICAgICAgIGZvciB0ZXN0X2lucHV0IGluIHRlc3RfbGlzdDoKKyAgICAg
ICAgICAgIHNlbGYuX3J1bl90ZXN0KHRlc3RfaW5wdXQpCisgICAgICAgICAgICBzZWxmLl9icm9r
ZXIueWllbGRfdG9fYnJva2VyKCkKKyAgICAgICAgICAgIGlmIHNlbGYuX2NhbmNlbGVkOgorICAg
ICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBudW1fdGVzdHMgKz0gMQorCisgICAgICAg
IGVsYXBzZWRfdGltZSA9IHRpbWUudGltZSgpIC0gc3RhcnRfdGltZQorCisgICAgICAgIGlmIHNl
bGYuX2hhdmVfaHR0cF9sb2NrOgorICAgICAgICAgICAgc2VsZi5fc3RvcF9zZXJ2ZXJzX3dpdGhf
bG9jaygpCisKKyAgICAgICAgc2VsZi5fYnJva2VyLnBvc3RfbWVzc2FnZSgnZmluaXNoZWRfbGlz
dCcsIGxpc3RfbmFtZSwgbnVtX3Rlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVsYXBzZWRfdGltZSkKKworICAgIGRlZiBoYW5kbGVfc3RvcChzZWxmLCBzcmMpOgorICAg
ICAgICAiIiJTdG9wIHJlY2VpdmVkIC0gbm8gbW9yZSB0ZXN0cyB0byBydW4uIiIiCisgICAgICAg
IHNlbGYuX2RvbmUgPSBUcnVlCisKKyAgICBkZWYgX3J1bl90ZXN0KHNlbGYsIHRlc3RfaW5wdXQp
OgorICAgICAgICBzZWxmLl9zZXRfdXBfdGVzdCh0ZXN0X2lucHV0KQorCisgICAgICAgICMgV2Ug
Y2FsY3VsYXRlIGhvdyBsb25nIHdlIGV4cGVjdCB0aGUgdGVzdCB0byB0YWtlLgorICAgICAgICAj
CisgICAgICAgICMgVGhlIER1bXBSZW5kZXJUcmVlIHdhdGNoZG9nIHVzZXMgMi41eCB0aGUgdGlt
ZW91dDsgd2Ugd2FudCB0byBiZQorICAgICAgICAjIGxhcmdlciB0aGFuIHRoYXQuIFdlIGFsc28g
YWRkIGEgbGl0dGxlIG1vcmUgcGFkZGluZyBpZiB3ZSdyZQorICAgICAgICAjIHJ1bm5pbmcgdGVz
dHMgaW4gYSBzZXBhcmF0ZSB0aHJlYWQuCisgICAgICAgICMKKyAgICAgICAgIyBOb3RlIHRoYXQg
d2UgbmVlZCB0byBjb252ZXJ0IHRoZSB0ZXN0IHRpbWVvdXQgZnJvbSBhCisgICAgICAgICMgc3Ry
aW5nIHZhbHVlIGluIG1pbGxpc2Vjb25kcyB0byBhIGZsb2F0IGZvciBQeXRob24uCisgICAgICAg
IGRyaXZlcl90aW1lb3V0X3NlYyA9IDMuMCAqIGZsb2F0KHRlc3RfaW5wdXQudGltZW91dCkgLyAx
MDAwLjAKKyAgICAgICAgdGhyZWFkX3BhZGRpbmdfc2VjID0gMS4wCisgICAgICAgIHRocmVhZF90
aW1lb3V0X3NlYyA9IGRyaXZlcl90aW1lb3V0X3NlYyArIHRocmVhZF9wYWRkaW5nX3NlYworICAg
ICAgICBpZiBzZWxmLl9vcHRpb25zLnJ1bl9zaW5nbHk6CisgICAgICAgICAgICB0ZXN0X3RpbWVv
dXRfc2VjID0gdGhyZWFkX3RpbWVvdXRfc2VjCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0
ZXN0X3RpbWVvdXRfc2VjID0gZHJpdmVyX3RpbWVvdXRfc2VjCisKKyAgICAgICAgc3RhcnQgPSB0
aW1lLnRpbWUoKQorICAgICAgICBzZWxmLl9icm9rZXIucG9zdF9tZXNzYWdlKCdzdGFydGVkX3Rl
c3QnLCB0ZXN0X2lucHV0LCB0ZXN0X3RpbWVvdXRfc2VjKQorCisgICAgICAgIGlmIHNlbGYuX29w
dGlvbnMucnVuX3NpbmdseToKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuX3J1bl90ZXN0X2lu
X2Fub3RoZXJfdGhyZWFkKHRlc3RfaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWRfdGltZW91dF9zZWMpCisgICAgICAgIGVs
c2U6CisgICAgICAgICAgICByZXN1bHQgPSBzZWxmLl9ydW5fdGVzdF9pbl90aGlzX3RocmVhZCh0
ZXN0X2lucHV0KQorCisgICAgICAgIHNlbGYuX3RlYXJfZG93bl90ZXN0KHRlc3RfaW5wdXQsIHJl
c3VsdCwgdGltZS50aW1lKCkgLSBzdGFydCkKKworICAgIGRlZiBfc2V0X3VwX3Rlc3Qoc2VsZiwg
dGVzdF9pbnB1dCk6CisgICAgICAgIHRlc3RfaW5wdXQudXJpID0gc2VsZi5fcG9ydC5maWxlbmFt
ZV90b191cmkodGVzdF9pbnB1dC5maWxlbmFtZSkKKyAgICAgICAgaWYgc2VsZi5fc2hvdWxkX2Zl
dGNoX2V4cGVjdGVkX2NoZWNrc3VtKCk6CisgICAgICAgICAgICB0ZXN0X2lucHV0LmltYWdlX2No
ZWNrc3VtID0gc2VsZi5fcG9ydC5leHBlY3RlZF9jaGVja3N1bSgKKyAgICAgICAgICAgICAgICB0
ZXN0X2lucHV0LmZpbGVuYW1lKQorCisgICAgZGVmIF9zaG91bGRfZmV0Y2hfZXhwZWN0ZWRfY2hl
Y2tzdW0oc2VsZik6CisgICAgICAgIHJldHVybiAoc2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0cyBh
bmQgbm90CisgICAgICAgICAgICAgICAgKHNlbGYuX29wdGlvbnMubmV3X2Jhc2VsaW5lIG9yIHNl
bGYuX29wdGlvbnMucmVzZXRfcmVzdWx0cykpCisKKyAgICBkZWYgX3J1bl90ZXN0X2luX2Fub3Ro
ZXJfdGhyZWFkKHNlbGYsIHRlc3RfaW5wdXQsIHRocmVhZF90aW1lb3V0X3NlYyk6CisgICAgICAg
ICIiIlJ1biBhIHRlc3QgaW4gYSBzZXBhcmF0ZSB0aHJlYWQsIGVuZm9yY2luZyBhIGhhcmQgdGlt
ZSBsaW1pdC4KKworICAgICAgICBTaW5jZSB3ZSBjYW4gb25seSBkZXRlY3QgdGhlIHRlcm1pbmF0
aW9uIG9mIGEgdGhyZWFkLCBub3QgYW55IGludGVybmFsCisgICAgICAgIHN0YXRlIG9yIHByb2dy
ZXNzLCB3ZSBjYW4gb25seSBydW4gcGVyLXRlc3QgdGltZW91dHMgd2hlbiBydW5uaW5nIHRlc3QK
KyAgICAgICAgZmlsZXMgc2luZ2x5LgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgdGVzdF9p
bnB1dDogT2JqZWN0IGNvbnRhaW5pbmcgdGhlIHRlc3QgZmlsZW5hbWUgYW5kIHRpbWVvdXQKKyAg
ICAgICAgICB0aHJlYWRfdGltZW91dF9zZWM6IHRpbWUgdG8gd2FpdCBiZWZvcmUga2lsbGluZyB0
aGUgZHJpdmVyIHByb2Nlc3MuCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgQSBUZXN0UmVz
dWx0CisgICAgICAgICIiIgorICAgICAgICB3b3JrZXIgPSBzZWxmCisgICAgICAgIHJlc3VsdCA9
IE5vbmUKKworICAgICAgICBkcml2ZXIgPSB3b3JrZXIuX3BvcnQuY3JlYXRlX2RyaXZlcih3b3Jr
ZXIuX3dvcmtlcl9udW1iZXIpCisgICAgICAgIGRyaXZlci5zdGFydCgpCisKKyAgICAgICAgY2xh
c3MgU2luZ2xlVGVzdFRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKKyAgICAgICAgICAgIGRlZiBy
dW4oc2VsZik6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gd29ya2VyLl9ydW5fc2luZ2xlX3Rl
c3QodGVzdF9pbnB1dCwgZHJpdmVyKQorCisgICAgICAgIHRocmVhZCA9IFNpbmdsZVRlc3RUaHJl
YWQoKQorICAgICAgICB0aHJlYWQuc3RhcnQoKQorICAgICAgICB0aHJlYWQuam9pbih0aHJlYWRf
dGltZW91dF9zZWMpCisgICAgICAgIGlmIHRocmVhZC5pc0FsaXZlKCk6CisgICAgICAgICAgICAj
IElmIGpvaW4oKSByZXR1cm5lZCB3aXRoIHRoZSB0aHJlYWQgc3RpbGwgcnVubmluZywgdGhlCisg
ICAgICAgICAgICAjIER1bXBSZW5kZXJUcmVlIGlzIGNvbXBsZXRlbHkgaHVuZyBhbmQgdGhlcmUn
cyBub3RoaW5nCisgICAgICAgICAgICAjIG1vcmUgd2UgY2FuIGRvIHdpdGggaXQuICBXZSBoYXZl
IHRvIGtpbGwgYWxsIHRoZQorICAgICAgICAgICAgIyBEdW1wUmVuZGVyVHJlZXMgdG8gZnJlZSBp
dCB1cC4gSWYgd2UncmUgcnVubmluZyBtb3JlIHRoYW4KKyAgICAgICAgICAgICMgb25lIER1bXBS
ZW5kZXJUcmVlIHRocmVhZCwgd2UnbGwgZW5kIHVwIGtpbGxpbmcgdGhlIG90aGVyCisgICAgICAg
ICAgICAjIER1bXBSZW5kZXJUcmVlcyB0b28sIGludHJvZHVjaW5nIHNwdXJpb3VzIGNyYXNoZXMu
IFdlIGFjY2VwdAorICAgICAgICAgICAgIyB0aGF0IHRyYWRlb2ZmIGluIG9yZGVyIHRvIGF2b2lk
IGxvc2luZyB0aGUgcmVzdCBvZiB0aGlzCisgICAgICAgICAgICAjIHRocmVhZCdzIHJlc3VsdHMu
CisgICAgICAgICAgICBfbG9nLmVycm9yKCdUZXN0IHRocmVhZCBodW5nOiBraWxsaW5nIGFsbCBE
dW1wUmVuZGVyVHJlZXMnKQorCisgICAgICAgIGRyaXZlci5zdG9wKCkKKworICAgICAgICBpZiBu
b3QgcmVzdWx0OgorICAgICAgICAgICAgcmVzdWx0ID0gdGVzdF9yZXN1bHRzLlRlc3RSZXN1bHQo
dGVzdF9pbnB1dC5maWxlbmFtZSwgZmFpbHVyZXM9W10sCisgICAgICAgICAgICAgICAgdGVzdF9y
dW5fdGltZT0wLCB0b3RhbF90aW1lX2Zvcl9hbGxfZGlmZnM9MCwgdGltZV9mb3JfZGlmZnM9e30p
CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIF9ydW5fdGVzdF9pbl90aGlzX3Ro
cmVhZChzZWxmLCB0ZXN0X2lucHV0KToKKyAgICAgICAgIiIiUnVuIGEgc2luZ2xlIHRlc3QgZmls
ZSB1c2luZyBhIHNoYXJlZCBEdW1wUmVuZGVyVHJlZSBwcm9jZXNzLgorCisgICAgICAgIEFyZ3M6
CisgICAgICAgICAgdGVzdF9pbnB1dDogT2JqZWN0IGNvbnRhaW5pbmcgdGhlIHRlc3QgZmlsZW5h
bWUsIHVyaSBhbmQgdGltZW91dAorCisgICAgICAgIFJldHVybnM6IGEgVGVzdFJlc3VsdCBvYmpl
Y3QuCisgICAgICAgICIiIgorICAgICAgICAjIHBvbGwoKSBpcyBub3QgdGhyZWFkc2FmZSBhbmQg
Y2FuIHRocm93IE9TRXJyb3IgZHVlIHRvOgorICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5v
cmcvaXNzdWUxNzMxNzE3CisgICAgICAgIGlmIG5vdCBzZWxmLl9kcml2ZXIgb3Igc2VsZi5fZHJp
dmVyLnBvbGwoKSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2RyaXZlciA9IHNlbGYu
X3BvcnQuY3JlYXRlX2RyaXZlcihzZWxmLl93b3JrZXJfbnVtYmVyKQorICAgICAgICAgICAgc2Vs
Zi5fZHJpdmVyLnN0YXJ0KCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9zaW5nbGVfdGVzdCh0
ZXN0X2lucHV0LCBzZWxmLl9kcml2ZXIpCisKKyAgICBkZWYgX3J1bl9zaW5nbGVfdGVzdChzZWxm
LCB0ZXN0X2lucHV0LCBkcml2ZXIpOgorICAgICAgICAjIFRoZSBpbWFnZSBoYXNoIGlzIHVzZWQg
dG8gYXZvaWQgZG9pbmcgYW4gaW1hZ2UgZHVtcCBpZiB0aGUKKyAgICAgICAgIyBjaGVja3N1bXMg
bWF0Y2gsIHNvIGl0IHNob3VsZCBiZSBzZXQgdG8gYSBibGFuayB2YWx1ZSBpZiB3ZQorICAgICAg
ICAjIGFyZSBnZW5lcmF0aW5nIGEgbmV3IGJhc2VsaW5lLiAgKE90aGVyd2lzZSwgYW4gaW1hZ2Ug
ZnJvbSBhCisgICAgICAgICMgcHJldmlvdXMgcnVuIHdpbGwgYmUgY29waWVkIGludG8gdGhlIGJh
c2VsaW5lLiIiIgorICAgICAgICBpZiBzZWxmLl9zaG91bGRfZmV0Y2hfZXhwZWN0ZWRfY2hlY2tz
dW0oKToKKyAgICAgICAgICAgIHRlc3RfaW5wdXQuaW1hZ2VfaGFzaCA9IHNlbGYuX3BvcnQuZXhw
ZWN0ZWRfY2hlY2tzdW0oCisgICAgICAgICAgICAgICAgdGVzdF9pbnB1dC5maWxlbmFtZSkKKyAg
ICAgICAgdGVzdF9vdXRwdXQgPSBkcml2ZXIucnVuX3Rlc3QodGVzdF9pbnB1dCkKKyAgICAgICAg
cmV0dXJuIHNlbGYuX3Byb2Nlc3Nfb3V0cHV0KHRlc3RfaW5wdXQsIHRlc3Rfb3V0cHV0KQorCisg
ICAgZGVmIF9wcm9jZXNzX291dHB1dChzZWxmLCB0ZXN0X2lucHV0LCB0ZXN0X291dHB1dCk6Cisg
ICAgICAgICIiIlJlY2VpdmVzIHRoZSBvdXRwdXQgZnJvbSBhIER1bXBSZW5kZXJUcmVlIHByb2Nl
c3MsIHN1YmplY3RzIGl0IHRvIGEKKyAgICAgICAgbnVtYmVyIG9mIHRlc3RzLCBhbmQgcmV0dXJu
cyBhIGxpc3Qgb2YgZmFpbHVyZSB0eXBlcyB0aGUgdGVzdCBwcm9kdWNlZC4KKworICAgICAgICBB
cmdzOgorICAgICAgICB0ZXN0X2lucHV0OiBhIFRlc3RJbnB1dCBvYmplY3QKKyAgICAgICAgdGVz
dF9vdXRwdXQ6IGEgVGVzdE91dHB1dCBvYmplY3QgY29udGFpbmluZyB0aGUgb3V0cHV0IG9mIHRo
ZSB0ZXN0CisKKyAgICAgICAgUmV0dXJuczogYSBUZXN0UmVzdWx0IG9iamVjdAorICAgICAgICAi
IiIKKyAgICAgICAgZmFpbHVyZXMgPSBbXQorICAgICAgICB0ZXN0X2ZpbGVuYW1lID0gdGVzdF9p
bnB1dC5maWxlbmFtZQorCisgICAgICAgIGlmIHRlc3Rfb3V0cHV0LmNyYXNoOgorICAgICAgICAg
ICAgZmFpbHVyZXMuYXBwZW5kKHRlc3RfZmFpbHVyZXMuRmFpbHVyZUNyYXNoKCkpCisgICAgICAg
IGlmIHRlc3Rfb3V0cHV0LnRpbWVvdXQ6CisgICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQodGVz
dF9mYWlsdXJlcy5GYWlsdXJlVGltZW91dCgpKQorCisgICAgICAgIHRlc3RfbmFtZSA9IHNlbGYu
X3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZSh0ZXN0X2ZpbGVuYW1lKQorICAgICAgICBpZiB0
ZXN0X291dHB1dC5jcmFzaDoKKyAgICAgICAgICAgIF9sb2cuZGVidWcoIiVzIFN0YWNrdHJhY2Ug
Zm9yICVzOlxuJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuX25hbWUsIHRlc3Rf
bmFtZSwgdGVzdF9vdXRwdXQuZXJyb3IpKQorICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRo
LmpvaW4oc2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSwgdGVzdF9uYW1lKQorICAgICAg
ICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKVswXSArICItc3RhY2su
dHh0IgorICAgICAgICAgICAgc2VsZi5fcG9ydC5tYXliZV9tYWtlX2RpcmVjdG9yeShvcy5wYXRo
LnNwbGl0KGZpbGVuYW1lKVswXSkKKyAgICAgICAgICAgIHdpdGggY29kZWNzLm9wZW4oZmlsZW5h
bWUsICJ3YiIsICJ1dGYtOCIpIGFzIGZpbGU6CisgICAgICAgICAgICAgICAgZmlsZS53cml0ZSh0
ZXN0X291dHB1dC5lcnJvcikKKyAgICAgICAgZWxpZiB0ZXN0X291dHB1dC5lcnJvcjoKKyAgICAg
ICAgICAgIF9sb2cuZGVidWcoIiVzICVzIG91dHB1dCBzdGRlcnIgbGluZXM6XG4lcyIgJQorICAg
ICAgICAgICAgICAgICAgICAgICAoc2VsZi5fbmFtZSwgdGVzdF9uYW1lLCB0ZXN0X291dHB1dC5l
cnJvcikpCisKKyAgICAgICAgZXhwZWN0ZWRfdGVzdF9vdXRwdXQgPSBzZWxmLl9leHBlY3RlZF90
ZXN0X291dHB1dCh0ZXN0X2ZpbGVuYW1lKQorCisgICAgICAgICMgQ2hlY2sgdGhlIG91dHB1dCBh
bmQgc2F2ZSB0aGUgcmVzdWx0cy4KKyAgICAgICAgc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCisg
ICAgICAgIHRpbWVfZm9yX2RpZmZzID0ge30KKyAgICAgICAgZm9yIHRlc3RfdHlwZSBpbiBzZWxm
Ll90ZXN0X3R5cGVzOgorICAgICAgICAgICAgc3RhcnRfZGlmZl90aW1lID0gdGltZS50aW1lKCkK
KyAgICAgICAgICAgIG5ld19mYWlsdXJlcyA9IHRlc3RfdHlwZS5jb21wYXJlX291dHB1dChzZWxm
Ll9wb3J0LCB0ZXN0X2lucHV0LmZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RfYXJncywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X291dHB1dCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF90
ZXN0X291dHB1dCkKKyAgICAgICAgICAgICMgRG9uJ3QgYWRkIGFueSBtb3JlIGZhaWx1cmVzIGlm
IHdlIGFscmVhZHkgaGF2ZSBhIGNyYXNoLCBzbyB3ZQorICAgICAgICAgICAgIyBkb24ndCBkb3Vi
bGUtcmVwb3J0IHRob3NlIHRlc3RzLiBXZSBkbyBkb3VibGUtcmVwb3J0IGZvciB0aW1lb3V0cwor
ICAgICAgICAgICAgIyBzaW5jZSB3ZSBzdGlsbCB3YW50IHRvIHNlZSB0aGUgdGV4dCBhbmQgaW1h
Z2Ugb3V0cHV0LgorICAgICAgICAgICAgaWYgbm90IHRlc3Rfb3V0cHV0LmNyYXNoOgorICAgICAg
ICAgICAgICAgIGZhaWx1cmVzLmV4dGVuZChuZXdfZmFpbHVyZXMpCisgICAgICAgICAgICB0aW1l
X2Zvcl9kaWZmc1t0ZXN0X3R5cGUuX19jbGFzc19fLl9fbmFtZV9fXSA9ICgKKyAgICAgICAgICAg
ICAgICB0aW1lLnRpbWUoKSAtIHN0YXJ0X2RpZmZfdGltZSkKKworICAgICAgICB0b3RhbF90aW1l
X2Zvcl9hbGxfZGlmZnMgPSB0aW1lLnRpbWUoKSAtIHN0YXJ0X2RpZmZfdGltZQorICAgICAgICBy
ZXR1cm4gdGVzdF9yZXN1bHRzLlRlc3RSZXN1bHQodGVzdF9maWxlbmFtZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhaWx1cmVzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGVzdF9vdXRwdXQudGVzdF90aW1lLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxfdGltZV9mb3JfYWxsX2RpZmZzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZV9mb3JfZGlmZnMpCisKKyAg
ICBkZWYgX2V4cGVjdGVkX3Rlc3Rfb3V0cHV0KHNlbGYsIGZpbGVuYW1lKToKKyAgICAgICAgIiIi
UmV0dXJucyBhbiBleHBlY3RlZCBUZXN0T3V0cHV0IG9iamVjdC4iIiIKKyAgICAgICAgcmV0dXJu
IHRlc3Rfb3V0cHV0LlRlc3RPdXRwdXQoc2VsZi5fcG9ydC5leHBlY3RlZF90ZXh0KGZpbGVuYW1l
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQuZXhwZWN0
ZWRfaW1hZ2UoZmlsZW5hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2VsZi5fcG9ydC5leHBlY3RlZF9jaGVja3N1bShmaWxlbmFtZSkpCisKKyAgICBkZWYgX3RlYXJf
ZG93bl90ZXN0KHNlbGYsIHRlc3RfaW5wdXQsIHJlc3VsdCwgZWxhcHNlZF90aW1lKToKKyAgICAg
ICAgc2VsZi5fYmF0Y2hfY291bnQgKz0gMQorICAgICAgICBzZWxmLl90ZXN0c19ydW5fZmlsZS53
cml0ZSh0ZXN0X2lucHV0LmZpbGVuYW1lICsgIlxuIikKKyAgICAgICAgdGVzdF9uYW1lID0gc2Vs
Zi5fcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKHRlc3RfaW5wdXQuZmlsZW5hbWUpCisKKyAg
ICAgICAgaWYgcmVzdWx0LmZhaWx1cmVzOgorICAgICAgICAgICAgIyBDaGVjayBhbmQga2lsbCBE
dW1wUmVuZGVyVHJlZSBpZiB3ZSBuZWVkIHRvLgorICAgICAgICAgICAgaWYgYW55KFtmLnNob3Vs
ZF9raWxsX2R1bXBfcmVuZGVyX3RyZWUoKSBmb3IgZiBpbiByZXN1bHQuZmFpbHVyZXNdKToKKyAg
ICAgICAgICAgICAgICBzZWxmLl9raWxsX2R1bXBfcmVuZGVyX3RyZWUoKQorICAgICAgICAgICAg
ICAgICMgUmVzZXQgdGhlIGJhdGNoIGNvdW50IHNpbmNlIHRoZSBzaGVsbCBqdXN0IGJvdW5jZWQu
CisgICAgICAgICAgICAgICAgc2VsZi5fYmF0Y2hfY291bnQgPSAwCisKKyAgICAgICAgICAgICMg
UHJpbnQgdGhlIGVycm9yIG1lc3NhZ2UocykuCisgICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyAl
cyBmYWlsZWQ6IiAlIChzZWxmLl9uYW1lLCB0ZXN0X25hbWUpKQorICAgICAgICAgICAgZm9yIGYg
aW4gcmVzdWx0LmZhaWx1cmVzOgorICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoIiVzICAlcyIg
JSAoc2VsZi5fbmFtZSwgZi5tZXNzYWdlKCkpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
X2xvZy5kZWJ1ZygiJXMgJXMgcGFzc2VkIiAlIChzZWxmLl9uYW1lLCB0ZXN0X25hbWUpKQorCisg
ICAgICAgIHNlbGYuX2Jyb2tlci5wb3N0X21lc3NhZ2UoJ2ZpbmlzaGVkX3Rlc3QnLCByZXN1bHQs
IGVsYXBzZWRfdGltZSkKKworICAgICAgICBpZiBzZWxmLl9iYXRjaF9zaXplID4gMCBhbmQgc2Vs
Zi5fYmF0Y2hfY291bnQgPj0gc2VsZi5fYmF0Y2hfc2l6ZToKKyAgICAgICAgICAgICMgQm91bmNl
IHRoZSBzaGVsbCBhbmQgcmVzZXQgY291bnQuCisgICAgICAgICAgICBzZWxmLl9raWxsX2R1bXBf
cmVuZGVyX3RyZWUoKQorICAgICAgICAgICAgc2VsZi5fYmF0Y2hfY291bnQgPSAwCisKKyAgICBk
ZWYgX3N0YXJ0X3NlcnZlcnNfd2l0aF9sb2NrKHNlbGYpOgorICAgICAgICBfbG9nLmRlYnVnKCdB
Y3F1aXJpbmcgaHR0cCBsb2NrIC4uLicpCisgICAgICAgIHNlbGYuX3BvcnQuYWNxdWlyZV9odHRw
X2xvY2soKQorICAgICAgICBfbG9nLmRlYnVnKCdTdGFydGluZyBIVFRQIHNlcnZlciAuLi4nKQor
ICAgICAgICBzZWxmLl9wb3J0LnN0YXJ0X2h0dHBfc2VydmVyKCkKKyAgICAgICAgX2xvZy5kZWJ1
ZygnU3RhcnRpbmcgV2ViU29ja2V0IHNlcnZlciAuLi4nKQorICAgICAgICBzZWxmLl9wb3J0LnN0
YXJ0X3dlYnNvY2tldF9zZXJ2ZXIoKQorICAgICAgICBzZWxmLl9oYXZlX2h0dHBfbG9jayA9IFRy
dWUKKworICAgIGRlZiBfc3RvcF9zZXJ2ZXJzX3dpdGhfbG9jayhzZWxmKToKKyAgICAgICAgIiIi
U3RvcCB0aGUgc2VydmVycyBhbmQgcmVsZWFzZSBodHRwIGxvY2suIiIiCisgICAgICAgIGlmIHNl
bGYuX2hhdmVfaHR0cF9sb2NrOgorICAgICAgICAgICAgX2xvZy5kZWJ1ZygnU3RvcHBpbmcgSFRU
UCBzZXJ2ZXIgLi4uJykKKyAgICAgICAgICAgIHNlbGYuX3BvcnQuc3RvcF9odHRwX3NlcnZlcigp
CisgICAgICAgICAgICBfbG9nLmRlYnVnKCdTdG9wcGluZyBXZWJTb2NrZXQgc2VydmVyIC4uLicp
CisgICAgICAgICAgICBzZWxmLl9wb3J0LnN0b3Bfd2Vic29ja2V0X3NlcnZlcigpCisgICAgICAg
ICAgICBfbG9nLmRlYnVnKCdSZWxlYXNpbmcgc2VydmVyIGxvY2sgLi4uJykKKyAgICAgICAgICAg
IHNlbGYuX3BvcnQucmVsZWFzZV9odHRwX2xvY2soKQorICAgICAgICAgICAgc2VsZi5faGF2ZV9o
dHRwX2xvY2sgPSBGYWxzZQorCisgICAgZGVmIF9raWxsX2R1bXBfcmVuZGVyX3RyZWUoc2VsZik6
CisgICAgICAgICIiIktpbGwgdGhlIER1bXBSZW5kZXJUcmVlIHByb2Nlc3MgaWYgaXQncyBydW5u
aW5nLiIiIgorICAgICAgICBpZiBzZWxmLl9kcml2ZXI6CisgICAgICAgICAgICBzZWxmLl9kcml2
ZXIuc3RvcCgpCisgICAgICAgICAgICBzZWxmLl9kcml2ZXIgPSBOb25lCmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkKaW5kZXggNmU1ZmFiYzBk
NGYzNjRhM2Q1YTM3YjJmYzhlMWVlYTAxYmM0NzJlZi4uNDE3ZTM5ZjY3MmEzYjlkMjVmOGI0MzJk
NTVhMWU1MjEwMTAyZjMzZCAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9iYXNlLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvYmFzZS5weQpAQCAtMTMwLDYgKzEzMCw5IEBAIGNsYXNzIFBvcnQob2JqZWN0
KToKICAgICAgICAgcG9ydC4iIiIKICAgICAgICAgcmV0dXJuIHNlbGYuX2V4ZWN1dGl2ZS5jcHVf
Y291bnQoKQogCisgICAgZGVmIGRlZmF1bHRfd29ya2VyX21vZGVsKHNlbGYpOgorICAgICAgICBy
ZXR1cm4gJ29sZC10aHJlYWRzJworCiAgICAgZGVmIGJhc2VsaW5lX3BhdGgoc2VsZik6CiAgICAg
ICAgICIiIlJldHVybiB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5IHRvIHN0b3Jl
IG5ldyBiYXNlbGluZXMKICAgICAgICAgaW4gZm9yIHRoaXMgcG9ydC4iIiIKZGlmZiAtLWdpdCBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fbWFjLnB5
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9tYWMu
cHkKaW5kZXggNTM2MGFiMzRmODc2ZDhhZjljY2YxYTk4ZTcxNTQ4MWNjNzIwYTM2NC4uZjdhZWVk
NWJhNTE5MWUxZjk1ZjA1MDMwYmRhOTFlZGViMjk3ZGRlZiAxMDA2NDQKLS0tIGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9tYWMucHkKKysrIGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9tYWMucHkKQEAg
LTY5LDEzICs2OSwxNiBAQCBjbGFzcyBDaHJvbWl1bU1hY1BvcnQoY2hyb21pdW0uQ2hyb21pdW1Q
b3J0KToKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCiAgICAgZGVmIGRlZmF1bHRfY2hpbGRfcHJv
Y2Vzc2VzKHNlbGYpOgotICAgICAgICAjIEZJWE1FOiB3ZSBuZWVkIHRvIHJ1biBzaW5nbGUtdGhy
ZWFkZWQgZm9yIG5vdy4gU2VlCi0gICAgICAgICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTM4NTUzLiBVbmZvcnR1bmF0ZWx5IHRoaXMKLSAgICAgICAgIyByb3V0aW5l
IGlzIGNhbGxlZCByaWdodCBiZWZvcmUgdGhlIGxvZ2dlciBpcyBjb25maWd1cmVkLCBzbyBpZiB3
ZQotICAgICAgICAjIHRyeSB0byBfbG9nLndhcm5pbmcoKSwgaXQgZ2V0cyB0aHJvd24gYXdheS4K
LSAgICAgICAgaW1wb3J0IHN5cwotICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJEZWZhdWx0aW5n
IHRvIG9uZSBjaGlsZCAtIHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9Mzg1NTNcbiIpCi0gICAgICAgIHJldHVybiAxCisgICAgICAgIGlmIHNlbGYuZ2V0X29wdGlv
bignd29ya2VyX21vZGVsJykgPT0gJ29sZC10aHJlYWRzJzoKKyAgICAgICAgICAgICMgRklYTUU6
IHdlIG5lZWQgdG8gcnVuIHNpbmdsZS10aHJlYWRlZCBmb3Igbm93LiBTZWUKKyAgICAgICAgICAg
ICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4NTUzLiBVbmZvcnR1
bmF0ZWx5IHRoaXMKKyAgICAgICAgICAgICMgcm91dGluZSBpcyBjYWxsZWQgcmlnaHQgYmVmb3Jl
IHRoZSBsb2dnZXIgaXMgY29uZmlndXJlZCwgc28gaWYgd2UKKyAgICAgICAgICAgICMgdHJ5IHRv
IF9sb2cud2FybmluZygpLCBpdCBnZXRzIHRocm93biBhd2F5LgorICAgICAgICAgICAgaW1wb3J0
IHN5cworICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiRGVmYXVsdGluZyB0byBvbmUgY2hp
bGQgLSBzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4NTUzXG4i
KQorICAgICAgICAgICAgcmV0dXJuIDEKKworICAgICAgICByZXR1cm4gY2hyb21pdW0uQ2hyb21p
dW1Qb3J0LmRlZmF1bHRfY2hpbGRfcHJvY2Vzc2VzKHNlbGYpCiAKICAgICBkZWYgZHJpdmVyX25h
bWUoc2VsZik6CiAgICAgICAgICIiIm5hbWUgZm9yIHRoaXMgcG9ydCdzIGVxdWl2YWxlbnQgb2Yg
RHVtcFJlbmRlclRyZWUuIiIiCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L21hYy5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvbWFjLnB5CmluZGV4IDA2MjIxOTYxMDgxNDY1ODI2NjBjYTRmMGI1MTA4OTlkMjJh
YzZkMjMuLjljMmU4YjMxMGIyZTQ2YmI2ZmI3YjUzMjg5ZmI5NWExZDNiNGUwMjQgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbWFjLnB5CisrKyBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbWFjLnB5CkBAIC01Miw3
ICs1Miw3IEBAIGNsYXNzIE1hY1BvcnQoV2ViS2l0UG9ydCk6CiAgICAgICAgICMgZm91ciB0aHJl
YWRzIGluIHBhcmFsbGVsLgogICAgICAgICAjIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MzY2MjIKICAgICAgICAgY2hpbGRfcHJvY2Vzc2VzID0gV2ViS2l0UG9y
dC5kZWZhdWx0X2NoaWxkX3Byb2Nlc3NlcyhzZWxmKQotICAgICAgICBpZiBjaGlsZF9wcm9jZXNz
ZXMgPiA0OgorICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24oJ3dvcmtlcl9tb2RlbCcpID09ICdv
bGQtdGhyZWFkcycgYW5kIGNoaWxkX3Byb2Nlc3NlcyA+IDQ6CiAgICAgICAgICAgICByZXR1cm4g
NAogICAgICAgICByZXR1cm4gY2hpbGRfcHJvY2Vzc2VzCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CmluZGV4IDE3
YjZlODk5ODY4NzkxOTVjZGNlYTM1MGE1YjhhMTAxZGE3N2FkYjAuLjY3MGQxZGViY2JiMGI3NzU3
ZmU1ZGIyOGFjMmUwMzlhMzkzNzAyZWIgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQpAQCAtNDEsNiArNDEsNyBA
QCBpbXBvcnQgc3lzCiAKIGZyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IHByaW50aW5nCiBmcm9t
IGxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X3J1bm5lcgorZnJvbSBsYXlvdXRfcGFja2FnZSBp
bXBvcnQgdGVzdF9ydW5uZXIyCiAKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQg
dXNlcgogZnJvbSB3ZWJraXRweS50aGlyZHBhcnR5IGltcG9ydCBzaW1wbGVqc29uCkBAIC04OSw3
ICs5MCwxMSBAQCBkZWYgcnVuKHBvcnQsIG9wdGlvbnMsIGFyZ3MsIHJlZ3VsYXJfb3V0cHV0PXN5
cy5zdGRlcnIsCiAgICAgIyBpbiBhIHRyeS9maW5hbGx5IHRvIGVuc3VyZSB0aGF0IHdlIGNsZWFu
IHVwIHRoZSBsb2dnaW5nIGNvbmZpZ3VyYXRpb24uCiAgICAgbnVtX3VuZXhwZWN0ZWRfcmVzdWx0
cyA9IC0xCiAgICAgdHJ5OgotICAgICAgICBydW5uZXIgPSB0ZXN0X3J1bm5lci5UZXN0UnVubmVy
KHBvcnQsIG9wdGlvbnMsIHByaW50ZXIpCisgICAgICAgIGlmIG9wdGlvbnMud29ya2VyX21vZGVs
IGluICgnaW5saW5lJywgJ3RocmVhZHMnLCAncHJvY2Vzc2VzJyk6CisgICAgICAgICAgICBydW5u
ZXIgPSB0ZXN0X3J1bm5lcjIuVGVzdFJ1bm5lcjIocG9ydCwgb3B0aW9ucywgcHJpbnRlcikKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIHJ1bm5lciA9IHRlc3RfcnVubmVyLlRlc3RSdW5uZXIo
cG9ydCwgb3B0aW9ucywgcHJpbnRlcikKKwogICAgICAgICBydW5uZXIuX3ByaW50X2NvbmZpZygp
CiAKICAgICAgICAgcHJpbnRlci5wcmludF91cGRhdGUoIkNvbGxlY3RpbmcgdGVzdHMgLi4uIikK
QEAgLTEyOCw5ICsxMzMsMTIgQEAgZGVmIF9zZXRfdXBfZGVyaXZlZF9vcHRpb25zKHBvcnRfb2Jq
LCBvcHRpb25zKToKICAgICAjIFdlIHJldHVybiBhIGxpc3Qgb2Ygd2FybmluZ3MgdG8gcHJpbnQg
YWZ0ZXIgdGhlIHByaW50ZXIgaXMgaW5pdGlhbGl6ZWQuCiAgICAgd2FybmluZ3MgPSBbXQogCi0g
ICAgaWYgb3B0aW9ucy53b3JrZXJfbW9kZWwgPT0gJ29sZC1pbmxpbmUnOgorICAgIGlmIG9wdGlv
bnMud29ya2VyX21vZGVsIGlzIE5vbmU6CisgICAgICAgIG9wdGlvbnMud29ya2VyX21vZGVsID0g
cG9ydF9vYmouZGVmYXVsdF93b3JrZXJfbW9kZWwoKQorCisgICAgaWYgb3B0aW9ucy53b3JrZXJf
bW9kZWwgaW4gKCdpbmxpbmUnLCAnb2xkLWlubGluZScpOgogICAgICAgICBpZiBvcHRpb25zLmNo
aWxkX3Byb2Nlc3NlcyBhbmQgaW50KG9wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKSA+IDE6Ci0gICAg
ICAgICAgICB3YXJuaW5ncy5hcHBlbmQoIi0td29ya2VyLW1vZGVsPW9sZC1pbmxpbmUgb3ZlcnJp
ZGVzIC0tY2hpbGQtcHJvY2Vzc2VzIikKKyAgICAgICAgICAgIHdhcm5pbmdzLmFwcGVuZCgiLS13
b3JrZXItbW9kZWw9JXMgb3ZlcnJpZGVzIC0tY2hpbGQtcHJvY2Vzc2VzIiAlIG9wdGlvbnMud29y
a2VyX21vZGVsKQogICAgICAgICBvcHRpb25zLmNoaWxkX3Byb2Nlc3NlcyA9ICIxIgogICAgIGlm
IG5vdCBvcHRpb25zLmNoaWxkX3Byb2Nlc3NlczoKICAgICAgICAgb3B0aW9ucy5jaGlsZF9wcm9j
ZXNzZXMgPSBvcy5lbnZpcm9uLmdldCgiV0VCS0lUX1RFU1RfQ0hJTERfUFJPQ0VTU0VTIiwKQEAg
LTM2OCw4ICszNzYsOCBAQCBkZWYgcGFyc2VfYXJncyhhcmdzPU5vbmUpOgogICAgICAgICAgICAg
aGVscD0iTnVtYmVyIG9mIER1bXBSZW5kZXJUcmVlcyB0byBydW4gaW4gcGFyYWxsZWwuIiksCiAg
ICAgICAgICMgRklYTUU6IERpc3BsYXkgZGVmYXVsdCBudW1iZXIgb2YgY2hpbGQgcHJvY2Vzc2Vz
IHRoYXQgd2lsbCBydW4uCiAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXdvcmtlci1t
b2RlbCIsIGFjdGlvbj0ic3RvcmUiLAotICAgICAgICAgICAgZGVmYXVsdD0ib2xkLXRocmVhZHMi
LCBoZWxwPSgiY29udHJvbHMgd29ya2VyIG1vZGVsLiBWYWxpZCB2YWx1ZXMgIgotICAgICAgICAg
ICAgImFyZSAnb2xkLWlubGluZScsICdvbGQtdGhyZWFkcycuIikpLAorICAgICAgICAgICAgZGVm
YXVsdD1Ob25lLCBoZWxwPSgiY29udHJvbHMgd29ya2VyIG1vZGVsLiBWYWxpZCB2YWx1ZXMgYXJl
ICdvbGQtaW5saW5lJywgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJ29sZC10
aHJlYWRzJywgJ2lubGluZScsICd0aHJlYWRzJywgYW5kICdwcm9jZXNzZXMnLiIpKSwKICAgICAg
ICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tZXhwZXJpbWVudGFsLWZ1bGx5LXBhcmFsbGVsIiwK
ICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlZmF1bHQ9RmFsc2UsCiAgICAgICAg
ICAgICBoZWxwPSJydW4gYWxsIHRlc3RzIGluIHBhcmFsbGVsIiksCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80680</attachid>
            <date>2011-01-31 14:27:18 -0800</date>
            <delta_ts>2011-02-01 02:21:18 -0800</delta_ts>
            <desc>rebase merge to r77148</desc>
            <filename>bug-49566-20110131142716.patch</filename>
            <type>text/plain</type>
            <size>66675</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA2NTY4
MzdkMjBjNGNjNzM2Yzc4YzMzYWRjNmYzZGNiMzFhNjk1ZTc0Li41NjVjNTJmMDAyNTA1M2RjNzJk
NDcwMzI4ZGFjY2FiYTc3NDg0ZjA4IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMDEtMTAgIERpcmsgUHJhbmtl
ICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgbmV3LXJ1bi13ZWJraXQtdGVzdHM6IGNoZWNrcG9pbnQgbWVyZ2Ug
b2YgZHVhbC1tb2RlIG11bHRpcHJvY2Vzc2luZyB3b3JrCisKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5NTY2CisKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyX3dvcmtlcl9icm9rZXIu
cHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL21hbmFnZXJfd29ya2VyX2Jyb2tlcl91bml0dGVzdC5weTogQWRkZWQuCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWVzc2Fn
ZV9icm9rZXIyLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tlcjJfdW5pdHRlc3QucHk6IEFkZGVkLgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rl
c3RfcnVubmVyMi5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvbGF5b3V0X3BhY2thZ2Uvd29ya2VyLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHk6CisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9tYWMucHk6CisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tYWMucHk6CisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weToKKwogMjAxMS0wMS0z
MSAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IEVyaWMgU2VpZGVsLgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlcl93b3JrZXJfYnJva2VyLnB5IGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlcl93b3JrZXJf
YnJva2VyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUyOGE3YmI0YzMwMzQ1NzFkMzUxYzkyZTQwMmFjMjYyNWI3
OGEzMzcKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyX3dvcmtlcl9icm9rZXIucHkKQEAgLTAsMCArMSwz
MjUgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmli
dXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJNb2R1bGUgZm9yIGhhbmRsaW5nIG1lc3NhZ2Vz
IGFuZCBjb25jdXJyZW5jeSBmb3IgcnVuLXdlYmtpdC10ZXN0cy4KKworVGVzdGluZyBpcyBhY2Nv
bXBsaXNoZWQgYnkgaGF2aW5nIGEgbWFuYWdlciAoVGVzdFJ1bm5lcikgZ2F0aGVyIGFsbCBvZiB0
aGUKK3Rlc3RzIHRvIGJlIHJ1biwgYW5kIHNlbmRpbmcgbWVzc2FnZXMgdG8gYSBwb29sIG9mIHdv
cmtlcnMgKFRlc3RTaGVsbFRocmVhZHMpCit0byBydW4gZWFjaCB0ZXN0LiBFYWNoIHdvcmtlciBj
b21tdW5pY2F0ZXMgd2l0aCBvbmUgZHJpdmVyICh1c3VhbGx5CitEdW1wUmVuZGVyVHJlZSkgdG8g
cnVuIG9uZSB0ZXN0IGF0IGEgdGltZSBhbmQgdGhlbiBjb21wYXJlIHRoZSBvdXRwdXQgYWdhaW5z
dAord2hhdCB3ZSBleHBlY3RlZCB0byBnZXQuCisKK1RoaXMgbW9kdWxlcyBpbXBsZW1lbnRzIGEg
bWVzc2FnZSBicm9rZXIgdGhhdCBjb25uZWN0cyB0aGUgbWFuYWdlciB0byB0aGUKK3dvcmtlcnM6
IGl0IHByb3ZpZGVzIGEgbWVzc2FnaW5nIGFic3RyYWN0aW9uIGFuZCBtZXNzYWdlIGxvb3BzLCBh
bmQKK2hhbmRsZXMgbGF1bmNoaW5nIHRocmVhZHMgYW5kL29yIHByb2Nlc3NlcyBkZXBlbmRpbmcg
b24gdGhlIHJlcXVlc3RlZAorY29uZmlndXJhdGlvbi4KKworQm90aCBNYW5hZ2VycyBhbmQgV29y
a2VycyBhcmUgcmVxdWlyZWQgdG8gaW1wbGVtZW50IHRoZSBtZXRob2RzIGluIHRoZQorQnJva2Vy
Q2xpZW50IGludGVyZmFjZSAvIGFic3RyYWN0IGJhc2UgY2xhc3MgaW4gb3JkZXIgdG8gdGhlIG1l
c3NhZ2UKK2Jyb2tlciB0byBwcm9wZXJseSBjb21tdW5pY2F0ZSB3aXRoIHRoZW0uCisKK0V2ZXJ5
dGhpbmcgc3RhcnRzIGJ5IGNhbGxpbmcgZ2V0KCkgdG8gb2J0YWluIGFuIGluaXRpYWwgcmVmZXJl
bmNlIHRvIGEgYnJva2VyLgorVGhlIGJyb2tlciBpcyBtZWRpYXRlZCBieSBhIENvbm5lY3Rpb24g
b2JqZWN0IHRoYXQgcHJvdmlkZXMgc29tZSBzeW50YWN0aWMKK3N1Z2FyIHRvIHJlcHJlc2VudCB0
aGUgTWFuYWdlciBhbmQgV29ya2VyIGVuZHBvaW50cy4gVHlwaWNhbGx5IHRoZQorbWFuYWdlciB0
aGVuIGNhbGxzIHN0YXJ0X3dvcmtlcigpIHJlcGVhdGVkbHkgdG8gbGF1bmNoIHdvcmtlcnMgKHdo
aWNoIGFyZQordXN1YWxseSBydW4gaW4gc2VwYXJhdGUgdGhyZWFkcyBvciBwcm9jZXNzZXMgYXMg
Y29udHJvbGxlZCBieSB0aGUKKy0td29ya2VyLW1vZGVsIHJ1bnRpbWUgZmxhZyksIG9wdGlvbmFs
bHkgc2V0cyB1cCBzb21lIHRpbWVycywgYW5kIHRoZW4KK2ludm9rZXMgcnVuX21lc3NhZ2VfbG9v
cCgpLgorIiIiCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKK2ltcG9ydCBRdWV1ZQoraW1w
b3J0IHN5cworaW1wb3J0IHRocmVhZAoraW1wb3J0IHRocmVhZGluZworaW1wb3J0IHRpbWUKK2lt
cG9ydCB0cmFjZWJhY2sKKworCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisK
K2Zyb20gd2Via2l0cHkgaW1wb3J0IGxheW91dF90ZXN0cworZnJvbSB3ZWJraXRweS5sYXlvdXRf
dGVzdHMgaW1wb3J0IHBvcnQKKworaW1wb3J0IG1lc3NhZ2VfYnJva2VyMgorCisjCisjIEhhbmRs
ZSBQeXRob24gPCAyLjYgd2hlcmUgbXVsdGlwcm9jZXNzaW5nIGlzbid0IGF2YWlsYWJsZS4KKyMK
K3RyeToKKyAgICBfbXVsdGlwcm9jZXNzaW5nX2lzX2F2YWlsYWJsZSA9IFRydWUKKyAgICBmcm9t
IG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgUHJvY2VzcyBhcyBfTXVsdGlwcm9jZXNzaW5nX1Byb2Nl
c3MKKyAgICBmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgUXVldWUgYXMgX011bHRpcHJvY2Vz
c2luZ19RdWV1ZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIF9tdWx0aXByb2Nlc3NpbmdfaXNf
YXZhaWxhYmxlID0gRmFsc2UKKyAgICBfTXVsdGlwcm9jZXNzaW5nX1Byb2Nlc3MgPSB0aHJlYWRp
bmcuVGhyZWFkCisgICAgX011bHRpcHJvY2Vzc2luZ19RdWV1ZSA9IFF1ZXVlLlF1ZXVlCisKKwor
IworIyBUb3BpYyBuYW1lcyBmb3IgTWFuYWdlciA8LT4gV29ya2VyIG1lc3NhZ2luZworIworTUFO
QUdFUl9UT1BJQyA9ICdtYW5hZ2VycycKK0FOWV9XT1JLRVJfVE9QSUMgPSAnd29ya2VycycKKwor
CitkZWYgcnVudGltZV9vcHRpb25zKCk6CisgICAgcmV0dXJuIG1lc3NhZ2VfYnJva2VyMi5ydW50
aW1lX29wdGlvbnMoKQorCisKK2RlZiBnZXQocG9ydCwgb3B0aW9ucywgbWFuYWdlciwgd29ya2Vy
X2NsYXNzKToKKyAgICAiIiJSZXR1cm4gYSBjb25uZWN0aW9uIHRvIGEgbWFuYWdlci93b3JrZXIg
bWVzc2FnZV9icm9rZXIKKworICAgIEFyZ3M6CisgICAgICAgIHBvcnQgLSBoYW5kbGUgdG8gbGF5
b3V0X3Rlc3RzL3BvcnQgb2JqZWN0IGZvciBwb3J0LXNwZWNpZmljIHN0dWZmCisgICAgICAgIG9w
dGlvbnMgLSBvcHRwYXJzZSBhcmd1bWVudCBmb3IgY29tbWFuZC1saW5lIG9wdGlvbnMKKyAgICAg
ICAgbWFuYWdlciAtIG9iamVjdCB0byBkaXNwYXRjaCByZXBsaWVzIHRvCisgICAgICAgIHdvcmtl
cl9jbGFzcyAtIHR5cGUgb2Ygd29ya2VycyB0byBjcmVhdGUuIFRoaXMgY2xhc3MgbXVzdCBpbXBs
ZW1lbnQKKyAgICAgICAgICAgIHRoZSBtZXRob2RzIGluIHRoZSBDbGllbnRJbnRlcmZhY2UuCisg
ICAgUmV0dXJuczoKKyAgICAgICAgQSBoYW5kbGUgdG8gYW4gb2JqZWN0IHRoYXQgd2lsbCB0YWxr
IHRvIGEgbWVzc2FnZSBicm9rZXIgY29uZmlndXJlZAorICAgICAgICBmb3IgdGhlIG5vcm1hbCBt
YW5hZ2VyL3dvcmtlciBjb21tdW5pY2F0aW9uLgorICAgICIiIgorICAgIHdvcmtlcl9tb2RlbCA9
IG9wdGlvbnMud29ya2VyX21vZGVsCisgICAgaWYgd29ya2VyX21vZGVsID09ICdpbmxpbmUnOgor
ICAgICAgICBxdWV1ZV9jbGFzcyA9IFF1ZXVlLlF1ZXVlCisgICAgICAgIG1hbmFnZXJfY2xhc3Mg
PSBfSW5saW5lTWFuYWdlcgorICAgIGVsaWYgd29ya2VyX21vZGVsID09ICd0aHJlYWRzJzoKKyAg
ICAgICAgcXVldWVfY2xhc3MgPSBRdWV1ZS5RdWV1ZQorICAgICAgICBtYW5hZ2VyX2NsYXNzID0g
X1RocmVhZGVkTWFuYWdlcgorICAgIGVsaWYgd29ya2VyX21vZGVsID09ICdwcm9jZXNzZXMnIGFu
ZCBfbXVsdGlwcm9jZXNzaW5nX2lzX2F2YWlsYWJsZToKKyAgICAgICAgcXVldWVfY2xhc3MgPSBf
TXVsdGlwcm9jZXNzaW5nX1F1ZXVlCisgICAgICAgIG1hbmFnZXJfY2xhc3MgPSBfTXVsdGlQcm9j
ZXNzTWFuYWdlcgorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVuc3VwcG9y
dGVkIHZhbHVlIGZvciAtLXdvcmtlci1tb2RlbDogJXMiICUKKyAgICAgICAgICAgICAgICAgICAg
ICAgICB3b3JrZXJfbW9kZWwpCisKKyAgICBicm9rZXIgPSBtZXNzYWdlX2Jyb2tlcjIuQnJva2Vy
KG9wdGlvbnMsIHF1ZXVlX2NsYXNzKQorICAgIHJldHVybiBtYW5hZ2VyX2NsYXNzKGJyb2tlciwg
cG9ydCwgb3B0aW9ucywgbWFuYWdlciwgd29ya2VyX2NsYXNzKQorCisKK2NsYXNzIF9NYW5hZ2Vy
Q29ubmVjdGlvbihtZXNzYWdlX2Jyb2tlcjIuQnJva2VyQ29ubmVjdGlvbik6CisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIGJyb2tlciwgb3B0aW9ucywgbWFuYWdlciwgd29ya2VyX2NsYXNzKToKKyAg
ICAgICAgbWVzc2FnZV9icm9rZXIyLkJyb2tlckNvbm5lY3Rpb24uX19pbml0X18oc2VsZiwgYnJv
a2VyLCBNQU5BR0VSX1RPUElDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEFOWV9XT1JLRVJfVE9QSUMpCisgICAgICAgIHNlbGYuX2Jyb2tlciA9IGJy
b2tlcgorICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucworICAgICAgICBzZWxmLl9tYW5h
Z2VyID0gbWFuYWdlcgorICAgICAgICBzZWxmLl93b3JrZXJfY29ubmVjdGlvbl9jbGFzcyA9IE5v
bmUKKyAgICAgICAgc2VsZi5fd29ya2VyX2NsYXNzID0gd29ya2VyX2NsYXNzCisKKyAgICBkZWYg
X21ha2Vfd29ya2VyX2Nvbm5lY3Rpb24oc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVu
dGVkRXJyb3IKKworICAgIGRlZiBfbWFrZV93b3JrZXIoc2VsZiwgd29ya2VyX2Nvbm5lY3Rpb24s
IHdvcmtlcl9udW1iZXIsICoqa3dhcmdzKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3dvcmtlcl9j
bGFzcyh3b3JrZXJfY29ubmVjdGlvbiwgd29ya2VyX251bWJlciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZWxmLl9vcHRpb25zLCAqKmt3YXJncykKKworICAgIGRlZiBjbGll
bnQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9tYW5hZ2VyCisKKyAgICBkZWYgc3RhcnRf
d29ya2VyKHNlbGYsIHdvcmtlcl9udW1iZXIsICoqa3dhcmdzKToKKyAgICAgICAgd29ya2VyX2Nv
bm5lY3Rpb24gPSBzZWxmLl9tYWtlX3dvcmtlcl9jb25uZWN0aW9uKCkKKyAgICAgICAgd29ya2Vy
ID0gc2VsZi5fbWFrZV93b3JrZXIod29ya2VyX2Nvbm5lY3Rpb24sIHdvcmtlcl9udW1iZXIsICoq
a3dhcmdzKQorICAgICAgICB3b3JrZXJfY29ubmVjdGlvbi5zZXRfd29ya2VyKHdvcmtlcikKKyAg
ICAgICAgd29ya2VyX2Nvbm5lY3Rpb24uc3RhcnQoKQorICAgICAgICByZXR1cm4gd29ya2VyX2Nv
bm5lY3Rpb24KKworCitjbGFzcyBfSW5saW5lTWFuYWdlcihfTWFuYWdlckNvbm5lY3Rpb24pOgor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXIsIHBvcnQsIG9wdGlvbnMsIG1hbmFnZXIsIHdv
cmtlcl9jbGFzcyk6CisgICAgICAgIF9NYW5hZ2VyQ29ubmVjdGlvbi5fX2luaXRfXyhzZWxmLCBi
cm9rZXIsIG9wdGlvbnMsIG1hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3b3JrZXJfY2xhc3MpCisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CisgICAgICAgIHNl
bGYuX2lubGluZV93b3JrZXIgPSBOb25lCisKKyAgICBkZWYgX21ha2Vfd29ya2VyX2Nvbm5lY3Rp
b24oc2VsZik6CisgICAgICAgIHNlbGYuX2lubGluZV93b3JrZXIgPSBfSW5saW5lV29ya2VyKHNl
bGYuX2Jyb2tlciwgc2VsZi5fcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZi5fbWFuYWdlcikKKyAgICAgICAgcmV0dXJuIHNlbGYuX2lubGluZV93
b3JrZXIKKworICAgIGRlZiBydW5fbWVzc2FnZV9sb29wKHNlbGYsIGRlbGF5X3NlY3M9Tm9uZSk6
CisgICAgICAgICMgTm90ZSB0aGF0IGRlbGF5X3NlY3MgaXMgaWdub3JlZCBpbiB0aGlzIGNhc2Ug
c2luY2Ugd2UgY2FuJ3QgZWFzaWx5CisgICAgICAgICMgaW1wbGVtZW50IGl0LgorICAgICAgICBz
ZWxmLl9pbmxpbmVfd29ya2VyLnJ1bigpCisgICAgICAgIHNlbGYuX2Jyb2tlci5ydW5fYWxsX3Bl
bmRpbmcoTUFOQUdFUl9UT1BJQywgc2VsZi5fbWFuYWdlcikKKworCitjbGFzcyBfVGhyZWFkZWRN
YW5hZ2VyKF9NYW5hZ2VyQ29ubmVjdGlvbik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb2tl
ciwgcG9ydCwgb3B0aW9ucywgbWFuYWdlciwgd29ya2VyX2NsYXNzKToKKyAgICAgICAgX01hbmFn
ZXJDb25uZWN0aW9uLl9faW5pdF9fKHNlbGYsIGJyb2tlciwgb3B0aW9ucywgbWFuYWdlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcl9jbGFzcykKKyAgICAgICAg
c2VsZi5fcG9ydCA9IHBvcnQKKworICAgIGRlZiBfbWFrZV93b3JrZXJfY29ubmVjdGlvbihzZWxm
KToKKyAgICAgICAgcmV0dXJuIF9UaHJlYWRlZFdvcmtlcihzZWxmLl9icm9rZXIsIHNlbGYuX3Bv
cnQpCisKKworY2xhc3MgX011bHRpUHJvY2Vzc01hbmFnZXIoX01hbmFnZXJDb25uZWN0aW9uKToK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCBwb3J0LCBvcHRpb25zLCBtYW5hZ2VyLCB3
b3JrZXJfY2xhc3MpOgorICAgICAgICBfTWFuYWdlckNvbm5lY3Rpb24uX19pbml0X18oc2VsZiwg
YnJva2VyLCBvcHRpb25zLCBtYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd29ya2VyX2NsYXNzKQorICAgICAgICBzZWxmLl9wbGF0Zm9ybV9uYW1lID0gcG9ydC5u
YW1lKCkKKworICAgIGRlZiBfbWFrZV93b3JrZXJfY29ubmVjdGlvbihzZWxmKToKKyAgICAgICAg
cmV0dXJuIF9NdWx0aVByb2Nlc3NXb3JrZXIoc2VsZi5fYnJva2VyLCBzZWxmLl9wbGF0Zm9ybV9u
YW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9vcHRpb25zKQor
CisKK2NsYXNzIF9Xb3JrZXJDb25uZWN0aW9uKG1lc3NhZ2VfYnJva2VyMi5Ccm9rZXJDb25uZWN0
aW9uKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyKToKKyAgICAgICAgbWVzc2FnZV9i
cm9rZXIyLkJyb2tlckNvbm5lY3Rpb24uX19pbml0X18oc2VsZiwgYnJva2VyLCBBTllfV09SS0VS
X1RPUElDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE1BTkFHRVJfVE9QSUMpCisgICAgICAgIHNlbGYuX3dvcmtlciA9IE5vbmUKKworICAgIGRlZiBz
ZXRfd29ya2VyKHNlbGYsIHdvcmtlcik6CisgICAgICAgIHNlbGYuX3dvcmtlciA9IHdvcmtlcgor
ICAgICAgICBzZWxmLm5hbWUgPSB3b3JrZXIubmFtZSgpCisKKyAgICBkZWYgY2xpZW50KHNlbGYp
OgorICAgICAgICByZXR1cm4gc2VsZi5fd29ya2VyCisKKyAgICBkZWYgc3RhcnQoc2VsZik6Cisg
ICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBydW4oc2VsZik6Cisg
ICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiB5aWVsZF90b19icm9r
ZXIoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBjYW5jZWwoc2VsZik6CisgICAgICAg
IHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBpc19hbGl2ZShzZWxmKToKKyAg
ICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGpvaW4oc2VsZiwgdGlt
ZW91dCk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBsb2df
d2VkZ2VkX3dvcmtlcihzZWxmLCB0ZXN0X25hbWUpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1l
bnRlZEVycm9yCisKKworY2xhc3MgX0lubGluZVdvcmtlcihfV29ya2VyQ29ubmVjdGlvbik6Cisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb2tlciwgcG9ydCwgbWFuYWdlcik6CisgICAgICAgIF9X
b3JrZXJDb25uZWN0aW9uLl9faW5pdF9fKHNlbGYsIGJyb2tlcikKKyAgICAgICAgc2VsZi5fcG9y
dCA9IHBvcnQKKyAgICAgICAgc2VsZi5fbWFuYWdlciA9IG1hbmFnZXIKKyAgICAgICAgc2VsZi5f
YWxpdmUgPSBGYWxzZQorCisgICAgZGVmIHN0YXJ0KHNlbGYpOgorICAgICAgICBwYXNzCisKKyAg
ICBkZWYgcnVuKHNlbGYpOgorICAgICAgICBzZWxmLl9hbGl2ZSA9IFRydWUKKyAgICAgICAgc2Vs
Zi5fd29ya2VyLnJ1bihzZWxmLl9wb3J0KQorICAgICAgICBzZWxmLl9hbGl2ZSA9IEZhbHNlCisK
KyAgICBkZWYgeWllbGRfdG9fYnJva2VyKHNlbGYpOgorICAgICAgICBzZWxmLl9icm9rZXIucnVu
X2FsbF9wZW5kaW5nKE1BTkFHRVJfVE9QSUMsIHNlbGYuX21hbmFnZXIpCisKKyAgICBkZWYgY2Fu
Y2VsKHNlbGYpOgorICAgICAgICBzZWxmLl93b3JrZXIuY2FuY2VsKCkKKworICAgIGRlZiBpc19h
bGl2ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2FsaXZlCisKKyAgICBkZWYgam9pbihz
ZWxmLCB0aW1lb3V0KToKKyAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLmlzX2FsaXZlKCkKKworICAg
IGRlZiBsb2dfd2VkZ2VkX3dvcmtlcihzZWxmLCB0ZXN0X25hbWUpOgorICAgICAgICByYWlzZSBB
c3NlcnRpb25FcnJvcigiX0lubGluZVdvcmtlci5sb2dfd2VkZ2VkX3dvcmtlcigpIGNhbGxlZCIp
CisKKworY2xhc3MgX1RocmVhZGVkV29ya2VyKHRocmVhZGluZy5UaHJlYWQsIF9Xb3JrZXJDb25u
ZWN0aW9uKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCBwb3J0KToKKyAgICAgICAg
dGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyhzZWxmKQorICAgICAgICBfV29ya2VyQ29ubmVjdGlv
bi5fX2luaXRfXyhzZWxmLCBicm9rZXIpCisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CisKKyAg
ICBkZWYgcnVuKHNlbGYpOgorICAgICAgICAjIEZJWE1FOiBXZSBjYW4gcmVtb3ZlIHRoaXMgb25j
ZSBldmVyeW9uZSBpcyBvbiAyLjYuCisgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYsICdpZGVu
dCcpOgorICAgICAgICAgICAgc2VsZi5pZGVudCA9IHRocmVhZC5nZXRfaWRlbnQoKQorICAgICAg
ICBzZWxmLl93b3JrZXIucnVuKHNlbGYuX3BvcnQpCisKKyAgICBkZWYgY2FuY2VsKHNlbGYpOgor
ICAgICAgICBzZWxmLl93b3JrZXIuY2FuY2VsKCkKKworICAgIGRlZiBpc19hbGl2ZShzZWxmKToK
KyAgICAgICAgIyBGSVhNRTogV2UgY2FuIHJlbW92ZSB0aGlzIG9uY2UgZXZlcnlvbmUgaXMgb24g
Mi42LgorICAgICAgICBzZWxmLmlzQWxpdmUoKQorCisgICAgZGVmIGxvZ193ZWRnZWRfd29ya2Vy
KHNlbGYsIHRlc3RfbmFtZSk6CisgICAgICAgIHRpZCA9IHNlbGYuaWRlbnQKKyAgICAgICAgc3Rh
Y2sgPSBfZmluZF90aHJlYWRfc3RhY2sodGlkKQorICAgICAgICBhc3NlcnQoc3RhY2sgaXMgbm90
IE5vbmUpCisgICAgICAgIF9sb2cuZXJyb3IoIiVzICh0aWQgJWQpIGlzIHdlZGdlZCBvbiB0ZXN0
ICVzIiAlCisgICAgICAgICAgICAgICAgICAgKHNlbGYubmFtZSwgdGlkLCB0ZXN0X25hbWUpKQor
ICAgICAgICBfbG9nX3N0YWNrKHN0YWNrKQorCisKK2NsYXNzIF9NdWx0aVByb2Nlc3NXb3JrZXIo
X011bHRpcHJvY2Vzc2luZ19Qcm9jZXNzLCBfV29ya2VyQ29ubmVjdGlvbik6CisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIGJyb2tlciwgcGxhdGZvcm1fbmFtZSwgb3B0aW9ucyk6CisgICAgICAgIF9N
dWx0aXByb2Nlc3NpbmdfUHJvY2Vzcy5fX2luaXRfXyhzZWxmKQorICAgICAgICBfV29ya2VyQ29u
bmVjdGlvbi5fX2luaXRfXyhzZWxmLCBicm9rZXIpCisgICAgICAgIHNlbGYuX29wdGlvbnMgPSBv
cHRpb25zCisgICAgICAgIHNlbGYuX3BsYXRmb3JtX25hbWUgPSBwbGF0Zm9ybV9uYW1lCisKKyAg
ICBkZWYgcnVuKHNlbGYpOgorICAgICAgICAjIFJlLWNvbmZpZ3VyZSB0aGUgbG9nZ2VyLgorICAg
ICAgICAjIEZJWE1FOiBmaWd1cmUgb3V0IGhvdyB0byBnZXQgYSBoYW5kbGUgdG8gdGhlIHJpZ2h0
IHN0cmVhbS4KKyAgICAgICAgbG9nZ2luZy5iYXNpY0NvbmZpZygpCisgICAgICAgIHBvcnQgPSBs
YXlvdXRfdGVzdHMucG9ydC5nZXQoc2VsZi5fcGxhdGZvcm1fbmFtZSwgc2VsZi5fb3B0aW9ucykK
KyAgICAgICAgc2VsZi5fd29ya2VyLnJ1bihwb3J0KQorCisgICAgZGVmIGNhbmNlbChzZWxmKToK
KyAgICAgICAgc2VsZi50ZXJtaW5hdGUoKQorCisgICAgZGVmIGxvZ193ZWRnZWRfd29ya2VyKHNl
bGYsIHRlc3RfbmFtZSk6CisgICAgICAgIF9sb2cuZXJyb3IoIiVzIChwaWQgJWQpIGlzIHdlZGdl
ZCBvbiB0ZXN0ICVzIiAlCisgICAgICAgICAgICAgICAgICAgKHNlbGYubmFtZSwgc2VsZi5waWQs
IHRlc3RfbmFtZSkpCisKKworZGVmIF9maW5kX3RocmVhZF9zdGFjayh0aWQpOgorICAgICIiIlJl
dHVybnMgYSBzdGFjayBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byBkdW1wIGEgc3RhY2sgdHJh
Y2UgZm9yCisgICAgdGhlIGdpdmVuIHRocmVhZCBpZCAob3IgTm9uZSBpZiB0aGUgaWQgaXMgbm90
IGZvdW5kKS4iIiIKKyAgICBmb3IgdGhyZWFkX2lkLCBzdGFjayBpbiBzeXMuX2N1cnJlbnRfZnJh
bWVzKCkuaXRlbXMoKToKKyAgICAgICAgaWYgdGhyZWFkX2lkID09IHRpZDoKKyAgICAgICAgICAg
IHJldHVybiBzdGFjaworICAgIHJldHVybiBOb25lCisKKworZGVmIF9sb2dfc3RhY2soc3RhY2sp
OgorICAgICIiIkxvZyBhIHN0YWNrIHRyYWNlIHRvIGxvZy5lcnJvcigpLiIiIgorICAgIGZvciBm
aWxlbmFtZSwgbGluZW5vLCBuYW1lLCBsaW5lIGluIHRyYWNlYmFjay5leHRyYWN0X3N0YWNrKHN0
YWNrKToKKyAgICAgICAgX2xvZy5lcnJvcignRmlsZTogIiVzIiwgbGluZSAlZCwgaW4gJXMnICUg
KGZpbGVuYW1lLCBsaW5lbm8sIG5hbWUpKQorICAgICAgICBpZiBsaW5lOgorICAgICAgICAgICAg
X2xvZy5lcnJvcignICAlcycgJSBsaW5lLnN0cmlwKCkpCmRpZmYgLS1naXQgYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyX3dvcmtlcl9i
cm9rZXJfdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9s
YXlvdXRfcGFja2FnZS9tYW5hZ2VyX3dvcmtlcl9icm9rZXJfdW5pdHRlc3QucHkKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMGVmMWI0NTczZmZmNDg2YjIyMjM4YTdhYjc2NzNiN2Q1OTMzOGI2YgotLS0gL2Rldi9udWxs
CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdl
L21hbmFnZXJfd29ya2VyX2Jyb2tlcl91bml0dGVzdC5weQpAQCAtMCwwICsxLDMxMSBAQAorIyBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMg
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisj
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IFF1ZXVlCitpbXBvcnQgc3lz
CitpbXBvcnQgdW5pdHRlc3QKKwordHJ5OgorICAgIF9tdWx0aXByb2Nlc3NpbmdfaXNfYXZhaWxh
YmxlID0gVHJ1ZQorICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBRdWV1ZSBhcyBfTXVs
dGlwcm9jZXNzaW5nX1F1ZXVlCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgX211bHRpcHJvY2Vz
c2luZ19pc19hdmFpbGFibGUgPSBGYWxzZQorICAgIF9NdWx0aXByb2Nlc3NpbmdfUXVldWUgPSBR
dWV1ZS5RdWV1ZQorCisKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgb3V0cHV0
Y2FwdHVyZQorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMgaW1wb3J0IHBvcnQKKworaW1wb3J0
IG1lc3NhZ2VfYnJva2VyMgoraW1wb3J0IG1hbmFnZXJfd29ya2VyX2Jyb2tlcgoraW1wb3J0IHBy
aW50aW5nCisKKworY2xhc3MgVGVzdFdvcmtlcihtZXNzYWdlX2Jyb2tlcjIuQ2xpZW50SW50ZXJm
YWNlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCB3b3JrZXJfbnVtYmVyLCBvcHRp
b25zLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYuX2Jyb2tlciA9IGJyb2tlcgorICAgICAgICBz
ZWxmLl9vcHRpb25zID0gb3B0aW9ucworICAgICAgICBzZWxmLl93b3JrZXJfbnVtYmVyID0gd29y
a2VyX251bWJlcgorICAgICAgICBzZWxmLl9uYW1lID0gJ1Rlc3RXb3JrZXIvJWQnICUgd29ya2Vy
X251bWJlcgorICAgICAgICBzZWxmLl9jYW5jZWxlZCA9IEZhbHNlCisgICAgICAgIHNlbGYuX3N0
b3BwZWQgPSBGYWxzZQorICAgICAgICBzZWxmLl9zdGFydGluZ19xdWV1ZSA9IGt3YXJncy5nZXQo
J3N0YXJ0aW5nX3F1ZXVlJykKKyAgICAgICAgc2VsZi5fc3RvcHBpbmdfcXVldWUgPSBrd2FyZ3Mu
Z2V0KCdzdG9wcGluZ19xdWV1ZScpCisKKyAgICBkZWYgY2FuY2VsKHNlbGYpOgorICAgICAgICBz
ZWxmLl9jYW5jZWxlZCA9IFRydWUKKworICAgIGRlZiBoYW5kbGVfc3RvcChzZWxmLCBzcmMpOgor
ICAgICAgICBzZWxmLl9zdG9wcGVkID0gVHJ1ZQorCisgICAgZGVmIGhhbmRsZV90ZXN0KHNlbGYs
IHNyYywgYW5faW50LCBhX3N0cik6CisgICAgICAgIGFzc2VydCBhbl9pbnQgPT0gMQorICAgICAg
ICBhc3NlcnQgYV9zdHIgPT0gImhlbGxvLCB3b3JsZCIKKyAgICAgICAgc2VsZi5fYnJva2VyLnBv
c3RfbWVzc2FnZSgndGVzdCcsIDIsICdoaSwgZXZlcnlib2R5JykKKworICAgIGRlZiBpc19kb25l
KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fc3RvcHBlZCBvciBzZWxmLl9jYW5jZWxlZAor
CisgICAgZGVmIG5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9uYW1lCisKKyAgICBk
ZWYgc3RhcnQoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBydW4oc2VsZiwgcG9ydCk6
CisgICAgICAgIGlmIHNlbGYuX3N0YXJ0aW5nX3F1ZXVlOgorICAgICAgICAgICAgc2VsZi5fc3Rh
cnRpbmdfcXVldWUucHV0KCcnKQorICAgICAgICBpZiBzZWxmLl9zdG9wcGluZ19xdWV1ZToKKyAg
ICAgICAgICAgIHNlbGYuX3N0b3BwaW5nX3F1ZXVlLmdldCgpCisgICAgICAgIHRyeToKKyAgICAg
ICAgICAgIHNlbGYuX2Jyb2tlci5ydW5fbWVzc2FnZV9sb29wKCkKKyAgICAgICAgICAgIHNlbGYu
X2Jyb2tlci55aWVsZF90b19icm9rZXIoKQorICAgICAgICAgICAgc2VsZi5fYnJva2VyLnBvc3Rf
bWVzc2FnZSgnZG9uZScpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAg
ICBzZWxmLl9icm9rZXIucG9zdF9tZXNzYWdlKCdleGNlcHRpb24nLCAodHlwZShlKSwgc3RyKGUp
LCBOb25lKSkKKworCitkZWYgZ2V0X29wdGlvbnMod29ya2VyX21vZGVsKToKKyAgICBvcHRpb25f
bGlzdCA9IG1lc3NhZ2VfYnJva2VyMi5ydW50aW1lX29wdGlvbnMoKQorICAgIHBhcnNlciA9IG9w
dHBhcnNlLk9wdGlvblBhcnNlcihvcHRpb25fbGlzdD1vcHRpb25fbGlzdCkKKyAgICBvcHRpb25z
LCBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJncz1bJy0td29ya2VyLW1vZGVsJywgd29ya2Vy
X21vZGVsXSkKKyAgICByZXR1cm4gb3B0aW9ucworCisKK2RlZiBtYWtlX2Jyb2tlcihtYW5hZ2Vy
LCB3b3JrZXJfbW9kZWwpOgorICAgIG9wdGlvbnMgPSBnZXRfb3B0aW9ucyh3b3JrZXJfbW9kZWwp
CisgICAgcmV0dXJuIG1hbmFnZXJfd29ya2VyX2Jyb2tlci5nZXQocG9ydC5nZXQoInRlc3QiKSwg
b3B0aW9ucywgbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBU
ZXN0V29ya2VyKQorCisKK2NsYXNzIEZ1bmN0aW9uVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgor
ICAgIGRlZiB0ZXN0X2dldF9faW5saW5lKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUo
bWFrZV9icm9rZXIoc2VsZiwgJ2lubGluZScpIGlzIG5vdCBOb25lKQorCisgICAgZGVmIHRlc3Rf
Z2V0X190aHJlYWRzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUobWFrZV9icm9rZXIo
c2VsZiwgJ3RocmVhZHMnKSBpcyBub3QgTm9uZSkKKworICAgIGRlZiB0ZXN0X2dldF9fcHJvY2Vz
c2VzKHNlbGYpOgorICAgICAgICBpZiBfbXVsdGlwcm9jZXNzaW5nX2lzX2F2YWlsYWJsZToKKyAg
ICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYWtlX2Jyb2tlcihzZWxmLCAncHJvY2Vzc2VzJykg
aXMgbm90IE5vbmUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNl
cyhWYWx1ZUVycm9yLCBtYWtlX2Jyb2tlciwgc2VsZiwgJ3Byb2Nlc3NlcycpCisKKyAgICBkZWYg
dGVzdF9nZXRfX3Vua25vd24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVl
RXJyb3IsIG1ha2VfYnJva2VyLCBzZWxmLCAndW5rbm93bicpCisKKworY2xhc3MgX1Rlc3RzTWl4
aW4ob2JqZWN0KToKKyAgICAiIiJNaXhpbiBjbGFzcyB0aGF0IGltcGxlbWVudHMgYSBzZXJpZXMg
b2YgdGVzdHMgdG8gZW5mb3JjZSB0aGUKKyAgICBjb250cmFjdCBhbGwgaW1wbGVtZW50YXRpb25z
IG11c3QgZm9sbG93LiIiIgorCisgICAgIworICAgICMgTWV0aG9kcyB0byBpbXBsZW1lbnQgdGhl
IE1hbmFnZXIgc2lkZSBvZiB0aGUgQ2xpZW50SW50ZXJmYWNlCisgICAgIworICAgIGRlZiBuYW1l
KHNlbGYpOgorICAgICAgICByZXR1cm4gJ1Rlc3RlcicKKworICAgIGRlZiBpc19kb25lKHNlbGYp
OgorICAgICAgICByZXR1cm4gc2VsZi5fZG9uZQorCisgICAgIworICAgICMgSGFuZGxlcnMgZm9y
IHRoZSBtZXNzYWdlcyB0aGUgVGVzdFdvcmtlciBtYXkgc2VuZC4KKyAgICAjCisgICAgZGVmIGhh
bmRsZV9kb25lKHNlbGYsIHNyYyk6CisgICAgICAgIHNlbGYuX2RvbmUgPSBUcnVlCisKKyAgICBk
ZWYgaGFuZGxlX3Rlc3Qoc2VsZiwgc3JjLCBhbl9pbnQsIGFfc3RyKToKKyAgICAgICAgc2VsZi5f
YW5faW50ID0gYW5faW50CisgICAgICAgIHNlbGYuX2Ffc3RyID0gYV9zdHIKKworICAgIGRlZiBo
YW5kbGVfZXhjZXB0aW9uKHNlbGYsIHNyYywgZXhjX2luZm8pOgorICAgICAgICBzZWxmLl9leGNl
cHRpb24gPSBleGNfaW5mbworICAgICAgICBzZWxmLl9kb25lID0gVHJ1ZQorCisgICAgIworICAg
ICMgVGVzdGluZyBoZWxwZXIgbWV0aG9kcworICAgICMKKyAgICBkZWYgc2V0VXAoc2VsZik6Cisg
ICAgICAgIHNlbGYuX2FuX2ludCA9IE5vbmUKKyAgICAgICAgc2VsZi5fYV9zdHIgPSBOb25lCisg
ICAgICAgIHNlbGYuX2Jyb2tlciA9IE5vbmUKKyAgICAgICAgc2VsZi5fZG9uZSA9IEZhbHNlCisg
ICAgICAgIHNlbGYuX2V4Y2VwdGlvbiA9IE5vbmUKKyAgICAgICAgc2VsZi5fd29ya2VyX21vZGVs
ID0gTm9uZQorCisgICAgZGVmIG1ha2VfYnJva2VyKHNlbGYpOgorICAgICAgICBzZWxmLl9icm9r
ZXIgPSBtYWtlX2Jyb2tlcihzZWxmLCBzZWxmLl93b3JrZXJfbW9kZWwpCisKKyAgICAjCisgICAg
IyBBY3R1YWwgdW5pdCB0ZXN0cworICAgICMKKyAgICBkZWYgdGVzdF9jYW5jZWwoc2VsZik6Cisg
ICAgICAgIGlmIG5vdCBzZWxmLl93b3JrZXJfbW9kZWw6CisgICAgICAgICAgICByZXR1cm4KKyAg
ICAgICAgc2VsZi5tYWtlX2Jyb2tlcigpCisgICAgICAgIHdvcmtlciA9IHNlbGYuX2Jyb2tlci5z
dGFydF93b3JrZXIoMCkKKyAgICAgICAgd29ya2VyLmNhbmNlbCgpCisgICAgICAgIHNlbGYuX2Jy
b2tlci5wb3N0X21lc3NhZ2UoJ3Rlc3QnLCAxLCAnaGVsbG8sIHdvcmxkJykKKyAgICAgICAgd29y
a2VyLmpvaW4oMC41KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHdvcmtlci5pc19hbGl2ZSgp
KQorCisgICAgZGVmIHRlc3RfZG9uZShzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuX3dvcmtl
cl9tb2RlbDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLm1ha2VfYnJva2VyKCkK
KyAgICAgICAgd29ya2VyID0gc2VsZi5fYnJva2VyLnN0YXJ0X3dvcmtlcigwKQorICAgICAgICBz
ZWxmLl9icm9rZXIucG9zdF9tZXNzYWdlKCd0ZXN0JywgMSwgJ2hlbGxvLCB3b3JsZCcpCisgICAg
ICAgIHNlbGYuX2Jyb2tlci5wb3N0X21lc3NhZ2UoJ3N0b3AnKQorICAgICAgICBzZWxmLl9icm9r
ZXIucnVuX21lc3NhZ2VfbG9vcCgpCisgICAgICAgIHdvcmtlci5qb2luKDAuNSkKKyAgICAgICAg
c2VsZi5hc3NlcnRGYWxzZSh3b3JrZXIuaXNfYWxpdmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRU
cnVlKHNlbGYuaXNfZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2FuX2lu
dCwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9hX3N0ciwgJ2hpLCBldmVyeWJv
ZHknKQorCisgICAgZGVmIHRlc3RfbG9nX3dlZGdlZF93b3JrZXIoc2VsZik6CisgICAgICAgIGlm
IG5vdCBzZWxmLl93b3JrZXJfbW9kZWw6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc3Rh
cnRpbmdfcXVldWUgPSBzZWxmLnF1ZXVlKCkKKyAgICAgICAgc3RvcHBpbmdfcXVldWUgPSBzZWxm
LnF1ZXVlKCkKKyAgICAgICAgc2VsZi5tYWtlX2Jyb2tlcigpCisgICAgICAgIG9jID0gb3V0cHV0
Y2FwdHVyZS5PdXRwdXRDYXB0dXJlKCkKKyAgICAgICAgb2MuY2FwdHVyZV9vdXRwdXQoKQorICAg
ICAgICB3b3JrZXIgPSBzZWxmLl9icm9rZXIuc3RhcnRfd29ya2VyKDAsCisgICAgICAgICAgICBz
dGFydGluZ19xdWV1ZT1zdGFydGluZ19xdWV1ZSwgc3RvcHBpbmdfcXVldWU9c3RvcHBpbmdfcXVl
dWUpCisgICAgICAgIHN0YXJ0aW5nX3F1ZXVlLmdldCgpCisgICAgICAgIHdvcmtlci5sb2dfd2Vk
Z2VkX3dvcmtlcigndGVzdF9uYW1lJykKKyAgICAgICAgc3RvcHBpbmdfcXVldWUucHV0KCcnKQor
ICAgICAgICBzZWxmLl9icm9rZXIucG9zdF9tZXNzYWdlKCdzdG9wJykKKyAgICAgICAgc2VsZi5f
YnJva2VyLnJ1bl9tZXNzYWdlX2xvb3AoKQorICAgICAgICB3b3JrZXIuam9pbigwLjUpCisgICAg
ICAgIG9jLnJlc3RvcmVfb3V0cHV0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh3b3JrZXIu
aXNfYWxpdmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuaXNfZG9uZSgpKQorCisg
ICAgZGVmIHRlc3RfdW5rbm93bl9tZXNzYWdlKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5f
d29ya2VyX21vZGVsOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYubWFrZV9icm9r
ZXIoKQorICAgICAgICB3b3JrZXIgPSBzZWxmLl9icm9rZXIuc3RhcnRfd29ya2VyKDApCisgICAg
ICAgIHNlbGYuX2Jyb2tlci5wb3N0X21lc3NhZ2UoJ3Vua25vd24nKQorICAgICAgICBzZWxmLl9i
cm9rZXIucnVuX21lc3NhZ2VfbG9vcCgpCisgICAgICAgIHdvcmtlci5qb2luKDAuNSkKKworICAg
ICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5pc19kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0
RmFsc2Uod29ya2VyLmlzX2FsaXZlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYu
X2V4Y2VwdGlvblswXSwgVmFsdWVFcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2Vs
Zi5fZXhjZXB0aW9uWzFdLAorICAgICAgICAgICAgIlRlc3RXb3JrZXIvMDogcmVjZWl2ZWQgbWVz
c2FnZSAndW5rbm93bicgaXQgY291bGRuJ3QgaGFuZGxlIikKKworCitjbGFzcyBJbmxpbmVCcm9r
ZXJUZXN0cyhfVGVzdHNNaXhpbiwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChz
ZWxmKToKKyAgICAgICAgX1Rlc3RzTWl4aW4uc2V0VXAoc2VsZikKKyAgICAgICAgc2VsZi5fd29y
a2VyX21vZGVsID0gJ2lubGluZScKKworICAgIGRlZiB0ZXN0X2xvZ193ZWRnZWRfd29ya2VyKHNl
bGYpOgorICAgICAgICBzZWxmLm1ha2VfYnJva2VyKCkKKyAgICAgICAgd29ya2VyID0gc2VsZi5f
YnJva2VyLnN0YXJ0X3dvcmtlcigwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRp
b25FcnJvciwgd29ya2VyLmxvZ193ZWRnZWRfd29ya2VyLCBOb25lKQorCisKK2NsYXNzIE11bHRp
UHJvY2Vzc0Jyb2tlclRlc3RzKF9UZXN0c01peGluLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAg
ZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBfVGVzdHNNaXhpbi5zZXRVcChzZWxmKQorICAgICAg
ICBpZiBfbXVsdGlwcm9jZXNzaW5nX2lzX2F2YWlsYWJsZToKKyAgICAgICAgICAgIHNlbGYuX3dv
cmtlcl9tb2RlbCA9ICdwcm9jZXNzZXMnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxm
Ll93b3JrZXJfbW9kZWwgPSBOb25lCisKKyAgICBkZWYgcXVldWUoc2VsZik6CisgICAgICAgIHJl
dHVybiBfTXVsdGlwcm9jZXNzaW5nX1F1ZXVlKCkKKworCitjbGFzcyBUaHJlYWRlZEJyb2tlclRl
c3RzKF9UZXN0c01peGluLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHF1ZXVlKHNlbGYp
OgorICAgICAgICByZXR1cm4gUXVldWUuUXVldWUoKQorCisgICAgZGVmIHNldFVwKHNlbGYpOgor
ICAgICAgICBfVGVzdHNNaXhpbi5zZXRVcChzZWxmKQorICAgICAgICBzZWxmLl93b3JrZXJfbW9k
ZWwgPSAndGhyZWFkcycKKworCitjbGFzcyBGdW5jdGlvbnNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNl
KToKKyAgICBkZWYgdGVzdF9maW5kX3RocmVhZF9zdGFja19mb3VuZChzZWxmKToKKyAgICAgICAg
aWQsIHN0YWNrID0gc3lzLl9jdXJyZW50X2ZyYW1lcygpLml0ZW1zKClbMF0KKyAgICAgICAgZm91
bmRfc3RhY2sgPSBtYW5hZ2VyX3dvcmtlcl9icm9rZXIuX2ZpbmRfdGhyZWFkX3N0YWNrKGlkKQor
ICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGZvdW5kX3N0YWNrLCBOb25lKQorCisgICAgZGVm
IHRlc3RfZmluZF90aHJlYWRfc3RhY2tfbm90X2ZvdW5kKHNlbGYpOgorICAgICAgICBmb3VuZF9z
dGFjayA9IG1hbmFnZXJfd29ya2VyX2Jyb2tlci5fZmluZF90aHJlYWRfc3RhY2soMCkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChmb3VuZF9zdGFjaywgTm9uZSkKKworICAgIGRlZiB0ZXN0X2xv
Z19zdGFjayhzZWxmKToKKyAgICAgICAgaWQsIHN0YWNrID0gc3lzLl9jdXJyZW50X2ZyYW1lcygp
Lml0ZW1zKClbMF0KKyAgICAgICAgb2MgPSBvdXRwdXRjYXB0dXJlLk91dHB1dENhcHR1cmUoKQor
ICAgICAgICAjIEZJWE1FOiB2ZXJpZnkgb3V0cHV0PworICAgICAgICBvYy5jYXB0dXJlX291dHB1
dCgpCisgICAgICAgIG1hbmFnZXJfd29ya2VyX2Jyb2tlci5fbG9nX3N0YWNrKHN0YWNrKQorICAg
ICAgICBvYy5yZXN0b3JlX291dHB1dCgpCisKKyAgICBkZWYgdGVzdF9ydW50aW1lX29wdGlvbnMo
c2VsZik6CisgICAgICAgIG9wdGlvbl9saXN0ID0gbWFuYWdlcl93b3JrZXJfYnJva2VyLnJ1bnRp
bWVfb3B0aW9ucygpCisgICAgICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcihvcHRp
b25fbGlzdD1vcHRpb25fbGlzdCkKKyAgICAgICAgb3B0aW9ucywgYXJncyA9IHBhcnNlci5wYXJz
ZV9hcmdzKFtdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3B0aW9ucykKKworCitjbGFzcyBJ
bnRlcmZhY2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFRoZXNlIHRlc3RzIG1vc3Rs
eSBleGlzdCB0byBwYWNpZnkgY292ZXJhZ2UuCisKKyAgICAjIEZJWE1FOiBUaGVyZSBtdXN0IGJl
IGEgYmV0dGVyIHdheSB0byBkbyB0aGlzIGFuZCBhbHNvIHZlcmlmeQorICAgICMgdGhhdCBjbGFz
c2VzIGRvIGltcGxlbWVudCBldmVyeSBhYnN0cmFjdCBtZXRob2QgaW4gYW4gaW50ZXJmYWNlLgor
ICAgIGRlZiB0ZXN0X21hbmFnZXJjb25uZWN0aW9uX2lzX2Fic3RyYWN0KHNlbGYpOgorICAgICAg
ICAjIFRlc3QgdGhhdCBhbGwgdGhlIGJhc2UgY2xhc3MgbWV0aG9kcyBhcmUgYWJzdHJhY3QgYW5k
IGhhdmUgdGhlCisgICAgICAgICMgc2lnbmF0dXJlIHdlIGV4cGVjdC4KKyAgICAgICAgYnJva2Vy
ID0gbWFrZV9icm9rZXIoc2VsZiwgJ2lubGluZScpCisgICAgICAgIG9iaiA9IG1hbmFnZXJfd29y
a2VyX2Jyb2tlci5fTWFuYWdlckNvbm5lY3Rpb24oYnJva2VyLl9icm9rZXIsIE5vbmUsIHNlbGYs
IE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIG9i
ai5fbWFrZV93b3JrZXJfY29ubmVjdGlvbikKKworICAgIGRlZiB0ZXN0X3dvcmtlcmNvbm5lY3Rp
b25faXNfYWJzdHJhY3Qoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGFsbCB0aGUgYmFzZSBj
bGFzcyBtZXRob2RzIGFyZSBhYnN0cmFjdCBhbmQgaGF2ZSB0aGUKKyAgICAgICAgIyBzaWduYXR1
cmUgd2UgZXhwZWN0LgorICAgICAgICBicm9rZXIgPSBtYWtlX2Jyb2tlcihzZWxmLCAnaW5saW5l
JykKKyAgICAgICAgb2JqID0gbWFuYWdlcl93b3JrZXJfYnJva2VyLl9Xb3JrZXJDb25uZWN0aW9u
KGJyb2tlci5fYnJva2VyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRl
ZEVycm9yLCBvYmouc3RhcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVu
dGVkRXJyb3IsIG9iai5ydW4pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVu
dGVkRXJyb3IsIG9iai5jYW5jZWwpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxl
bWVudGVkRXJyb3IsIG9iai5pc19hbGl2ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90
SW1wbGVtZW50ZWRFcnJvciwgb2JqLmpvaW4sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFp
c2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIG9iai5sb2dfd2VkZ2VkX3dvcmtlciwgTm9uZSkKKwor
CitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uv
bWVzc2FnZV9icm9rZXIyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bGF5b3V0X3BhY2thZ2UvbWVzc2FnZV9icm9rZXIyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI0NmY1MGU2ZjY3
OGQ1YTlhMGNhZWFiMmI4MmJjZDZhZjhlNDM2N2MKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tl
cjIucHkKQEAgLTAsMCArMSwyMDQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisj
IG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJNb2R1bGUgZm9y
IGhhbmRsaW5nIG1lc3NhZ2VzIGFuZCBjb25jdXJyZW5jeSBmb3IgcnVuLXdlYmtpdC10ZXN0cy4K
KworVGVzdGluZyBpcyBhY2NvbXBsaXNoZWQgYnkgaGF2aW5nIGEgbWFuYWdlciAoVGVzdFJ1bm5l
cikgZ2F0aGVyIGFsbCBvZiB0aGUKK3Rlc3RzIHRvIGJlIHJ1biwgYW5kIHNlbmRpbmcgbWVzc2Fn
ZXMgdG8gYSBwb29sIG9mIHdvcmtlcnMgKFRlc3RTaGVsbFRocmVhZHMpCit0byBydW4gZWFjaCB0
ZXN0LiBFYWNoIHdvcmtlciBjb21tdW5pY2F0ZXMgd2l0aCBvbmUgZHJpdmVyICh1c3VhbGx5CitE
dW1wUmVuZGVyVHJlZSkgdG8gcnVuIG9uZSB0ZXN0IGF0IGEgdGltZSBhbmQgdGhlbiBjb21wYXJl
IHRoZSBvdXRwdXQgYWdhaW5zdAord2hhdCB3ZSBleHBlY3RlZCB0byBnZXQuCisKK1RoaXMgbW9k
dWxlcyBpbXBsZW1lbnRzIGEgbWVzc2FnZSBicm9rZXIgdGhhdCBjb25uZWN0cyB0aGUgbWFuYWdl
ciB0byB0aGUKK3dvcmtlcnM6IGl0IHByb3ZpZGVzIGEgbWVzc2FnaW5nIGFic3RyYWN0aW9uIGFu
ZCBtZXNzYWdlIGxvb3BzLCBhbmQKK2hhbmRsZXMgbGF1bmNoaW5nIHRocmVhZHMgYW5kL29yIHBy
b2Nlc3NlcyBkZXBlbmRpbmcgb24gdGhlIHJlcXVlc3RlZAorY29uZmlndXJhdGlvbi4KKworQm90
aCBNYW5hZ2VycyBhbmQgV29ya2VycyBhcmUgcmVxdWlyZWQgdG8gaW1wbGVtZW50IHRoZSBtZXRo
b2RzIGluIHRoZQorQnJva2VyQ2xpZW50IGludGVyZmFjZSAvIGFic3RyYWN0IGJhc2UgY2xhc3Mg
aW4gb3JkZXIgdG8gdGhlIG1lc3NhZ2UKK2Jyb2tlciB0byBwcm9wZXJseSBjb21tdW5pY2F0ZSB3
aXRoIHRoZW0uCisKK0V2ZXJ5dGhpbmcgc3RhcnRzIGJ5IGNhbGxpbmcgZ2V0KCkgdG8gb2J0YWlu
IGFuIGluaXRpYWwgcmVmZXJlbmNlIHRvIGEgYnJva2VyLgorVGhlIGJyb2tlciBpcyBtZWRpYXRl
ZCBieSBhIENvbm5lY3Rpb24gb2JqZWN0IHRoYXQgcHJvdmlkZXMgc29tZSBzeW50YWN0aWMKK3N1
Z2FyIHRvIHJlcHJlc2VudCB0aGUgTWFuYWdlciBhbmQgV29ya2VyIGVuZHBvaW50cy4gVHlwaWNh
bGx5IHRoZQorbWFuYWdlciB0aGVuIGNhbGxzIHN0YXJ0X3dvcmtlcigpIHJlcGVhdGVkbHkgdG8g
bGF1bmNoIHdvcmtlcnMgKHdoaWNoIGFyZQordXN1YWxseSBydW4gaW4gc2VwYXJhdGUgdGhyZWFk
cyBvciBwcm9jZXNzZXMgYXMgY29udHJvbGxlZCBieSB0aGUKKy0td29ya2VyLW1vZGVsIHJ1bnRp
bWUgZmxhZyksIG9wdGlvbmFsbHkgc2V0cyB1cCBzb21lIHRpbWVycywgYW5kIHRoZW4KK2ludm9r
ZXMgcnVuX21lc3NhZ2VfbG9vcCgpLgorIiIiCisKK2ltcG9ydCBjUGlja2xlCitpbXBvcnQgbG9n
Z2luZworaW1wb3J0IG9wdHBhcnNlCitpbXBvcnQgUXVldWUKK2ltcG9ydCB0aW1lCisKKworX2xv
ZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCisKK2NsYXNzIENsaWVudEludGVyZmFj
ZShvYmplY3QpOgorICAgICIiIkFic3RyYWN0IGJhc2UgY2xhc3MgLyBpbnRlcmZhY2UgdGhhdCBh
bGwgbWVzc2FnZSBicm9rZXIgY2xpZW50cyBtdXN0CisgICAgaW1wbGVtZW50LiBJbiBhZGRpdGlv
biB0byB0aGUgbWV0aG9kcyBiZWxvdywgYnkgY29udmVudGlvbiBjbGllbnRzCisgICAgaW1wbGVt
ZW50IHJvdXRpbmVzIG9mIHRoZSBzaWduYXR1cmUgdHlwZQorCisgICAgICAgIGhhbmRsZV9NRVNT
QUdFX05BTUUoc2VsZiwgc3JjLCAuLi4pOgorCisgICAgd2hlcmUgTUVTU0FHRV9OQU1FIG1hdGNo
ZXMgdGhlIHN0cmluZyBwYXNzZWQgdG8gcG9zdF9tZXNzYWdlKCksIGFuZAorICAgIHNyYyBpbmRp
Y2F0ZXMgdGhlIG5hbWUgb2YgdGhlIHNlbmRlci4gSWYgdGhlIG1lc3NhZ2UgY29udGFpbnMgdmFs
dWVzIGluCisgICAgdGhlIG1lc3NhZ2UgYm9keSwgdGhvc2Ugd2lsbCBiZSBwcm92aWRlZCBhcyBv
cHRwYXJhbXMuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyX2Nvbm5lY3Rpb24s
IHdvcmtlcl9udW1iZXIsIG9wdGlvbnMsICoqa3dhcmdzKToKKyAgICAgICAgcmFpc2UgTm90SW1w
bGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGNhbmNlbChzZWxmKToKKyAgICAgICAgIiIiQ2FsbGVk
IChpZiBwb3NzaWJsZSkgdG8gbm90aWZ5IHRoZSB3b3JrZXIgdGhhdCBpdCBoYXMgYmVlbiBhYm9y
dGVkLgorCisgICAgICAgIE9ubHkgd29ya2VycyBuZWVkIGltcGxlbWVudCB0aGlzIG1ldGhvZC4g
V29ya2VycyBjYW5ub3QgcmVseSBvbiB0aGlzCisgICAgICAgIG1ldGhvZCBhbHdheXMgYmVpbmcg
Y2FsbGVkLiBGb3IgZXhhbXBsZSwgd29ya2VycyBydW5uaW5nIGluIHRoZWlyCisgICAgICAgIG93
biBwcm9jZXNzZXMgbWF5IGJlIGtpbGxlZCBkaXJlY3RseSBpbnN0ZWFkIG9mIGludm9raW5nIHRo
aXMgbWV0aG9kCisgICAgICAgIGFuZCB3YWl0aW5nIGZvciB0aGUgdGhlIHdvcmtlciB0byBleGl0
LiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgaXNfZG9u
ZShzZWxmKToKKyAgICAgICAgIiIiQ2FsbGVkIGZyb20gaW5zaWRlIHJ1bl9tZXNzYWdlX2xvb3Ao
KSB0byBpbmRpY2F0ZSB3aGV0aGVyIHRvIGV4aXQuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxl
bWVudGVkRXJyb3IKKworICAgIGRlZiBuYW1lKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gYSBu
YW1lIHRoYXQgaWRlbnRpZmllcyB0aGUgd29ya2VyIG9yIG1hbmFnZXIuIiIiCisgICAgICAgIHJh
aXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBydW4oc2VsZiwgcG9ydCk6CisgICAg
ICAgICIiIk9ubHkgd29ya2VycyBuZWVkIGltcGxlbWVudCB0aGlzIG1ldGhvZC4iIiIKKyAgICAg
ICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisKK2RlZiBydW50aW1lX29wdGlvbnMoKToK
KyAgICAiIiJSZXR1cm4gYSBsaXN0IG9mIG9wdHBhcnNlLk9wdGlvbiBvYmplY3RzIGZvciBhbnkg
cnVudGltZSB2YWx1ZXMgdXNlZAorICAgIGJ5IHRoaXMgbWV0aG9kLiIiIgorICAgIG9wdGlvbnMg
PSBbCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXdvcmtlci1tb2RlbCIsIGFjdGlv
bj0ic3RvcmUiLAorICAgICAgICAgICAgaGVscD0oImNvbnRyb2xzIHdvcmtlciBtb2RlbC4gVmFs
aWQgdmFsdWVzIGFyZSAiCisgICAgICAgICAgICAiJ2lubGluZScsICd0aHJlYWRzJywgYW5kICdw
cm9jZXNzZXMnLiIpKSwKKyAgICBdCisgICAgcmV0dXJuIG9wdGlvbnMKKworCitjbGFzcyBCcm9r
ZXIob2JqZWN0KToKKyAgICAiIiJUaGlzIGNsYXNzIGltcGxlbWVudHMgYSBnZW5lcmljIG1lc3Nh
Z2UgYnJva2VyLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9wdGlvbnMsIHF1ZXVlX21h
a2VyKToKKyAgICAgICAgIiIiUmV0dXJuIGEgbWVzc2FnZSBicm9rZXIgZm9yIG1hbmFnZXIvd29y
a2VyIGNvbW11bmljYXRpb24uCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIG9wdGlvbnM6
IGEgcnVudGltZSBvcHRpb24gY2xhc3MgZnJvbSBvcHRwYXJzZQorICAgICAgICAiIiIKKyAgICAg
ICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKKyAgICAgICAgc2VsZi5fcXVldWVfbWFrZXIgPSBx
dWV1ZV9tYWtlcgorICAgICAgICBzZWxmLl90b3BpY3MgPSB7fQorCisgICAgZGVmIGFkZF90b3Bp
YyhzZWxmLCB0b3BpY19uYW1lKToKKyAgICAgICAgaWYgdG9waWNfbmFtZSBub3QgaW4gc2VsZi5f
dG9waWNzOgorICAgICAgICAgICAgc2VsZi5fdG9waWNzW3RvcGljX25hbWVdID0gc2VsZi5fcXVl
dWVfbWFrZXIoKQorCisgICAgZGVmIF9maW5kX3RvcGljKHNlbGYsIHRvcGljX25hbWUpOgorICAg
ICAgICByZXR1cm4gc2VsZi5fdG9waWNzW3RvcGljX25hbWVdCisKKyAgICBkZWYgcG9zdF9tZXNz
YWdlKHNlbGYsIGNsaWVudCwgdG9waWNfbmFtZSwgbWVzc2FnZV9uYW1lLCAqb3B0YXJncyk6Cisg
ICAgICAgICIiIlBvc3QgYSBtZXNzYWdlIHRvIHRoZSBhcHByb3ByaWF0ZSB0b3BpYyBxdWV1ZS4i
IiIKKyAgICAgICAgbWVzc2FnZSA9IF9NZXNzYWdlKGNsaWVudC5uYW1lKCksIHRvcGljX25hbWUs
IG1lc3NhZ2VfbmFtZSwgb3B0YXJncykKKyAgICAgICAgdG9waWMgPSBzZWxmLl9maW5kX3RvcGlj
KHRvcGljX25hbWUpCisgICAgICAgIHRvcGljLnB1dChfTWVzc2FnZS5kdW1wcyhtZXNzYWdlKSkK
KworICAgIGRlZiBydW5fbWVzc2FnZV9sb29wKHNlbGYsIHRvcGljX25hbWUsIGNsaWVudCwgZGVs
YXlfc2Vjcz1Ob25lKToKKyAgICAgICAgIiIiTG9vcCBwcm9jZXNzaW5nIG1lc3NhZ2VzIHVudGls
IGNsaWVudC5pc19kb25lKCkgb3IgZGVsYXkgcGFzc2VzLiIiIgorICAgICAgICBhc3NlcnQgZGVs
YXlfc2VjcyBpcyBOb25lIG9yIGRlbGF5X3NlY3MgPiAwLCAicnVuX21lc3NhZ2VfbG9vcCgpOiBk
ZWxheSBtdXN0IGJlIE5vbmUgb3IgYSBwb3NpdGl2ZSBudW1iZXIiCisgICAgICAgIHNlbGYuX3J1
bl9sb29wKHRvcGljX25hbWUsIGNsaWVudCwgVHJ1ZSwgZGVsYXlfc2VjcykKKworICAgIGRlZiBy
dW5fYWxsX3BlbmRpbmcoc2VsZiwgdG9waWNfbmFtZSwgY2xpZW50KToKKyAgICAgICAgIiIiUHJv
Y2VzcyBtZXNzYWdlcyB1bnRpbCBjbGllbnQuaXNfZG9uZSgpIG9yIGNhbGxlciB3b3VsZCBibG9j
ay4iIiIKKyAgICAgICAgc2VsZi5fcnVuX2xvb3AodG9waWNfbmFtZSwgY2xpZW50LCBibG9jaz1G
YWxzZSwgZGVsYXlfc2Vjcz1Ob25lKQorCisgICAgZGVmIF9ydW5fbG9vcChzZWxmLCB0b3BpY19u
YW1lLCBjbGllbnQsIGJsb2NrLCBkZWxheV9zZWNzKToKKyAgICAgICAgdG9waWMgPSBzZWxmLl9m
aW5kX3RvcGljKHRvcGljX25hbWUpCisgICAgICAgIHdoaWxlIG5vdCBjbGllbnQuaXNfZG9uZSgp
OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHMgPSB0b3BpYy5nZXQoYmxvY2ss
IGRlbGF5X3NlY3MpCisgICAgICAgICAgICBleGNlcHQgUXVldWUuRW1wdHk6CisgICAgICAgICAg
ICAgICAgcmV0dXJuCisgICAgICAgICAgICBtc2cgPSBfTWVzc2FnZS5sb2FkcyhzKQorICAgICAg
ICAgICAgc2VsZi5fZGlzcGF0Y2hfbWVzc2FnZShtc2csIGNsaWVudCkKKworICAgIGRlZiBfZGlz
cGF0Y2hfbWVzc2FnZShzZWxmLCBtZXNzYWdlLCBjbGllbnQpOgorICAgICAgICBpZiBub3QgaGFz
YXR0cihjbGllbnQsICdoYW5kbGVfJyArIG1lc3NhZ2UubmFtZSk6CisgICAgICAgICAgICByYWlz
ZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAgIiVzOiByZWNlaXZlZCBtZXNzYWdlICclcycg
aXQgY291bGRuJ3QgaGFuZGxlIiAlCisgICAgICAgICAgICAgICAoY2xpZW50Lm5hbWUoKSwgbWVz
c2FnZS5uYW1lKSkKKyAgICAgICAgb3B0YXJncyA9IG1lc3NhZ2UuYm9keQorICAgICAgICBtZXNz
YWdlX2hhbmRsZXIgPSBnZXRhdHRyKGNsaWVudCwgJ2hhbmRsZV8nICsgbWVzc2FnZS5uYW1lKQor
ICAgICAgICBtZXNzYWdlX2hhbmRsZXIobWVzc2FnZS5zcmMsICpvcHRhcmdzKQorCisKK2NsYXNz
IF9NZXNzYWdlKG9iamVjdCk6CisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBsb2FkcyhzdHIp
OgorICAgICAgICBvYmogPSBjUGlja2xlLmxvYWRzKHN0cikKKyAgICAgICAgYXNzZXJ0KGlzaW5z
dGFuY2Uob2JqLCBfTWVzc2FnZSkpCisgICAgICAgIHJldHVybiBvYmoKKworICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBzcmMsIHRvcGljX25hbWUsIG1lc3NhZ2VfbmFtZSwgbWVzc2FnZV9ib2R5KToK
KyAgICAgICAgc2VsZi5zcmMgPSBzcmMKKyAgICAgICAgc2VsZi50b3BpY19uYW1lID0gdG9waWNf
bmFtZQorICAgICAgICBzZWxmLm5hbWUgPSBtZXNzYWdlX25hbWUKKyAgICAgICAgc2VsZi5ib2R5
ID0gbWVzc2FnZV9ib2R5CisKKyAgICBkZWYgZHVtcHMoc2VsZik6CisgICAgICAgIHJldHVybiBj
UGlja2xlLmR1bXBzKHNlbGYpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJl
dHVybiAoIl9NZXNzYWdlKGZyb209JyVzJywgdG9waWNfbmFtZT0nJXMnLCBtZXNzYWdlX25hbWU9
JyVzJykiICUKKyAgICAgICAgICAgICAgICAoc2VsZi5zcmMsIHNlbGYudG9waWNfbmFtZSwgc2Vs
Zi5uYW1lKSkKKworCitjbGFzcyBCcm9rZXJDb25uZWN0aW9uKG9iamVjdCk6CisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIGJyb2tlciwgcnVuX3RvcGljLCBwb3N0X3RvcGljKToKKyAgICAgICAgc2Vs
Zi5fYnJva2VyID0gYnJva2VyCisgICAgICAgIHNlbGYuX3Bvc3RfdG9waWMgPSBwb3N0X3RvcGlj
CisgICAgICAgIHNlbGYuX3J1bl90b3BpYyA9IHJ1bl90b3BpYworICAgICAgICBicm9rZXIuYWRk
X3RvcGljKHJ1bl90b3BpYykKKyAgICAgICAgYnJva2VyLmFkZF90b3BpYyhwb3N0X3RvcGljKQor
CisgICAgZGVmIGNsaWVudChzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJv
cgorCisgICAgZGVmIHJ1bl9tZXNzYWdlX2xvb3Aoc2VsZiwgZGVsYXlfc2Vjcz1Ob25lKToKKyAg
ICAgICAgc2VsZi5fYnJva2VyLnJ1bl9tZXNzYWdlX2xvb3Aoc2VsZi5fcnVuX3RvcGljLCBzZWxm
LmNsaWVudCgpLCBkZWxheV9zZWNzKQorCisgICAgZGVmIHBvc3RfbWVzc2FnZShzZWxmLCBtZXNz
YWdlX25hbWUsICptZXNzYWdlX2FyZ3MpOgorICAgICAgICBzZWxmLl9icm9rZXIucG9zdF9tZXNz
YWdlKHNlbGYuY2xpZW50KCksIHNlbGYuX3Bvc3RfdG9waWMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbWVzc2FnZV9uYW1lLCAqbWVzc2FnZV9hcmdzKQpkaWZmIC0tZ2l0IGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWVzc2Fn
ZV9icm9rZXIyX3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2UvbWVzc2FnZV9icm9rZXIyX3VuaXR0ZXN0LnB5Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmU5NmYwNWVjNWM5YTgxN2E0NjVjNjkwNWQ3OGRhNDhjN2MzZTU4YzMKLS0tIC9kZXYvbnVsbAor
KysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9t
ZXNzYWdlX2Jyb2tlcjJfdW5pdHRlc3QucHkKQEAgLTAsMCArMSwxMDIgQEAKKyMgQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbWVzc2Fn
ZV9icm9rZXIyCisKKworY2xhc3MgRnVuY3Rpb25zVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Cisg
ICAgZGVmIHRlc3RfcnVudGltZV9vcHRpb25zKHNlbGYpOgorICAgICAgICBvcHRpb25fbGlzdCA9
IG1lc3NhZ2VfYnJva2VyMi5ydW50aW1lX29wdGlvbnMoKQorICAgICAgICBwYXJzZXIgPSBvcHRw
YXJzZS5PcHRpb25QYXJzZXIob3B0aW9uX2xpc3Q9b3B0aW9uX2xpc3QpCisgICAgICAgIG9wdGlv
bnMsIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyhbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVl
KG9wdGlvbnMpCisKKworY2xhc3MgTWVzc2FnZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAg
IGRlZiB0ZXN0X19ub19ib2R5KHNlbGYpOgorICAgICAgICBtc2cgPSBtZXNzYWdlX2Jyb2tlcjIu
X01lc3NhZ2UoJ3NyYycsICd0b3BpY19uYW1lJywgJ21lc3NhZ2VfbmFtZScsIE5vbmUpCisgICAg
ICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXByKG1zZykpCisgICAgICAgIHMgPSBtc2cuZHVtcHMoKQor
ICAgICAgICBuZXdfbXNnID0gbWVzc2FnZV9icm9rZXIyLl9NZXNzYWdlLmxvYWRzKHMpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3X21zZy5uYW1lLCAnbWVzc2FnZV9uYW1lJykKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChuZXdfbXNnLmJvZHksIE5vbmUpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwobmV3X21zZy50b3BpY19uYW1lLCAndG9waWNfbmFtZScpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwobmV3X21zZy5zcmMsICdzcmMnKQorCisgICAgZGVmIHRlc3RfX2JvZHkoc2Vs
Zik6CisgICAgICAgIG1zZyA9IG1lc3NhZ2VfYnJva2VyMi5fTWVzc2FnZSgnc3JjJywgJ3RvcGlj
X25hbWUnLCAnbWVzc2FnZV9uYW1lJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKCdib2R5JywgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXByKG1zZykpCisg
ICAgICAgIHMgPSBtc2cuZHVtcHMoKQorICAgICAgICBuZXdfbXNnID0gbWVzc2FnZV9icm9rZXIy
Ll9NZXNzYWdlLmxvYWRzKHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3X21zZy5uYW1l
LCAnbWVzc2FnZV9uYW1lJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdfbXNnLmJvZHks
ICgnYm9keScsIDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld19tc2cudG9waWNfbmFt
ZSwgJ3RvcGljX25hbWUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld19tc2cuc3JjLCAn
c3JjJykKKworCitjbGFzcyBJbnRlcmZhY2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAj
IFRoZXNlIHRlc3RzIG1vc3RseSBleGlzdCB0byBwYWNpZnkgY292ZXJhZ2UuCisKKyAgICAjIEZJ
WE1FOiBUaGVyZSBtdXN0IGJlIGEgYmV0dGVyIHdheSB0byBkbyB0aGlzIGFuZCBhbHNvIHZlcmlm
eQorICAgICMgdGhhdCBjbGFzc2VzIGRvIGltcGxlbWVudCBldmVyeSBhYnN0cmFjdCBtZXRob2Qg
aW4gYW4gaW50ZXJmYWNlLgorCisgICAgZGVmIHRlc3RfY2xpZW50aW50ZXJmYWNlX2lzX2Fic3Ry
YWN0KHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCB3ZSBjYW4ndCBjcmVhdGUgYW4gaW5zdGFu
Y2UgZGlyZWN0bHkuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJy
b3IsIG1lc3NhZ2VfYnJva2VyMi5DbGllbnRJbnRlcmZhY2UsCisgICAgICAgICAgICBOb25lLCBO
b25lLCBOb25lKQorCisgICAgICAgIGNsYXNzIFRlc3RDbGllbnQobWVzc2FnZV9icm9rZXIyLkNs
aWVudEludGVyZmFjZSk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgKm9wdGFyZ3Mp
OgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAjIFRlc3QgdGhhdCBhbGwgdGhlIGJh
c2UgY2xhc3MgbWV0aG9kcyBhcmUgYWJzdHJhY3QgYW5kIGhhdmUgdGhlCisgICAgICAgICMgc2ln
bmF0dXJlIHdlIGV4cGVjdC4KKyAgICAgICAgb2JqID0gVGVzdENsaWVudCgpCisgICAgICAgIHNl
bGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIG9iai5jYW5jZWwpCisgICAgICAg
IHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIG9iai5pc19kb25lKQorICAg
ICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBvYmoubmFtZSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgb2JqLnJ1biwgTm9u
ZSkKKworICAgIGRlZiB0ZXN0X2Jyb2tlcmNvbm5lY3Rpb25faXNfYWJzdHJhY3Qoc2VsZik6Cisg
ICAgICAgIGNsYXNzIFRlc3RCcm9rZXJDb25uZWN0aW9uKG1lc3NhZ2VfYnJva2VyMi5Ccm9rZXJD
b25uZWN0aW9uKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqb3B0YXJncyk6Cisg
ICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICMgVGVzdCB0aGF0IGFsbCB0aGUgYmFzZSBj
bGFzcyBtZXRob2RzIGFyZSBhYnN0cmFjdCBhbmQgaGF2ZSB0aGUKKyAgICAgICAgIyBzaWduYXR1
cmUgd2UgZXhwZWN0LgorICAgICAgICBicm9rZXIgPSBtZXNzYWdlX2Jyb2tlcjIuQnJva2VyKE5v
bmUsIE5vbmUpCisgICAgICAgIG9iaiA9IFRlc3RCcm9rZXJDb25uZWN0aW9uKGJyb2tlciwgImZv
byIsICJiYXIiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9y
LCBvYmouY2xpZW50KQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRl
c3QubWFpbigpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS90ZXN0X3J1bm5lcjIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X3J1bm5lcjIucHkKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
N2IwYmE2NzYwZmI2Y2FjZWZiNmMzOTM3NTAzMTU2M2RhOGRmNmUyZAotLS0gL2Rldi9udWxsCisr
KyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rl
c3RfcnVubmVyMi5weQpAQCAtMCwwICsxLDIxOCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisj
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIwor
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgor
IyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKworIiIiCitUaGUgVGVzdFJ1bm5lciBjbGFzcyBydW5zIGEgc2VyaWVz
IG9mIHRlc3RzIChUZXN0VHlwZSBpbnRlcmZhY2UpIGFnYWluc3QgYSBzZXQKK29mIHRlc3QgZmls
ZXMuICBJZiBhIHRlc3QgZmlsZSBmYWlscyBhIFRlc3RUeXBlLCBpdCByZXR1cm5zIGEgbGlzdCBU
ZXN0RmFpbHVyZQorb2JqZWN0cyB0byB0aGUgVGVzdFJ1bm5lci4gIFRoZSBUZXN0UnVubmVyIHRo
ZW4gYWdncmVnYXRlcyB0aGUgVGVzdEZhaWx1cmVzIHRvCitjcmVhdGUgYSBmaW5hbCByZXBvcnQu
CisiIiIKKworaW1wb3J0IHRpbWUKKworZnJvbSB3ZWJraXRweS50b29sIGltcG9ydCBncmFtbWFy
CisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgbWFuYWdlcl93b3JrZXJfYnJva2VyCitpbXBvcnQg
dGVzdF9ydW5uZXIKK2ltcG9ydCB3b3JrZXIKKworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9f
bmFtZV9fKQorCisKK2NsYXNzIF9Xb3JrZXJTdGF0ZShvYmplY3QpOgorICAgICIiIkEgY2xhc3Mg
Zm9yIHRoZSBUZXN0UnVubmVyL21hbmFnZXIgdG8gdXNlIHRvIHRyYWNrIHRoZSBjdXJyZW50IHN0
YXRlCisgICAgb2YgdGhlIHdvcmtlcnMuIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG51bWJl
ciwgd29ya2VyKToKKyAgICAgICAgc2VsZi53b3JrZXIgPSB3b3JrZXIKKyAgICAgICAgc2VsZi5u
dW1iZXIgPSBudW1iZXIKKyAgICAgICAgc2VsZi5kb25lID0gRmFsc2UKKyAgICAgICAgc2VsZi5u
ZXh0X3RpbWVvdXQgPSBOb25lCisgICAgICAgIHNlbGYud2VkZ2VkID0gRmFsc2UKKyAgICAgICAg
c2VsZi5zdGF0cyA9IHt9CisgICAgICAgIHNlbGYuc3RhdHNbJ25hbWUnXSA9IHdvcmtlci5uYW1l
CisgICAgICAgIHNlbGYuc3RhdHNbJ251bV90ZXN0cyddID0gMAorICAgICAgICBzZWxmLnN0YXRz
Wyd0b3RhbF90aW1lJ10gPSAwCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJl
dHVybiAiX1dvcmtlclN0YXRlKCIgKyBzdHIoc2VsZi5fX2RpY3RfXykgKyAiKSIKKworCitjbGFz
cyBUZXN0UnVubmVyMih0ZXN0X3J1bm5lci5UZXN0UnVubmVyKToKKyAgICBkZWYgX19pbml0X18o
c2VsZiwgcG9ydCwgb3B0aW9ucywgcHJpbnRlcik6CisgICAgICAgIHRlc3RfcnVubmVyLlRlc3RS
dW5uZXIuX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucywgcHJpbnRlcikKKyAgICAgICAgc2Vs
Zi5fbWVzc2FnZV9icm9rZXIgPSBOb25lCisKKyAgICAgICAgIyBUaGlzIG1hcHMgd29ya2VyIG5h
bWVzIHRvIHRoZSBzdGF0ZSB3ZSBhcmUgdHJhY2tpbmcgZm9yIGVhY2ggb2YgdGhlbS4KKyAgICAg
ICAgc2VsZi5fd29ya2VycyA9IHt9CisKKyAgICBkZWYgaXNfZG9uZShzZWxmKToKKyAgICAgICAg
cmV0dXJuIEZhbHNlCisKKyAgICBkZWYgbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuICdUZXN0
UnVubmVyMicKKworICAgIGRlZiBfcnVuX3Rlc3RzKHNlbGYsIGZpbGVfbGlzdCwgcmVzdWx0X3N1
bW1hcnkpOgorICAgICAgICAiIiJSdW5zIHRoZSB0ZXN0cyBpbiB0aGUgZmlsZV9saXN0LgorCisg
ICAgICAgIFJldHVybjogQSB0dXBsZSAoa2V5Ym9hcmRfaW50ZXJydXB0ZWQsIHRocmVhZF90aW1p
bmdzLCB0ZXN0X3RpbWluZ3MsCisgICAgICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncykK
KyAgICAgICAgICAgIGtleWJvYXJkX2ludGVycnVwdGVkIGlzIHdoZXRoZXIgc29tZW9uZSB0eXBl
ZCBDdHJsXkMKKyAgICAgICAgICAgIHRocmVhZF90aW1pbmdzIGlzIGEgbGlzdCBvZiBkaWN0cyB3
aXRoIHRoZSB0b3RhbCBydW50aW1lCisgICAgICAgICAgICAgIG9mIGVhY2ggdGhyZWFkIHdpdGgg
J25hbWUnLCAnbnVtX3Rlc3RzJywgJ3RvdGFsX3RpbWUnIHByb3BlcnRpZXMKKyAgICAgICAgICAg
IHRlc3RfdGltaW5ncyBpcyBhIGxpc3Qgb2YgdGltaW5ncyBmb3IgZWFjaCBzaGFyZGVkIHN1YmRp
cmVjdG9yeQorICAgICAgICAgICAgICBvZiB0aGUgZm9ybSBbdGltZSwgZGlyZWN0b3J5X25hbWUs
IG51bV90ZXN0c10KKyAgICAgICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzIGlzIGEgbGlz
dCBvZiBydW4gdGltZXMgZm9yIGVhY2ggdGVzdAorICAgICAgICAgICAgICBpbiB0aGUgZm9ybSB7
ZmlsZW5hbWU6ZmlsZW5hbWUsIHRlc3RfcnVuX3RpbWU6dGVzdF9ydW5fdGltZX0KKyAgICAgICAg
ICAgIHJlc3VsdF9zdW1tYXJ5OiBzdW1tYXJ5IG9iamVjdCB0byBwb3B1bGF0ZSB3aXRoIHRoZSBy
ZXN1bHRzCisgICAgICAgICIiIgorICAgICAgICBudW1fd29ya2VycyA9IHNlbGYuX251bV93b3Jr
ZXJzKCkKKworICAgICAgICBzZWxmLl9jdXJyZW50X2ZpbGVfbGlzdCA9IGZpbGVfbGlzdAorICAg
ICAgICBzZWxmLl9jdXJyZW50X3Jlc3VsdF9zdW1tYXJ5ID0gcmVzdWx0X3N1bW1hcnkKKworICAg
ICAgICBzZWxmLl9hbGxfcmVzdWx0cyA9IFtdCisgICAgICAgIHNlbGYuX2dyb3VwX3N0YXRzID0g
e30KKyAgICAgICAgc2VsZi5fd29ya2VycyA9IHt9CisKKyAgICAgICAgc2VsZi5fcHJpbnRlci5w
cmludF91cGRhdGUoJ1NoYXJkaW5nIHRlc3RzIC4uLicpCisgICAgICAgIHRlc3RfbGlzdHMgPSBz
ZWxmLl9zaGFyZF90ZXN0cyhmaWxlX2xpc3QsCisgICAgICAgICAgICBudW1fd29ya2VycyA+IDEg
YW5kIG5vdCBzZWxmLl9vcHRpb25zLmV4cGVyaW1lbnRhbF9mdWxseV9wYXJhbGxlbCkKKyAgICAg
ICAgX2xvZy5kZWJ1ZygiVXNpbmcgJWQgc2hhcmRzIiAlIGxlbih0ZXN0X2xpc3RzKSkKKworICAg
ICAgICBicm9rZXIgPSBtYW5hZ2VyX3dvcmtlcl9icm9rZXIuZ2V0KHNlbGYuX3BvcnQsIHNlbGYu
X29wdGlvbnMsIHNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd29ya2VyLldvcmtlcikKKworICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgn
U3RhcnRpbmcgJXMgLi4uJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdy
YW1tYXIucGx1cmFsaXplKCd3b3JrZXInLCBudW1fd29ya2VycykpCisgICAgICAgIGZvciB3b3Jr
ZXJfbnVtYmVyIGluIHhyYW5nZShudW1fd29ya2Vycyk6CisgICAgICAgICAgICB3ID0gYnJva2Vy
LnN0YXJ0X3dvcmtlcih3b3JrZXJfbnVtYmVyKQorICAgICAgICAgICAgd3MgPSBfV29ya2VyU3Rh
dGUod29ya2VyX251bWJlciwgdykKKyAgICAgICAgICAgIHNlbGYuX3dvcmtlcnNbdy5uYW1lXSA9
IHdzCisgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMSkKKworICAgICAgICBzZWxmLl9wcmludGVy
LnByaW50X3VwZGF0ZSgiU3RhcnRpbmcgdGVzdGluZyAuLi4iKQorICAgICAgICBmb3IgdGVzdF9s
aXN0IGluIHRlc3RfbGlzdHM6CisgICAgICAgICAgICBicm9rZXIucG9zdF9tZXNzYWdlKCd0ZXN0
X2xpc3QnLCB0ZXN0X2xpc3RbMF0sIHRlc3RfbGlzdFsxXSkKKworICAgICAgICAjIFRlbGwgdGhl
IHdvcmtlcnMgdG8gc2h1dCBkb3duIGFmdGVyIHRoZXkncmUgZG9uZSBydW5uaW5nIGFsbCB0aGUK
KyAgICAgICAgIyB0ZXN0cy4KKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKG51bV93b3JrZXJzKToK
KyAgICAgICAgICAgIGJyb2tlci5wb3N0X21lc3NhZ2UoJ3N0b3AnKQorCisgICAgICAgIGludGVy
cnVwdGVkID0gRmFsc2UKKyAgICAgICAga2V5Ym9hcmRfaW50ZXJydXB0ZWQgPSBGYWxzZQorICAg
ICAgICB0cnk6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fb3B0aW9ucy5kcnlfcnVuOgorICAg
ICAgICAgICAgICAgIHdoaWxlIG5vdCBzZWxmLl9jaGVja19pZl9kb25lKCk6CisgICAgICAgICAg
ICAgICAgICAgIGJyb2tlci5ydW5fbWVzc2FnZV9sb29wKGRlbGF5X3NlY3M9MS4wKQorCisgICAg
ICAgICAgICAgICAgZm9yIHcgaW4gc2VsZi5fd29ya2Vycy52YWx1ZXMoKToKKyAgICAgICAgICAg
ICAgICAgICAgaWYgbm90IHcud2VkZ2VkIGFuZCB3Lndvcmtlci5pc19hbGl2ZSgpOgorICAgICAg
ICAgICAgICAgICAgICAgICAgdy53b3JrZXIuam9pbigwLjUpCisgICAgICAgICAgICAgICAgICAg
ICAgICBhc3NlcnQgbm90IHcud29ya2VyLmlzX2FsaXZlKCkKKworICAgICAgICBleGNlcHQgS2V5
Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICBfbG9nLmluZm8oIkludGVycnVwdGVkLCBleGl0
aW5nIikKKyAgICAgICAgICAgIGZvciB3IGluIHNlbGYuX3dvcmtlcnMudmFsdWVzKCk6CisgICAg
ICAgICAgICAgICAgdy53b3JrZXIuY2FuY2VsKCkKKyAgICAgICAgICAgIGtleWJvYXJkX2ludGVy
cnVwdGVkID0gVHJ1ZQorICAgICAgICBleGNlcHQgdGVzdF9ydW5uZXIuVGVzdFJ1bkludGVycnVw
dGVkRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgX2xvZy5pbmZvKGUucmVhc29uKQorICAgICAg
ICAgICAgYnJva2VyLmNhbmNlbF93b3JrZXJzKCkKKyAgICAgICAgICAgIGludGVycnVwdGVkID0g
VHJ1ZQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAjIFVuZXhwZWN0ZWQgZXhjZXB0aW9u
OyBkb24ndCB0cnkgdG8gY2xlYW4gdXAgd29ya2Vycy4KKyAgICAgICAgICAgIF9sb2cuaW5mbygi
RXhjZXB0aW9uIHJhaXNlZCwgZXhpdGluZyIpCisgICAgICAgICAgICByYWlzZQorCisgICAgICAg
IHRocmVhZF90aW1pbmdzID0gW3cuc3RhdHMgZm9yIHcgaW4gc2VsZi5fd29ya2Vycy52YWx1ZXMo
KV0KKyAgICAgICAgcmV0dXJuIChpbnRlcnJ1cHRlZCwga2V5Ym9hcmRfaW50ZXJydXB0ZWQsIHRo
cmVhZF90aW1pbmdzLAorICAgICAgICAgICAgICAgIHNlbGYuX2dyb3VwX3N0YXRzLCBzZWxmLl9h
bGxfcmVzdWx0cykKKworICAgIGRlZiBfY2hlY2tfaWZfZG9uZShzZWxmKToKKyAgICAgICAgIiIi
UmV0dXJucyB0cnVlIGlmZiBhbGwgdGhlIHdvcmtlcnMgaGF2ZSBlaXRoZXIgY29tcGxldGVkIG9y
IHdlZGdlZC4iIiIKKyAgICAgICAgZG9uZSA9IFRydWUKKyAgICAgICAgdCA9IHRpbWUudGltZSgp
CisgICAgICAgIGZvciB3IGluIHNlbGYuX3dvcmtlcnMudmFsdWVzKCk6CisgICAgICAgICAgICBp
ZiBub3Qgdy5kb25lIGFuZCBub3Qgdy53ZWRnZWQ6CisgICAgICAgICAgICAgICAgbmV4dF90aW1l
b3V0ID0gdy5uZXh0X3RpbWVvdXQKKyAgICAgICAgICAgICAgICBXRURHRV9QQURESU5HID0gNDAu
MAorICAgICAgICAgICAgICAgIGlmIG5leHRfdGltZW91dCBhbmQgdCA+IG5leHRfdGltZW91dCAr
IFdFREdFX1BBRERJTkc6CisgICAgICAgICAgICAgICAgICAgIF9sb2cuZXJyb3IoJycpCisgICAg
ICAgICAgICAgICAgICAgIHcud29ya2VyLmxvZ193ZWRnZWRfd29ya2VyKHcuY3VycmVudF90ZXN0
X25hbWUpCisgICAgICAgICAgICAgICAgICAgIF9sb2cuZXJyb3IoJycpCisgICAgICAgICAgICAg
ICAgICAgIHcud2VkZ2VkID0gVHJ1ZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICAgICAgICAgIGRvbmUgPSBGYWxzZQorCisgICAgICAgIGlmIGRvbmU6CisgICAgICAgICAgICBp
ZiBhbnkoW3cud2VkZ2VkIGZvciB3IGluIHNlbGYuX3dvcmtlcnMudmFsdWVzKCldKToKKyAgICAg
ICAgICAgICAgICBfbG9nLmVycm9yKCcnKQorICAgICAgICAgICAgICAgIF9sb2cuZXJyb3IoJ1Jl
bWFpbmluZyB3b3JrZXJzIGFyZSB3ZWRnZWQsIGJhaWxpbmcgb3V0LicpCisgICAgICAgICAgICAg
ICAgX2xvZy5lcnJvcignJykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgX2xv
Zy5kZWJ1ZygnTm8gd2VkZ2VkIHRocmVhZHMnKQorICAgICAgICByZXR1cm4gZG9uZQorCisgICAg
ZGVmIGhhbmRsZV9zdGFydGVkX3Rlc3Qoc2VsZiwgc3JjLCB0ZXN0X2luZm8sIGhhbmdfdGltZW91
dCk6CisgICAgICAgIHcgPSBzZWxmLl93b3JrZXJzW3NyY10KKyAgICAgICAgdy5jdXJyZW50X3Rl
c3RfbmFtZSA9IHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZSgKKyAgICAgICAgICAg
IHRlc3RfaW5mby5maWxlbmFtZSkKKyAgICAgICAgdy5uZXh0X3RpbWVvdXQgPSB0aW1lLnRpbWUo
KSArIGhhbmdfdGltZW91dAorCisgICAgZGVmIGhhbmRsZV9kb25lKHNlbGYsIHNyYyk6CisgICAg
ICAgIHcgPSBzZWxmLl93b3JrZXJzW3NyY10KKyAgICAgICAgdy5kb25lID0gVHJ1ZQorCisgICAg
ZGVmIGhhbmRsZV9maW5pc2hlZF90ZXN0KHNlbGYsIHNyYywgcmVzdWx0LCBlbGFwc2VkX3RpbWUp
OgorICAgICAgICAiIiJVcGRhdGUgdGhlIHN1bW1hcnkgYW5kIHByaW50IHJlc3VsdHMgd2l0aCBh
bnkgY29tcGxldGVkIHRlc3RzLiIiIgorICAgICAgICB3ID0gc2VsZi5fd29ya2Vyc1tzcmNdCisg
ICAgICAgIHcubmV4dF90aW1lb3V0ID0gTm9uZQorICAgICAgICB3LmN1cnJlbnRfdGVzdCA9IE5v
bmUKKworICAgICAgICBpZiB3LndlZGdlZDoKKyAgICAgICAgICAgICMgSG1tLiBUaGlzIHNob3Vs
ZG4ndCBoYXBwZW4gaWYgd2UgaGF2ZSBvdXIgdGltZW91dHMKKyAgICAgICAgICAgICMgdHVuZWQg
cHJvcGVybHkuCisgICAgICAgICAgICBfbG9nLmVycm9yKCIlcyB1bndlZGdlZCIsIHcubmFtZSkK
KworICAgICAgICBzZWxmLl91cGRhdGVfd29ya2VyX3N0YXRzKHNyYywgcmVzdWx0LCBlbGFwc2Vk
X3RpbWUpCisKKyAgICAgICAgc2VsZi5fdXBkYXRlX3N1bW1hcnlfd2l0aF9yZXN1bHQoc2VsZi5f
Y3VycmVudF9yZXN1bHRfc3VtbWFyeSwgcmVzdWx0KQorCisgICAgZGVmIGhhbmRsZV9maW5pc2hl
ZF9saXN0KHNlbGYsIHNyYywgbGlzdF9uYW1lLCBudW1fdGVzdHMsIGVsYXBzZWRfdGltZSk6Cisg
ICAgICAgIHNlbGYuX2dyb3VwX3N0YXRzW2xpc3RfbmFtZV0gPSAobnVtX3Rlc3RzLCBlbGFwc2Vk
X3RpbWUpCisKKyAgICBkZWYgaGFuZGxlX2V4Y2VwdGlvbihzZWxmLCBzcmMsIGV4Y2VwdGlvbl9p
bmZvKToKKyAgICAgICAgcmFpc2UgZXhjZXB0aW9uX2luZm8KKworICAgIGRlZiBfdXBkYXRlX3dv
cmtlcl9zdGF0cyhzZWxmLCBzcmMsIHJlc3VsdCwgZWxhcHNlZF90aW1lKToKKyAgICAgICAgc2Vs
Zi5fd29ya2Vyc1tzcmNdLnN0YXRzWyd0b3RhbF90aW1lJ10gKz0gZWxhcHNlZF90aW1lCisgICAg
ICAgIHNlbGYuX3dvcmtlcnNbc3JjXS5zdGF0c1snbnVtX3Rlc3RzJ10gKz0gMQorICAgICAgICBz
ZWxmLl9hbGxfcmVzdWx0cy5hcHBlbmQocmVzdWx0KQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvd29ya2VyLnB5IGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvd29ya2VyLnB5Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjMwNjc2Zjc5YmI4NmQ0Y2U1YTc4NWMxNWQwYjllY2M3YzRmMTgwODIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRf
cGFja2FnZS93b3JrZXIucHkKQEAgLTAsMCArMSw0MTIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhv
bgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMgQ29weXJpZ2h0IChDKSAyMDEwIEdhYm9yIFJhcGNzYW55aSAocmdhYm9yQGluZi51LXN6ZWdl
ZC5odSksIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMK
KyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJBIFRo
cmVhZCBvYmplY3QgZm9yIHJ1bm5pbmcgRHVtcFJlbmRlclRyZWUgYW5kIHByb2Nlc3NpbmcgVVJM
cyBmcm9tIGEKK3NoYXJlZCBxdWV1ZS4KKworRWFjaCB0aHJlYWQgcnVucyBhIHNlcGFyYXRlIGlu
c3RhbmNlIG9mIHRoZSBEdW1wUmVuZGVyVHJlZSBiaW5hcnkgYW5kIHZhbGlkYXRlcwordGhlIG91
dHB1dC4gIFdoZW4gdGhlcmUgYXJlIG5vIG1vcmUgVVJMcyB0byBwcm9jZXNzIGluIHRoZSBzaGFy
ZWQgcXVldWUsIHRoZQordGhyZWFkIGV4aXRzLgorIiIiCisKK2Zyb20gX19mdXR1cmVfXyBpbXBv
cnQgd2l0aF9zdGF0ZW1lbnQKKworaW1wb3J0IGNvZGVjcworaW1wb3J0IGNvcHkKK2ltcG9ydCBs
b2dnaW5nCitpbXBvcnQgb3MKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aHJl
YWRpbmcKK2ltcG9ydCB0aW1lCitpbXBvcnQgdHJhY2ViYWNrCisKK2Zyb20gd2Via2l0cHkubGF5
b3V0X3Rlc3RzLnRlc3RfdHlwZXMgaW1wb3J0IGltYWdlX2RpZmYKK2Zyb20gd2Via2l0cHkubGF5
b3V0X3Rlc3RzLnRlc3RfdHlwZXMgaW1wb3J0IHRlc3RfdHlwZV9iYXNlCitmcm9tIHdlYmtpdHB5
LmxheW91dF90ZXN0cy50ZXN0X3R5cGVzIGltcG9ydCB0ZXh0X2RpZmYKKworaW1wb3J0IG1lc3Nh
Z2VfYnJva2VyMgoraW1wb3J0IHRlc3RfZmFpbHVyZXMKK2ltcG9ydCB0ZXN0X291dHB1dAoraW1w
b3J0IHRlc3RfcmVzdWx0cworCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisK
KworY2xhc3MgV29ya2VyKG1lc3NhZ2VfYnJva2VyMi5DbGllbnRJbnRlcmZhY2UpOgorICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBicm9rZXIsIHdvcmtlcl9udW1iZXIsIG9wdGlvbnMpOgorICAgICAg
ICBzZWxmLl9icm9rZXIgPSBicm9rZXIKKyAgICAgICAgc2VsZi5fd29ya2VyX251bWJlciA9IHdv
cmtlcl9udW1iZXIKKyAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKKyAgICAgICAgc2Vs
Zi5fbmFtZSA9ICd3b3JrZXIvJWQnICUgd29ya2VyX251bWJlcgorICAgICAgICBzZWxmLl9jYW5j
ZWxlZCA9IEZhbHNlCisgICAgICAgIHNlbGYuX2RvbmUgPSBGYWxzZQorCisgICAgICAgIHNlbGYu
X3BvcnQgPSBOb25lCisgICAgICAgIHNlbGYuX2JhdGNoX2NvdW50ID0gMAorICAgICAgICBzZWxm
Ll9iYXRjaF9zaXplID0gMAorICAgICAgICBzZWxmLl9kcml2ZXIgPSBOb25lCisgICAgICAgIHNl
bGYuX2hhdmVfaHR0cF9sb2NrID0gRmFsc2UKKyAgICAgICAgc2VsZi5fdGVzdF90eXBlcyA9IFtd
CisgICAgICAgIHNlbGYuX3Rlc3RfYXJncyA9IFtdCisgICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9m
aWxlID0gTm9uZQorCisgICAgZGVmIF9kZWZlcnJlZF9pbml0KHNlbGYsIHBvcnQpOgorICAgICAg
ICBzZWxmLl9wb3J0ID0gcG9ydAorICAgICAgICBzZWxmLl9iYXRjaF9zaXplID0gc2VsZi5fb3B0
aW9ucy5iYXRjaF9zaXplCisgICAgICAgIGZvciBjbHMgaW4gc2VsZi5fZ2V0X3Rlc3RfdHlwZV9j
bGFzc2VzKCk6CisgICAgICAgICAgICBzZWxmLl90ZXN0X3R5cGVzLmFwcGVuZChjbHMoc2VsZi5f
cG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9vcHRp
b25zLnJlc3VsdHNfZGlyZWN0b3J5KSkKKyAgICAgICAgc2VsZi5fdGVzdF9hcmdzID0gc2VsZi5f
Z2V0X3Rlc3RfYXJncyhzZWxmLl93b3JrZXJfbnVtYmVyKQorCisgICAgICAgICMgQXBwZW5kIHRl
c3RzIHdlJ3JlIHJ1bm5pbmcgdG8gdGhlIGV4aXN0aW5nIHRlc3RzX3J1bi50eHQgZmlsZS4KKyAg
ICAgICAgIyBUaGlzIGlzIGNyZWF0ZWQgaW4gcnVuX3dlYmtpdF90ZXN0cy5weTpfUHJlcGFyZUxp
c3RzQW5kUHJpbnRPdXRwdXQuCisgICAgICAgIHRlc3RzX3J1bl9maWxlbmFtZSA9IG9zLnBhdGgu
am9pbihzZWxmLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgInRlc3RzX3J1bi50eHQiKQorICAgICAgICBzZWxmLl90
ZXN0c19ydW5fZmlsZSA9IGNvZGVjcy5vcGVuKHRlc3RzX3J1bl9maWxlbmFtZSwgImEiLCAidXRm
LTgiKQorCisgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgIHNlbGYuX2NsZWFudXAoKQor
CisgICAgZGVmIF9nZXRfdGVzdF9hcmdzKHNlbGYsIHdvcmtlcl9udW1iZXIpOgorICAgICAgICAi
IiJSZXR1cm5zIHRoZSB0dXBsZSBvZiBhcmd1bWVudHMgZm9yIHRlc3RzIGFuZCBmb3IgRHVtcFJl
bmRlclRyZWUuIiIiCisgICAgICAgIHRlc3RfYXJncyA9IHRlc3RfdHlwZV9iYXNlLlRlc3RBcmd1
bWVudHMoKQorICAgICAgICB0ZXN0X2FyZ3MubmV3X2Jhc2VsaW5lID0gc2VsZi5fb3B0aW9ucy5u
ZXdfYmFzZWxpbmUKKyAgICAgICAgdGVzdF9hcmdzLnJlc2V0X3Jlc3VsdHMgPSBzZWxmLl9vcHRp
b25zLnJlc2V0X3Jlc3VsdHMKKyAgICAgICAgcmV0dXJuIHRlc3RfYXJncworCisgICAgZGVmIF9n
ZXRfdGVzdF90eXBlX2NsYXNzZXMoc2VsZik6CisgICAgICAgIGNsYXNzZXMgPSBbdGV4dF9kaWZm
LlRlc3RUZXh0RGlmZl0KKyAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0czoKKyAg
ICAgICAgICAgIGNsYXNzZXMuYXBwZW5kKGltYWdlX2RpZmYuSW1hZ2VEaWZmKQorICAgICAgICBy
ZXR1cm4gY2xhc3NlcworCisgICAgZGVmIGNhbmNlbChzZWxmKToKKyAgICAgICAgIiIiQXR0ZW1w
dCB0byBhYm9ydCBwcm9jZXNzaW5nIChiZXN0IGVmZm9ydCkuIiIiCisgICAgICAgIHNlbGYuX2Nh
bmNlbGVkID0gVHJ1ZQorCisgICAgZGVmIGlzX2RvbmUoc2VsZik6CisgICAgICAgICMgVGhpcyBp
cyB1c2VkIGZvciBhc3NlcnRpb24gY2hlY2tpbmcgaW4gdGhlIG1hbmFnZXIuCisgICAgICAgIHJl
dHVybiBzZWxmLl9kb25lIG9yIHNlbGYuX2NhbmNlbGVkCisKKyAgICBkZWYgbmFtZShzZWxmKToK
KyAgICAgICAgcmV0dXJuIHNlbGYuX25hbWUKKworICAgIGRlZiBydW4oc2VsZiwgcG9ydCk6Cisg
ICAgICAgIHNlbGYuX2RlZmVycmVkX2luaXQocG9ydCkKKworICAgICAgICBleGNlcHRpb25fbXNn
ID0gIiIKKyAgICAgICAgX2xvZy5kZWJ1ZygnJXMgc3RhcnRpbmcnICUgc2VsZi5fbmFtZSkKKwor
ICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9icm9rZXIucnVuX21lc3NhZ2VfbG9vcCgp
CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5pc19kb25lKCk6CisgICAgICAgICAgICAgICAgcmFp
c2UgQXNzZXJ0aW9uRXJyb3IoIiVzOiByYW4gb3V0IG9mIG1lc3NhZ2VzIGluIHdvcmtlciBxdWV1
ZS4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBzZWxmLl9uYW1lKQor
ICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICBleGNlcHRpb25f
bXNnID0gIiwgaW50ZXJydXB0ZWQiCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGV4Y2Vw
dGlvbl9tc2cgPSAiLCBleGNlcHRpb24gcmFpc2VkIgorICAgICAgICBmaW5hbGx5OgorICAgICAg
ICAgICAgX2xvZy5kZWJ1ZygiJXMgZG9uZSVzIiAlIChzZWxmLl9uYW1lLCBleGNlcHRpb25fbXNn
KSkKKyAgICAgICAgICAgIGlmIGV4Y2VwdGlvbl9tc2c6CisgICAgICAgICAgICAgICAgZXhjX2lu
Zm8gPSBzeXMuZXhjX2luZm8oKQorICAgICAgICAgICAgICAgIHNlbGYuX2xvZ190cmFjZWJhY2so
ZXhjX2luZm9bMl0pCisgICAgICAgICAgICAgICAgIyBGSVhNRTogRmlndXJlIG91dCBob3cgdG8g
c2VuZCBhIG1lc3NhZ2Ugd2l0aCBhIHRyYWNlYmFjay4KKyAgICAgICAgICAgICAgICBzZWxmLl9i
cm9rZXIucG9zdF9tZXNzYWdlKCdleGNlcHRpb24nLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKGV4Y19pbmZvWzBdLCBleGNfaW5mb1sxXSwgTm9uZSkpCisgICAg
ICAgICAgICBzZWxmLl9icm9rZXIucG9zdF9tZXNzYWdlKCdkb25lJykKKyAgICAgICAgICAgIHNl
bGYuX2NsZWFudXAoKQorCisgICAgZGVmIF9sb2dfdHJhY2ViYWNrKHNlbGYsIHRiKToKKyAgICAg
ICAgc3RhY2sgPSB0cmFjZWJhY2suZXh0cmFjdF90Yih0YikKKyAgICAgICAgZm9yIGZyYW1lX3N0
ciBpbiB0cmFjZWJhY2suZm9ybWF0X2xpc3Qoc3RhY2spOgorICAgICAgICAgICAgZm9yIGxpbmUg
aW4gZnJhbWVfc3RyLnNwbGl0KCdcbicpOgorICAgICAgICAgICAgICAgIGlmIGxpbmU6CisgICAg
ICAgICAgICAgICAgICAgIF9sb2cuZXJyb3IoIiAgJXMiICUgbGluZSkKKworICAgIGRlZiBfY2xl
YW51cChzZWxmKToKKyAgICAgICAgc2VsZi5fa2lsbF9kdW1wX3JlbmRlcl90cmVlKCkKKyAgICAg
ICAgaWYgc2VsZi5faGF2ZV9odHRwX2xvY2s6CisgICAgICAgICAgICBzZWxmLl9zdG9wX3NlcnZl
cnNfd2l0aF9sb2NrKCkKKyAgICAgICAgaWYgc2VsZi5fdGVzdHNfcnVuX2ZpbGU6CisgICAgICAg
ICAgICBzZWxmLl90ZXN0c19ydW5fZmlsZS5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLl90ZXN0
c19ydW5fZmlsZSA9IE5vbmUKKworICAgIGRlZiBoYW5kbGVfdGVzdF9saXN0KHNlbGYsIHNyYywg
bGlzdF9uYW1lLCB0ZXN0X2xpc3QpOgorICAgICAgICBpZiBsaXN0X25hbWUgPT0gInRlc3RzX3Rv
X2h0dHBfbG9jayIgYW5kIHNlbGYuX3BvcnQubG9ja19wb2xpY3koKSA9PSAib25lIjoKKyAgICAg
ICAgICAgIHNlbGYuX3N0YXJ0X3NlcnZlcnNfd2l0aF9sb2NrKCkKKworICAgICAgICBzdGFydF90
aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgbnVtX3Rlc3RzID0gMAorICAgICAgICBmb3IgdGVz
dF9pbnB1dCBpbiB0ZXN0X2xpc3Q6CisgICAgICAgICAgICBzZWxmLl9ydW5fdGVzdCh0ZXN0X2lu
cHV0KQorICAgICAgICAgICAgc2VsZi5fYnJva2VyLnlpZWxkX3RvX2Jyb2tlcigpCisgICAgICAg
ICAgICBpZiBzZWxmLl9jYW5jZWxlZDoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAg
ICAgbnVtX3Rlc3RzICs9IDEKKworICAgICAgICBlbGFwc2VkX3RpbWUgPSB0aW1lLnRpbWUoKSAt
IHN0YXJ0X3RpbWUKKworICAgICAgICBpZiBzZWxmLl9oYXZlX2h0dHBfbG9jazoKKyAgICAgICAg
ICAgIHNlbGYuX3N0b3Bfc2VydmVyc193aXRoX2xvY2soKQorCisgICAgICAgIHNlbGYuX2Jyb2tl
ci5wb3N0X21lc3NhZ2UoJ2ZpbmlzaGVkX2xpc3QnLCBsaXN0X25hbWUsIG51bV90ZXN0cywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGFwc2VkX3RpbWUpCisKKyAgICBkZWYg
aGFuZGxlX3N0b3Aoc2VsZiwgc3JjKToKKyAgICAgICAgIiIiU3RvcCByZWNlaXZlZCAtIG5vIG1v
cmUgdGVzdHMgdG8gcnVuLiIiIgorICAgICAgICBzZWxmLl9kb25lID0gVHJ1ZQorCisgICAgZGVm
IF9ydW5fdGVzdChzZWxmLCB0ZXN0X2lucHV0KToKKyAgICAgICAgc2VsZi5fc2V0X3VwX3Rlc3Qo
dGVzdF9pbnB1dCkKKworICAgICAgICAjIFdlIGNhbGN1bGF0ZSBob3cgbG9uZyB3ZSBleHBlY3Qg
dGhlIHRlc3QgdG8gdGFrZS4KKyAgICAgICAgIworICAgICAgICAjIFRoZSBEdW1wUmVuZGVyVHJl
ZSB3YXRjaGRvZyB1c2VzIDIuNXggdGhlIHRpbWVvdXQ7IHdlIHdhbnQgdG8gYmUKKyAgICAgICAg
IyBsYXJnZXIgdGhhbiB0aGF0LiBXZSBhbHNvIGFkZCBhIGxpdHRsZSBtb3JlIHBhZGRpbmcgaWYg
d2UncmUKKyAgICAgICAgIyBydW5uaW5nIHRlc3RzIGluIGEgc2VwYXJhdGUgdGhyZWFkLgorICAg
ICAgICAjCisgICAgICAgICMgTm90ZSB0aGF0IHdlIG5lZWQgdG8gY29udmVydCB0aGUgdGVzdCB0
aW1lb3V0IGZyb20gYQorICAgICAgICAjIHN0cmluZyB2YWx1ZSBpbiBtaWxsaXNlY29uZHMgdG8g
YSBmbG9hdCBmb3IgUHl0aG9uLgorICAgICAgICBkcml2ZXJfdGltZW91dF9zZWMgPSAzLjAgKiBm
bG9hdCh0ZXN0X2lucHV0LnRpbWVvdXQpIC8gMTAwMC4wCisgICAgICAgIHRocmVhZF9wYWRkaW5n
X3NlYyA9IDEuMAorICAgICAgICB0aHJlYWRfdGltZW91dF9zZWMgPSBkcml2ZXJfdGltZW91dF9z
ZWMgKyB0aHJlYWRfcGFkZGluZ19zZWMKKyAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5ydW5fc2lu
Z2x5OgorICAgICAgICAgICAgdGVzdF90aW1lb3V0X3NlYyA9IHRocmVhZF90aW1lb3V0X3NlYwor
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgdGVzdF90aW1lb3V0X3NlYyA9IGRyaXZlcl90aW1l
b3V0X3NlYworCisgICAgICAgIHN0YXJ0ID0gdGltZS50aW1lKCkKKyAgICAgICAgc2VsZi5fYnJv
a2VyLnBvc3RfbWVzc2FnZSgnc3RhcnRlZF90ZXN0JywgdGVzdF9pbnB1dCwgdGVzdF90aW1lb3V0
X3NlYykKKworICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnJ1bl9zaW5nbHk6CisgICAgICAgICAg
ICByZXN1bHQgPSBzZWxmLl9ydW5fdGVzdF9pbl9hbm90aGVyX3RocmVhZCh0ZXN0X2lucHV0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhy
ZWFkX3RpbWVvdXRfc2VjKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVzdWx0ID0gc2Vs
Zi5fcnVuX3Rlc3RfaW5fdGhpc190aHJlYWQodGVzdF9pbnB1dCkKKworICAgICAgICBzZWxmLl90
ZWFyX2Rvd25fdGVzdCh0ZXN0X2lucHV0LCByZXN1bHQsIHRpbWUudGltZSgpIC0gc3RhcnQpCisK
KyAgICBkZWYgX3NldF91cF90ZXN0KHNlbGYsIHRlc3RfaW5wdXQpOgorICAgICAgICB0ZXN0X2lu
cHV0LnVyaSA9IHNlbGYuX3BvcnQuZmlsZW5hbWVfdG9fdXJpKHRlc3RfaW5wdXQuZmlsZW5hbWUp
CisgICAgICAgIGlmIHNlbGYuX3Nob3VsZF9mZXRjaF9leHBlY3RlZF9jaGVja3N1bSgpOgorICAg
ICAgICAgICAgdGVzdF9pbnB1dC5pbWFnZV9jaGVja3N1bSA9IHNlbGYuX3BvcnQuZXhwZWN0ZWRf
Y2hlY2tzdW0oCisgICAgICAgICAgICAgICAgdGVzdF9pbnB1dC5maWxlbmFtZSkKKworICAgIGRl
ZiBfc2hvdWxkX2ZldGNoX2V4cGVjdGVkX2NoZWNrc3VtKHNlbGYpOgorICAgICAgICByZXR1cm4g
KHNlbGYuX29wdGlvbnMucGl4ZWxfdGVzdHMgYW5kIG5vdAorICAgICAgICAgICAgICAgIChzZWxm
Ll9vcHRpb25zLm5ld19iYXNlbGluZSBvciBzZWxmLl9vcHRpb25zLnJlc2V0X3Jlc3VsdHMpKQor
CisgICAgZGVmIF9ydW5fdGVzdF9pbl9hbm90aGVyX3RocmVhZChzZWxmLCB0ZXN0X2lucHV0LCB0
aHJlYWRfdGltZW91dF9zZWMpOgorICAgICAgICAiIiJSdW4gYSB0ZXN0IGluIGEgc2VwYXJhdGUg
dGhyZWFkLCBlbmZvcmNpbmcgYSBoYXJkIHRpbWUgbGltaXQuCisKKyAgICAgICAgU2luY2Ugd2Ug
Y2FuIG9ubHkgZGV0ZWN0IHRoZSB0ZXJtaW5hdGlvbiBvZiBhIHRocmVhZCwgbm90IGFueSBpbnRl
cm5hbAorICAgICAgICBzdGF0ZSBvciBwcm9ncmVzcywgd2UgY2FuIG9ubHkgcnVuIHBlci10ZXN0
IHRpbWVvdXRzIHdoZW4gcnVubmluZyB0ZXN0CisgICAgICAgIGZpbGVzIHNpbmdseS4KKworICAg
ICAgICBBcmdzOgorICAgICAgICAgIHRlc3RfaW5wdXQ6IE9iamVjdCBjb250YWluaW5nIHRoZSB0
ZXN0IGZpbGVuYW1lIGFuZCB0aW1lb3V0CisgICAgICAgICAgdGhyZWFkX3RpbWVvdXRfc2VjOiB0
aW1lIHRvIHdhaXQgYmVmb3JlIGtpbGxpbmcgdGhlIGRyaXZlciBwcm9jZXNzLgorICAgICAgICBS
ZXR1cm5zOgorICAgICAgICAgIEEgVGVzdFJlc3VsdAorICAgICAgICAiIiIKKyAgICAgICAgd29y
a2VyID0gc2VsZgorICAgICAgICByZXN1bHQgPSBOb25lCisKKyAgICAgICAgZHJpdmVyID0gd29y
a2VyLl9wb3J0LmNyZWF0ZV9kcml2ZXIod29ya2VyLl93b3JrZXJfbnVtYmVyKQorICAgICAgICBk
cml2ZXIuc3RhcnQoKQorCisgICAgICAgIGNsYXNzIFNpbmdsZVRlc3RUaHJlYWQodGhyZWFkaW5n
LlRocmVhZCk6CisgICAgICAgICAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICAgICAgICAgIHJl
c3VsdCA9IHdvcmtlci5fcnVuX3NpbmdsZV90ZXN0KHRlc3RfaW5wdXQsIGRyaXZlcikKKworICAg
ICAgICB0aHJlYWQgPSBTaW5nbGVUZXN0VGhyZWFkKCkKKyAgICAgICAgdGhyZWFkLnN0YXJ0KCkK
KyAgICAgICAgdGhyZWFkLmpvaW4odGhyZWFkX3RpbWVvdXRfc2VjKQorICAgICAgICBpZiB0aHJl
YWQuaXNBbGl2ZSgpOgorICAgICAgICAgICAgIyBJZiBqb2luKCkgcmV0dXJuZWQgd2l0aCB0aGUg
dGhyZWFkIHN0aWxsIHJ1bm5pbmcsIHRoZQorICAgICAgICAgICAgIyBEdW1wUmVuZGVyVHJlZSBp
cyBjb21wbGV0ZWx5IGh1bmcgYW5kIHRoZXJlJ3Mgbm90aGluZworICAgICAgICAgICAgIyBtb3Jl
IHdlIGNhbiBkbyB3aXRoIGl0LiAgV2UgaGF2ZSB0byBraWxsIGFsbCB0aGUKKyAgICAgICAgICAg
ICMgRHVtcFJlbmRlclRyZWVzIHRvIGZyZWUgaXQgdXAuIElmIHdlJ3JlIHJ1bm5pbmcgbW9yZSB0
aGFuCisgICAgICAgICAgICAjIG9uZSBEdW1wUmVuZGVyVHJlZSB0aHJlYWQsIHdlJ2xsIGVuZCB1
cCBraWxsaW5nIHRoZSBvdGhlcgorICAgICAgICAgICAgIyBEdW1wUmVuZGVyVHJlZXMgdG9vLCBp
bnRyb2R1Y2luZyBzcHVyaW91cyBjcmFzaGVzLiBXZSBhY2NlcHQKKyAgICAgICAgICAgICMgdGhh
dCB0cmFkZW9mZiBpbiBvcmRlciB0byBhdm9pZCBsb3NpbmcgdGhlIHJlc3Qgb2YgdGhpcworICAg
ICAgICAgICAgIyB0aHJlYWQncyByZXN1bHRzLgorICAgICAgICAgICAgX2xvZy5lcnJvcignVGVz
dCB0aHJlYWQgaHVuZzoga2lsbGluZyBhbGwgRHVtcFJlbmRlclRyZWVzJykKKworICAgICAgICBk
cml2ZXIuc3RvcCgpCisKKyAgICAgICAgaWYgbm90IHJlc3VsdDoKKyAgICAgICAgICAgIHJlc3Vs
dCA9IHRlc3RfcmVzdWx0cy5UZXN0UmVzdWx0KHRlc3RfaW5wdXQuZmlsZW5hbWUsIGZhaWx1cmVz
PVtdLAorICAgICAgICAgICAgICAgIHRlc3RfcnVuX3RpbWU9MCwgdG90YWxfdGltZV9mb3JfYWxs
X2RpZmZzPTAsIHRpbWVfZm9yX2RpZmZzPXt9KQorCisgICAgICAgIHJldHVybiByZXN1bHQKKwor
ICAgIGRlZiBfcnVuX3Rlc3RfaW5fdGhpc190aHJlYWQoc2VsZiwgdGVzdF9pbnB1dCk6CisgICAg
ICAgICIiIlJ1biBhIHNpbmdsZSB0ZXN0IGZpbGUgdXNpbmcgYSBzaGFyZWQgRHVtcFJlbmRlclRy
ZWUgcHJvY2Vzcy4KKworICAgICAgICBBcmdzOgorICAgICAgICAgIHRlc3RfaW5wdXQ6IE9iamVj
dCBjb250YWluaW5nIHRoZSB0ZXN0IGZpbGVuYW1lLCB1cmkgYW5kIHRpbWVvdXQKKworICAgICAg
ICBSZXR1cm5zOiBhIFRlc3RSZXN1bHQgb2JqZWN0LgorICAgICAgICAiIiIKKyAgICAgICAgIyBw
b2xsKCkgaXMgbm90IHRocmVhZHNhZmUgYW5kIGNhbiB0aHJvdyBPU0Vycm9yIGR1ZSB0bzoKKyAg
ICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTczMTcxNworICAgICAgICBpZiBu
b3Qgc2VsZi5fZHJpdmVyIG9yIHNlbGYuX2RyaXZlci5wb2xsKCkgaXMgbm90IE5vbmU6CisgICAg
ICAgICAgICBzZWxmLl9kcml2ZXIgPSBzZWxmLl9wb3J0LmNyZWF0ZV9kcml2ZXIoc2VsZi5fd29y
a2VyX251bWJlcikKKyAgICAgICAgICAgIHNlbGYuX2RyaXZlci5zdGFydCgpCisgICAgICAgIHJl
dHVybiBzZWxmLl9ydW5fc2luZ2xlX3Rlc3QodGVzdF9pbnB1dCwgc2VsZi5fZHJpdmVyKQorCisg
ICAgZGVmIF9ydW5fc2luZ2xlX3Rlc3Qoc2VsZiwgdGVzdF9pbnB1dCwgZHJpdmVyKToKKyAgICAg
ICAgIyBUaGUgaW1hZ2UgaGFzaCBpcyB1c2VkIHRvIGF2b2lkIGRvaW5nIGFuIGltYWdlIGR1bXAg
aWYgdGhlCisgICAgICAgICMgY2hlY2tzdW1zIG1hdGNoLCBzbyBpdCBzaG91bGQgYmUgc2V0IHRv
IGEgYmxhbmsgdmFsdWUgaWYgd2UKKyAgICAgICAgIyBhcmUgZ2VuZXJhdGluZyBhIG5ldyBiYXNl
bGluZS4gIChPdGhlcndpc2UsIGFuIGltYWdlIGZyb20gYQorICAgICAgICAjIHByZXZpb3VzIHJ1
biB3aWxsIGJlIGNvcGllZCBpbnRvIHRoZSBiYXNlbGluZS4iIiIKKyAgICAgICAgaWYgc2VsZi5f
c2hvdWxkX2ZldGNoX2V4cGVjdGVkX2NoZWNrc3VtKCk6CisgICAgICAgICAgICB0ZXN0X2lucHV0
LmltYWdlX2hhc2ggPSBzZWxmLl9wb3J0LmV4cGVjdGVkX2NoZWNrc3VtKAorICAgICAgICAgICAg
ICAgIHRlc3RfaW5wdXQuZmlsZW5hbWUpCisgICAgICAgIHRlc3Rfb3V0cHV0ID0gZHJpdmVyLnJ1
bl90ZXN0KHRlc3RfaW5wdXQpCisgICAgICAgIHJldHVybiBzZWxmLl9wcm9jZXNzX291dHB1dCh0
ZXN0X2lucHV0LCB0ZXN0X291dHB1dCkKKworICAgIGRlZiBfcHJvY2Vzc19vdXRwdXQoc2VsZiwg
dGVzdF9pbnB1dCwgdGVzdF9vdXRwdXQpOgorICAgICAgICAiIiJSZWNlaXZlcyB0aGUgb3V0cHV0
IGZyb20gYSBEdW1wUmVuZGVyVHJlZSBwcm9jZXNzLCBzdWJqZWN0cyBpdCB0byBhCisgICAgICAg
IG51bWJlciBvZiB0ZXN0cywgYW5kIHJldHVybnMgYSBsaXN0IG9mIGZhaWx1cmUgdHlwZXMgdGhl
IHRlc3QgcHJvZHVjZWQuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgdGVzdF9pbnB1dDogYSBU
ZXN0SW5wdXQgb2JqZWN0CisgICAgICAgIHRlc3Rfb3V0cHV0OiBhIFRlc3RPdXRwdXQgb2JqZWN0
IGNvbnRhaW5pbmcgdGhlIG91dHB1dCBvZiB0aGUgdGVzdAorCisgICAgICAgIFJldHVybnM6IGEg
VGVzdFJlc3VsdCBvYmplY3QKKyAgICAgICAgIiIiCisgICAgICAgIGZhaWx1cmVzID0gW10KKyAg
ICAgICAgdGVzdF9maWxlbmFtZSA9IHRlc3RfaW5wdXQuZmlsZW5hbWUKKworICAgICAgICBpZiB0
ZXN0X291dHB1dC5jcmFzaDoKKyAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZCh0ZXN0X2ZhaWx1
cmVzLkZhaWx1cmVDcmFzaCgpKQorICAgICAgICBpZiB0ZXN0X291dHB1dC50aW1lb3V0OgorICAg
ICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKHRlc3RfZmFpbHVyZXMuRmFpbHVyZVRpbWVvdXQoKSkK
KworICAgICAgICB0ZXN0X25hbWUgPSBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUo
dGVzdF9maWxlbmFtZSkKKyAgICAgICAgaWYgdGVzdF9vdXRwdXQuY3Jhc2g6CisgICAgICAgICAg
ICBfbG9nLmRlYnVnKCIlcyBTdGFja3RyYWNlIGZvciAlczpcbiVzIiAlCisgICAgICAgICAgICAg
ICAgICAgICAgIChzZWxmLl9uYW1lLCB0ZXN0X25hbWUsIHRlc3Rfb3V0cHV0LmVycm9yKSkKKyAg
ICAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKHNlbGYuX29wdGlvbnMucmVzdWx0c19k
aXJlY3RvcnksIHRlc3RfbmFtZSkKKyAgICAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5zcGxp
dGV4dChmaWxlbmFtZSlbMF0gKyAiLXN0YWNrLnR4dCIKKyAgICAgICAgICAgIHNlbGYuX3BvcnQu
bWF5YmVfbWFrZV9kaXJlY3Rvcnkob3MucGF0aC5zcGxpdChmaWxlbmFtZSlbMF0pCisgICAgICAg
ICAgICB3aXRoIGNvZGVjcy5vcGVuKGZpbGVuYW1lLCAid2IiLCAidXRmLTgiKSBhcyBmaWxlOgor
ICAgICAgICAgICAgICAgIGZpbGUud3JpdGUodGVzdF9vdXRwdXQuZXJyb3IpCisgICAgICAgIGVs
aWYgdGVzdF9vdXRwdXQuZXJyb3I6CisgICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyAlcyBvdXRw
dXQgc3RkZXJyIGxpbmVzOlxuJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuX25h
bWUsIHRlc3RfbmFtZSwgdGVzdF9vdXRwdXQuZXJyb3IpKQorCisgICAgICAgIGV4cGVjdGVkX3Rl
c3Rfb3V0cHV0ID0gc2VsZi5fZXhwZWN0ZWRfdGVzdF9vdXRwdXQodGVzdF9maWxlbmFtZSkKKwor
ICAgICAgICAjIENoZWNrIHRoZSBvdXRwdXQgYW5kIHNhdmUgdGhlIHJlc3VsdHMuCisgICAgICAg
IHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQorICAgICAgICB0aW1lX2Zvcl9kaWZmcyA9IHt9Cisg
ICAgICAgIGZvciB0ZXN0X3R5cGUgaW4gc2VsZi5fdGVzdF90eXBlczoKKyAgICAgICAgICAgIHN0
YXJ0X2RpZmZfdGltZSA9IHRpbWUudGltZSgpCisgICAgICAgICAgICBuZXdfZmFpbHVyZXMgPSB0
ZXN0X3R5cGUuY29tcGFyZV9vdXRwdXQoc2VsZi5fcG9ydCwgdGVzdF9pbnB1dC5maWxlbmFtZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxm
Ll90ZXN0X2FyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGVzdF9vdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfdGVzdF9vdXRwdXQpCisgICAgICAgICAgICAjIERv
bid0IGFkZCBhbnkgbW9yZSBmYWlsdXJlcyBpZiB3ZSBhbHJlYWR5IGhhdmUgYSBjcmFzaCwgc28g
d2UKKyAgICAgICAgICAgICMgZG9uJ3QgZG91YmxlLXJlcG9ydCB0aG9zZSB0ZXN0cy4gV2UgZG8g
ZG91YmxlLXJlcG9ydCBmb3IgdGltZW91dHMKKyAgICAgICAgICAgICMgc2luY2Ugd2Ugc3RpbGwg
d2FudCB0byBzZWUgdGhlIHRleHQgYW5kIGltYWdlIG91dHB1dC4KKyAgICAgICAgICAgIGlmIG5v
dCB0ZXN0X291dHB1dC5jcmFzaDoKKyAgICAgICAgICAgICAgICBmYWlsdXJlcy5leHRlbmQobmV3
X2ZhaWx1cmVzKQorICAgICAgICAgICAgdGltZV9mb3JfZGlmZnNbdGVzdF90eXBlLl9fY2xhc3Nf
Xy5fX25hbWVfX10gPSAoCisgICAgICAgICAgICAgICAgdGltZS50aW1lKCkgLSBzdGFydF9kaWZm
X3RpbWUpCisKKyAgICAgICAgdG90YWxfdGltZV9mb3JfYWxsX2RpZmZzID0gdGltZS50aW1lKCkg
LSBzdGFydF9kaWZmX3RpbWUKKyAgICAgICAgcmV0dXJuIHRlc3RfcmVzdWx0cy5UZXN0UmVzdWx0
KHRlc3RfZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
YWlsdXJlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rfb3V0
cHV0LnRlc3RfdGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRv
dGFsX3RpbWVfZm9yX2FsbF9kaWZmcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRpbWVfZm9yX2RpZmZzKQorCisgICAgZGVmIF9leHBlY3RlZF90ZXN0X291dHB1dChz
ZWxmLCBmaWxlbmFtZSk6CisgICAgICAgICIiIlJldHVybnMgYW4gZXhwZWN0ZWQgVGVzdE91dHB1
dCBvYmplY3QuIiIiCisgICAgICAgIHJldHVybiB0ZXN0X291dHB1dC5UZXN0T3V0cHV0KHNlbGYu
X3BvcnQuZXhwZWN0ZWRfdGV4dChmaWxlbmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxmLl9wb3J0LmV4cGVjdGVkX2ltYWdlKGZpbGVuYW1lKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQuZXhwZWN0ZWRfY2hlY2tzdW0o
ZmlsZW5hbWUpKQorCisgICAgZGVmIF90ZWFyX2Rvd25fdGVzdChzZWxmLCB0ZXN0X2lucHV0LCBy
ZXN1bHQsIGVsYXBzZWRfdGltZSk6CisgICAgICAgIHNlbGYuX2JhdGNoX2NvdW50ICs9IDEKKyAg
ICAgICAgc2VsZi5fdGVzdHNfcnVuX2ZpbGUud3JpdGUodGVzdF9pbnB1dC5maWxlbmFtZSArICJc
biIpCisgICAgICAgIHRlc3RfbmFtZSA9IHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFt
ZSh0ZXN0X2lucHV0LmZpbGVuYW1lKQorCisgICAgICAgIGlmIHJlc3VsdC5mYWlsdXJlczoKKyAg
ICAgICAgICAgICMgQ2hlY2sgYW5kIGtpbGwgRHVtcFJlbmRlclRyZWUgaWYgd2UgbmVlZCB0by4K
KyAgICAgICAgICAgIGlmIGFueShbZi5zaG91bGRfa2lsbF9kdW1wX3JlbmRlcl90cmVlKCkgZm9y
IGYgaW4gcmVzdWx0LmZhaWx1cmVzXSk6CisgICAgICAgICAgICAgICAgc2VsZi5fa2lsbF9kdW1w
X3JlbmRlcl90cmVlKCkKKyAgICAgICAgICAgICAgICAjIFJlc2V0IHRoZSBiYXRjaCBjb3VudCBz
aW5jZSB0aGUgc2hlbGwganVzdCBib3VuY2VkLgorICAgICAgICAgICAgICAgIHNlbGYuX2JhdGNo
X2NvdW50ID0gMAorCisgICAgICAgICAgICAjIFByaW50IHRoZSBlcnJvciBtZXNzYWdlKHMpLgor
ICAgICAgICAgICAgX2xvZy5kZWJ1ZygiJXMgJXMgZmFpbGVkOiIgJSAoc2VsZi5fbmFtZSwgdGVz
dF9uYW1lKSkKKyAgICAgICAgICAgIGZvciBmIGluIHJlc3VsdC5mYWlsdXJlczoKKyAgICAgICAg
ICAgICAgICBfbG9nLmRlYnVnKCIlcyAgJXMiICUgKHNlbGYuX25hbWUsIGYubWVzc2FnZSgpKSkK
KyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIF9sb2cuZGVidWcoIiVzICVzIHBhc3NlZCIgJSAo
c2VsZi5fbmFtZSwgdGVzdF9uYW1lKSkKKworICAgICAgICBzZWxmLl9icm9rZXIucG9zdF9tZXNz
YWdlKCdmaW5pc2hlZF90ZXN0JywgcmVzdWx0LCBlbGFwc2VkX3RpbWUpCisKKyAgICAgICAgaWYg
c2VsZi5fYmF0Y2hfc2l6ZSA+IDAgYW5kIHNlbGYuX2JhdGNoX2NvdW50ID49IHNlbGYuX2JhdGNo
X3NpemU6CisgICAgICAgICAgICAjIEJvdW5jZSB0aGUgc2hlbGwgYW5kIHJlc2V0IGNvdW50Lgor
ICAgICAgICAgICAgc2VsZi5fa2lsbF9kdW1wX3JlbmRlcl90cmVlKCkKKyAgICAgICAgICAgIHNl
bGYuX2JhdGNoX2NvdW50ID0gMAorCisgICAgZGVmIF9zdGFydF9zZXJ2ZXJzX3dpdGhfbG9jayhz
ZWxmKToKKyAgICAgICAgX2xvZy5kZWJ1ZygnQWNxdWlyaW5nIGh0dHAgbG9jayAuLi4nKQorICAg
ICAgICBzZWxmLl9wb3J0LmFjcXVpcmVfaHR0cF9sb2NrKCkKKyAgICAgICAgX2xvZy5kZWJ1Zygn
U3RhcnRpbmcgSFRUUCBzZXJ2ZXIgLi4uJykKKyAgICAgICAgc2VsZi5fcG9ydC5zdGFydF9odHRw
X3NlcnZlcigpCisgICAgICAgIF9sb2cuZGVidWcoJ1N0YXJ0aW5nIFdlYlNvY2tldCBzZXJ2ZXIg
Li4uJykKKyAgICAgICAgc2VsZi5fcG9ydC5zdGFydF93ZWJzb2NrZXRfc2VydmVyKCkKKyAgICAg
ICAgc2VsZi5faGF2ZV9odHRwX2xvY2sgPSBUcnVlCisKKyAgICBkZWYgX3N0b3Bfc2VydmVyc193
aXRoX2xvY2soc2VsZik6CisgICAgICAgICIiIlN0b3AgdGhlIHNlcnZlcnMgYW5kIHJlbGVhc2Ug
aHR0cCBsb2NrLiIiIgorICAgICAgICBpZiBzZWxmLl9oYXZlX2h0dHBfbG9jazoKKyAgICAgICAg
ICAgIF9sb2cuZGVidWcoJ1N0b3BwaW5nIEhUVFAgc2VydmVyIC4uLicpCisgICAgICAgICAgICBz
ZWxmLl9wb3J0LnN0b3BfaHR0cF9zZXJ2ZXIoKQorICAgICAgICAgICAgX2xvZy5kZWJ1ZygnU3Rv
cHBpbmcgV2ViU29ja2V0IHNlcnZlciAuLi4nKQorICAgICAgICAgICAgc2VsZi5fcG9ydC5zdG9w
X3dlYnNvY2tldF9zZXJ2ZXIoKQorICAgICAgICAgICAgX2xvZy5kZWJ1ZygnUmVsZWFzaW5nIHNl
cnZlciBsb2NrIC4uLicpCisgICAgICAgICAgICBzZWxmLl9wb3J0LnJlbGVhc2VfaHR0cF9sb2Nr
KCkKKyAgICAgICAgICAgIHNlbGYuX2hhdmVfaHR0cF9sb2NrID0gRmFsc2UKKworICAgIGRlZiBf
a2lsbF9kdW1wX3JlbmRlcl90cmVlKHNlbGYpOgorICAgICAgICAiIiJLaWxsIHRoZSBEdW1wUmVu
ZGVyVHJlZSBwcm9jZXNzIGlmIGl0J3MgcnVubmluZy4iIiIKKyAgICAgICAgaWYgc2VsZi5fZHJp
dmVyOgorICAgICAgICAgICAgc2VsZi5fZHJpdmVyLnN0b3AoKQorICAgICAgICAgICAgc2VsZi5f
ZHJpdmVyID0gTm9uZQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKaW5kZXggMTM2ZTk5NWRmNmQ3OGYxNjU5NzQ1YzZj
YzhjNGMwOGYxODkyZGI3Mi4uNWZmZTcyZmY5YjYwYTViYzkxZWMwOTAyMmRlYzU1NWNlODIzZjAy
YiAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dl
YmtpdF90ZXN0cy5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9y
dW5fd2Via2l0X3Rlc3RzLnB5CkBAIC0zOSw2ICszOSw3IEBAIGltcG9ydCBzeXMKIAogZnJvbSBs
YXlvdXRfcGFja2FnZSBpbXBvcnQgcHJpbnRpbmcKIGZyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0
IHRlc3RfcnVubmVyCitmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X3J1bm5lcjIKIAog
ZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCB1c2VyCiBmcm9tIHdlYmtpdHB5LnRo
aXJkcGFydHkgaW1wb3J0IHNpbXBsZWpzb24KQEAgLTg3LDcgKzg4LDExIEBAIGRlZiBydW4ocG9y
dCwgb3B0aW9ucywgYXJncywgcmVndWxhcl9vdXRwdXQ9c3lzLnN0ZGVyciwKICAgICAjIGluIGEg
dHJ5L2ZpbmFsbHkgdG8gZW5zdXJlIHRoYXQgd2UgY2xlYW4gdXAgdGhlIGxvZ2dpbmcgY29uZmln
dXJhdGlvbi4KICAgICBudW1fdW5leHBlY3RlZF9yZXN1bHRzID0gLTEKICAgICB0cnk6Ci0gICAg
ICAgIHJ1bm5lciA9IHRlc3RfcnVubmVyLlRlc3RSdW5uZXIocG9ydCwgb3B0aW9ucywgcHJpbnRl
cikKKyAgICAgICAgaWYgb3B0aW9ucy53b3JrZXJfbW9kZWwgaW4gKCdpbmxpbmUnLCAndGhyZWFk
cycsICdwcm9jZXNzZXMnKToKKyAgICAgICAgICAgIHJ1bm5lciA9IHRlc3RfcnVubmVyMi5UZXN0
UnVubmVyMihwb3J0LCBvcHRpb25zLCBwcmludGVyKQorICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgcnVubmVyID0gdGVzdF9ydW5uZXIuVGVzdFJ1bm5lcihwb3J0LCBvcHRpb25zLCBwcmludGVy
KQorCiAgICAgICAgIHJ1bm5lci5fcHJpbnRfY29uZmlnKCkKIAogICAgICAgICBwcmludGVyLnBy
aW50X3VwZGF0ZSgiQ29sbGVjdGluZyB0ZXN0cyAuLi4iKQpAQCAtMTI5LDkgKzEzNCw5IEBAIGRl
ZiBfc2V0X3VwX2Rlcml2ZWRfb3B0aW9ucyhwb3J0X29iaiwgb3B0aW9ucyk6CiAgICAgaWYgb3B0
aW9ucy53b3JrZXJfbW9kZWwgaXMgTm9uZToKICAgICAgICAgb3B0aW9ucy53b3JrZXJfbW9kZWwg
PSBwb3J0X29iai5kZWZhdWx0X3dvcmtlcl9tb2RlbCgpCiAKLSAgICBpZiBvcHRpb25zLndvcmtl
cl9tb2RlbCA9PSAnb2xkLWlubGluZSc6CisgICAgaWYgb3B0aW9ucy53b3JrZXJfbW9kZWwgaW4g
KCdpbmxpbmUnLCAnb2xkLWlubGluZScpOgogICAgICAgICBpZiBvcHRpb25zLmNoaWxkX3Byb2Nl
c3NlcyBhbmQgaW50KG9wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKSA+IDE6Ci0gICAgICAgICAgICB3
YXJuaW5ncy5hcHBlbmQoIi0td29ya2VyLW1vZGVsPW9sZC1pbmxpbmUgb3ZlcnJpZGVzIC0tY2hp
bGQtcHJvY2Vzc2VzIikKKyAgICAgICAgICAgIHdhcm5pbmdzLmFwcGVuZCgiLS13b3JrZXItbW9k
ZWw9JXMgb3ZlcnJpZGVzIC0tY2hpbGQtcHJvY2Vzc2VzIiAlIG9wdGlvbnMud29ya2VyX21vZGVs
KQogICAgICAgICBvcHRpb25zLmNoaWxkX3Byb2Nlc3NlcyA9ICIxIgogICAgIGlmIG5vdCBvcHRp
b25zLmNoaWxkX3Byb2Nlc3NlczoKICAgICAgICAgb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMgPSBv
cy5lbnZpcm9uLmdldCgiV0VCS0lUX1RFU1RfQ0hJTERfUFJPQ0VTU0VTIiwKQEAgLTM2OSw4ICsz
NzQsOCBAQCBkZWYgcGFyc2VfYXJncyhhcmdzPU5vbmUpOgogICAgICAgICAgICAgaGVscD0iTnVt
YmVyIG9mIER1bXBSZW5kZXJUcmVlcyB0byBydW4gaW4gcGFyYWxsZWwuIiksCiAgICAgICAgICMg
RklYTUU6IERpc3BsYXkgZGVmYXVsdCBudW1iZXIgb2YgY2hpbGQgcHJvY2Vzc2VzIHRoYXQgd2ls
bCBydW4uCiAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXdvcmtlci1tb2RlbCIsIGFj
dGlvbj0ic3RvcmUiLAotICAgICAgICAgICAgZGVmYXVsdD1Ob25lLCBoZWxwPSgiY29udHJvbHMg
d29ya2VyIG1vZGVsLiBWYWxpZCB2YWx1ZXMgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiYXJlICdvbGQtaW5saW5lJywgJ29sZC10aHJlYWRzJy4iKSksCisgICAgICAgICAgICBk
ZWZhdWx0PU5vbmUsIGhlbHA9KCJjb250cm9scyB3b3JrZXIgbW9kZWwuIFZhbGlkIHZhbHVlcyBh
cmUgJ29sZC1pbmxpbmUnLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICInb2xk
LXRocmVhZHMnLCAnaW5saW5lJywgJ3RocmVhZHMnLCBhbmQgJ3Byb2Nlc3NlcycuIikpLAogICAg
ICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1leHBlcmltZW50YWwtZnVsbHktcGFyYWxsZWwi
LAogICAgICAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVmYXVsdD1GYWxzZSwKICAgICAg
ICAgICAgIGhlbHA9InJ1biBhbGwgdGVzdHMgaW4gcGFyYWxsZWwiKSwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80732</attachid>
            <date>2011-02-01 02:21:21 -0800</date>
            <delta_ts>2011-02-04 16:58:26 -0800</delta_ts>
            <desc>rebase to r77212</desc>
            <filename>bug-49566-20110201022120.patch</filename>
            <type>text/plain</type>
            <size>85529</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAzNDE1
NTQ2NTFjZmE3M2JiZTE1MGI3MmU5NmFjYmJmZWJkZDExYzAwLi4yNTE0YjAwNTkwZDg1YmI1MDdk
ZWUzMWY2ZTJlMDRiYTJiZWJjNmU5IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMDEtMTAgIERpcmsgUHJhbmtl
ICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgbmV3LXJ1bi13ZWJraXQtdGVzdHM6IGNoZWNrcG9pbnQgbWVyZ2Ug
b2YgZHVhbC1tb2RlIG11bHRpcHJvY2Vzc2luZyB3b3JrCisKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5NTY2CisKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyX3dvcmtlcl9icm9rZXIu
cHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL21hbmFnZXJfd29ya2VyX2Jyb2tlcl91bml0dGVzdC5weTogQWRkZWQuCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWVzc2Fn
ZV9icm9rZXIyLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tlcjJfdW5pdHRlc3QucHk6IEFkZGVkLgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rl
c3RfcnVubmVyMi5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvbGF5b3V0X3BhY2thZ2Uvd29ya2VyLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHk6CisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9tYWMucHk6CisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tYWMucHk6CisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weToKKwogMjAxMS0wMS0z
MSAgTWloYWkgUGFycGFyaXRhICA8bWloYWlwQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBUb255IENoYW5nLgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlcl93b3JrZXJfYnJva2VyLnB5IGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlcl93
b3JrZXJfYnJva2VyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlkZTdjNDliNTE1YTQ2MGI2MzcwNzJkYjUzZmUw
YTkxMTQ1MjI3ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyX3dvcmtlcl9icm9rZXIucHkKQEAgLTAs
MCArMSwzMzIgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMg
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBk
aXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisj
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisj
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJNb2R1bGUgZm9yIGhhbmRsaW5nIG1l
c3NhZ2VzIGFuZCBjb25jdXJyZW5jeSBmb3IgcnVuLXdlYmtpdC10ZXN0cy4KKworVGVzdGluZyBp
cyBhY2NvbXBsaXNoZWQgYnkgaGF2aW5nIGEgbWFuYWdlciAoVGVzdFJ1bm5lcikgZ2F0aGVyIGFs
bCBvZiB0aGUKK3Rlc3RzIHRvIGJlIHJ1biwgYW5kIHNlbmRpbmcgbWVzc2FnZXMgdG8gYSBwb29s
IG9mIHdvcmtlcnMgKFRlc3RTaGVsbFRocmVhZHMpCit0byBydW4gZWFjaCB0ZXN0LiBFYWNoIHdv
cmtlciBjb21tdW5pY2F0ZXMgd2l0aCBvbmUgZHJpdmVyICh1c3VhbGx5CitEdW1wUmVuZGVyVHJl
ZSkgdG8gcnVuIG9uZSB0ZXN0IGF0IGEgdGltZSBhbmQgdGhlbiBjb21wYXJlIHRoZSBvdXRwdXQg
YWdhaW5zdAord2hhdCB3ZSBleHBlY3RlZCB0byBnZXQuCisKK1RoaXMgbW9kdWxlcyBpbXBsZW1l
bnRzIGEgbWVzc2FnZSBicm9rZXIgdGhhdCBjb25uZWN0cyB0aGUgbWFuYWdlciB0byB0aGUKK3dv
cmtlcnM6IGl0IHByb3ZpZGVzIGEgbWVzc2FnaW5nIGFic3RyYWN0aW9uIGFuZCBtZXNzYWdlIGxv
b3BzLCBhbmQKK2hhbmRsZXMgbGF1bmNoaW5nIHRocmVhZHMgYW5kL29yIHByb2Nlc3NlcyBkZXBl
bmRpbmcgb24gdGhlIHJlcXVlc3RlZAorY29uZmlndXJhdGlvbi4KKworQm90aCBNYW5hZ2VycyBh
bmQgV29ya2VycyBhcmUgcmVxdWlyZWQgdG8gaW1wbGVtZW50IHRoZSBtZXRob2RzIGluIHRoZQor
QnJva2VyQ2xpZW50IGludGVyZmFjZSAvIGFic3RyYWN0IGJhc2UgY2xhc3MgaW4gb3JkZXIgdG8g
dGhlIG1lc3NhZ2UKK2Jyb2tlciB0byBwcm9wZXJseSBjb21tdW5pY2F0ZSB3aXRoIHRoZW0uCisK
K0V2ZXJ5dGhpbmcgc3RhcnRzIGJ5IGNhbGxpbmcgZ2V0KCkgdG8gb2J0YWluIGFuIGluaXRpYWwg
cmVmZXJlbmNlIHRvIGEgYnJva2VyLgorVGhlIGJyb2tlciBpcyBtZWRpYXRlZCBieSBhIENvbm5l
Y3Rpb24gb2JqZWN0IHRoYXQgcHJvdmlkZXMgc29tZSBzeW50YWN0aWMKK3N1Z2FyIHRvIHJlcHJl
c2VudCB0aGUgTWFuYWdlciBhbmQgV29ya2VyIGVuZHBvaW50cy4gVHlwaWNhbGx5IHRoZQorbWFu
YWdlciB0aGVuIGNhbGxzIHN0YXJ0X3dvcmtlcigpIHJlcGVhdGVkbHkgdG8gbGF1bmNoIHdvcmtl
cnMgKHdoaWNoIGFyZQordXN1YWxseSBydW4gaW4gc2VwYXJhdGUgdGhyZWFkcyBvciBwcm9jZXNz
ZXMgYXMgY29udHJvbGxlZCBieSB0aGUKKy0td29ya2VyLW1vZGVsIHJ1bnRpbWUgZmxhZyksIG9w
dGlvbmFsbHkgc2V0cyB1cCBzb21lIHRpbWVycywgYW5kIHRoZW4KK2ludm9rZXMgcnVuX21lc3Nh
Z2VfbG9vcCgpLgorIiIiCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9y
dCBRdWV1ZQoraW1wb3J0IHN5cworaW1wb3J0IHRocmVhZAoraW1wb3J0IHRocmVhZGluZworaW1w
b3J0IHRpbWUKK2ltcG9ydCB0cmFjZWJhY2sKKworCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIo
X19uYW1lX18pCisKK2Zyb20gd2Via2l0cHkgaW1wb3J0IGxheW91dF90ZXN0cworZnJvbSB3ZWJr
aXRweS5sYXlvdXRfdGVzdHMgaW1wb3J0IHBvcnQKKworaW1wb3J0IG1lc3NhZ2VfYnJva2VyMgor
CisjCisjIEhhbmRsZSBQeXRob24gPCAyLjYgd2hlcmUgbXVsdGlwcm9jZXNzaW5nIGlzbid0IGF2
YWlsYWJsZS4KKyMKK3RyeToKKyAgICBfbXVsdGlwcm9jZXNzaW5nX2lzX2F2YWlsYWJsZSA9IFRy
dWUKKyAgICBmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgUHJvY2VzcyBhcyBfTXVsdGlwcm9j
ZXNzaW5nX1Byb2Nlc3MKKyAgICBmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgUXVldWUgYXMg
X011bHRpcHJvY2Vzc2luZ19RdWV1ZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIF9tdWx0aXBy
b2Nlc3NpbmdfaXNfYXZhaWxhYmxlID0gRmFsc2UKKyAgICBfTXVsdGlwcm9jZXNzaW5nX1Byb2Nl
c3MgPSB0aHJlYWRpbmcuVGhyZWFkCisgICAgX011bHRpcHJvY2Vzc2luZ19RdWV1ZSA9IFF1ZXVl
LlF1ZXVlCisKKworIworIyBUb3BpYyBuYW1lcyBmb3IgTWFuYWdlciA8LT4gV29ya2VyIG1lc3Nh
Z2luZworIworTUFOQUdFUl9UT1BJQyA9ICdtYW5hZ2VycycKK0FOWV9XT1JLRVJfVE9QSUMgPSAn
d29ya2VycycKKworCitkZWYgcnVudGltZV9vcHRpb25zKCk6CisgICAgIiIiUmV0dXJuIGEgbGlz
dCBvZiBvcHRwYXJzZS5PcHRpb24gb2JqZWN0cyBmb3IgYW55IHJ1bnRpbWUgdmFsdWVzIHVzZWQK
KyAgICBieSB0aGlzIG1ldGhvZC4iIiIKKyAgICBvcHRpb25zID0gWworICAgICAgICBvcHRwYXJz
ZS5tYWtlX29wdGlvbigiLS13b3JrZXItbW9kZWwiLCBhY3Rpb249InN0b3JlIiwKKyAgICAgICAg
ICAgIGhlbHA9KCJjb250cm9scyB3b3JrZXIgbW9kZWwuIFZhbGlkIHZhbHVlcyBhcmUgIgorICAg
ICAgICAgICAgIidpbmxpbmUnLCAndGhyZWFkcycsIGFuZCAncHJvY2Vzc2VzJy4iKSksCisgICAg
XQorICAgIHJldHVybiBvcHRpb25zCisKKworZGVmIGdldChwb3J0LCBvcHRpb25zLCBtYW5hZ2Vy
LCB3b3JrZXJfY2xhc3MpOgorICAgICIiIlJldHVybiBhIGNvbm5lY3Rpb24gdG8gYSBtYW5hZ2Vy
L3dvcmtlciBtZXNzYWdlX2Jyb2tlcgorCisgICAgQXJnczoKKyAgICAgICAgcG9ydCAtIGhhbmRs
ZSB0byBsYXlvdXRfdGVzdHMvcG9ydCBvYmplY3QgZm9yIHBvcnQtc3BlY2lmaWMgc3R1ZmYKKyAg
ICAgICAgb3B0aW9ucyAtIG9wdHBhcnNlIGFyZ3VtZW50IGZvciBjb21tYW5kLWxpbmUgb3B0aW9u
cworICAgICAgICBtYW5hZ2VyIC0gb2JqZWN0IHRvIGRpc3BhdGNoIHJlcGxpZXMgdG8KKyAgICAg
ICAgd29ya2VyX2NsYXNzIC0gdHlwZSBvZiB3b3JrZXJzIHRvIGNyZWF0ZS4gVGhpcyBjbGFzcyBt
dXN0IGltcGxlbWVudAorICAgICAgICAgICAgdGhlIG1ldGhvZHMgaW4gdGhlIENsaWVudEludGVy
ZmFjZS4KKyAgICBSZXR1cm5zOgorICAgICAgICBBIGhhbmRsZSB0byBhbiBvYmplY3QgdGhhdCB3
aWxsIHRhbGsgdG8gYSBtZXNzYWdlIGJyb2tlciBjb25maWd1cmVkCisgICAgICAgIGZvciB0aGUg
bm9ybWFsIG1hbmFnZXIvd29ya2VyIGNvbW11bmljYXRpb24uCisgICAgIiIiCisgICAgd29ya2Vy
X21vZGVsID0gb3B0aW9ucy53b3JrZXJfbW9kZWwKKyAgICBpZiB3b3JrZXJfbW9kZWwgPT0gJ2lu
bGluZSc6CisgICAgICAgIHF1ZXVlX2NsYXNzID0gUXVldWUuUXVldWUKKyAgICAgICAgbWFuYWdl
cl9jbGFzcyA9IF9JbmxpbmVNYW5hZ2VyCisgICAgZWxpZiB3b3JrZXJfbW9kZWwgPT0gJ3RocmVh
ZHMnOgorICAgICAgICBxdWV1ZV9jbGFzcyA9IFF1ZXVlLlF1ZXVlCisgICAgICAgIG1hbmFnZXJf
Y2xhc3MgPSBfVGhyZWFkZWRNYW5hZ2VyCisgICAgZWxpZiB3b3JrZXJfbW9kZWwgPT0gJ3Byb2Nl
c3NlcycgYW5kIF9tdWx0aXByb2Nlc3NpbmdfaXNfYXZhaWxhYmxlOgorICAgICAgICBxdWV1ZV9j
bGFzcyA9IF9NdWx0aXByb2Nlc3NpbmdfUXVldWUKKyAgICAgICAgbWFuYWdlcl9jbGFzcyA9IF9N
dWx0aVByb2Nlc3NNYW5hZ2VyCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigi
dW5zdXBwb3J0ZWQgdmFsdWUgZm9yIC0td29ya2VyLW1vZGVsOiAlcyIgJQorICAgICAgICAgICAg
ICAgICAgICAgICAgIHdvcmtlcl9tb2RlbCkKKworICAgIGJyb2tlciA9IG1lc3NhZ2VfYnJva2Vy
Mi5Ccm9rZXIob3B0aW9ucywgcXVldWVfY2xhc3MpCisgICAgcmV0dXJuIG1hbmFnZXJfY2xhc3Mo
YnJva2VyLCBwb3J0LCBvcHRpb25zLCBtYW5hZ2VyLCB3b3JrZXJfY2xhc3MpCisKKworY2xhc3Mg
X01hbmFnZXJDb25uZWN0aW9uKG1lc3NhZ2VfYnJva2VyMi5Ccm9rZXJDb25uZWN0aW9uKToKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCBvcHRpb25zLCBtYW5hZ2VyLCB3b3JrZXJfY2xh
c3MpOgorICAgICAgICBtZXNzYWdlX2Jyb2tlcjIuQnJva2VyQ29ubmVjdGlvbi5fX2luaXRfXyhz
ZWxmLCBicm9rZXIsIE1BTkFHRVJfVE9QSUMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQU5ZX1dPUktFUl9UT1BJQykKKyAgICAgICAgc2VsZi5fYnJv
a2VyID0gYnJva2VyCisgICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCisgICAgICAgIHNl
bGYuX21hbmFnZXIgPSBtYW5hZ2VyCisgICAgICAgIHNlbGYuX3dvcmtlcl9jb25uZWN0aW9uX2Ns
YXNzID0gTm9uZQorICAgICAgICBzZWxmLl93b3JrZXJfY2xhc3MgPSB3b3JrZXJfY2xhc3MKKwor
ICAgIGRlZiBfbWFrZV93b3JrZXJfY29ubmVjdGlvbihzZWxmKToKKyAgICAgICAgcmFpc2UgTm90
SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIF9tYWtlX3dvcmtlcihzZWxmLCB3b3JrZXJfY29u
bmVjdGlvbiwgd29ya2VyX251bWJlciwgKiprd2FyZ3MpOgorICAgICAgICByZXR1cm4gc2VsZi5f
d29ya2VyX2NsYXNzKHdvcmtlcl9jb25uZWN0aW9uLCB3b3JrZXJfbnVtYmVyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMsICoqa3dhcmdzKQorCisgICAg
ZGVmIGNsaWVudChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX21hbmFnZXIKKworICAgIGRl
ZiBzdGFydF93b3JrZXIoc2VsZiwgd29ya2VyX251bWJlciwgKiprd2FyZ3MpOgorICAgICAgICB3
b3JrZXJfY29ubmVjdGlvbiA9IHNlbGYuX21ha2Vfd29ya2VyX2Nvbm5lY3Rpb24oKQorICAgICAg
ICB3b3JrZXIgPSBzZWxmLl9tYWtlX3dvcmtlcih3b3JrZXJfY29ubmVjdGlvbiwgd29ya2VyX251
bWJlciwgKiprd2FyZ3MpCisgICAgICAgIHdvcmtlcl9jb25uZWN0aW9uLnNldF93b3JrZXIod29y
a2VyKQorICAgICAgICB3b3JrZXJfY29ubmVjdGlvbi5zdGFydCgpCisgICAgICAgIHJldHVybiB3
b3JrZXJfY29ubmVjdGlvbgorCisKK2NsYXNzIF9JbmxpbmVNYW5hZ2VyKF9NYW5hZ2VyQ29ubmVj
dGlvbik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb2tlciwgcG9ydCwgb3B0aW9ucywgbWFu
YWdlciwgd29ya2VyX2NsYXNzKToKKyAgICAgICAgX01hbmFnZXJDb25uZWN0aW9uLl9faW5pdF9f
KHNlbGYsIGJyb2tlciwgb3B0aW9ucywgbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdvcmtlcl9jbGFzcykKKyAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKKyAg
ICAgICAgc2VsZi5faW5saW5lX3dvcmtlciA9IE5vbmUKKworICAgIGRlZiBfbWFrZV93b3JrZXJf
Y29ubmVjdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5faW5saW5lX3dvcmtlciA9IF9JbmxpbmVX
b3JrZXIoc2VsZi5fYnJva2VyLCBzZWxmLl9wb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLl9tYW5hZ2VyKQorICAgICAgICByZXR1cm4gc2VsZi5f
aW5saW5lX3dvcmtlcgorCisgICAgZGVmIHJ1bl9tZXNzYWdlX2xvb3Aoc2VsZiwgZGVsYXlfc2Vj
cz1Ob25lKToKKyAgICAgICAgIyBOb3RlIHRoYXQgZGVsYXlfc2VjcyBpcyBpZ25vcmVkIGluIHRo
aXMgY2FzZSBzaW5jZSB3ZSBjYW4ndCBlYXNpbHkKKyAgICAgICAgIyBpbXBsZW1lbnQgaXQuCisg
ICAgICAgIHNlbGYuX2lubGluZV93b3JrZXIucnVuKCkKKyAgICAgICAgc2VsZi5fYnJva2VyLnJ1
bl9hbGxfcGVuZGluZyhNQU5BR0VSX1RPUElDLCBzZWxmLl9tYW5hZ2VyKQorCisKK2NsYXNzIF9U
aHJlYWRlZE1hbmFnZXIoX01hbmFnZXJDb25uZWN0aW9uKToKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgYnJva2VyLCBwb3J0LCBvcHRpb25zLCBtYW5hZ2VyLCB3b3JrZXJfY2xhc3MpOgorICAgICAg
ICBfTWFuYWdlckNvbm5lY3Rpb24uX19pbml0X18oc2VsZiwgYnJva2VyLCBvcHRpb25zLCBtYW5h
Z2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyX2NsYXNzKQor
ICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAorCisgICAgZGVmIF9tYWtlX3dvcmtlcl9jb25uZWN0
aW9uKHNlbGYpOgorICAgICAgICByZXR1cm4gX1RocmVhZGVkV29ya2VyKHNlbGYuX2Jyb2tlciwg
c2VsZi5fcG9ydCkKKworCitjbGFzcyBfTXVsdGlQcm9jZXNzTWFuYWdlcihfTWFuYWdlckNvbm5l
Y3Rpb24pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXIsIHBvcnQsIG9wdGlvbnMsIG1h
bmFnZXIsIHdvcmtlcl9jbGFzcyk6CisgICAgICAgIF9NYW5hZ2VyQ29ubmVjdGlvbi5fX2luaXRf
XyhzZWxmLCBicm9rZXIsIG9wdGlvbnMsIG1hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3b3JrZXJfY2xhc3MpCisgICAgICAgIHNlbGYuX3BsYXRmb3JtX25hbWUg
PSBwb3J0LnJlYWxfbmFtZSgpCisKKyAgICBkZWYgX21ha2Vfd29ya2VyX2Nvbm5lY3Rpb24oc2Vs
Zik6CisgICAgICAgIHJldHVybiBfTXVsdGlQcm9jZXNzV29ya2VyKHNlbGYuX2Jyb2tlciwgc2Vs
Zi5fcGxhdGZvcm1fbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5fb3B0aW9ucykKKworCitjbGFzcyBfV29ya2VyQ29ubmVjdGlvbihtZXNzYWdlX2Jyb2tlcjIu
QnJva2VyQ29ubmVjdGlvbik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb2tlcik6CisgICAg
ICAgIG1lc3NhZ2VfYnJva2VyMi5Ccm9rZXJDb25uZWN0aW9uLl9faW5pdF9fKHNlbGYsIGJyb2tl
ciwgQU5ZX1dPUktFUl9UT1BJQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBNQU5BR0VSX1RPUElDKQorICAgICAgICBzZWxmLl93b3JrZXIgPSBOb25l
CisKKyAgICBkZWYgc2V0X3dvcmtlcihzZWxmLCB3b3JrZXIpOgorICAgICAgICBzZWxmLl93b3Jr
ZXIgPSB3b3JrZXIKKyAgICAgICAgc2VsZi5uYW1lID0gd29ya2VyLm5hbWUoKQorCisgICAgZGVm
IGNsaWVudChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3dvcmtlcgorCisgICAgZGVmIHN0
YXJ0KHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYg
cnVuKHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYg
eWllbGRfdG9fYnJva2VyKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgY2FuY2VsKHNl
bGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgaXNfYWxp
dmUoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBq
b2luKHNlbGYsIHRpbWVvdXQpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisK
KyAgICBkZWYgbG9nX3dlZGdlZF93b3JrZXIoc2VsZiwgdGVzdF9uYW1lKToKKyAgICAgICAgcmFp
c2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisKK2NsYXNzIF9JbmxpbmVXb3JrZXIoX1dvcmtlckNv
bm5lY3Rpb24pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXIsIHBvcnQsIG1hbmFnZXIp
OgorICAgICAgICBfV29ya2VyQ29ubmVjdGlvbi5fX2luaXRfXyhzZWxmLCBicm9rZXIpCisgICAg
ICAgIHNlbGYuX3BvcnQgPSBwb3J0CisgICAgICAgIHNlbGYuX21hbmFnZXIgPSBtYW5hZ2VyCisg
ICAgICAgIHNlbGYuX2FsaXZlID0gRmFsc2UKKworICAgIGRlZiBzdGFydChzZWxmKToKKyAgICAg
ICAgcGFzcworCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgc2VsZi5fYWxpdmUgPSBUcnVl
CisgICAgICAgIHNlbGYuX3dvcmtlci5ydW4oc2VsZi5fcG9ydCkKKyAgICAgICAgc2VsZi5fYWxp
dmUgPSBGYWxzZQorCisgICAgZGVmIHlpZWxkX3RvX2Jyb2tlcihzZWxmKToKKyAgICAgICAgc2Vs
Zi5fYnJva2VyLnJ1bl9hbGxfcGVuZGluZyhNQU5BR0VSX1RPUElDLCBzZWxmLl9tYW5hZ2VyKQor
CisgICAgZGVmIGNhbmNlbChzZWxmKToKKyAgICAgICAgc2VsZi5fd29ya2VyLmNhbmNlbCgpCisK
KyAgICBkZWYgaXNfYWxpdmUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9hbGl2ZQorCisg
ICAgZGVmIGpvaW4oc2VsZiwgdGltZW91dCk6CisgICAgICAgIGFzc2VydCBub3Qgc2VsZi5pc19h
bGl2ZSgpCisKKyAgICBkZWYgbG9nX3dlZGdlZF93b3JrZXIoc2VsZiwgdGVzdF9uYW1lKToKKyAg
ICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoIl9JbmxpbmVXb3JrZXIubG9nX3dlZGdlZF93b3Jr
ZXIoKSBjYWxsZWQiKQorCisKK2NsYXNzIF9UaHJlYWRlZFdvcmtlcih0aHJlYWRpbmcuVGhyZWFk
LCBfV29ya2VyQ29ubmVjdGlvbik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb2tlciwgcG9y
dCk6CisgICAgICAgIHRocmVhZGluZy5UaHJlYWQuX19pbml0X18oc2VsZikKKyAgICAgICAgX1dv
cmtlckNvbm5lY3Rpb24uX19pbml0X18oc2VsZiwgYnJva2VyKQorICAgICAgICBzZWxmLl9wb3J0
ID0gcG9ydAorCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgIyBGSVhNRTogV2UgY2FuIHJl
bW92ZSB0aGlzIG9uY2UgZXZlcnlvbmUgaXMgb24gMi42LgorICAgICAgICBpZiBub3QgaGFzYXR0
cihzZWxmLCAnaWRlbnQnKToKKyAgICAgICAgICAgIHNlbGYuaWRlbnQgPSB0aHJlYWQuZ2V0X2lk
ZW50KCkKKyAgICAgICAgc2VsZi5fd29ya2VyLnJ1bihzZWxmLl9wb3J0KQorCisgICAgZGVmIGNh
bmNlbChzZWxmKToKKyAgICAgICAgc2VsZi5fd29ya2VyLmNhbmNlbCgpCisKKyAgICBkZWYgaXNf
YWxpdmUoc2VsZik6CisgICAgICAgICMgRklYTUU6IFdlIGNhbiByZW1vdmUgdGhpcyBvbmNlIGV2
ZXJ5b25lIGlzIG9uIDIuNi4KKyAgICAgICAgc2VsZi5pc0FsaXZlKCkKKworICAgIGRlZiBsb2df
d2VkZ2VkX3dvcmtlcihzZWxmLCB0ZXN0X25hbWUpOgorICAgICAgICB0aWQgPSBzZWxmLmlkZW50
CisgICAgICAgIHN0YWNrID0gX2ZpbmRfdGhyZWFkX3N0YWNrKHRpZCkKKyAgICAgICAgYXNzZXJ0
KHN0YWNrIGlzIG5vdCBOb25lKQorICAgICAgICBfbG9nLmVycm9yKCIlcyAodGlkICVkKSBpcyB3
ZWRnZWQgb24gdGVzdCAlcyIgJQorICAgICAgICAgICAgICAgICAgIChzZWxmLm5hbWUsIHRpZCwg
dGVzdF9uYW1lKSkKKyAgICAgICAgX2xvZ19zdGFjayhzdGFjaykKKworCitjbGFzcyBfTXVsdGlQ
cm9jZXNzV29ya2VyKF9NdWx0aXByb2Nlc3NpbmdfUHJvY2VzcywgX1dvcmtlckNvbm5lY3Rpb24p
OgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXIsIHBsYXRmb3JtX25hbWUsIG9wdGlvbnMp
OgorICAgICAgICBfTXVsdGlwcm9jZXNzaW5nX1Byb2Nlc3MuX19pbml0X18oc2VsZikKKyAgICAg
ICAgX1dvcmtlckNvbm5lY3Rpb24uX19pbml0X18oc2VsZiwgYnJva2VyKQorICAgICAgICBzZWxm
Ll9vcHRpb25zID0gb3B0aW9ucworICAgICAgICBzZWxmLl9wbGF0Zm9ybV9uYW1lID0gcGxhdGZv
cm1fbmFtZQorCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgIyBSZS1jb25maWd1cmUgdGhl
IGxvZ2dlci4KKyAgICAgICAgIyBGSVhNRTogZmlndXJlIG91dCBob3cgdG8gZ2V0IGEgaGFuZGxl
IHRvIHRoZSByaWdodCBzdHJlYW0uCisgICAgICAgIGxvZ2dpbmcuYmFzaWNDb25maWcoKQorICAg
ICAgICBwb3J0ID0gbGF5b3V0X3Rlc3RzLnBvcnQuZ2V0KHNlbGYuX3BsYXRmb3JtX25hbWUsIHNl
bGYuX29wdGlvbnMpCisgICAgICAgIHNlbGYuX3dvcmtlci5ydW4ocG9ydCkKKworICAgIGRlZiBj
YW5jZWwoc2VsZik6CisgICAgICAgIHNlbGYudGVybWluYXRlKCkKKworICAgIGRlZiBsb2dfd2Vk
Z2VkX3dvcmtlcihzZWxmLCB0ZXN0X25hbWUpOgorICAgICAgICBfbG9nLmVycm9yKCIlcyAocGlk
ICVkKSBpcyB3ZWRnZWQgb24gdGVzdCAlcyIgJQorICAgICAgICAgICAgICAgICAgIChzZWxmLm5h
bWUsIHNlbGYucGlkLCB0ZXN0X25hbWUpKQorCisKK2RlZiBfZmluZF90aHJlYWRfc3RhY2sodGlk
KToKKyAgICAiIiJSZXR1cm5zIGEgc3RhY2sgb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gZHVt
cCBhIHN0YWNrIHRyYWNlIGZvcgorICAgIHRoZSBnaXZlbiB0aHJlYWQgaWQgKG9yIE5vbmUgaWYg
dGhlIGlkIGlzIG5vdCBmb3VuZCkuIiIiCisgICAgZm9yIHRocmVhZF9pZCwgc3RhY2sgaW4gc3lz
Ll9jdXJyZW50X2ZyYW1lcygpLml0ZW1zKCk6CisgICAgICAgIGlmIHRocmVhZF9pZCA9PSB0aWQ6
CisgICAgICAgICAgICByZXR1cm4gc3RhY2sKKyAgICByZXR1cm4gTm9uZQorCisKK2RlZiBfbG9n
X3N0YWNrKHN0YWNrKToKKyAgICAiIiJMb2cgYSBzdGFjayB0cmFjZSB0byBsb2cuZXJyb3IoKS4i
IiIKKyAgICBmb3IgZmlsZW5hbWUsIGxpbmVubywgbmFtZSwgbGluZSBpbiB0cmFjZWJhY2suZXh0
cmFjdF9zdGFjayhzdGFjayk6CisgICAgICAgIF9sb2cuZXJyb3IoJ0ZpbGU6ICIlcyIsIGxpbmUg
JWQsIGluICVzJyAlIChmaWxlbmFtZSwgbGluZW5vLCBuYW1lKSkKKyAgICAgICAgaWYgbGluZToK
KyAgICAgICAgICAgIF9sb2cuZXJyb3IoJyAgJXMnICUgbGluZS5zdHJpcCgpKQpkaWZmIC0tZ2l0
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFu
YWdlcl93b3JrZXJfYnJva2VyX3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlcl93b3JrZXJfYnJva2VyX3VuaXR0ZXN0
LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjhlOThiYjI3M2ZjOGRjMTc4ZThlYzdhZTEwOGIzOGU1NzA3OTM2YjAK
LS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9s
YXlvdXRfcGFja2FnZS9tYW5hZ2VyX3dvcmtlcl9icm9rZXJfdW5pdHRlc3QucHkKQEAgLTAsMCAr
MSwzMTEgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0
cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCBRdWV1
ZQoraW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0CisKK3RyeToKKyAgICBfbXVsdGlwcm9jZXNz
aW5nX2lzX2F2YWlsYWJsZSA9IFRydWUKKyAgICBmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQg
UXVldWUgYXMgX011bHRpcHJvY2Vzc2luZ19RdWV1ZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAg
IF9tdWx0aXByb2Nlc3NpbmdfaXNfYXZhaWxhYmxlID0gRmFsc2UKKyAgICBfTXVsdGlwcm9jZXNz
aW5nX1F1ZXVlID0gUXVldWUuUXVldWUKKworCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0g
aW1wb3J0IG91dHB1dGNhcHR1cmUKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzIGltcG9ydCBw
b3J0CisKK2ltcG9ydCBtZXNzYWdlX2Jyb2tlcjIKK2ltcG9ydCBtYW5hZ2VyX3dvcmtlcl9icm9r
ZXIKK2ltcG9ydCBwcmludGluZworCisKK2NsYXNzIFRlc3RXb3JrZXIobWVzc2FnZV9icm9rZXIy
LkNsaWVudEludGVyZmFjZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb2tlciwgd29ya2Vy
X251bWJlciwgb3B0aW9ucywgKiprd2FyZ3MpOgorICAgICAgICBzZWxmLl9icm9rZXIgPSBicm9r
ZXIKKyAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKKyAgICAgICAgc2VsZi5fd29ya2Vy
X251bWJlciA9IHdvcmtlcl9udW1iZXIKKyAgICAgICAgc2VsZi5fbmFtZSA9ICdUZXN0V29ya2Vy
LyVkJyAlIHdvcmtlcl9udW1iZXIKKyAgICAgICAgc2VsZi5fY2FuY2VsZWQgPSBGYWxzZQorICAg
ICAgICBzZWxmLl9zdG9wcGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5fc3RhcnRpbmdfcXVldWUg
PSBrd2FyZ3MuZ2V0KCdzdGFydGluZ19xdWV1ZScpCisgICAgICAgIHNlbGYuX3N0b3BwaW5nX3F1
ZXVlID0ga3dhcmdzLmdldCgnc3RvcHBpbmdfcXVldWUnKQorCisgICAgZGVmIGNhbmNlbChzZWxm
KToKKyAgICAgICAgc2VsZi5fY2FuY2VsZWQgPSBUcnVlCisKKyAgICBkZWYgaGFuZGxlX3N0b3Ao
c2VsZiwgc3JjKToKKyAgICAgICAgc2VsZi5fc3RvcHBlZCA9IFRydWUKKworICAgIGRlZiBoYW5k
bGVfdGVzdChzZWxmLCBzcmMsIGFuX2ludCwgYV9zdHIpOgorICAgICAgICBhc3NlcnQgYW5faW50
ID09IDEKKyAgICAgICAgYXNzZXJ0IGFfc3RyID09ICJoZWxsbywgd29ybGQiCisgICAgICAgIHNl
bGYuX2Jyb2tlci5wb3N0X21lc3NhZ2UoJ3Rlc3QnLCAyLCAnaGksIGV2ZXJ5Ym9keScpCisKKyAg
ICBkZWYgaXNfZG9uZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3N0b3BwZWQgb3Igc2Vs
Zi5fY2FuY2VsZWQKKworICAgIGRlZiBuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5f
bmFtZQorCisgICAgZGVmIHN0YXJ0KHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgcnVu
KHNlbGYsIHBvcnQpOgorICAgICAgICBpZiBzZWxmLl9zdGFydGluZ19xdWV1ZToKKyAgICAgICAg
ICAgIHNlbGYuX3N0YXJ0aW5nX3F1ZXVlLnB1dCgnJykKKyAgICAgICAgaWYgc2VsZi5fc3RvcHBp
bmdfcXVldWU6CisgICAgICAgICAgICBzZWxmLl9zdG9wcGluZ19xdWV1ZS5nZXQoKQorICAgICAg
ICB0cnk6CisgICAgICAgICAgICBzZWxmLl9icm9rZXIucnVuX21lc3NhZ2VfbG9vcCgpCisgICAg
ICAgICAgICBzZWxmLl9icm9rZXIueWllbGRfdG9fYnJva2VyKCkKKyAgICAgICAgICAgIHNlbGYu
X2Jyb2tlci5wb3N0X21lc3NhZ2UoJ2RvbmUnKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBl
OgorICAgICAgICAgICAgc2VsZi5fYnJva2VyLnBvc3RfbWVzc2FnZSgnZXhjZXB0aW9uJywgKHR5
cGUoZSksIHN0cihlKSwgTm9uZSkpCisKKworZGVmIGdldF9vcHRpb25zKHdvcmtlcl9tb2RlbCk6
CisgICAgb3B0aW9uX2xpc3QgPSBtYW5hZ2VyX3dvcmtlcl9icm9rZXIucnVudGltZV9vcHRpb25z
KCkKKyAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIob3B0aW9uX2xpc3Q9b3B0aW9u
X2xpc3QpCisgICAgb3B0aW9ucywgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3M9WyctLXdv
cmtlci1tb2RlbCcsIHdvcmtlcl9tb2RlbF0pCisgICAgcmV0dXJuIG9wdGlvbnMKKworCitkZWYg
bWFrZV9icm9rZXIobWFuYWdlciwgd29ya2VyX21vZGVsKToKKyAgICBvcHRpb25zID0gZ2V0X29w
dGlvbnMod29ya2VyX21vZGVsKQorICAgIHJldHVybiBtYW5hZ2VyX3dvcmtlcl9icm9rZXIuZ2V0
KHBvcnQuZ2V0KCJ0ZXN0IiksIG9wdGlvbnMsIG1hbmFnZXIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVGVzdFdvcmtlcikKKworCitjbGFzcyBGdW5jdGlvblRlc3RzKHVu
aXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9nZXRfX2lubGluZShzZWxmKToKKyAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKG1ha2VfYnJva2VyKHNlbGYsICdpbmxpbmUnKSBpcyBub3QgTm9u
ZSkKKworICAgIGRlZiB0ZXN0X2dldF9fdGhyZWFkcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3Nl
cnRUcnVlKG1ha2VfYnJva2VyKHNlbGYsICd0aHJlYWRzJykgaXMgbm90IE5vbmUpCisKKyAgICBk
ZWYgdGVzdF9nZXRfX3Byb2Nlc3NlcyhzZWxmKToKKyAgICAgICAgaWYgX211bHRpcHJvY2Vzc2lu
Z19pc19hdmFpbGFibGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobWFrZV9icm9rZXIo
c2VsZiwgJ3Byb2Nlc3NlcycpIGlzIG5vdCBOb25lKQorICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWFrZV9icm9rZXIsIHNlbGYsICdwcm9j
ZXNzZXMnKQorCisgICAgZGVmIHRlc3RfZ2V0X191bmtub3duKHNlbGYpOgorICAgICAgICBzZWxm
LmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYWtlX2Jyb2tlciwgc2VsZiwgJ3Vua25vd24nKQor
CisKK2NsYXNzIF9UZXN0c01peGluKG9iamVjdCk6CisgICAgIiIiTWl4aW4gY2xhc3MgdGhhdCBp
bXBsZW1lbnRzIGEgc2VyaWVzIG9mIHRlc3RzIHRvIGVuZm9yY2UgdGhlCisgICAgY29udHJhY3Qg
YWxsIGltcGxlbWVudGF0aW9ucyBtdXN0IGZvbGxvdy4iIiIKKworICAgICMKKyAgICAjIE1ldGhv
ZHMgdG8gaW1wbGVtZW50IHRoZSBNYW5hZ2VyIHNpZGUgb2YgdGhlIENsaWVudEludGVyZmFjZQor
ICAgICMKKyAgICBkZWYgbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuICdUZXN0ZXInCisKKyAg
ICBkZWYgaXNfZG9uZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2RvbmUKKworICAgICMK
KyAgICAjIEhhbmRsZXJzIGZvciB0aGUgbWVzc2FnZXMgdGhlIFRlc3RXb3JrZXIgbWF5IHNlbmQu
CisgICAgIworICAgIGRlZiBoYW5kbGVfZG9uZShzZWxmLCBzcmMpOgorICAgICAgICBzZWxmLl9k
b25lID0gVHJ1ZQorCisgICAgZGVmIGhhbmRsZV90ZXN0KHNlbGYsIHNyYywgYW5faW50LCBhX3N0
cik6CisgICAgICAgIHNlbGYuX2FuX2ludCA9IGFuX2ludAorICAgICAgICBzZWxmLl9hX3N0ciA9
IGFfc3RyCisKKyAgICBkZWYgaGFuZGxlX2V4Y2VwdGlvbihzZWxmLCBzcmMsIGV4Y19pbmZvKToK
KyAgICAgICAgc2VsZi5fZXhjZXB0aW9uID0gZXhjX2luZm8KKyAgICAgICAgc2VsZi5fZG9uZSA9
IFRydWUKKworICAgICMKKyAgICAjIFRlc3RpbmcgaGVscGVyIG1ldGhvZHMKKyAgICAjCisgICAg
ZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLl9hbl9pbnQgPSBOb25lCisgICAgICAgIHNl
bGYuX2Ffc3RyID0gTm9uZQorICAgICAgICBzZWxmLl9icm9rZXIgPSBOb25lCisgICAgICAgIHNl
bGYuX2RvbmUgPSBGYWxzZQorICAgICAgICBzZWxmLl9leGNlcHRpb24gPSBOb25lCisgICAgICAg
IHNlbGYuX3dvcmtlcl9tb2RlbCA9IE5vbmUKKworICAgIGRlZiBtYWtlX2Jyb2tlcihzZWxmKToK
KyAgICAgICAgc2VsZi5fYnJva2VyID0gbWFrZV9icm9rZXIoc2VsZiwgc2VsZi5fd29ya2VyX21v
ZGVsKQorCisgICAgIworICAgICMgQWN0dWFsIHVuaXQgdGVzdHMKKyAgICAjCisgICAgZGVmIHRl
c3RfY2FuY2VsKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5fd29ya2VyX21vZGVsOgorICAg
ICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYubWFrZV9icm9rZXIoKQorICAgICAgICB3b3Jr
ZXIgPSBzZWxmLl9icm9rZXIuc3RhcnRfd29ya2VyKDApCisgICAgICAgIHdvcmtlci5jYW5jZWwo
KQorICAgICAgICBzZWxmLl9icm9rZXIucG9zdF9tZXNzYWdlKCd0ZXN0JywgMSwgJ2hlbGxvLCB3
b3JsZCcpCisgICAgICAgIHdvcmtlci5qb2luKDAuNSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxz
ZSh3b3JrZXIuaXNfYWxpdmUoKSkKKworICAgIGRlZiB0ZXN0X2RvbmUoc2VsZik6CisgICAgICAg
IGlmIG5vdCBzZWxmLl93b3JrZXJfbW9kZWw6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAg
c2VsZi5tYWtlX2Jyb2tlcigpCisgICAgICAgIHdvcmtlciA9IHNlbGYuX2Jyb2tlci5zdGFydF93
b3JrZXIoMCkKKyAgICAgICAgc2VsZi5fYnJva2VyLnBvc3RfbWVzc2FnZSgndGVzdCcsIDEsICdo
ZWxsbywgd29ybGQnKQorICAgICAgICBzZWxmLl9icm9rZXIucG9zdF9tZXNzYWdlKCdzdG9wJykK
KyAgICAgICAgc2VsZi5fYnJva2VyLnJ1bl9tZXNzYWdlX2xvb3AoKQorICAgICAgICB3b3JrZXIu
am9pbigwLjUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uod29ya2VyLmlzX2FsaXZlKCkpCisg
ICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmlzX2RvbmUoKSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChzZWxmLl9hbl9pbnQsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5f
YV9zdHIsICdoaSwgZXZlcnlib2R5JykKKworICAgIGRlZiB0ZXN0X2xvZ193ZWRnZWRfd29ya2Vy
KHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5fd29ya2VyX21vZGVsOgorICAgICAgICAgICAg
cmV0dXJuCisgICAgICAgIHN0YXJ0aW5nX3F1ZXVlID0gc2VsZi5xdWV1ZSgpCisgICAgICAgIHN0
b3BwaW5nX3F1ZXVlID0gc2VsZi5xdWV1ZSgpCisgICAgICAgIHNlbGYubWFrZV9icm9rZXIoKQor
ICAgICAgICBvYyA9IG91dHB1dGNhcHR1cmUuT3V0cHV0Q2FwdHVyZSgpCisgICAgICAgIG9jLmNh
cHR1cmVfb3V0cHV0KCkKKyAgICAgICAgd29ya2VyID0gc2VsZi5fYnJva2VyLnN0YXJ0X3dvcmtl
cigwLAorICAgICAgICAgICAgc3RhcnRpbmdfcXVldWU9c3RhcnRpbmdfcXVldWUsIHN0b3BwaW5n
X3F1ZXVlPXN0b3BwaW5nX3F1ZXVlKQorICAgICAgICBzdGFydGluZ19xdWV1ZS5nZXQoKQorICAg
ICAgICB3b3JrZXIubG9nX3dlZGdlZF93b3JrZXIoJ3Rlc3RfbmFtZScpCisgICAgICAgIHN0b3Bw
aW5nX3F1ZXVlLnB1dCgnJykKKyAgICAgICAgc2VsZi5fYnJva2VyLnBvc3RfbWVzc2FnZSgnc3Rv
cCcpCisgICAgICAgIHNlbGYuX2Jyb2tlci5ydW5fbWVzc2FnZV9sb29wKCkKKyAgICAgICAgd29y
a2VyLmpvaW4oMC41KQorICAgICAgICBvYy5yZXN0b3JlX291dHB1dCgpCisgICAgICAgIHNlbGYu
YXNzZXJ0RmFsc2Uod29ya2VyLmlzX2FsaXZlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShz
ZWxmLmlzX2RvbmUoKSkKKworICAgIGRlZiB0ZXN0X3Vua25vd25fbWVzc2FnZShzZWxmKToKKyAg
ICAgICAgaWYgbm90IHNlbGYuX3dvcmtlcl9tb2RlbDoKKyAgICAgICAgICAgIHJldHVybgorICAg
ICAgICBzZWxmLm1ha2VfYnJva2VyKCkKKyAgICAgICAgd29ya2VyID0gc2VsZi5fYnJva2VyLnN0
YXJ0X3dvcmtlcigwKQorICAgICAgICBzZWxmLl9icm9rZXIucG9zdF9tZXNzYWdlKCd1bmtub3du
JykKKyAgICAgICAgc2VsZi5fYnJva2VyLnJ1bl9tZXNzYWdlX2xvb3AoKQorICAgICAgICB3b3Jr
ZXIuam9pbigwLjUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuaXNfZG9uZSgpKQor
ICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHdvcmtlci5pc19hbGl2ZSgpKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFscyhzZWxmLl9leGNlcHRpb25bMF0sIFZhbHVlRXJyb3IpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWxzKHNlbGYuX2V4Y2VwdGlvblsxXSwKKyAgICAgICAgICAgICJUZXN0V29y
a2VyLzA6IHJlY2VpdmVkIG1lc3NhZ2UgJ3Vua25vd24nIGl0IGNvdWxkbid0IGhhbmRsZSIpCisK
KworY2xhc3MgSW5saW5lQnJva2VyVGVzdHMoX1Rlc3RzTWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNl
KToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIF9UZXN0c01peGluLnNldFVwKHNlbGYp
CisgICAgICAgIHNlbGYuX3dvcmtlcl9tb2RlbCA9ICdpbmxpbmUnCisKKyAgICBkZWYgdGVzdF9s
b2dfd2VkZ2VkX3dvcmtlcihzZWxmKToKKyAgICAgICAgc2VsZi5tYWtlX2Jyb2tlcigpCisgICAg
ICAgIHdvcmtlciA9IHNlbGYuX2Jyb2tlci5zdGFydF93b3JrZXIoMCkKKyAgICAgICAgc2VsZi5h
c3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIHdvcmtlci5sb2dfd2VkZ2VkX3dvcmtlciwgTm9u
ZSkKKworCitjbGFzcyBNdWx0aVByb2Nlc3NCcm9rZXJUZXN0cyhfVGVzdHNNaXhpbiwgdW5pdHRl
c3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgX1Rlc3RzTWl4aW4u
c2V0VXAoc2VsZikKKyAgICAgICAgaWYgX211bHRpcHJvY2Vzc2luZ19pc19hdmFpbGFibGU6Cisg
ICAgICAgICAgICBzZWxmLl93b3JrZXJfbW9kZWwgPSAncHJvY2Vzc2VzJworICAgICAgICBlbHNl
OgorICAgICAgICAgICAgc2VsZi5fd29ya2VyX21vZGVsID0gTm9uZQorCisgICAgZGVmIHF1ZXVl
KHNlbGYpOgorICAgICAgICByZXR1cm4gX011bHRpcHJvY2Vzc2luZ19RdWV1ZSgpCisKKworY2xh
c3MgVGhyZWFkZWRCcm9rZXJUZXN0cyhfVGVzdHNNaXhpbiwgdW5pdHRlc3QuVGVzdENhc2UpOgor
ICAgIGRlZiBxdWV1ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIFF1ZXVlLlF1ZXVlKCkKKworICAg
IGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgX1Rlc3RzTWl4aW4uc2V0VXAoc2VsZikKKyAgICAg
ICAgc2VsZi5fd29ya2VyX21vZGVsID0gJ3RocmVhZHMnCisKKworY2xhc3MgRnVuY3Rpb25zVGVz
dCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfZmluZF90aHJlYWRfc3RhY2tfZm91
bmQoc2VsZik6CisgICAgICAgIGlkLCBzdGFjayA9IHN5cy5fY3VycmVudF9mcmFtZXMoKS5pdGVt
cygpWzBdCisgICAgICAgIGZvdW5kX3N0YWNrID0gbWFuYWdlcl93b3JrZXJfYnJva2VyLl9maW5k
X3RocmVhZF9zdGFjayhpZCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChmb3VuZF9zdGFj
aywgTm9uZSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfdGhyZWFkX3N0YWNrX25vdF9mb3VuZChzZWxm
KToKKyAgICAgICAgZm91bmRfc3RhY2sgPSBtYW5hZ2VyX3dvcmtlcl9icm9rZXIuX2ZpbmRfdGhy
ZWFkX3N0YWNrKDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm91bmRfc3RhY2ssIE5vbmUp
CisKKyAgICBkZWYgdGVzdF9sb2dfc3RhY2soc2VsZik6CisgICAgICAgIGlkLCBzdGFjayA9IHN5
cy5fY3VycmVudF9mcmFtZXMoKS5pdGVtcygpWzBdCisgICAgICAgIG9jID0gb3V0cHV0Y2FwdHVy
ZS5PdXRwdXRDYXB0dXJlKCkKKyAgICAgICAgIyBGSVhNRTogdmVyaWZ5IG91dHB1dD8KKyAgICAg
ICAgb2MuY2FwdHVyZV9vdXRwdXQoKQorICAgICAgICBtYW5hZ2VyX3dvcmtlcl9icm9rZXIuX2xv
Z19zdGFjayhzdGFjaykKKyAgICAgICAgb2MucmVzdG9yZV9vdXRwdXQoKQorCisgICAgZGVmIHRl
c3RfcnVudGltZV9vcHRpb25zKHNlbGYpOgorICAgICAgICBvcHRpb25fbGlzdCA9IG1hbmFnZXJf
d29ya2VyX2Jyb2tlci5ydW50aW1lX29wdGlvbnMoKQorICAgICAgICBwYXJzZXIgPSBvcHRwYXJz
ZS5PcHRpb25QYXJzZXIob3B0aW9uX2xpc3Q9b3B0aW9uX2xpc3QpCisgICAgICAgIG9wdGlvbnMs
IGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyhbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9w
dGlvbnMpCisKKworY2xhc3MgSW50ZXJmYWNlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAg
IyBUaGVzZSB0ZXN0cyBtb3N0bHkgZXhpc3QgdG8gcGFjaWZ5IGNvdmVyYWdlLgorCisgICAgIyBG
SVhNRTogVGhlcmUgbXVzdCBiZSBhIGJldHRlciB3YXkgdG8gZG8gdGhpcyBhbmQgYWxzbyB2ZXJp
ZnkKKyAgICAjIHRoYXQgY2xhc3NlcyBkbyBpbXBsZW1lbnQgZXZlcnkgYWJzdHJhY3QgbWV0aG9k
IGluIGFuIGludGVyZmFjZS4KKyAgICBkZWYgdGVzdF9tYW5hZ2VyY29ubmVjdGlvbl9pc19hYnN0
cmFjdChzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgYWxsIHRoZSBiYXNlIGNsYXNzIG1ldGhv
ZHMgYXJlIGFic3RyYWN0IGFuZCBoYXZlIHRoZQorICAgICAgICAjIHNpZ25hdHVyZSB3ZSBleHBl
Y3QuCisgICAgICAgIGJyb2tlciA9IG1ha2VfYnJva2VyKHNlbGYsICdpbmxpbmUnKQorICAgICAg
ICBvYmogPSBtYW5hZ2VyX3dvcmtlcl9icm9rZXIuX01hbmFnZXJDb25uZWN0aW9uKGJyb2tlci5f
YnJva2VyLCBOb25lLCBzZWxmLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJ
bXBsZW1lbnRlZEVycm9yLCBvYmouX21ha2Vfd29ya2VyX2Nvbm5lY3Rpb24pCisKKyAgICBkZWYg
dGVzdF93b3JrZXJjb25uZWN0aW9uX2lzX2Fic3RyYWN0KHNlbGYpOgorICAgICAgICAjIFRlc3Qg
dGhhdCBhbGwgdGhlIGJhc2UgY2xhc3MgbWV0aG9kcyBhcmUgYWJzdHJhY3QgYW5kIGhhdmUgdGhl
CisgICAgICAgICMgc2lnbmF0dXJlIHdlIGV4cGVjdC4KKyAgICAgICAgYnJva2VyID0gbWFrZV9i
cm9rZXIoc2VsZiwgJ2lubGluZScpCisgICAgICAgIG9iaiA9IG1hbmFnZXJfd29ya2VyX2Jyb2tl
ci5fV29ya2VyQ29ubmVjdGlvbihicm9rZXIuX2Jyb2tlcikKKyAgICAgICAgc2VsZi5hc3NlcnRS
YWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgb2JqLnN0YXJ0KQorICAgICAgICBzZWxmLmFzc2Vy
dFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBvYmoucnVuKQorICAgICAgICBzZWxmLmFzc2Vy
dFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBvYmouY2FuY2VsKQorICAgICAgICBzZWxmLmFz
c2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBvYmouaXNfYWxpdmUpCisgICAgICAgIHNl
bGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIG9iai5qb2luLCBOb25lKQorICAg
ICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBvYmoubG9nX3dlZGdl
ZF93b3JrZXIsIE5vbmUpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0
dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2VfYnJva2VyMi5weSBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2VfYnJva2VyMi5weQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi44ZThlMDRlMjk1MDY2NzY2YzE5NTA3MzJkMTIyOGJiODhhMzA2YWNlCi0tLSAvZGV2
L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3Bh
Y2thZ2UvbWVzc2FnZV9icm9rZXIyLnB5CkBAIC0wLDAgKzEsMTgxIEBACisjIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisj
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
IyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworIiIiTW9kdWxlIGZvciBoYW5kbGluZyBtZXNzYWdpbmcgZm9yIHJ1bi13ZWJraXQtdGVz
dHMuCisKK1RoaXMgbW9kdWxlcyBpbXBsZW1lbnRzIGEgc2ltcGxlIG1lc3NhZ2UgYnJva2VyIGFi
c3RyYWN0aW9uIHRoYXQgd2lsbCBiZQordXNlZCB0byBjb29yZGluYXRlIG1lc3NhZ2VzIGJldHdl
ZW4gdGhlIG1haW4gcnVuLXdlYmtpdC10ZXN0cyB0aHJlYWQKKyhha2EgVGVzdFJ1bm5lcikgYW5k
IHRoZSBpbmRpdmlkdWFsIHdvcmtlciB0aHJlYWRzIChwcmV2aW91c2x5IGtub3duIGFzCitkdW1w
X3JlbmRlcl90cmVlX3RocmVhZHMpLgorCitUaGlzIHBhY2thZ2Ugc2ltcGx5IGRpc3RyaWJ1dGVz
IG1lc3NhZ2VzIG9udG8gbmFtZWQgcXVldWVzOyB0aGUgYWN0dWFsCitxdWV1ZXMgdGhlbXNlbHZl
cyBhcmUgcHJvdmlkZWQgYnkgdGhlIGNhbGxlciwgYXMgdGhlIGltcGxlbWVudGF0aW9uIHdpbGwK
K3ZhcnkgZGVwZW5kaW5nIG9uIHRoZSBjb25jdXJyZW5jeSByZXF1aXJlbWVudHMuCisKK01lc3Nh
Z2VzIG11c3QgYmUgcGlja2xhYmxlLCBpbiBvcmRlciB0byBiZSB1c2VkIGZvciBzaGFyZWQtbm90
aGluZworbWVzc2FnaW5nIGJldHdlZW4gcHJvY2Vzc2VzIHdoZXJlIHNvIGRlc2lyZWQuCisiIiIK
KworaW1wb3J0IGNQaWNrbGUKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgUXVldWUKK2ltcG9ydCB0
aW1lCisKKworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCisKK2NsYXNzIENs
aWVudEludGVyZmFjZShvYmplY3QpOgorICAgICIiIkFic3RyYWN0IGJhc2UgY2xhc3MgLyBpbnRl
cmZhY2UgdGhhdCBhbGwgbWVzc2FnZSBicm9rZXIgY2xpZW50cyBtdXN0CisgICAgaW1wbGVtZW50
LiBJbiBhZGRpdGlvbiB0byB0aGUgbWV0aG9kcyBiZWxvdywgYnkgY29udmVudGlvbiBjbGllbnRz
CisgICAgaW1wbGVtZW50IHJvdXRpbmVzIG9mIHRoZSBzaWduYXR1cmUgdHlwZQorCisgICAgICAg
IGhhbmRsZV9NRVNTQUdFX05BTUUoc2VsZiwgc3JjLCAuLi4pOgorCisgICAgd2hlcmUgTUVTU0FH
RV9OQU1FIG1hdGNoZXMgdGhlIHN0cmluZyBwYXNzZWQgdG8gcG9zdF9tZXNzYWdlKCksIGFuZAor
ICAgIHNyYyBpbmRpY2F0ZXMgdGhlIG5hbWUgb2YgdGhlIHNlbmRlci4gSWYgdGhlIG1lc3NhZ2Ug
Y29udGFpbnMgdmFsdWVzIGluCisgICAgdGhlIG1lc3NhZ2UgYm9keSwgdGhvc2Ugd2lsbCBiZSBw
cm92aWRlZCBhcyBvcHRwYXJhbXMuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2Vy
X2Nvbm5lY3Rpb24sIHdvcmtlcl9udW1iZXIsIG9wdGlvbnMsICoqa3dhcmdzKToKKyAgICAgICAg
cmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGNhbmNlbChzZWxmKToKKyAgICAg
ICAgIiIiQ2FsbGVkIChpZiBwb3NzaWJsZSkgdG8gbm90aWZ5IHRoZSB3b3JrZXIgdGhhdCBpdCBo
YXMgYmVlbiBhYm9ydGVkLgorCisgICAgICAgIE9ubHkgd29ya2VycyBuZWVkIGltcGxlbWVudCB0
aGlzIG1ldGhvZC4gV29ya2VycyBjYW5ub3QgcmVseSBvbiB0aGlzCisgICAgICAgIG1ldGhvZCBh
bHdheXMgYmVpbmcgY2FsbGVkLiBGb3IgZXhhbXBsZSwgd29ya2VycyBydW5uaW5nIGluIHRoZWly
CisgICAgICAgIG93biBwcm9jZXNzZXMgbWF5IGJlIGtpbGxlZCBkaXJlY3RseSBpbnN0ZWFkIG9m
IGludm9raW5nIHRoaXMgbWV0aG9kCisgICAgICAgIGFuZCB3YWl0aW5nIGZvciB0aGUgdGhlIHdv
cmtlciB0byBleGl0LiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAg
ICBkZWYgaXNfZG9uZShzZWxmKToKKyAgICAgICAgIiIiQ2FsbGVkIGZyb20gaW5zaWRlIHJ1bl9t
ZXNzYWdlX2xvb3AoKSB0byBpbmRpY2F0ZSB3aGV0aGVyIHRvIGV4aXQuIiIiCisgICAgICAgIHJh
aXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBuYW1lKHNlbGYpOgorICAgICAgICAi
IiJSZXR1cm4gYSBuYW1lIHRoYXQgaWRlbnRpZmllcyB0aGUgd29ya2VyIG9yIG1hbmFnZXIuIiIi
CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBydW4oc2VsZiwg
cG9ydCk6CisgICAgICAgICIiIk9ubHkgd29ya2VycyBuZWVkIGltcGxlbWVudCB0aGlzIG1ldGhv
ZC4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisKK2NsYXNzIEJyb2tl
cihvYmplY3QpOgorICAgICIiIlRoaXMgY2xhc3MgaW1wbGVtZW50cyBhIGdlbmVyaWMgbWVzc2Fn
ZSBicm9rZXIuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb3B0aW9ucywgcXVldWVfbWFr
ZXIpOgorICAgICAgICAiIiJSZXR1cm4gYSBtZXNzYWdlIGJyb2tlciBmb3IgbWFuYWdlci93b3Jr
ZXIgY29tbXVuaWNhdGlvbi4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgb3B0aW9uczog
YSBydW50aW1lIG9wdGlvbiBjbGFzcyBmcm9tIG9wdHBhcnNlCisgICAgICAgICIiIgorICAgICAg
ICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucworICAgICAgICBzZWxmLl9xdWV1ZV9tYWtlciA9IHF1
ZXVlX21ha2VyCisgICAgICAgIHNlbGYuX3RvcGljcyA9IHt9CisKKyAgICBkZWYgYWRkX3RvcGlj
KHNlbGYsIHRvcGljX25hbWUpOgorICAgICAgICBpZiB0b3BpY19uYW1lIG5vdCBpbiBzZWxmLl90
b3BpY3M6CisgICAgICAgICAgICBzZWxmLl90b3BpY3NbdG9waWNfbmFtZV0gPSBzZWxmLl9xdWV1
ZV9tYWtlcigpCisKKyAgICBkZWYgX2ZpbmRfdG9waWMoc2VsZiwgdG9waWNfbmFtZSk6CisgICAg
ICAgIHJldHVybiBzZWxmLl90b3BpY3NbdG9waWNfbmFtZV0KKworICAgIGRlZiBwb3N0X21lc3Nh
Z2Uoc2VsZiwgY2xpZW50LCB0b3BpY19uYW1lLCBtZXNzYWdlX25hbWUsICpvcHRhcmdzKToKKyAg
ICAgICAgIiIiUG9zdCBhIG1lc3NhZ2UgdG8gdGhlIGFwcHJvcHJpYXRlIHRvcGljIHF1ZXVlLiIi
IgorICAgICAgICBtZXNzYWdlID0gX01lc3NhZ2UoY2xpZW50Lm5hbWUoKSwgdG9waWNfbmFtZSwg
bWVzc2FnZV9uYW1lLCBvcHRhcmdzKQorICAgICAgICB0b3BpYyA9IHNlbGYuX2ZpbmRfdG9waWMo
dG9waWNfbmFtZSkKKyAgICAgICAgdG9waWMucHV0KF9NZXNzYWdlLmR1bXBzKG1lc3NhZ2UpKQor
CisgICAgZGVmIHJ1bl9tZXNzYWdlX2xvb3Aoc2VsZiwgdG9waWNfbmFtZSwgY2xpZW50LCBkZWxh
eV9zZWNzPU5vbmUpOgorICAgICAgICAiIiJMb29wIHByb2Nlc3NpbmcgbWVzc2FnZXMgdW50aWwg
Y2xpZW50LmlzX2RvbmUoKSBvciBkZWxheSBwYXNzZXMuIiIiCisgICAgICAgIGFzc2VydCBkZWxh
eV9zZWNzIGlzIE5vbmUgb3IgZGVsYXlfc2VjcyA+IDAsICJydW5fbWVzc2FnZV9sb29wKCk6IGRl
bGF5IG11c3QgYmUgTm9uZSBvciBhIHBvc2l0aXZlIG51bWJlciIKKyAgICAgICAgc2VsZi5fcnVu
X2xvb3AodG9waWNfbmFtZSwgY2xpZW50LCBUcnVlLCBkZWxheV9zZWNzKQorCisgICAgZGVmIHJ1
bl9hbGxfcGVuZGluZyhzZWxmLCB0b3BpY19uYW1lLCBjbGllbnQpOgorICAgICAgICAiIiJQcm9j
ZXNzIG1lc3NhZ2VzIHVudGlsIGNsaWVudC5pc19kb25lKCkgb3IgY2FsbGVyIHdvdWxkIGJsb2Nr
LiIiIgorICAgICAgICBzZWxmLl9ydW5fbG9vcCh0b3BpY19uYW1lLCBjbGllbnQsIGJsb2NrPUZh
bHNlLCBkZWxheV9zZWNzPU5vbmUpCisKKyAgICBkZWYgX3J1bl9sb29wKHNlbGYsIHRvcGljX25h
bWUsIGNsaWVudCwgYmxvY2ssIGRlbGF5X3NlY3MpOgorICAgICAgICB0b3BpYyA9IHNlbGYuX2Zp
bmRfdG9waWModG9waWNfbmFtZSkKKyAgICAgICAgd2hpbGUgbm90IGNsaWVudC5pc19kb25lKCk6
CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcyA9IHRvcGljLmdldChibG9jaywg
ZGVsYXlfc2VjcykKKyAgICAgICAgICAgIGV4Y2VwdCBRdWV1ZS5FbXB0eToKKyAgICAgICAgICAg
ICAgICByZXR1cm4KKyAgICAgICAgICAgIG1zZyA9IF9NZXNzYWdlLmxvYWRzKHMpCisgICAgICAg
ICAgICBzZWxmLl9kaXNwYXRjaF9tZXNzYWdlKG1zZywgY2xpZW50KQorCisgICAgZGVmIF9kaXNw
YXRjaF9tZXNzYWdlKHNlbGYsIG1lc3NhZ2UsIGNsaWVudCk6CisgICAgICAgIGlmIG5vdCBoYXNh
dHRyKGNsaWVudCwgJ2hhbmRsZV8nICsgbWVzc2FnZS5uYW1lKToKKyAgICAgICAgICAgIHJhaXNl
IFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAiJXM6IHJlY2VpdmVkIG1lc3NhZ2UgJyVzJyBp
dCBjb3VsZG4ndCBoYW5kbGUiICUKKyAgICAgICAgICAgICAgIChjbGllbnQubmFtZSgpLCBtZXNz
YWdlLm5hbWUpKQorICAgICAgICBvcHRhcmdzID0gbWVzc2FnZS5ib2R5CisgICAgICAgIG1lc3Nh
Z2VfaGFuZGxlciA9IGdldGF0dHIoY2xpZW50LCAnaGFuZGxlXycgKyBtZXNzYWdlLm5hbWUpCisg
ICAgICAgIG1lc3NhZ2VfaGFuZGxlcihtZXNzYWdlLnNyYywgKm9wdGFyZ3MpCisKKworY2xhc3Mg
X01lc3NhZ2Uob2JqZWN0KToKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGxvYWRzKHN0cik6
CisgICAgICAgIG9iaiA9IGNQaWNrbGUubG9hZHMoc3RyKQorICAgICAgICBhc3NlcnQoaXNpbnN0
YW5jZShvYmosIF9NZXNzYWdlKSkKKyAgICAgICAgcmV0dXJuIG9iagorCisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIHNyYywgdG9waWNfbmFtZSwgbWVzc2FnZV9uYW1lLCBtZXNzYWdlX2JvZHkpOgor
ICAgICAgICBzZWxmLnNyYyA9IHNyYworICAgICAgICBzZWxmLnRvcGljX25hbWUgPSB0b3BpY19u
YW1lCisgICAgICAgIHNlbGYubmFtZSA9IG1lc3NhZ2VfbmFtZQorICAgICAgICBzZWxmLmJvZHkg
PSBtZXNzYWdlX2JvZHkKKworICAgIGRlZiBkdW1wcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGNQ
aWNrbGUuZHVtcHMoc2VsZikKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0
dXJuICgiX01lc3NhZ2UoZnJvbT0nJXMnLCB0b3BpY19uYW1lPSclcycsIG1lc3NhZ2VfbmFtZT0n
JXMnKSIgJQorICAgICAgICAgICAgICAgIChzZWxmLnNyYywgc2VsZi50b3BpY19uYW1lLCBzZWxm
Lm5hbWUpKQorCisKK2NsYXNzIEJyb2tlckNvbm5lY3Rpb24ob2JqZWN0KToKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgYnJva2VyLCBydW5fdG9waWMsIHBvc3RfdG9waWMpOgorICAgICAgICBzZWxm
Ll9icm9rZXIgPSBicm9rZXIKKyAgICAgICAgc2VsZi5fcG9zdF90b3BpYyA9IHBvc3RfdG9waWMK
KyAgICAgICAgc2VsZi5fcnVuX3RvcGljID0gcnVuX3RvcGljCisgICAgICAgIGJyb2tlci5hZGRf
dG9waWMocnVuX3RvcGljKQorICAgICAgICBicm9rZXIuYWRkX3RvcGljKHBvc3RfdG9waWMpCisK
KyAgICBkZWYgY2xpZW50KHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9y
CisKKyAgICBkZWYgcnVuX21lc3NhZ2VfbG9vcChzZWxmLCBkZWxheV9zZWNzPU5vbmUpOgorICAg
ICAgICBzZWxmLl9icm9rZXIucnVuX21lc3NhZ2VfbG9vcChzZWxmLl9ydW5fdG9waWMsIHNlbGYu
Y2xpZW50KCksIGRlbGF5X3NlY3MpCisKKyAgICBkZWYgcG9zdF9tZXNzYWdlKHNlbGYsIG1lc3Nh
Z2VfbmFtZSwgKm1lc3NhZ2VfYXJncyk6CisgICAgICAgIHNlbGYuX2Jyb2tlci5wb3N0X21lc3Nh
Z2Uoc2VsZi5jbGllbnQoKSwgc2VsZi5fcG9zdF90b3BpYywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtZXNzYWdlX25hbWUsICptZXNzYWdlX2FyZ3MpCmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdl
X2Jyb2tlcjJfdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tlcjJfdW5pdHRlc3QucHkKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MmU2MzdiY2ZjNDlkNzE0NTQ0M2QwMmUxMTIyYmU0NzgxMWE4ZDU4MwotLS0gL2Rldi9udWxsCisr
KyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21l
c3NhZ2VfYnJva2VyMl91bml0dGVzdC5weQpAQCAtMCwwICsxLDkzIEBACisjIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisj
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
IyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworaW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBtZXNzYWdlX2Jyb2tlcjIKKworCitjbGFz
cyBNZXNzYWdlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfX25vX2JvZHko
c2VsZik6CisgICAgICAgIG1zZyA9IG1lc3NhZ2VfYnJva2VyMi5fTWVzc2FnZSgnc3JjJywgJ3Rv
cGljX25hbWUnLCAnbWVzc2FnZV9uYW1lJywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVl
KHJlcHIobXNnKSkKKyAgICAgICAgcyA9IG1zZy5kdW1wcygpCisgICAgICAgIG5ld19tc2cgPSBt
ZXNzYWdlX2Jyb2tlcjIuX01lc3NhZ2UubG9hZHMocykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChuZXdfbXNnLm5hbWUsICdtZXNzYWdlX25hbWUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KG5ld19tc2cuYm9keSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdfbXNnLnRv
cGljX25hbWUsICd0b3BpY19uYW1lJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdfbXNn
LnNyYywgJ3NyYycpCisKKyAgICBkZWYgdGVzdF9fYm9keShzZWxmKToKKyAgICAgICAgbXNnID0g
bWVzc2FnZV9icm9rZXIyLl9NZXNzYWdlKCdzcmMnLCAndG9waWNfbmFtZScsICdtZXNzYWdlX25h
bWUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2JvZHknLCAwKSkK
KyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIobXNnKSkKKyAgICAgICAgcyA9IG1zZy5kdW1w
cygpCisgICAgICAgIG5ld19tc2cgPSBtZXNzYWdlX2Jyb2tlcjIuX01lc3NhZ2UubG9hZHMocykK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdfbXNnLm5hbWUsICdtZXNzYWdlX25hbWUnKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld19tc2cuYm9keSwgKCdib2R5JywgMCkpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3X21zZy50b3BpY19uYW1lLCAndG9waWNfbmFtZScpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3X21zZy5zcmMsICdzcmMnKQorCisKK2NsYXNzIElu
dGVyZmFjZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVGhlc2UgdGVzdHMgbW9zdGx5
IGV4aXN0IHRvIHBhY2lmeSBjb3ZlcmFnZS4KKworICAgICMgRklYTUU6IFRoZXJlIG11c3QgYmUg
YSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMgYW5kIGFsc28gdmVyaWZ5CisgICAgIyB0aGF0IGNsYXNz
ZXMgZG8gaW1wbGVtZW50IGV2ZXJ5IGFic3RyYWN0IG1ldGhvZCBpbiBhbiBpbnRlcmZhY2UuCisK
KyAgICBkZWYgdGVzdF9jbGllbnRpbnRlcmZhY2VfaXNfYWJzdHJhY3Qoc2VsZik6CisgICAgICAg
ICMgVGVzdCB0aGF0IHdlIGNhbid0IGNyZWF0ZSBhbiBpbnN0YW5jZSBkaXJlY3RseS4KKyAgICAg
ICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgbWVzc2FnZV9icm9rZXIy
LkNsaWVudEludGVyZmFjZSwKKyAgICAgICAgICAgIE5vbmUsIE5vbmUsIE5vbmUpCisKKyAgICAg
ICAgY2xhc3MgVGVzdENsaWVudChtZXNzYWdlX2Jyb2tlcjIuQ2xpZW50SW50ZXJmYWNlKToKKyAg
ICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqb3B0YXJncyk6CisgICAgICAgICAgICAgICAg
cGFzcworCisgICAgICAgICMgVGVzdCB0aGF0IGFsbCB0aGUgYmFzZSBjbGFzcyBtZXRob2RzIGFy
ZSBhYnN0cmFjdCBhbmQgaGF2ZSB0aGUKKyAgICAgICAgIyBzaWduYXR1cmUgd2UgZXhwZWN0Lgor
ICAgICAgICBvYmogPSBUZXN0Q2xpZW50KCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90
SW1wbGVtZW50ZWRFcnJvciwgb2JqLmNhbmNlbCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMo
Tm90SW1wbGVtZW50ZWRFcnJvciwgb2JqLmlzX2RvbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFp
c2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIG9iai5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydFJh
aXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBvYmoucnVuLCBOb25lKQorCisgICAgZGVmIHRlc3Rf
YnJva2VyY29ubmVjdGlvbl9pc19hYnN0cmFjdChzZWxmKToKKyAgICAgICAgY2xhc3MgVGVzdEJy
b2tlckNvbm5lY3Rpb24obWVzc2FnZV9icm9rZXIyLkJyb2tlckNvbm5lY3Rpb24pOgorICAgICAg
ICAgICAgZGVmIF9faW5pdF9fKHNlbGYsICpvcHRhcmdzKToKKyAgICAgICAgICAgICAgICBwYXNz
CisKKyAgICAgICAgIyBUZXN0IHRoYXQgYWxsIHRoZSBiYXNlIGNsYXNzIG1ldGhvZHMgYXJlIGFi
c3RyYWN0IGFuZCBoYXZlIHRoZQorICAgICAgICAjIHNpZ25hdHVyZSB3ZSBleHBlY3QuCisgICAg
ICAgIGJyb2tlciA9IG1lc3NhZ2VfYnJva2VyMi5Ccm9rZXIoTm9uZSwgTm9uZSkKKyAgICAgICAg
b2JqID0gVGVzdEJyb2tlckNvbm5lY3Rpb24oYnJva2VyLCAiZm9vIiwgImJhciIpCisgICAgICAg
IHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIG9iai5jbGllbnQpCisKKwor
aWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rl
c3RfcnVubmVyMi5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL3Rlc3RfcnVubmVyMi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43Nzc0MmUxNTBiZTlmY2I3Nzg4
MGZiZWViYmU5NzY4MzJiY2Y0YzlkCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9ydW5uZXIyLnB5CkBAIC0w
LDAgKzEsMjE4IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisi
IiIKK1RoZSBUZXN0UnVubmVyIGNsYXNzIHJ1bnMgYSBzZXJpZXMgb2YgdGVzdHMgKFRlc3RUeXBl
IGludGVyZmFjZSkgYWdhaW5zdCBhIHNldAorb2YgdGVzdCBmaWxlcy4gIElmIGEgdGVzdCBmaWxl
IGZhaWxzIGEgVGVzdFR5cGUsIGl0IHJldHVybnMgYSBsaXN0IFRlc3RGYWlsdXJlCitvYmplY3Rz
IHRvIHRoZSBUZXN0UnVubmVyLiAgVGhlIFRlc3RSdW5uZXIgdGhlbiBhZ2dyZWdhdGVzIHRoZSBU
ZXN0RmFpbHVyZXMgdG8KK2NyZWF0ZSBhIGZpbmFsIHJlcG9ydC4KKyIiIgorCitpbXBvcnQgdGlt
ZQorCitmcm9tIHdlYmtpdHB5LnRvb2wgaW1wb3J0IGdyYW1tYXIKKworaW1wb3J0IGxvZ2dpbmcK
K2ltcG9ydCBtYW5hZ2VyX3dvcmtlcl9icm9rZXIKK2ltcG9ydCB0ZXN0X3J1bm5lcgoraW1wb3J0
IHdvcmtlcgorCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisKKworY2xhc3Mg
X1dvcmtlclN0YXRlKG9iamVjdCk6CisgICAgIiIiQSBjbGFzcyBmb3IgdGhlIFRlc3RSdW5uZXIv
bWFuYWdlciB0byB1c2UgdG8gdHJhY2sgdGhlIGN1cnJlbnQgc3RhdGUKKyAgICBvZiB0aGUgd29y
a2Vycy4iIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbnVtYmVyLCB3b3JrZXIpOgorICAgICAg
ICBzZWxmLndvcmtlciA9IHdvcmtlcgorICAgICAgICBzZWxmLm51bWJlciA9IG51bWJlcgorICAg
ICAgICBzZWxmLmRvbmUgPSBGYWxzZQorICAgICAgICBzZWxmLm5leHRfdGltZW91dCA9IE5vbmUK
KyAgICAgICAgc2VsZi53ZWRnZWQgPSBGYWxzZQorICAgICAgICBzZWxmLnN0YXRzID0ge30KKyAg
ICAgICAgc2VsZi5zdGF0c1snbmFtZSddID0gd29ya2VyLm5hbWUKKyAgICAgICAgc2VsZi5zdGF0
c1snbnVtX3Rlc3RzJ10gPSAwCisgICAgICAgIHNlbGYuc3RhdHNbJ3RvdGFsX3RpbWUnXSA9IDAK
KworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJfV29ya2VyU3RhdGUo
IiArIHN0cihzZWxmLl9fZGljdF9fKSArICIpIgorCisKK2NsYXNzIFRlc3RSdW5uZXIyKHRlc3Rf
cnVubmVyLlRlc3RSdW5uZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRpb25z
LCBwcmludGVyKToKKyAgICAgICAgdGVzdF9ydW5uZXIuVGVzdFJ1bm5lci5fX2luaXRfXyhzZWxm
LCBwb3J0LCBvcHRpb25zLCBwcmludGVyKQorICAgICAgICBzZWxmLl9tZXNzYWdlX2Jyb2tlciA9
IE5vbmUKKworICAgICAgICAjIFRoaXMgbWFwcyB3b3JrZXIgbmFtZXMgdG8gdGhlIHN0YXRlIHdl
IGFyZSB0cmFja2luZyBmb3IgZWFjaCBvZiB0aGVtLgorICAgICAgICBzZWxmLl93b3JrZXJzID0g
e30KKworICAgIGRlZiBpc19kb25lKHNlbGYpOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAg
IGRlZiBuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gJ1Rlc3RSdW5uZXIyJworCisgICAgZGVm
IF9ydW5fdGVzdHMoc2VsZiwgZmlsZV9saXN0LCByZXN1bHRfc3VtbWFyeSk6CisgICAgICAgICIi
IlJ1bnMgdGhlIHRlc3RzIGluIHRoZSBmaWxlX2xpc3QuCisKKyAgICAgICAgUmV0dXJuOiBBIHR1
cGxlIChrZXlib2FyZF9pbnRlcnJ1cHRlZCwgdGhyZWFkX3RpbWluZ3MsIHRlc3RfdGltaW5ncywK
KyAgICAgICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzKQorICAgICAgICAgICAga2V5Ym9h
cmRfaW50ZXJydXB0ZWQgaXMgd2hldGhlciBzb21lb25lIHR5cGVkIEN0cmxeQworICAgICAgICAg
ICAgdGhyZWFkX3RpbWluZ3MgaXMgYSBsaXN0IG9mIGRpY3RzIHdpdGggdGhlIHRvdGFsIHJ1bnRp
bWUKKyAgICAgICAgICAgICAgb2YgZWFjaCB0aHJlYWQgd2l0aCAnbmFtZScsICdudW1fdGVzdHMn
LCAndG90YWxfdGltZScgcHJvcGVydGllcworICAgICAgICAgICAgdGVzdF90aW1pbmdzIGlzIGEg
bGlzdCBvZiB0aW1pbmdzIGZvciBlYWNoIHNoYXJkZWQgc3ViZGlyZWN0b3J5CisgICAgICAgICAg
ICAgIG9mIHRoZSBmb3JtIFt0aW1lLCBkaXJlY3RvcnlfbmFtZSwgbnVtX3Rlc3RzXQorICAgICAg
ICAgICAgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MgaXMgYSBsaXN0IG9mIHJ1biB0aW1lcyBmb3Ig
ZWFjaCB0ZXN0CisgICAgICAgICAgICAgIGluIHRoZSBmb3JtIHtmaWxlbmFtZTpmaWxlbmFtZSwg
dGVzdF9ydW5fdGltZTp0ZXN0X3J1bl90aW1lfQorICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnk6
IHN1bW1hcnkgb2JqZWN0IHRvIHBvcHVsYXRlIHdpdGggdGhlIHJlc3VsdHMKKyAgICAgICAgIiIi
CisgICAgICAgIG51bV93b3JrZXJzID0gc2VsZi5fbnVtX3dvcmtlcnMoKQorCisgICAgICAgIHNl
bGYuX2N1cnJlbnRfZmlsZV9saXN0ID0gZmlsZV9saXN0CisgICAgICAgIHNlbGYuX2N1cnJlbnRf
cmVzdWx0X3N1bW1hcnkgPSByZXN1bHRfc3VtbWFyeQorCisgICAgICAgIHNlbGYuX2FsbF9yZXN1
bHRzID0gW10KKyAgICAgICAgc2VsZi5fZ3JvdXBfc3RhdHMgPSB7fQorICAgICAgICBzZWxmLl93
b3JrZXJzID0ge30KKworICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgnU2hhcmRp
bmcgdGVzdHMgLi4uJykKKyAgICAgICAgdGVzdF9saXN0cyA9IHNlbGYuX3NoYXJkX3Rlc3RzKGZp
bGVfbGlzdCwKKyAgICAgICAgICAgIG51bV93b3JrZXJzID4gMSBhbmQgbm90IHNlbGYuX29wdGlv
bnMuZXhwZXJpbWVudGFsX2Z1bGx5X3BhcmFsbGVsKQorICAgICAgICBfbG9nLmRlYnVnKCJVc2lu
ZyAlZCBzaGFyZHMiICUgbGVuKHRlc3RfbGlzdHMpKQorCisgICAgICAgIGJyb2tlciA9IG1hbmFn
ZXJfd29ya2VyX2Jyb2tlci5nZXQoc2VsZi5fcG9ydCwgc2VsZi5fb3B0aW9ucywgc2VsZiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXIuV29ya2VyKQor
CisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCdTdGFydGluZyAlcyAuLi4nICUK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhbW1hci5wbHVyYWxpemUoJ3dv
cmtlcicsIG51bV93b3JrZXJzKSkKKyAgICAgICAgZm9yIHdvcmtlcl9udW1iZXIgaW4geHJhbmdl
KG51bV93b3JrZXJzKToKKyAgICAgICAgICAgIHcgPSBicm9rZXIuc3RhcnRfd29ya2VyKHdvcmtl
cl9udW1iZXIpCisgICAgICAgICAgICB3cyA9IF9Xb3JrZXJTdGF0ZSh3b3JrZXJfbnVtYmVyLCB3
KQorICAgICAgICAgICAgc2VsZi5fd29ya2Vyc1t3Lm5hbWVdID0gd3MKKyAgICAgICAgICAgIHRp
bWUuc2xlZXAoMC4xKQorCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCJTdGFy
dGluZyB0ZXN0aW5nIC4uLiIpCisgICAgICAgIGZvciB0ZXN0X2xpc3QgaW4gdGVzdF9saXN0czoK
KyAgICAgICAgICAgIGJyb2tlci5wb3N0X21lc3NhZ2UoJ3Rlc3RfbGlzdCcsIHRlc3RfbGlzdFsw
XSwgdGVzdF9saXN0WzFdKQorCisgICAgICAgICMgVGVsbCB0aGUgd29ya2VycyB0byBzaHV0IGRv
d24gYWZ0ZXIgdGhleSdyZSBkb25lIHJ1bm5pbmcgYWxsIHRoZQorICAgICAgICAjIHRlc3RzLgor
ICAgICAgICBmb3IgaSBpbiB4cmFuZ2UobnVtX3dvcmtlcnMpOgorICAgICAgICAgICAgYnJva2Vy
LnBvc3RfbWVzc2FnZSgnc3RvcCcpCisKKyAgICAgICAgaW50ZXJydXB0ZWQgPSBGYWxzZQorICAg
ICAgICBrZXlib2FyZF9pbnRlcnJ1cHRlZCA9IEZhbHNlCisgICAgICAgIHRyeToKKyAgICAgICAg
ICAgIGlmIG5vdCBzZWxmLl9vcHRpb25zLmRyeV9ydW46CisgICAgICAgICAgICAgICAgd2hpbGUg
bm90IHNlbGYuX2NoZWNrX2lmX2RvbmUoKToKKyAgICAgICAgICAgICAgICAgICAgYnJva2VyLnJ1
bl9tZXNzYWdlX2xvb3AoZGVsYXlfc2Vjcz0xLjApCisKKyAgICAgICAgICAgICAgICBmb3IgdyBp
biBzZWxmLl93b3JrZXJzLnZhbHVlcygpOgorICAgICAgICAgICAgICAgICAgICBpZiBub3Qgdy53
ZWRnZWQgYW5kIHcud29ya2VyLmlzX2FsaXZlKCk6CisgICAgICAgICAgICAgICAgICAgICAgICB3
Lndvcmtlci5qb2luKDAuNSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCBub3Qgdy53
b3JrZXIuaXNfYWxpdmUoKQorCisgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAg
ICAgICAgICAgIF9sb2cuaW5mbygiSW50ZXJydXB0ZWQsIGV4aXRpbmciKQorICAgICAgICAgICAg
Zm9yIHcgaW4gc2VsZi5fd29ya2Vycy52YWx1ZXMoKToKKyAgICAgICAgICAgICAgICB3Lndvcmtl
ci5jYW5jZWwoKQorICAgICAgICAgICAga2V5Ym9hcmRfaW50ZXJydXB0ZWQgPSBUcnVlCisgICAg
ICAgIGV4Y2VwdCB0ZXN0X3J1bm5lci5UZXN0UnVuSW50ZXJydXB0ZWRFeGNlcHRpb24sIGU6Cisg
ICAgICAgICAgICBfbG9nLmluZm8oZS5yZWFzb24pCisgICAgICAgICAgICBicm9rZXIuY2FuY2Vs
X3dvcmtlcnMoKQorICAgICAgICAgICAgaW50ZXJydXB0ZWQgPSBUcnVlCisgICAgICAgIGV4Y2Vw
dDoKKyAgICAgICAgICAgICMgVW5leHBlY3RlZCBleGNlcHRpb247IGRvbid0IHRyeSB0byBjbGVh
biB1cCB3b3JrZXJzLgorICAgICAgICAgICAgX2xvZy5pbmZvKCJFeGNlcHRpb24gcmFpc2VkLCBl
eGl0aW5nIikKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgdGhyZWFkX3RpbWluZ3MgPSBb
dy5zdGF0cyBmb3IgdyBpbiBzZWxmLl93b3JrZXJzLnZhbHVlcygpXQorICAgICAgICByZXR1cm4g
KGludGVycnVwdGVkLCBrZXlib2FyZF9pbnRlcnJ1cHRlZCwgdGhyZWFkX3RpbWluZ3MsCisgICAg
ICAgICAgICAgICAgc2VsZi5fZ3JvdXBfc3RhdHMsIHNlbGYuX2FsbF9yZXN1bHRzKQorCisgICAg
ZGVmIF9jaGVja19pZl9kb25lKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIHRydWUgaWZmIGFs
bCB0aGUgd29ya2VycyBoYXZlIGVpdGhlciBjb21wbGV0ZWQgb3Igd2VkZ2VkLiIiIgorICAgICAg
ICBkb25lID0gVHJ1ZQorICAgICAgICB0ID0gdGltZS50aW1lKCkKKyAgICAgICAgZm9yIHcgaW4g
c2VsZi5fd29ya2Vycy52YWx1ZXMoKToKKyAgICAgICAgICAgIGlmIG5vdCB3LmRvbmUgYW5kIG5v
dCB3LndlZGdlZDoKKyAgICAgICAgICAgICAgICBuZXh0X3RpbWVvdXQgPSB3Lm5leHRfdGltZW91
dAorICAgICAgICAgICAgICAgIFdFREdFX1BBRERJTkcgPSA0MC4wCisgICAgICAgICAgICAgICAg
aWYgbmV4dF90aW1lb3V0IGFuZCB0ID4gbmV4dF90aW1lb3V0ICsgV0VER0VfUEFERElORzoKKyAg
ICAgICAgICAgICAgICAgICAgX2xvZy5lcnJvcignJykKKyAgICAgICAgICAgICAgICAgICAgdy53
b3JrZXIubG9nX3dlZGdlZF93b3JrZXIody5jdXJyZW50X3Rlc3RfbmFtZSkKKyAgICAgICAgICAg
ICAgICAgICAgX2xvZy5lcnJvcignJykKKyAgICAgICAgICAgICAgICAgICAgdy53ZWRnZWQgPSBU
cnVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZG9uZSA9IEZh
bHNlCisKKyAgICAgICAgaWYgZG9uZToKKyAgICAgICAgICAgIGlmIGFueShbdy53ZWRnZWQgZm9y
IHcgaW4gc2VsZi5fd29ya2Vycy52YWx1ZXMoKV0pOgorICAgICAgICAgICAgICAgIF9sb2cuZXJy
b3IoJycpCisgICAgICAgICAgICAgICAgX2xvZy5lcnJvcignUmVtYWluaW5nIHdvcmtlcnMgYXJl
IHdlZGdlZCwgYmFpbGluZyBvdXQuJykKKyAgICAgICAgICAgICAgICBfbG9nLmVycm9yKCcnKQor
ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCdObyB3ZWRnZWQg
dGhyZWFkcycpCisgICAgICAgIHJldHVybiBkb25lCisKKyAgICBkZWYgaGFuZGxlX3N0YXJ0ZWRf
dGVzdChzZWxmLCBzcmMsIHRlc3RfaW5mbywgaGFuZ190aW1lb3V0KToKKyAgICAgICAgdyA9IHNl
bGYuX3dvcmtlcnNbc3JjXQorICAgICAgICB3LmN1cnJlbnRfdGVzdF9uYW1lID0gc2VsZi5fcG9y
dC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKAorICAgICAgICAgICAgdGVzdF9pbmZvLmZpbGVuYW1l
KQorICAgICAgICB3Lm5leHRfdGltZW91dCA9IHRpbWUudGltZSgpICsgaGFuZ190aW1lb3V0CisK
KyAgICBkZWYgaGFuZGxlX2RvbmUoc2VsZiwgc3JjKToKKyAgICAgICAgdyA9IHNlbGYuX3dvcmtl
cnNbc3JjXQorICAgICAgICB3LmRvbmUgPSBUcnVlCisKKyAgICBkZWYgaGFuZGxlX2ZpbmlzaGVk
X3Rlc3Qoc2VsZiwgc3JjLCByZXN1bHQsIGVsYXBzZWRfdGltZSk6CisgICAgICAgICIiIlVwZGF0
ZSB0aGUgc3VtbWFyeSBhbmQgcHJpbnQgcmVzdWx0cyB3aXRoIGFueSBjb21wbGV0ZWQgdGVzdHMu
IiIiCisgICAgICAgIHcgPSBzZWxmLl93b3JrZXJzW3NyY10KKyAgICAgICAgdy5uZXh0X3RpbWVv
dXQgPSBOb25lCisgICAgICAgIHcuY3VycmVudF90ZXN0ID0gTm9uZQorCisgICAgICAgIGlmIHcu
d2VkZ2VkOgorICAgICAgICAgICAgIyBIbW0uIFRoaXMgc2hvdWxkbid0IGhhcHBlbiBpZiB3ZSBo
YXZlIG91ciB0aW1lb3V0cworICAgICAgICAgICAgIyB0dW5lZCBwcm9wZXJseS4KKyAgICAgICAg
ICAgIF9sb2cuZXJyb3IoIiVzIHVud2VkZ2VkIiwgdy5uYW1lKQorCisgICAgICAgIHNlbGYuX3Vw
ZGF0ZV93b3JrZXJfc3RhdHMoc3JjLCByZXN1bHQsIGVsYXBzZWRfdGltZSkKKworICAgICAgICBz
ZWxmLl91cGRhdGVfc3VtbWFyeV93aXRoX3Jlc3VsdChzZWxmLl9jdXJyZW50X3Jlc3VsdF9zdW1t
YXJ5LCByZXN1bHQpCisKKyAgICBkZWYgaGFuZGxlX2ZpbmlzaGVkX2xpc3Qoc2VsZiwgc3JjLCBs
aXN0X25hbWUsIG51bV90ZXN0cywgZWxhcHNlZF90aW1lKToKKyAgICAgICAgc2VsZi5fZ3JvdXBf
c3RhdHNbbGlzdF9uYW1lXSA9IChudW1fdGVzdHMsIGVsYXBzZWRfdGltZSkKKworICAgIGRlZiBo
YW5kbGVfZXhjZXB0aW9uKHNlbGYsIHNyYywgZXhjZXB0aW9uX2luZm8pOgorICAgICAgICByYWlz
ZSBleGNlcHRpb25faW5mbworCisgICAgZGVmIF91cGRhdGVfd29ya2VyX3N0YXRzKHNlbGYsIHNy
YywgcmVzdWx0LCBlbGFwc2VkX3RpbWUpOgorICAgICAgICBzZWxmLl93b3JrZXJzW3NyY10uc3Rh
dHNbJ3RvdGFsX3RpbWUnXSArPSBlbGFwc2VkX3RpbWUKKyAgICAgICAgc2VsZi5fd29ya2Vyc1tz
cmNdLnN0YXRzWydudW1fdGVzdHMnXSArPSAxCisgICAgICAgIHNlbGYuX2FsbF9yZXN1bHRzLmFw
cGVuZChyZXN1bHQpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9sYXlvdXRfcGFja2FnZS93b3JrZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS93b3JrZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2RhNTE4N2Ew
NWQyYTljM2VmMzU2NmUwZjg5NDI5ZGRmOTgyY2IxZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3dvcmtlci5weQpA
QCAtMCwwICsxLDQxMSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIw
MTAgR2Fib3IgUmFwY3NhbnlpIChyZ2Fib3JAaW5mLnUtc3plZ2VkLmh1KSwgVW5pdmVyc2l0eSBv
ZiBTemVnZWQKKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRp
c3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIkEgVGhyZWFkIG9iamVjdCBmb3IgcnVu
bmluZyBEdW1wUmVuZGVyVHJlZSBhbmQgcHJvY2Vzc2luZyBVUkxzIGZyb20gYQorc2hhcmVkIHF1
ZXVlLgorCitFYWNoIHRocmVhZCBydW5zIGEgc2VwYXJhdGUgaW5zdGFuY2Ugb2YgdGhlIER1bXBS
ZW5kZXJUcmVlIGJpbmFyeSBhbmQgdmFsaWRhdGVzCit0aGUgb3V0cHV0LiAgV2hlbiB0aGVyZSBh
cmUgbm8gbW9yZSBVUkxzIHRvIHByb2Nlc3MgaW4gdGhlIHNoYXJlZCBxdWV1ZSwgdGhlCit0aHJl
YWQgZXhpdHMuCisiIiIKKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudAor
CitpbXBvcnQgY29kZWNzCitpbXBvcnQgY29weQoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzaWdu
YWwKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCB0aW1lCitpbXBvcnQgdHJh
Y2ViYWNrCisKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnRlc3RfdHlwZXMgaW1wb3J0IGlt
YWdlX2RpZmYKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnRlc3RfdHlwZXMgaW1wb3J0IHRl
c3RfdHlwZV9iYXNlCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy50ZXN0X3R5cGVzIGltcG9y
dCB0ZXh0X2RpZmYKKworaW1wb3J0IG1lc3NhZ2VfYnJva2VyMgoraW1wb3J0IHRlc3RfZmFpbHVy
ZXMKK2ltcG9ydCB0ZXN0X291dHB1dAoraW1wb3J0IHRlc3RfcmVzdWx0cworCitfbG9nID0gbG9n
Z2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisKKworY2xhc3MgV29ya2VyKG1lc3NhZ2VfYnJva2Vy
Mi5DbGllbnRJbnRlcmZhY2UpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXIsIHdvcmtl
cl9udW1iZXIsIG9wdGlvbnMpOgorICAgICAgICBzZWxmLl9icm9rZXIgPSBicm9rZXIKKyAgICAg
ICAgc2VsZi5fd29ya2VyX251bWJlciA9IHdvcmtlcl9udW1iZXIKKyAgICAgICAgc2VsZi5fb3B0
aW9ucyA9IG9wdGlvbnMKKyAgICAgICAgc2VsZi5fbmFtZSA9ICd3b3JrZXIvJWQnICUgd29ya2Vy
X251bWJlcgorICAgICAgICBzZWxmLl9jYW5jZWxlZCA9IEZhbHNlCisgICAgICAgIHNlbGYuX2Rv
bmUgPSBGYWxzZQorCisgICAgICAgIHNlbGYuX3BvcnQgPSBOb25lCisgICAgICAgIHNlbGYuX2Jh
dGNoX2NvdW50ID0gMAorICAgICAgICBzZWxmLl9iYXRjaF9zaXplID0gMAorICAgICAgICBzZWxm
Ll9kcml2ZXIgPSBOb25lCisgICAgICAgIHNlbGYuX2hhdmVfaHR0cF9sb2NrID0gRmFsc2UKKyAg
ICAgICAgc2VsZi5fdGVzdF90eXBlcyA9IFtdCisgICAgICAgIHNlbGYuX3Rlc3RfYXJncyA9IFtd
CisgICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9maWxlID0gTm9uZQorCisgICAgZGVmIF9kZWZlcnJl
ZF9pbml0KHNlbGYsIHBvcnQpOgorICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAorICAgICAgICBz
ZWxmLl9maWxlc3lzdGVtID0gcG9ydC5fZmlsZXN5c3RlbQorICAgICAgICBzZWxmLl9iYXRjaF9z
aXplID0gc2VsZi5fb3B0aW9ucy5iYXRjaF9zaXplCisgICAgICAgIGZvciBjbHMgaW4gc2VsZi5f
Z2V0X3Rlc3RfdHlwZV9jbGFzc2VzKCk6CisgICAgICAgICAgICBzZWxmLl90ZXN0X3R5cGVzLmFw
cGVuZChjbHMoc2VsZi5fcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxmLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KSkKKyAgICAgICAgc2VsZi5fdGVz
dF9hcmdzID0gc2VsZi5fZ2V0X3Rlc3RfYXJncyhzZWxmLl93b3JrZXJfbnVtYmVyKQorCisgICAg
ICAgICMgQXBwZW5kIHRlc3RzIHdlJ3JlIHJ1bm5pbmcgdG8gdGhlIGV4aXN0aW5nIHRlc3RzX3J1
bi50eHQgZmlsZS4KKyAgICAgICAgIyBUaGlzIGlzIGNyZWF0ZWQgaW4gcnVuX3dlYmtpdF90ZXN0
cy5weTpfUHJlcGFyZUxpc3RzQW5kUHJpbnRPdXRwdXQuCisgICAgICAgIHRlc3RzX3J1bl9maWxl
bmFtZSA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0
b3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
InRlc3RzX3J1bi50eHQiKQorICAgICAgICBzZWxmLl90ZXN0c19ydW5fZmlsZSA9IHNlbGYuX2Zp
bGVzeXN0ZW0ub3Blbl90ZXh0X2ZpbGVfZm9yX3dyaXRpbmcodGVzdHNfcnVuX2ZpbGVuYW1lLCBh
cHBlbmQ9VHJ1ZSkKKworICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9jbGVh
bnVwKCkKKworICAgIGRlZiBfZ2V0X3Rlc3RfYXJncyhzZWxmLCB3b3JrZXJfbnVtYmVyKToKKyAg
ICAgICAgIiIiUmV0dXJucyB0aGUgdHVwbGUgb2YgYXJndW1lbnRzIGZvciB0ZXN0cyBhbmQgZm9y
IER1bXBSZW5kZXJUcmVlLiIiIgorICAgICAgICB0ZXN0X2FyZ3MgPSB0ZXN0X3R5cGVfYmFzZS5U
ZXN0QXJndW1lbnRzKCkKKyAgICAgICAgdGVzdF9hcmdzLm5ld19iYXNlbGluZSA9IHNlbGYuX29w
dGlvbnMubmV3X2Jhc2VsaW5lCisgICAgICAgIHRlc3RfYXJncy5yZXNldF9yZXN1bHRzID0gc2Vs
Zi5fb3B0aW9ucy5yZXNldF9yZXN1bHRzCisgICAgICAgIHJldHVybiB0ZXN0X2FyZ3MKKworICAg
IGRlZiBfZ2V0X3Rlc3RfdHlwZV9jbGFzc2VzKHNlbGYpOgorICAgICAgICBjbGFzc2VzID0gW3Rl
eHRfZGlmZi5UZXN0VGV4dERpZmZdCisgICAgICAgIGlmIHNlbGYuX29wdGlvbnMucGl4ZWxfdGVz
dHM6CisgICAgICAgICAgICBjbGFzc2VzLmFwcGVuZChpbWFnZV9kaWZmLkltYWdlRGlmZikKKyAg
ICAgICAgcmV0dXJuIGNsYXNzZXMKKworICAgIGRlZiBjYW5jZWwoc2VsZik6CisgICAgICAgICIi
IkF0dGVtcHQgdG8gYWJvcnQgcHJvY2Vzc2luZyAoYmVzdCBlZmZvcnQpLiIiIgorICAgICAgICBz
ZWxmLl9jYW5jZWxlZCA9IFRydWUKKworICAgIGRlZiBpc19kb25lKHNlbGYpOgorICAgICAgICAj
IFRoaXMgaXMgdXNlZCBmb3IgYXNzZXJ0aW9uIGNoZWNraW5nIGluIHRoZSBtYW5hZ2VyLgorICAg
ICAgICByZXR1cm4gc2VsZi5fZG9uZSBvciBzZWxmLl9jYW5jZWxlZAorCisgICAgZGVmIG5hbWUo
c2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9uYW1lCisKKyAgICBkZWYgcnVuKHNlbGYsIHBv
cnQpOgorICAgICAgICBzZWxmLl9kZWZlcnJlZF9pbml0KHBvcnQpCisKKyAgICAgICAgZXhjZXB0
aW9uX21zZyA9ICIiCisgICAgICAgIF9sb2cuZGVidWcoIiVzIHN0YXJ0aW5nIiAlIHNlbGYuX25h
bWUpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fYnJva2VyLnJ1bl9tZXNzYWdl
X2xvb3AoKQorICAgICAgICAgICAgaWYgbm90IHNlbGYuaXNfZG9uZSgpOgorICAgICAgICAgICAg
ICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCIlczogcmFuIG91dCBvZiBtZXNzYWdlcyBpbiB3b3Jr
ZXIgcXVldWUuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgc2VsZi5f
bmFtZSkKKyAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgZXhj
ZXB0aW9uX21zZyA9ICIsIGludGVycnVwdGVkIgorICAgICAgICBleGNlcHQ6CisgICAgICAgICAg
ICBleGNlcHRpb25fbXNnID0gIiwgZXhjZXB0aW9uIHJhaXNlZCIKKyAgICAgICAgZmluYWxseToK
KyAgICAgICAgICAgIF9sb2cuZGVidWcoIiVzIGRvbmUlcyIgJSAoc2VsZi5fbmFtZSwgZXhjZXB0
aW9uX21zZykpCisgICAgICAgICAgICBpZiBleGNlcHRpb25fbXNnOgorICAgICAgICAgICAgICAg
IGV4Y19pbmZvID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgICAgICAgICBzZWxmLl9sb2dfdHJh
Y2ViYWNrKGV4Y19pbmZvWzJdKQorICAgICAgICAgICAgICAgICMgRklYTUU6IEZpZ3VyZSBvdXQg
aG93IHRvIHNlbmQgYSBtZXNzYWdlIHdpdGggYSB0cmFjZWJhY2suCisgICAgICAgICAgICAgICAg
c2VsZi5fYnJva2VyLnBvc3RfbWVzc2FnZSgnZXhjZXB0aW9uJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChleGNfaW5mb1swXSwgZXhjX2luZm9bMV0sIE5vbmUp
KQorICAgICAgICAgICAgc2VsZi5fYnJva2VyLnBvc3RfbWVzc2FnZSgnZG9uZScpCisgICAgICAg
ICAgICBzZWxmLl9jbGVhbnVwKCkKKworICAgIGRlZiBfbG9nX3RyYWNlYmFjayhzZWxmLCB0Yik6
CisgICAgICAgIHN0YWNrID0gdHJhY2ViYWNrLmV4dHJhY3RfdGIodGIpCisgICAgICAgIGZvciBm
cmFtZV9zdHIgaW4gdHJhY2ViYWNrLmZvcm1hdF9saXN0KHN0YWNrKToKKyAgICAgICAgICAgIGZv
ciBsaW5lIGluIGZyYW1lX3N0ci5zcGxpdCgnXG4nKToKKyAgICAgICAgICAgICAgICBpZiBsaW5l
OgorICAgICAgICAgICAgICAgICAgICBfbG9nLmVycm9yKCIgICVzIiAlIGxpbmUpCisKKyAgICBk
ZWYgX2NsZWFudXAoc2VsZik6CisgICAgICAgIHNlbGYuX2tpbGxfZHVtcF9yZW5kZXJfdHJlZSgp
CisgICAgICAgIGlmIHNlbGYuX2hhdmVfaHR0cF9sb2NrOgorICAgICAgICAgICAgc2VsZi5fc3Rv
cF9zZXJ2ZXJzX3dpdGhfbG9jaygpCisgICAgICAgIGlmIHNlbGYuX3Rlc3RzX3J1bl9maWxlOgor
ICAgICAgICAgICAgc2VsZi5fdGVzdHNfcnVuX2ZpbGUuY2xvc2UoKQorICAgICAgICAgICAgc2Vs
Zi5fdGVzdHNfcnVuX2ZpbGUgPSBOb25lCisKKyAgICBkZWYgaGFuZGxlX3Rlc3RfbGlzdChzZWxm
LCBzcmMsIGxpc3RfbmFtZSwgdGVzdF9saXN0KToKKyAgICAgICAgaWYgbGlzdF9uYW1lID09ICJ0
ZXN0c190b19odHRwX2xvY2siOgorICAgICAgICAgICAgc2VsZi5fc3RhcnRfc2VydmVyc193aXRo
X2xvY2soKQorCisgICAgICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQorICAgICAgICBudW1f
dGVzdHMgPSAwCisgICAgICAgIGZvciB0ZXN0X2lucHV0IGluIHRlc3RfbGlzdDoKKyAgICAgICAg
ICAgIHNlbGYuX3J1bl90ZXN0KHRlc3RfaW5wdXQpCisgICAgICAgICAgICBzZWxmLl9icm9rZXIu
eWllbGRfdG9fYnJva2VyKCkKKyAgICAgICAgICAgIGlmIHNlbGYuX2NhbmNlbGVkOgorICAgICAg
ICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBudW1fdGVzdHMgKz0gMQorCisgICAgICAgIGVs
YXBzZWRfdGltZSA9IHRpbWUudGltZSgpIC0gc3RhcnRfdGltZQorCisgICAgICAgIGlmIHNlbGYu
X2hhdmVfaHR0cF9sb2NrOgorICAgICAgICAgICAgc2VsZi5fc3RvcF9zZXJ2ZXJzX3dpdGhfbG9j
aygpCisKKyAgICAgICAgc2VsZi5fYnJva2VyLnBvc3RfbWVzc2FnZSgnZmluaXNoZWRfbGlzdCcs
IGxpc3RfbmFtZSwgbnVtX3Rlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVsYXBzZWRfdGltZSkKKworICAgIGRlZiBoYW5kbGVfc3RvcChzZWxmLCBzcmMpOgorICAgICAg
ICAiIiJTdG9wIHJlY2VpdmVkIC0gbm8gbW9yZSB0ZXN0cyB0byBydW4uIiIiCisgICAgICAgIHNl
bGYuX2RvbmUgPSBUcnVlCisKKyAgICBkZWYgX3J1bl90ZXN0KHNlbGYsIHRlc3RfaW5wdXQpOgor
ICAgICAgICBzZWxmLl9zZXRfdXBfdGVzdCh0ZXN0X2lucHV0KQorCisgICAgICAgICMgV2UgY2Fs
Y3VsYXRlIGhvdyBsb25nIHdlIGV4cGVjdCB0aGUgdGVzdCB0byB0YWtlLgorICAgICAgICAjCisg
ICAgICAgICMgVGhlIER1bXBSZW5kZXJUcmVlIHdhdGNoZG9nIHVzZXMgMi41eCB0aGUgdGltZW91
dDsgd2Ugd2FudCB0byBiZQorICAgICAgICAjIGxhcmdlciB0aGFuIHRoYXQuIFdlIGFsc28gYWRk
IGEgbGl0dGxlIG1vcmUgcGFkZGluZyBpZiB3ZSdyZQorICAgICAgICAjIHJ1bm5pbmcgdGVzdHMg
aW4gYSBzZXBhcmF0ZSB0aHJlYWQuCisgICAgICAgICMKKyAgICAgICAgIyBOb3RlIHRoYXQgd2Ug
bmVlZCB0byBjb252ZXJ0IHRoZSB0ZXN0IHRpbWVvdXQgZnJvbSBhCisgICAgICAgICMgc3RyaW5n
IHZhbHVlIGluIG1pbGxpc2Vjb25kcyB0byBhIGZsb2F0IGZvciBQeXRob24uCisgICAgICAgIGRy
aXZlcl90aW1lb3V0X3NlYyA9IDMuMCAqIGZsb2F0KHRlc3RfaW5wdXQudGltZW91dCkgLyAxMDAw
LjAKKyAgICAgICAgdGhyZWFkX3BhZGRpbmdfc2VjID0gMS4wCisgICAgICAgIHRocmVhZF90aW1l
b3V0X3NlYyA9IGRyaXZlcl90aW1lb3V0X3NlYyArIHRocmVhZF9wYWRkaW5nX3NlYworICAgICAg
ICBpZiBzZWxmLl9vcHRpb25zLnJ1bl9zaW5nbHk6CisgICAgICAgICAgICB0ZXN0X3RpbWVvdXRf
c2VjID0gdGhyZWFkX3RpbWVvdXRfc2VjCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0ZXN0
X3RpbWVvdXRfc2VjID0gZHJpdmVyX3RpbWVvdXRfc2VjCisKKyAgICAgICAgc3RhcnQgPSB0aW1l
LnRpbWUoKQorICAgICAgICBzZWxmLl9icm9rZXIucG9zdF9tZXNzYWdlKCdzdGFydGVkX3Rlc3Qn
LCB0ZXN0X2lucHV0LCB0ZXN0X3RpbWVvdXRfc2VjKQorCisgICAgICAgIGlmIHNlbGYuX29wdGlv
bnMucnVuX3NpbmdseToKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuX3J1bl90ZXN0X2luX2Fu
b3RoZXJfdGhyZWFkKHRlc3RfaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWRfdGltZW91dF9zZWMpCisgICAgICAgIGVsc2U6
CisgICAgICAgICAgICByZXN1bHQgPSBzZWxmLl9ydW5fdGVzdF9pbl90aGlzX3RocmVhZCh0ZXN0
X2lucHV0KQorCisgICAgICAgIHNlbGYuX3RlYXJfZG93bl90ZXN0KHRlc3RfaW5wdXQsIHJlc3Vs
dCwgdGltZS50aW1lKCkgLSBzdGFydCkKKworICAgIGRlZiBfc2V0X3VwX3Rlc3Qoc2VsZiwgdGVz
dF9pbnB1dCk6CisgICAgICAgIHRlc3RfaW5wdXQudXJpID0gc2VsZi5fcG9ydC5maWxlbmFtZV90
b191cmkodGVzdF9pbnB1dC5maWxlbmFtZSkKKyAgICAgICAgaWYgc2VsZi5fc2hvdWxkX2ZldGNo
X2V4cGVjdGVkX2NoZWNrc3VtKCk6CisgICAgICAgICAgICB0ZXN0X2lucHV0LmltYWdlX2NoZWNr
c3VtID0gc2VsZi5fcG9ydC5leHBlY3RlZF9jaGVja3N1bSgKKyAgICAgICAgICAgICAgICB0ZXN0
X2lucHV0LmZpbGVuYW1lKQorCisgICAgZGVmIF9zaG91bGRfZmV0Y2hfZXhwZWN0ZWRfY2hlY2tz
dW0oc2VsZik6CisgICAgICAgIHJldHVybiAoc2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0cyBhbmQg
bm90CisgICAgICAgICAgICAgICAgKHNlbGYuX29wdGlvbnMubmV3X2Jhc2VsaW5lIG9yIHNlbGYu
X29wdGlvbnMucmVzZXRfcmVzdWx0cykpCisKKyAgICBkZWYgX3J1bl90ZXN0X2luX2Fub3RoZXJf
dGhyZWFkKHNlbGYsIHRlc3RfaW5wdXQsIHRocmVhZF90aW1lb3V0X3NlYyk6CisgICAgICAgICIi
IlJ1biBhIHRlc3QgaW4gYSBzZXBhcmF0ZSB0aHJlYWQsIGVuZm9yY2luZyBhIGhhcmQgdGltZSBs
aW1pdC4KKworICAgICAgICBTaW5jZSB3ZSBjYW4gb25seSBkZXRlY3QgdGhlIHRlcm1pbmF0aW9u
IG9mIGEgdGhyZWFkLCBub3QgYW55IGludGVybmFsCisgICAgICAgIHN0YXRlIG9yIHByb2dyZXNz
LCB3ZSBjYW4gb25seSBydW4gcGVyLXRlc3QgdGltZW91dHMgd2hlbiBydW5uaW5nIHRlc3QKKyAg
ICAgICAgZmlsZXMgc2luZ2x5LgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgdGVzdF9pbnB1
dDogT2JqZWN0IGNvbnRhaW5pbmcgdGhlIHRlc3QgZmlsZW5hbWUgYW5kIHRpbWVvdXQKKyAgICAg
ICAgICB0aHJlYWRfdGltZW91dF9zZWM6IHRpbWUgdG8gd2FpdCBiZWZvcmUga2lsbGluZyB0aGUg
ZHJpdmVyIHByb2Nlc3MuCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgQSBUZXN0UmVzdWx0
CisgICAgICAgICIiIgorICAgICAgICB3b3JrZXIgPSBzZWxmCisgICAgICAgIHJlc3VsdCA9IE5v
bmUKKworICAgICAgICBkcml2ZXIgPSB3b3JrZXIuX3BvcnQuY3JlYXRlX2RyaXZlcih3b3JrZXIu
X3dvcmtlcl9udW1iZXIpCisgICAgICAgIGRyaXZlci5zdGFydCgpCisKKyAgICAgICAgY2xhc3Mg
U2luZ2xlVGVzdFRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKKyAgICAgICAgICAgIGRlZiBydW4o
c2VsZik6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gd29ya2VyLl9ydW5fc2luZ2xlX3Rlc3Qo
dGVzdF9pbnB1dCwgZHJpdmVyKQorCisgICAgICAgIHRocmVhZCA9IFNpbmdsZVRlc3RUaHJlYWQo
KQorICAgICAgICB0aHJlYWQuc3RhcnQoKQorICAgICAgICB0aHJlYWQuam9pbih0aHJlYWRfdGlt
ZW91dF9zZWMpCisgICAgICAgIGlmIHRocmVhZC5pc0FsaXZlKCk6CisgICAgICAgICAgICAjIElm
IGpvaW4oKSByZXR1cm5lZCB3aXRoIHRoZSB0aHJlYWQgc3RpbGwgcnVubmluZywgdGhlCisgICAg
ICAgICAgICAjIER1bXBSZW5kZXJUcmVlIGlzIGNvbXBsZXRlbHkgaHVuZyBhbmQgdGhlcmUncyBu
b3RoaW5nCisgICAgICAgICAgICAjIG1vcmUgd2UgY2FuIGRvIHdpdGggaXQuICBXZSBoYXZlIHRv
IGtpbGwgYWxsIHRoZQorICAgICAgICAgICAgIyBEdW1wUmVuZGVyVHJlZXMgdG8gZnJlZSBpdCB1
cC4gSWYgd2UncmUgcnVubmluZyBtb3JlIHRoYW4KKyAgICAgICAgICAgICMgb25lIER1bXBSZW5k
ZXJUcmVlIHRocmVhZCwgd2UnbGwgZW5kIHVwIGtpbGxpbmcgdGhlIG90aGVyCisgICAgICAgICAg
ICAjIER1bXBSZW5kZXJUcmVlcyB0b28sIGludHJvZHVjaW5nIHNwdXJpb3VzIGNyYXNoZXMuIFdl
IGFjY2VwdAorICAgICAgICAgICAgIyB0aGF0IHRyYWRlb2ZmIGluIG9yZGVyIHRvIGF2b2lkIGxv
c2luZyB0aGUgcmVzdCBvZiB0aGlzCisgICAgICAgICAgICAjIHRocmVhZCdzIHJlc3VsdHMuCisg
ICAgICAgICAgICBfbG9nLmVycm9yKCdUZXN0IHRocmVhZCBodW5nOiBraWxsaW5nIGFsbCBEdW1w
UmVuZGVyVHJlZXMnKQorCisgICAgICAgIGRyaXZlci5zdG9wKCkKKworICAgICAgICBpZiBub3Qg
cmVzdWx0OgorICAgICAgICAgICAgcmVzdWx0ID0gdGVzdF9yZXN1bHRzLlRlc3RSZXN1bHQodGVz
dF9pbnB1dC5maWxlbmFtZSwgZmFpbHVyZXM9W10sCisgICAgICAgICAgICAgICAgdGVzdF9ydW5f
dGltZT0wLCB0b3RhbF90aW1lX2Zvcl9hbGxfZGlmZnM9MCwgdGltZV9mb3JfZGlmZnM9e30pCisK
KyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIF9ydW5fdGVzdF9pbl90aGlzX3RocmVh
ZChzZWxmLCB0ZXN0X2lucHV0KToKKyAgICAgICAgIiIiUnVuIGEgc2luZ2xlIHRlc3QgZmlsZSB1
c2luZyBhIHNoYXJlZCBEdW1wUmVuZGVyVHJlZSBwcm9jZXNzLgorCisgICAgICAgIEFyZ3M6Cisg
ICAgICAgICAgdGVzdF9pbnB1dDogT2JqZWN0IGNvbnRhaW5pbmcgdGhlIHRlc3QgZmlsZW5hbWUs
IHVyaSBhbmQgdGltZW91dAorCisgICAgICAgIFJldHVybnM6IGEgVGVzdFJlc3VsdCBvYmplY3Qu
CisgICAgICAgICIiIgorICAgICAgICAjIHBvbGwoKSBpcyBub3QgdGhyZWFkc2FmZSBhbmQgY2Fu
IHRocm93IE9TRXJyb3IgZHVlIHRvOgorICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcv
aXNzdWUxNzMxNzE3CisgICAgICAgIGlmIG5vdCBzZWxmLl9kcml2ZXIgb3Igc2VsZi5fZHJpdmVy
LnBvbGwoKSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2RyaXZlciA9IHNlbGYuX3Bv
cnQuY3JlYXRlX2RyaXZlcihzZWxmLl93b3JrZXJfbnVtYmVyKQorICAgICAgICAgICAgc2VsZi5f
ZHJpdmVyLnN0YXJ0KCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9zaW5nbGVfdGVzdCh0ZXN0
X2lucHV0LCBzZWxmLl9kcml2ZXIpCisKKyAgICBkZWYgX3J1bl9zaW5nbGVfdGVzdChzZWxmLCB0
ZXN0X2lucHV0LCBkcml2ZXIpOgorICAgICAgICAjIFRoZSBpbWFnZSBoYXNoIGlzIHVzZWQgdG8g
YXZvaWQgZG9pbmcgYW4gaW1hZ2UgZHVtcCBpZiB0aGUKKyAgICAgICAgIyBjaGVja3N1bXMgbWF0
Y2gsIHNvIGl0IHNob3VsZCBiZSBzZXQgdG8gYSBibGFuayB2YWx1ZSBpZiB3ZQorICAgICAgICAj
IGFyZSBnZW5lcmF0aW5nIGEgbmV3IGJhc2VsaW5lLiAgKE90aGVyd2lzZSwgYW4gaW1hZ2UgZnJv
bSBhCisgICAgICAgICMgcHJldmlvdXMgcnVuIHdpbGwgYmUgY29waWVkIGludG8gdGhlIGJhc2Vs
aW5lLiIiIgorICAgICAgICBpZiBzZWxmLl9zaG91bGRfZmV0Y2hfZXhwZWN0ZWRfY2hlY2tzdW0o
KToKKyAgICAgICAgICAgIHRlc3RfaW5wdXQuaW1hZ2VfaGFzaCA9IHNlbGYuX3BvcnQuZXhwZWN0
ZWRfY2hlY2tzdW0oCisgICAgICAgICAgICAgICAgdGVzdF9pbnB1dC5maWxlbmFtZSkKKyAgICAg
ICAgdGVzdF9vdXRwdXQgPSBkcml2ZXIucnVuX3Rlc3QodGVzdF9pbnB1dCkKKyAgICAgICAgcmV0
dXJuIHNlbGYuX3Byb2Nlc3Nfb3V0cHV0KHRlc3RfaW5wdXQsIHRlc3Rfb3V0cHV0KQorCisgICAg
ZGVmIF9wcm9jZXNzX291dHB1dChzZWxmLCB0ZXN0X2lucHV0LCB0ZXN0X291dHB1dCk6CisgICAg
ICAgICIiIlJlY2VpdmVzIHRoZSBvdXRwdXQgZnJvbSBhIER1bXBSZW5kZXJUcmVlIHByb2Nlc3Ms
IHN1YmplY3RzIGl0IHRvIGEKKyAgICAgICAgbnVtYmVyIG9mIHRlc3RzLCBhbmQgcmV0dXJucyBh
IGxpc3Qgb2YgZmFpbHVyZSB0eXBlcyB0aGUgdGVzdCBwcm9kdWNlZC4KKworICAgICAgICBBcmdz
OgorICAgICAgICB0ZXN0X2lucHV0OiBhIFRlc3RJbnB1dCBvYmplY3QKKyAgICAgICAgdGVzdF9v
dXRwdXQ6IGEgVGVzdE91dHB1dCBvYmplY3QgY29udGFpbmluZyB0aGUgb3V0cHV0IG9mIHRoZSB0
ZXN0CisKKyAgICAgICAgUmV0dXJuczogYSBUZXN0UmVzdWx0IG9iamVjdAorICAgICAgICAiIiIK
KyAgICAgICAgZmFpbHVyZXMgPSBbXQorICAgICAgICB0ZXN0X2ZpbGVuYW1lID0gdGVzdF9pbnB1
dC5maWxlbmFtZQorCisgICAgICAgIGlmIHRlc3Rfb3V0cHV0LmNyYXNoOgorICAgICAgICAgICAg
ZmFpbHVyZXMuYXBwZW5kKHRlc3RfZmFpbHVyZXMuRmFpbHVyZUNyYXNoKCkpCisgICAgICAgIGlm
IHRlc3Rfb3V0cHV0LnRpbWVvdXQ6CisgICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQodGVzdF9m
YWlsdXJlcy5GYWlsdXJlVGltZW91dCgpKQorCisgICAgICAgIHRlc3RfbmFtZSA9IHNlbGYuX3Bv
cnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZSh0ZXN0X2ZpbGVuYW1lKQorICAgICAgICBpZiB0ZXN0
X291dHB1dC5jcmFzaDoKKyAgICAgICAgICAgIF9sb2cuZGVidWcoIiVzIFN0YWNrdHJhY2UgZm9y
ICVzOlxuJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuX25hbWUsIHRlc3RfbmFt
ZSwgdGVzdF9vdXRwdXQuZXJyb3IpKQorICAgICAgICAgICAgZmlsZW5hbWUgPSBzZWxmLl9maWxl
c3lzdGVtLmpvaW4oc2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSwgdGVzdF9uYW1lKQor
ICAgICAgICAgICAgZmlsZW5hbWUgPSBzZWxmLl9maWxlc3lzdGVtLnNwbGl0ZXh0KGZpbGVuYW1l
KVswXSArICItc3RhY2sudHh0IgorICAgICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS5tYXliZV9t
YWtlX2RpcmVjdG9yeShzZWxmLl9maWxlc3lzdGVtLmRpcm5hbWUoZmlsZW5hbWUpKQorICAgICAg
ICAgICAgc2VsZi5fZmlsZXN5c3RlbS53cml0ZV9iaW5hcnlfZmlsZShmaWxlbmFtZSwgdGVzdF9v
dXRwdXQuZXJyb3IpCisgICAgICAgIGVsaWYgdGVzdF9vdXRwdXQuZXJyb3I6CisgICAgICAgICAg
ICBfbG9nLmRlYnVnKCIlcyAlcyBvdXRwdXQgc3RkZXJyIGxpbmVzOlxuJXMiICUKKyAgICAgICAg
ICAgICAgICAgICAgICAgKHNlbGYuX25hbWUsIHRlc3RfbmFtZSwgdGVzdF9vdXRwdXQuZXJyb3Ip
KQorCisgICAgICAgIGV4cGVjdGVkX3Rlc3Rfb3V0cHV0ID0gc2VsZi5fZXhwZWN0ZWRfdGVzdF9v
dXRwdXQodGVzdF9maWxlbmFtZSkKKworICAgICAgICAjIENoZWNrIHRoZSBvdXRwdXQgYW5kIHNh
dmUgdGhlIHJlc3VsdHMuCisgICAgICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQorICAgICAg
ICB0aW1lX2Zvcl9kaWZmcyA9IHt9CisgICAgICAgIGZvciB0ZXN0X3R5cGUgaW4gc2VsZi5fdGVz
dF90eXBlczoKKyAgICAgICAgICAgIHN0YXJ0X2RpZmZfdGltZSA9IHRpbWUudGltZSgpCisgICAg
ICAgICAgICBuZXdfZmFpbHVyZXMgPSB0ZXN0X3R5cGUuY29tcGFyZV9vdXRwdXQoc2VsZi5fcG9y
dCwgdGVzdF9pbnB1dC5maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZXN0X2FyZ3MsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9vdXRwdXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfdGVzdF9v
dXRwdXQpCisgICAgICAgICAgICAjIERvbid0IGFkZCBhbnkgbW9yZSBmYWlsdXJlcyBpZiB3ZSBh
bHJlYWR5IGhhdmUgYSBjcmFzaCwgc28gd2UKKyAgICAgICAgICAgICMgZG9uJ3QgZG91YmxlLXJl
cG9ydCB0aG9zZSB0ZXN0cy4gV2UgZG8gZG91YmxlLXJlcG9ydCBmb3IgdGltZW91dHMKKyAgICAg
ICAgICAgICMgc2luY2Ugd2Ugc3RpbGwgd2FudCB0byBzZWUgdGhlIHRleHQgYW5kIGltYWdlIG91
dHB1dC4KKyAgICAgICAgICAgIGlmIG5vdCB0ZXN0X291dHB1dC5jcmFzaDoKKyAgICAgICAgICAg
ICAgICBmYWlsdXJlcy5leHRlbmQobmV3X2ZhaWx1cmVzKQorICAgICAgICAgICAgdGltZV9mb3Jf
ZGlmZnNbdGVzdF90eXBlLl9fY2xhc3NfXy5fX25hbWVfX10gPSAoCisgICAgICAgICAgICAgICAg
dGltZS50aW1lKCkgLSBzdGFydF9kaWZmX3RpbWUpCisKKyAgICAgICAgdG90YWxfdGltZV9mb3Jf
YWxsX2RpZmZzID0gdGltZS50aW1lKCkgLSBzdGFydF9kaWZmX3RpbWUKKyAgICAgICAgcmV0dXJu
IHRlc3RfcmVzdWx0cy5UZXN0UmVzdWx0KHRlc3RfZmlsZW5hbWUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmYWlsdXJlcywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRlc3Rfb3V0cHV0LnRlc3RfdGltZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRvdGFsX3RpbWVfZm9yX2FsbF9kaWZmcywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVfZm9yX2RpZmZzKQorCisgICAgZGVm
IF9leHBlY3RlZF90ZXN0X291dHB1dChzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgICIiIlJldHVy
bnMgYW4gZXhwZWN0ZWQgVGVzdE91dHB1dCBvYmplY3QuIiIiCisgICAgICAgIHJldHVybiB0ZXN0
X291dHB1dC5UZXN0T3V0cHV0KHNlbGYuX3BvcnQuZXhwZWN0ZWRfdGV4dChmaWxlbmFtZSksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LmV4cGVjdGVkX2lt
YWdlKGZpbGVuYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYu
X3BvcnQuZXhwZWN0ZWRfY2hlY2tzdW0oZmlsZW5hbWUpKQorCisgICAgZGVmIF90ZWFyX2Rvd25f
dGVzdChzZWxmLCB0ZXN0X2lucHV0LCByZXN1bHQsIGVsYXBzZWRfdGltZSk6CisgICAgICAgIHNl
bGYuX2JhdGNoX2NvdW50ICs9IDEKKyAgICAgICAgc2VsZi5fdGVzdHNfcnVuX2ZpbGUud3JpdGUo
dGVzdF9pbnB1dC5maWxlbmFtZSArICJcbiIpCisgICAgICAgIHRlc3RfbmFtZSA9IHNlbGYuX3Bv
cnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZSh0ZXN0X2lucHV0LmZpbGVuYW1lKQorCisgICAgICAg
IGlmIHJlc3VsdC5mYWlsdXJlczoKKyAgICAgICAgICAgICMgQ2hlY2sgYW5kIGtpbGwgRHVtcFJl
bmRlclRyZWUgaWYgd2UgbmVlZCB0by4KKyAgICAgICAgICAgIGlmIGFueShbZi5zaG91bGRfa2ls
bF9kdW1wX3JlbmRlcl90cmVlKCkgZm9yIGYgaW4gcmVzdWx0LmZhaWx1cmVzXSk6CisgICAgICAg
ICAgICAgICAgc2VsZi5fa2lsbF9kdW1wX3JlbmRlcl90cmVlKCkKKyAgICAgICAgICAgICAgICAj
IFJlc2V0IHRoZSBiYXRjaCBjb3VudCBzaW5jZSB0aGUgc2hlbGwganVzdCBib3VuY2VkLgorICAg
ICAgICAgICAgICAgIHNlbGYuX2JhdGNoX2NvdW50ID0gMAorCisgICAgICAgICAgICAjIFByaW50
IHRoZSBlcnJvciBtZXNzYWdlKHMpLgorICAgICAgICAgICAgX2xvZy5kZWJ1ZygiJXMgJXMgZmFp
bGVkOiIgJSAoc2VsZi5fbmFtZSwgdGVzdF9uYW1lKSkKKyAgICAgICAgICAgIGZvciBmIGluIHJl
c3VsdC5mYWlsdXJlczoKKyAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyAgJXMiICUgKHNl
bGYuX25hbWUsIGYubWVzc2FnZSgpKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIF9sb2cu
ZGVidWcoIiVzICVzIHBhc3NlZCIgJSAoc2VsZi5fbmFtZSwgdGVzdF9uYW1lKSkKKworICAgICAg
ICBzZWxmLl9icm9rZXIucG9zdF9tZXNzYWdlKCdmaW5pc2hlZF90ZXN0JywgcmVzdWx0LCBlbGFw
c2VkX3RpbWUpCisKKyAgICAgICAgaWYgc2VsZi5fYmF0Y2hfc2l6ZSA+IDAgYW5kIHNlbGYuX2Jh
dGNoX2NvdW50ID49IHNlbGYuX2JhdGNoX3NpemU6CisgICAgICAgICAgICAjIEJvdW5jZSB0aGUg
c2hlbGwgYW5kIHJlc2V0IGNvdW50LgorICAgICAgICAgICAgc2VsZi5fa2lsbF9kdW1wX3JlbmRl
cl90cmVlKCkKKyAgICAgICAgICAgIHNlbGYuX2JhdGNoX2NvdW50ID0gMAorCisgICAgZGVmIF9z
dGFydF9zZXJ2ZXJzX3dpdGhfbG9jayhzZWxmKToKKyAgICAgICAgX2xvZy5kZWJ1ZygnQWNxdWly
aW5nIGh0dHAgbG9jayAuLi4nKQorICAgICAgICBzZWxmLl9wb3J0LmFjcXVpcmVfaHR0cF9sb2Nr
KCkKKyAgICAgICAgX2xvZy5kZWJ1ZygnU3RhcnRpbmcgSFRUUCBzZXJ2ZXIgLi4uJykKKyAgICAg
ICAgc2VsZi5fcG9ydC5zdGFydF9odHRwX3NlcnZlcigpCisgICAgICAgIF9sb2cuZGVidWcoJ1N0
YXJ0aW5nIFdlYlNvY2tldCBzZXJ2ZXIgLi4uJykKKyAgICAgICAgc2VsZi5fcG9ydC5zdGFydF93
ZWJzb2NrZXRfc2VydmVyKCkKKyAgICAgICAgc2VsZi5faGF2ZV9odHRwX2xvY2sgPSBUcnVlCisK
KyAgICBkZWYgX3N0b3Bfc2VydmVyc193aXRoX2xvY2soc2VsZik6CisgICAgICAgICIiIlN0b3Ag
dGhlIHNlcnZlcnMgYW5kIHJlbGVhc2UgaHR0cCBsb2NrLiIiIgorICAgICAgICBpZiBzZWxmLl9o
YXZlX2h0dHBfbG9jazoKKyAgICAgICAgICAgIF9sb2cuZGVidWcoJ1N0b3BwaW5nIEhUVFAgc2Vy
dmVyIC4uLicpCisgICAgICAgICAgICBzZWxmLl9wb3J0LnN0b3BfaHR0cF9zZXJ2ZXIoKQorICAg
ICAgICAgICAgX2xvZy5kZWJ1ZygnU3RvcHBpbmcgV2ViU29ja2V0IHNlcnZlciAuLi4nKQorICAg
ICAgICAgICAgc2VsZi5fcG9ydC5zdG9wX3dlYnNvY2tldF9zZXJ2ZXIoKQorICAgICAgICAgICAg
X2xvZy5kZWJ1ZygnUmVsZWFzaW5nIHNlcnZlciBsb2NrIC4uLicpCisgICAgICAgICAgICBzZWxm
Ll9wb3J0LnJlbGVhc2VfaHR0cF9sb2NrKCkKKyAgICAgICAgICAgIHNlbGYuX2hhdmVfaHR0cF9s
b2NrID0gRmFsc2UKKworICAgIGRlZiBfa2lsbF9kdW1wX3JlbmRlcl90cmVlKHNlbGYpOgorICAg
ICAgICAiIiJLaWxsIHRoZSBEdW1wUmVuZGVyVHJlZSBwcm9jZXNzIGlmIGl0J3MgcnVubmluZy4i
IiIKKyAgICAgICAgaWYgc2VsZi5fZHJpdmVyOgorICAgICAgICAgICAgc2VsZi5fZHJpdmVyLnN0
b3AoKQorICAgICAgICAgICAgc2VsZi5fZHJpdmVyID0gTm9uZQpkaWZmIC0tZ2l0IGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5IGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CmluZGV4IDA1ZDczN2Q5ZGVhZTdl
NWE3NjM3ZWIxYzZiN2FhNGE3NGFkMDgyYjUuLmI2NWEwMTBhMmRkZmM5YTA1NWQ2NmQxN2JjNzU4
OTc0NzU0ZmY2MzggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvYmFzZS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L2Jhc2UucHkKQEAgLTQ2OCw2ICs0NjgsMTAgQEAgY2xhc3MgUG9ydChvYmplY3QpOgog
ICAgICAgICBtYXkgYmUgZGlmZmVyZW50IChlLmcuLCAnd2luLXhwJyBpbnN0ZWFkIG9mICdjaHJv
bWl1bS13aW4teHAnLiIiIgogICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQogCisgICAgZGVmIHJl
YWxfbmFtZShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgYWN0dWFsIG5hbWUgb2YgdGhl
IHBvcnQsIG5vdCB0aGUgZGVsZWdhdGUncy4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYubmFtZSgp
CisKICAgICBkZWYgZ2V0X29wdGlvbihzZWxmLCBuYW1lLCBkZWZhdWx0X3ZhbHVlPU5vbmUpOgog
ICAgICAgICAjIEZJWE1FOiBFdmVudHVhbGx5IHdlIHNob3VsZCBub3QgaGF2ZSB0byBkbyBhIHRl
c3QgZm9yCiAgICAgICAgICMgaGFzYXR0cigpLCBhbmQgd2Ugc2hvdWxkIGJlIGFibGUgdG8ganVz
dCBkbwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9y
dC9tb2NrX2RydC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
bW9ja19kcnQucHkKaW5kZXggYTI2MWFhMmNlYmQ3NDEwOTBiZDhhNmNlN2RkMjYzOGU1YTZjNjhl
MS4uZTIwMjAzMWQwZTlkMjk5YzZiNDUwMzJkYTVmZWFkZjQ4MjViN2U2NyAxMDA2NDQKLS0tIGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tb2NrX2RydC5weQorKysg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21vY2tfZHJ0LnB5CkBA
IC0zNyw2ICszNyw4IEBAIGltcG9ydCBvcHRwYXJzZQogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCiAK
K2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgZmlsZXN5c3RlbQorCiBmcm9tIHdl
YmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBiYXNlCiBmcm9tIHdlYmtpdHB5LmxheW91
dF90ZXN0cy5wb3J0IGltcG9ydCBmYWN0b3J5CiAKQEAgLTUxLDYgKzUzLDEwIEBAIGNsYXNzIE1v
Y2tEUlRQb3J0KG9iamVjdCk6CiAgICAgICAgIGlmICdwb3J0X25hbWUnIGluIGt3YXJnczoKICAg
ICAgICAgICAgIGt3YXJnc1sncG9ydF9uYW1lJ10gPSBrd2FyZ3NbJ3BvcnRfbmFtZSddW2xlbihw
cmVmaXgpOl0KICAgICAgICAgc2VsZi5fX2RlbGVnYXRlID0gZmFjdG9yeS5nZXQoKiprd2FyZ3Mp
CisgICAgICAgIHNlbGYuX19yZWFsX25hbWUgPSBwcmVmaXggKyBzZWxmLl9fZGVsZWdhdGUubmFt
ZSgpCisKKyAgICBkZWYgcmVhbF9uYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fX3Jl
YWxfbmFtZQogCiAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgogICAgICAgICByZXR1
cm4gZ2V0YXR0cihzZWxmLl9fZGVsZWdhdGUsIG5hbWUpCkBAIC04MSw3ICs4Nyw2IEBAIGNsYXNz
IE1vY2tEUlRQb3J0KG9iamVjdCk6CiAgICAgICAgICMgbWV0aG9kIHRoYXQgc3BsaWNlcyBpbiB0
aGUgbW9ja19kcnQgcGF0aCBhbmQgY29tbWFuZCBsaW5lIGFyZ3VtZW50cwogICAgICAgICAjIGlu
IHBsYWNlIG9mIHRoZSBhY3R1YWwgcGF0aCB0byB0aGUgZHJpdmVyIGJpbmFyeS4KIAotICAgICAg
ICAjIEZJWE1FOiBUaGlzIGRvZXNuJ3QgeWV0IHdvcmsgZm9yIENocm9taXVtIHRlc3Rfc2hlbGwg
cG9ydHMuCiAgICAgICAgIGRlZiBvdmVycmlkaW5nX2NtZF9saW5lKCk6CiAgICAgICAgICAgICBj
bWQgPSBzZWxmLl9fb3JpZ2luYWxfZHJpdmVyX2NtZF9saW5lKCkKICAgICAgICAgICAgIGluZGV4
ID0gY21kLmluZGV4KHNlbGYuX19kZWxlZ2F0ZS5fcGF0aF90b19kcml2ZXIoKSkKQEAgLTExMywz
NCArMTE4LDQ0IEBAIGNsYXNzIE1vY2tEUlRQb3J0KG9iamVjdCk6CiAgICAgICAgIHBhc3MKIAog
Ci1kZWYgbWFpbihhcmd2LCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIpOgorZGVmIG1haW4oYXJndiwg
ZnMsIHN0ZGluLCBzdGRvdXQsIHN0ZGVycik6CiAgICAgIiIiUnVuIHRoZSB0ZXN0cy4iIiIKIAog
ICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJzZV9vcHRpb25zKGFyZ3YpCi0gICAgZHJ0ID0gTW9ja0RS
VChvcHRpb25zLCBhcmdzLCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIpCisgICAgaWYgb3B0aW9ucy5j
aHJvbWl1bToKKyAgICAgICAgZHJ0ID0gTW9ja0Nocm9taXVtRFJUKG9wdGlvbnMsIGFyZ3MsIGZz
LCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIpCisgICAgZWxzZToKKyAgICAgICAgZHJ0ID0gTW9ja0RS
VChvcHRpb25zLCBhcmdzLCBmcywgc3RkaW4sIHN0ZG91dCwgc3RkZXJyKQogICAgIHJldHVybiBk
cnQucnVuKCkKIAogCiBkZWYgcGFyc2Vfb3B0aW9ucyhhcmd2KToKLSAgICAjIEZJWE1FOiBXZSBu
ZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGhhbmRsZSB2YXJpYW50cyB0aGF0IGhhdmUKLSAgICAj
IGRpZmZlcmVudCBjb21tYW5kLWxpbmUgY29udmVudGlvbnMuCi0gICAgb3B0aW9uX2xpc3QgPSBb
Ci0gICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLXBsYXRmb3JtJywgYWN0aW9uPSdzdG9y
ZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3BsYXRmb3JtIHRvIGVtdWxh
dGUnKSwKLSAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tbGF5b3V0LXRlc3RzJywgYWN0
aW9uPSdzdG9yZV90cnVlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1U
cnVlLCBoZWxwPSdydW4gbGF5b3V0IHRlc3RzJyksCi0gICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0
aW9uKCctLXBpeGVsLXRlc3RzJywgYWN0aW9uPSdzdG9yZV90cnVlJywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaGVscD0nb3V0cHV0IGltYWdlIGZvciBwaXhlbCB0ZXN0cycpLAotICAgIF0KLSAgICBvcHRp
b25fcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKG9wdGlvbl9saXN0PW9wdGlvbl9saXN0
KQotICAgIHJldHVybiBvcHRpb25fcGFyc2VyLnBhcnNlX2FyZ3MoYXJndikKKyAgICBwbGF0Zm9y
bV9pbmRleCA9IGFyZ3YuaW5kZXgoJy0tcGxhdGZvcm0nKQorICAgIHBsYXRmb3JtID0gYXJndltw
bGF0Zm9ybV9pbmRleCArIDFdCisKKyAgICBwaXhlbF90ZXN0cyA9IEZhbHNlCisgICAgcGl4ZWxf
cGF0aCA9IE5vbmUKKyAgICBjaHJvbWl1bSA9IEZhbHNlCisgICAgaWYgcGxhdGZvcm0uc3RhcnRz
d2l0aCgnY2hyb21pdW0nKToKKyAgICAgICAgY2hyb21pdW0gPSBUcnVlCisgICAgICAgIGZvciBh
cmcgaW4gYXJndjoKKyAgICAgICAgICAgIGlmIGFyZy5zdGFydHN3aXRoKCctLXBpeGVsLXRlc3Rz
Jyk6CisgICAgICAgICAgICAgICAgcGl4ZWxfdGVzdHMgPSBUcnVlCisgICAgICAgICAgICAgICAg
cGl4ZWxfcGF0aCA9IGFyZ1tsZW4oJy0tcGl4ZWwtdGVzdHM9Jyk6XQorICAgIGVsc2U6CisgICAg
ICAgIHBpeGVsX3Rlc3RzID0gJy0tcGl4ZWwtdGVzdHMnIGluIGFyZ3YKKyAgICBvcHRpb25zID0g
YmFzZS5EdW1teU9wdGlvbnMoY2hyb21pdW09Y2hyb21pdW0sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBsYXRmb3JtPXBsYXRmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwaXhlbF90ZXN0cz1waXhlbF90ZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGl4ZWxfcGF0aD1waXhlbF9wYXRoKQorICAgIHJldHVybiAob3B0aW9ucywgW10p
CiAKIAogY2xhc3MgTW9ja0RSVChvYmplY3QpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvcHRp
b25zLCBhcmdzLCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBvcHRpb25zLCBhcmdzLCBmaWxlc3lzdGVtLCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIpOgogICAg
ICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucwogICAgICAgICBzZWxmLl9hcmdzID0gYXJncwor
ICAgICAgICBzZWxmLl9maWxlc3lzdGVtID0gZmlsZXN5c3RlbQogICAgICAgICBzZWxmLl9zdGRv
dXQgPSBzdGRvdXQKICAgICAgICAgc2VsZi5fc3RkaW4gPSBzdGRpbgogICAgICAgICBzZWxmLl9z
dGRlcnIgPSBzdGRlcnIKQEAgLTE0OCw1NyArMTYzLDkzIEBAIGNsYXNzIE1vY2tEUlQob2JqZWN0
KToKICAgICAgICAgcG9ydF9uYW1lID0gTm9uZQogICAgICAgICBpZiBvcHRpb25zLnBsYXRmb3Jt
OgogICAgICAgICAgICAgcG9ydF9uYW1lID0gb3B0aW9ucy5wbGF0Zm9ybQotICAgICAgICBzZWxm
Ll9wb3J0ID0gZmFjdG9yeS5nZXQocG9ydF9uYW1lLCBvcHRpb25zPW9wdGlvbnMpCisgICAgICAg
IHNlbGYuX3BvcnQgPSBmYWN0b3J5LmdldChwb3J0X25hbWUsIG9wdGlvbnM9b3B0aW9ucywgZmls
ZXN5c3RlbT1maWxlc3lzdGVtKQogCiAgICAgZGVmIHJ1bihzZWxmKToKICAgICAgICAgd2hpbGUg
VHJ1ZToKICAgICAgICAgICAgIGxpbmUgPSBzZWxmLl9zdGRpbi5yZWFkbGluZSgpCiAgICAgICAg
ICAgICBpZiBub3QgbGluZToKICAgICAgICAgICAgICAgICBicmVhawotCi0gICAgICAgICAgICB1
cmwsIGV4cGVjdGVkX2NoZWNrc3VtID0gc2VsZi5wYXJzZV9pbnB1dChsaW5lKQotICAgICAgICAg
ICAgc2VsZi5ydW5fb25lX3Rlc3QodXJsLCBleHBlY3RlZF9jaGVja3N1bSkKKyAgICAgICAgICAg
IHVybCwgdGltZW91dCwgY2hlY2tzdW0gPSBzZWxmLnBhcnNlX2lucHV0KGxpbmUpCisgICAgICAg
ICAgICBzZWxmLnJ1bl9vbmVfdGVzdCh1cmwsIHRpbWVvdXQsIGNoZWNrc3VtKQogICAgICAgICBy
ZXR1cm4gMAogCiAgICAgZGVmIHBhcnNlX2lucHV0KHNlbGYsIGxpbmUpOgotICAgICAgICBsaW5l
ID0gbGluZS5zdHJpcCgpCi0gICAgICAgIGlmICInIiBpbiBsaW5lOgotICAgICAgICAgICAgcmV0
dXJuIGxpbmUuc3BsaXQoIiciLCAxKQotICAgICAgICByZXR1cm4gKGxpbmUsIE5vbmUpCisgICAg
ICAgIHZhbHMgPSBsaW5lLnN0cmlwKCkuc3BsaXQoIiciKQorICAgICAgICBpZiBsZW4odmFscykg
PT0gMToKKyAgICAgICAgICAgIHJldHVybiAodmFsc1swXSwgTm9uZSwgTm9uZSkKKyAgICAgICAg
cmV0dXJuICh2YWxzWzBdLCBOb25lLCB2YWxzWzFdKQogCi0gICAgZGVmIHJhd19ieXRlcyhzZWxm
LCB1bmljb2RlX3N0cik6Ci0gICAgICAgIHJldHVybiB1bmljb2RlX3N0ci5lbmNvZGUoJ3V0Zi04
JykKLQotICAgIGRlZiBydW5fb25lX3Rlc3Qoc2VsZiwgdXJsLCBleHBlY3RlZF9jaGVja3N1bSk6
CisgICAgZGVmIHJ1bl9vbmVfdGVzdChzZWxmLCB1cmwsIHRpbWVvdXQsIGV4cGVjdGVkX2NoZWNr
c3VtKToKICAgICAgICAgcG9ydCA9IHNlbGYuX3BvcnQKICAgICAgICAgaWYgdXJsLnN0YXJ0c3dp
dGgoJ2h0dHAnKToKICAgICAgICAgICAgIHRlc3RfbmFtZSA9IHBvcnQudXJpX3RvX3Rlc3RfbmFt
ZSh1cmwpCi0gICAgICAgICAgICB0ZXN0X3BhdGggPSBwb3J0Ll9maWxlc3lzdGVtLmpvaW4ocG9y
dC5sYXlvdXRfdGVzdHNfZGlyKCksIHRlc3RfbmFtZSkKKyAgICAgICAgICAgIHRlc3RfcGF0aCA9
IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihwb3J0LmxheW91dF90ZXN0c19kaXIoKSwgdGVzdF9uYW1l
KQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgdGVzdF9wYXRoID0gdXJsCiAKLSAgICAgICAg
YWN0dWFsX3RleHRfYnl0ZXMgPSBzZWxmLnJhd19ieXRlcyhwb3J0LmV4cGVjdGVkX3RleHQodGVz
dF9wYXRoKSkKKyAgICAgICAgYWN0dWFsX3RleHQgPSBwb3J0LmV4cGVjdGVkX3RleHQodGVzdF9w
YXRoKQogICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RzIGFuZCBleHBlY3RlZF9j
aGVja3N1bToKLSAgICAgICAgICAgIGFjdHVhbF9jaGVja3N1bV9ieXRlcyA9IHNlbGYucmF3X2J5
dGVzKHBvcnQuZXhwZWN0ZWRfY2hlY2tzdW0odGVzdF9wYXRoKSkKLSAgICAgICAgICAgIGFjdHVh
bF9pbWFnZV9ieXRlcyA9IHBvcnQuZXhwZWN0ZWRfaW1hZ2UodGVzdF9wYXRoKQorICAgICAgICAg
ICAgYWN0dWFsX2NoZWNrc3VtID0gcG9ydC5leHBlY3RlZF9jaGVja3N1bSh0ZXN0X3BhdGgpCisg
ICAgICAgICAgICBhY3R1YWxfaW1hZ2UgPSBwb3J0LmV4cGVjdGVkX2ltYWdlKHRlc3RfcGF0aCkK
IAogICAgICAgICBzZWxmLl9zdGRvdXQud3JpdGUoJ0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpblxu
JykKLSAgICAgICAgc2VsZi5fc3Rkb3V0LndyaXRlKGFjdHVhbF90ZXh0X2J5dGVzKQorCisgICAg
ICAgICMgRklYTUU6IE5vdGUgdGhhdCB3ZSBkb24ndCBlbnN1cmUgdGhlcmUgaXMgYSB0cmFpbGlu
ZyBuZXdsaW5lIQorICAgICAgICAjIFRoaXMgbWlycm9ycyBhY3R1YWwgKE1hYykgRFJUIGJlaGF2
aW9yIGJ1dCBpcyBhIGJ1Zy4KKyAgICAgICAgc2VsZi5fc3Rkb3V0LndyaXRlKGFjdHVhbF90ZXh0
KQogICAgICAgICBzZWxmLl9zdGRvdXQud3JpdGUoJyNFT0ZcbicpCiAKICAgICAgICAgaWYgc2Vs
Zi5fb3B0aW9ucy5waXhlbF90ZXN0cyBhbmQgZXhwZWN0ZWRfY2hlY2tzdW06Ci0gICAgICAgICAg
ICBleHBlY3RlZF9jaGVja3N1bV9ieXRlcyA9IHNlbGYucmF3X2J5dGVzKGV4cGVjdGVkX2NoZWNr
c3VtKQogICAgICAgICAgICAgc2VsZi5fc3Rkb3V0LndyaXRlKCdcbicpCi0gICAgICAgICAgICBz
ZWxmLl9zdGRvdXQud3JpdGUoJ0FjdHVhbEhhc2g6ICVzXG4nICUgYWN0dWFsX2NoZWNrc3VtX2J5
dGVzKQotICAgICAgICAgICAgc2VsZi5fc3Rkb3V0LndyaXRlKCdFeHBlY3RlZEhhc2g6ICVzXG4n
ICUgZXhwZWN0ZWRfY2hlY2tzdW1fYnl0ZXMpCi0gICAgICAgICAgICBpZiBhY3R1YWxfY2hlY2tz
dW1fYnl0ZXMgIT0gZXhwZWN0ZWRfY2hlY2tzdW1fYnl0ZXM6CisgICAgICAgICAgICBzZWxmLl9z
dGRvdXQud3JpdGUoJ0FjdHVhbEhhc2g6ICVzXG4nICUgYWN0dWFsX2NoZWNrc3VtKQorICAgICAg
ICAgICAgc2VsZi5fc3Rkb3V0LndyaXRlKCdFeHBlY3RlZEhhc2g6ICVzXG4nICUgZXhwZWN0ZWRf
Y2hlY2tzdW0pCisgICAgICAgICAgICBpZiBhY3R1YWxfY2hlY2tzdW0gIT0gZXhwZWN0ZWRfY2hl
Y2tzdW06CiAgICAgICAgICAgICAgICAgc2VsZi5fc3Rkb3V0LndyaXRlKCdDb250ZW50LVR5cGU6
IGltYWdlL3BuZ1xuJykKLSAgICAgICAgICAgICAgICBzZWxmLl9zdGRvdXQud3JpdGUoJ0NvbnRl
bnQtTGVuZ3RoOiAlc1xuXG4nICUgbGVuKGFjdHVhbF9pbWFnZV9ieXRlcykpCi0gICAgICAgICAg
ICAgICAgc2VsZi5fc3Rkb3V0LndyaXRlKGFjdHVhbF9pbWFnZV9ieXRlcykKKyAgICAgICAgICAg
ICAgICBzZWxmLl9zdGRvdXQud3JpdGUoJ0NvbnRlbnQtTGVuZ3RoOiAlc1xuXG4nICUgbGVuKGFj
dHVhbF9pbWFnZSkpCisgICAgICAgICAgICAgICAgc2VsZi5fc3Rkb3V0LndyaXRlKGFjdHVhbF9p
bWFnZSkKICAgICAgICAgc2VsZi5fc3Rkb3V0LndyaXRlKCcjRU9GXG4nKQogICAgICAgICBzZWxm
Ll9zdGRvdXQuZmx1c2goKQogICAgICAgICBzZWxmLl9zdGRlcnIuZmx1c2goKQogCiAKK2NsYXNz
IE1vY2tDaHJvbWl1bURSVChNb2NrRFJUKToKKyAgICBkZWYgcGFyc2VfaW5wdXQoc2VsZiwgbGlu
ZSk6CisgICAgICAgIHZhbHMgPSBsaW5lLnNwbGl0KCkKKyAgICAgICAgaWYgbGVuKHZhbHMpID09
IDM6CisgICAgICAgICAgICByZXR1cm4gdmFscworICAgICAgICBlbHNlOgorICAgICAgICAgICAg
cmV0dXJuICh2YWxzWzBdLCB2YWxzWzFdLCBOb25lKQorCisgICAgZGVmIHJ1bl9vbmVfdGVzdChz
ZWxmLCB1cmwsIHRpbWVvdXQsIGV4cGVjdGVkX2NoZWNrc3VtKToKKyAgICAgICAgcG9ydCA9IHNl
bGYuX3BvcnQKKyAgICAgICAgdGVzdF9uYW1lID0gc2VsZi5fcG9ydC51cmlfdG9fdGVzdF9uYW1l
KHVybCkKKyAgICAgICAgdGVzdF9wYXRoID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHBvcnQubGF5
b3V0X3Rlc3RzX2RpcigpLCB0ZXN0X25hbWUpCisKKyAgICAgICAgYWN0dWFsX3RleHQgPSBwb3J0
LmV4cGVjdGVkX3RleHQodGVzdF9wYXRoKQorICAgICAgICBhY3R1YWxfaW1hZ2UgPSAnJworICAg
ICAgICBhY3R1YWxfY2hlY2tzdW0gPSAnJworICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnBpeGVs
X3Rlc3RzIGFuZCBleHBlY3RlZF9jaGVja3N1bToKKyAgICAgICAgICAgIGFjdHVhbF9jaGVja3N1
bSA9IHBvcnQuZXhwZWN0ZWRfY2hlY2tzdW0odGVzdF9wYXRoKQorICAgICAgICAgICAgaWYgYWN0
dWFsX2NoZWNrc3VtICE9IGV4cGVjdGVkX2NoZWNrc3VtOgorICAgICAgICAgICAgICAgIGFjdHVh
bF9pbWFnZSA9IHBvcnQuZXhwZWN0ZWRfaW1hZ2UodGVzdF9wYXRoKQorCisgICAgICAgIHNlbGYu
X3N0ZG91dC53cml0ZSgiI1VSTDolc1xuIiAlIHVybCkKKyAgICAgICAgaWYgc2VsZi5fb3B0aW9u
cy5waXhlbF90ZXN0cyBhbmQgZXhwZWN0ZWRfY2hlY2tzdW06CisgICAgICAgICAgICBzZWxmLl9z
dGRvdXQud3JpdGUoIiNNRDU6JXNcbiIgJSBhY3R1YWxfY2hlY2tzdW0pCisgICAgICAgICAgICBz
ZWxmLl9maWxlc3lzdGVtLndyaXRlX2JpbmFyeV9maWxlKHNlbGYuX29wdGlvbnMucGl4ZWxfcGF0
aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFs
X2ltYWdlKQorICAgICAgICBzZWxmLl9zdGRvdXQud3JpdGUoYWN0dWFsX3RleHQpCisKKyAgICAg
ICAgIyBGSVhNRTogKFNlZSBhYm92ZSBGSVhNRSBhcyB3ZWxsKS4gQ2hyb21pdW0gRFJUIGFwcGVh
cnMgdG8gYWx3YXlzCisgICAgICAgICMgZW5zdXJlIHRoZSB0ZXh0IG91dHB1dCBoYXMgYSB0cmFp
bGluZyBuZXdsaW5lLiBNYWMgRFJUIGRvZXMgbm90LgorICAgICAgICBpZiBub3QgYWN0dWFsX3Rl
eHQuZW5kc3dpdGgoJ1xuJyk6CisgICAgICAgICAgICBzZWxmLl9zdGRvdXQud3JpdGUoJ1xuJykK
KyAgICAgICAgc2VsZi5fc3Rkb3V0LndyaXRlKCcjRU9GXG4nKQorICAgICAgICBzZWxmLl9zdGRv
dXQuZmx1c2goKQorCisKKwogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBzeXMuZXhp
dChtYWluKHN5cy5hcmd2WzE6XSwgc3lzLnN0ZGluLCBzeXMuc3Rkb3V0LCBzeXMuc3RkZXJyKSkK
KyAgICBmcyA9IGZpbGVzeXN0ZW0uRmlsZVN5c3RlbSgpCisgICAgc3lzLmV4aXQobWFpbihzeXMu
YXJndlsxOl0sIGZzLCBzeXMuc3RkaW4sIHN5cy5zdGRvdXQsIHN5cy5zdGRlcnIpKQpkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tb2NrX2RydF91
bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbW9j
a19kcnRfdW5pdHRlc3QucHkKaW5kZXggM2FlYWZhZmFjNDgxZTJhZjI4YzVmOWY1ZDZhN2QwMjk3
YjliZDcxMi4uMTUwNjMxNTMxYzVkMDAxZjA0NWRmZTJkMDQwYWZjOTJkOGQ2ZTA0ZiAxMDA2NDQK
LS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tb2NrX2RydF91
bml0dGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L21vY2tfZHJ0X3VuaXR0ZXN0LnB5CkBAIC0zNiw2ICszNiw3IEBAIGZyb20gd2Via2l0cHkuY29t
bW9uIGltcG9ydCBuZXdzdHJpbmdpbwogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBp
bXBvcnQgbW9ja19kcnQKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IGZh
Y3RvcnkKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IHBvcnRfdGVzdGNh
c2UKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IHRlc3QKIAogCiBjbGFz
cyBNb2NrRFJUUG9ydFRlc3QocG9ydF90ZXN0Y2FzZS5Qb3J0VGVzdENhc2UpOgpAQCAtODcsMTUg
Kzg4LDExIEBAIGNsYXNzIE1vY2tEUlRQb3J0VGVzdChwb3J0X3Rlc3RjYXNlLlBvcnRUZXN0Q2Fz
ZSk6CiAKIAogY2xhc3MgTW9ja0RSVFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiBz
ZXRVcChzZWxmKToKLSAgICAgICAgc2VsZi5fcG9ydCA9IGZhY3RvcnkuZ2V0KCd0ZXN0JykKLSAg
ICAgICAgc2VsZi5fbGF5b3V0X3Rlc3RzX2RpciA9IHNlbGYuX3BvcnQubGF5b3V0X3Rlc3RzX2Rp
cigpCisgICAgZGVmIHRvX3BhdGgoc2VsZiwgcG9ydCwgdGVzdF9uYW1lKToKKyAgICAgICAgcmV0
dXJuIHBvcnQuX2ZpbGVzeXN0ZW0uam9pbihwb3J0LmxheW91dF90ZXN0c19kaXIoKSwgdGVzdF9u
YW1lKQogCi0gICAgZGVmIHRvX3BhdGgoc2VsZiwgdGVzdF9uYW1lKToKLSAgICAgICAgcmV0dXJu
IHNlbGYuX3BvcnQuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLl9sYXlvdXRfdGVzdHNfZGlyLCB0ZXN0
X25hbWUpCi0KLSAgICBkZWYgaW5wdXRfbGluZShzZWxmLCB0ZXN0X25hbWUsIGNoZWNrc3VtPU5v
bmUpOgotICAgICAgICB1cmwgPSBzZWxmLl9wb3J0LmZpbGVuYW1lX3RvX3VyaShzZWxmLnRvX3Bh
dGgodGVzdF9uYW1lKSkKKyAgICBkZWYgaW5wdXRfbGluZShzZWxmLCBwb3J0LCB0ZXN0X25hbWUs
IGNoZWNrc3VtPU5vbmUpOgorICAgICAgICB1cmwgPSBwb3J0LmZpbGVuYW1lX3RvX3VyaShzZWxm
LnRvX3BhdGgocG9ydCwgdGVzdF9uYW1lKSkKICAgICAgICAgIyBGSVhNRTogd2Ugc2hvdWxkbid0
IGhhdmUgdG8gd29yayBhcm91bmQgcGxhdGZvcm0tc3BlY2lmaWMgaXNzdWVzCiAgICAgICAgICMg
aGVyZS4KICAgICAgICAgaWYgdXJsLnN0YXJ0c3dpdGgoJ2ZpbGU6Ly8vLycpOgpAQCAtMTA3LDU0
ICsxMDQsNjEgQEAgY2xhc3MgTW9ja0RSVFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAg
ICAgICAgcmV0dXJuIHVybCArICInIiArIGNoZWNrc3VtICsgJ1xuJwogICAgICAgICByZXR1cm4g
dXJsICsgJ1xuJwogCi0gICAgZGVmIG1ha2VfZHJ0KHNlbGYsIGlucHV0X3N0cmluZywgZXh0cmFf
YXJncz1Ob25lKToKLSAgICAgICAgYXJncyA9IFsnLS1wbGF0Zm9ybScsICd0ZXN0JywgJy0nXQot
ICAgICAgICBleHRyYV9hcmdzID0gZXh0cmFfYXJncyBvciBbXQotICAgICAgICBhcmdzICs9IGV4
dHJhX2FyZ3MKLSAgICAgICAgc3RkaW4gPSBuZXdzdHJpbmdpby5TdHJpbmdJTyhpbnB1dF9zdHJp
bmcpCi0gICAgICAgIHN0ZG91dCA9IG5ld3N0cmluZ2lvLlN0cmluZ0lPKCkKLSAgICAgICAgc3Rk
ZXJyID0gbmV3c3RyaW5naW8uU3RyaW5nSU8oKQotICAgICAgICBvcHRpb25zLCBhcmdzID0gbW9j
a19kcnQucGFyc2Vfb3B0aW9ucyhhcmdzKQotICAgICAgICBkcnQgPSBtb2NrX2RydC5Nb2NrRFJU
KG9wdGlvbnMsIGFyZ3MsIHN0ZGluLCBzdGRvdXQsIHN0ZGVycikKLSAgICAgICAgcmV0dXJuIChk
cnQsIHN0ZG91dCwgc3RkZXJyKQorICAgIGRlZiBleHRyYV9hcmdzKHNlbGYsIHBpeGVsX3Rlc3Rz
KToKKyAgICAgICAgaWYgcGl4ZWxfdGVzdHM6CisgICAgICAgICAgICByZXR1cm4gWyctLXBpeGVs
LXRlc3RzJywgJy0nXQorICAgICAgICByZXR1cm4gWyctJ10KIAotICAgIGRlZiBtYWtlX2lucHV0
X291dHB1dChzZWxmLCB0ZXN0X25hbWUsIHBpeGVsX3Rlc3RzLCBleHBlY3RlZF9jaGVja3N1bSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgZHJ0X291dHB1dCwgZHJ0X2lucHV0PU5vbmUpOgot
ICAgICAgICBwYXRoID0gc2VsZi50b19wYXRoKHRlc3RfbmFtZSkKKyAgICBkZWYgbWFrZV9kcnQo
c2VsZiwgb3B0aW9ucywgYXJncywgZmlsZXN5c3RlbSwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyKToK
KyAgICAgICAgcmV0dXJuIG1vY2tfZHJ0Lk1vY2tEUlQob3B0aW9ucywgYXJncywgZmlsZXN5c3Rl
bSwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyKQorCisgICAgZGVmIG1ha2VfaW5wdXRfb3V0cHV0KHNl
bGYsIHBvcnQsIHRlc3RfbmFtZSwgcGl4ZWxfdGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIGV4cGVjdGVkX2NoZWNrc3VtLCBkcnRfb3V0cHV0LCBkcnRfaW5wdXQ9Tm9uZSk6CisgICAg
ICAgIHBhdGggPSBzZWxmLnRvX3BhdGgocG9ydCwgdGVzdF9uYW1lKQogICAgICAgICBpZiBwaXhl
bF90ZXN0czoKICAgICAgICAgICAgIGlmIG5vdCBleHBlY3RlZF9jaGVja3N1bToKLSAgICAgICAg
ICAgICAgICBleHBlY3RlZF9jaGVja3N1bSA9IHNlbGYuX3BvcnQuZXhwZWN0ZWRfY2hlY2tzdW0o
cGF0aCkKKyAgICAgICAgICAgICAgICBleHBlY3RlZF9jaGVja3N1bSA9IHBvcnQuZXhwZWN0ZWRf
Y2hlY2tzdW0ocGF0aCkKICAgICAgICAgaWYgbm90IGRydF9pbnB1dDoKLSAgICAgICAgICAgIGRy
dF9pbnB1dCA9IHNlbGYuaW5wdXRfbGluZSh0ZXN0X25hbWUsIGV4cGVjdGVkX2NoZWNrc3VtKQot
ICAgICAgICB0ZXh0X291dHB1dCA9IHNlbGYuX3BvcnQuZXhwZWN0ZWRfdGV4dChwYXRoKQorICAg
ICAgICAgICAgZHJ0X2lucHV0ID0gc2VsZi5pbnB1dF9saW5lKHBvcnQsIHRlc3RfbmFtZSwgZXhw
ZWN0ZWRfY2hlY2tzdW0pCisgICAgICAgIHRleHRfb3V0cHV0ID0gcG9ydC5leHBlY3RlZF90ZXh0
KHBhdGgpCiAKICAgICAgICAgaWYgbm90IGRydF9vdXRwdXQ6Ci0gICAgICAgICAgICBpZiBwaXhl
bF90ZXN0czoKLSAgICAgICAgICAgICAgICBkcnRfb3V0cHV0ID0gWwotICAgICAgICAgICAgICAg
ICAgICAnQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluXG4nLAotICAgICAgICAgICAgICAgICAgICB0
ZXh0X291dHB1dC5lbmNvZGUoJ3V0Zi04JyksCisgICAgICAgICAgICBkcnRfb3V0cHV0ID0gc2Vs
Zi5leHBlY3RlZF9vdXRwdXQocG9ydCwgdGVzdF9uYW1lLCBwaXhlbF90ZXN0cywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0X291dHB1dCwgZXhwZWN0
ZWRfY2hlY2tzdW0pCisgICAgICAgIHJldHVybiAoZHJ0X2lucHV0LCBkcnRfb3V0cHV0KQorCisg
ICAgZGVmIGV4cGVjdGVkX291dHB1dChzZWxmLCBwb3J0LCB0ZXN0X25hbWUsIHBpeGVsX3Rlc3Rz
LCB0ZXh0X291dHB1dCwgZXhwZWN0ZWRfY2hlY2tzdW0pOgorICAgICAgICBpZiBwaXhlbF90ZXN0
cyBhbmQgZXhwZWN0ZWRfY2hlY2tzdW06CisgICAgICAgICAgICByZXR1cm4gWydDb250ZW50LVR5
cGU6IHRleHQvcGxhaW5cbicsCisgICAgICAgICAgICAgICAgICAgIHRleHRfb3V0cHV0LAogICAg
ICAgICAgICAgICAgICAgICAnI0VPRlxuJywKICAgICAgICAgICAgICAgICAgICAgJ1xuJywKLSAg
ICAgICAgICAgICAgICAgICAgJ0FjdHVhbEhhc2g6ICVzXG4nICUgZXhwZWN0ZWRfY2hlY2tzdW0u
ZW5jb2RlKCd1dGYtOCcpLAotICAgICAgICAgICAgICAgICAgICAnRXhwZWN0ZWRIYXNoOiAlc1xu
JyAlIGV4cGVjdGVkX2NoZWNrc3VtLmVuY29kZSgndXRmLTgnKSwKKyAgICAgICAgICAgICAgICAg
ICAgJ0FjdHVhbEhhc2g6ICVzXG4nICUgZXhwZWN0ZWRfY2hlY2tzdW0sCisgICAgICAgICAgICAg
ICAgICAgICdFeHBlY3RlZEhhc2g6ICVzXG4nICUgZXhwZWN0ZWRfY2hlY2tzdW0sCiAgICAgICAg
ICAgICAgICAgICAgICcjRU9GXG4nXQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAg
ICBkcnRfb3V0cHV0ID0gWwotICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlOiB0ZXh0
L3BsYWluXG4nLAotICAgICAgICAgICAgICAgICAgICB0ZXh0X291dHB1dC5lbmNvZGUoJ3V0Zi04
JyksCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gWydDb250ZW50LVR5cGU6IHRl
eHQvcGxhaW5cbicsCisgICAgICAgICAgICAgICAgICAgIHRleHRfb3V0cHV0LAogICAgICAgICAg
ICAgICAgICAgICAnI0VPRlxuJywKICAgICAgICAgICAgICAgICAgICAgJyNFT0ZcbiddCiAKLSAg
ICAgICAgcmV0dXJuIChkcnRfaW5wdXQsIGRydF9vdXRwdXQpCisgICAgZGVmIGFzc2VydFRlc3Qo
c2VsZiwgdGVzdF9uYW1lLCBwaXhlbF90ZXN0cywgZXhwZWN0ZWRfY2hlY2tzdW09Tm9uZSwKKyAg
ICAgICAgICAgICAgICAgICBkcnRfb3V0cHV0PU5vbmUsIGZpbGVzeXN0ZW09Tm9uZSk6CisgICAg
ICAgIHBsYXRmb3JtID0gJ3Rlc3QnCisgICAgICAgIGZpbGVzeXN0ZW0gPSBmaWxlc3lzdGVtIG9y
IHRlc3QudW5pdF90ZXN0X2ZpbGVzeXN0ZW0oKQorICAgICAgICBwb3J0ID0gZmFjdG9yeS5nZXQo
cGxhdGZvcm0sIGZpbGVzeXN0ZW09ZmlsZXN5c3RlbSkKKyAgICAgICAgZHJ0X2lucHV0LCBkcnRf
b3V0cHV0ID0gc2VsZi5tYWtlX2lucHV0X291dHB1dChwb3J0LCB0ZXN0X25hbWUsCisgICAgICAg
ICAgICBwaXhlbF90ZXN0cywgZXhwZWN0ZWRfY2hlY2tzdW0sIGRydF9vdXRwdXQpCiAKLSAgICBk
ZWYgYXNzZXJ0VGVzdChzZWxmLCB0ZXN0X25hbWUsIHBpeGVsX3Rlc3RzLCBleHBlY3RlZF9jaGVj
a3N1bT1Ob25lLCBkcnRfb3V0cHV0PU5vbmUpOgotICAgICAgICBkcnRfaW5wdXQsIGRydF9vdXRw
dXQgPSBzZWxmLm1ha2VfaW5wdXRfb3V0cHV0KHRlc3RfbmFtZSwgcGl4ZWxfdGVzdHMsCi0gICAg
ICAgICAgICBleHBlY3RlZF9jaGVja3N1bSwgZHJ0X291dHB1dCkKLSAgICAgICAgZXh0cmFfYXJn
cyA9IFtdCi0gICAgICAgIGlmIHBpeGVsX3Rlc3RzOgotICAgICAgICAgICAgZXh0cmFfYXJncyA9
IFsnLS1waXhlbC10ZXN0cyddCi0gICAgICAgIGRydCwgc3Rkb3V0LCBzdGRlcnIgPSBzZWxmLm1h
a2VfZHJ0KGRydF9pbnB1dCwgZXh0cmFfYXJncykKKyAgICAgICAgYXJncyA9IFsnLS1wbGF0Zm9y
bScsICd0ZXN0J10gKyBzZWxmLmV4dHJhX2FyZ3MocGl4ZWxfdGVzdHMpCisgICAgICAgIHN0ZGlu
ID0gbmV3c3RyaW5naW8uU3RyaW5nSU8oZHJ0X2lucHV0KQorICAgICAgICBzdGRvdXQgPSBuZXdz
dHJpbmdpby5TdHJpbmdJTygpCisgICAgICAgIHN0ZGVyciA9IG5ld3N0cmluZ2lvLlN0cmluZ0lP
KCkKKyAgICAgICAgb3B0aW9ucywgYXJncyA9IG1vY2tfZHJ0LnBhcnNlX29wdGlvbnMoYXJncykK
KworICAgICAgICBkcnQgPSBzZWxmLm1ha2VfZHJ0KG9wdGlvbnMsIGFyZ3MsIGZpbGVzeXN0ZW0s
IHN0ZGluLCBzdGRvdXQsIHN0ZGVycikKICAgICAgICAgcmVzID0gZHJ0LnJ1bigpCisKICAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIDApCiAKICAgICAgICAgIyBXZSB1c2UgdGhlIFN0cmlu
Z0lPLmJ1Zmxpc3QgaGVyZSBpbnN0ZWFkIG9mIGdldHZhbHVlKCkgYmVjYXVzZQpAQCAtMTYzLDEz
ICsxNjcsMTYgQEAgY2xhc3MgTW9ja0RSVFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHN0ZGVyci5nZXR2YWx1ZSgpLCAnJykKIAogICAgIGRlZiB0ZXN0
X21haW4oc2VsZik6CisgICAgICAgIGZpbGVzeXN0ZW0gPSB0ZXN0LnVuaXRfdGVzdF9maWxlc3lz
dGVtKCkKICAgICAgICAgc3RkaW4gPSBuZXdzdHJpbmdpby5TdHJpbmdJTygpCiAgICAgICAgIHN0
ZG91dCA9IG5ld3N0cmluZ2lvLlN0cmluZ0lPKCkKICAgICAgICAgc3RkZXJyID0gbmV3c3RyaW5n
aW8uU3RyaW5nSU8oKQotICAgICAgICByZXMgPSBtb2NrX2RydC5tYWluKFsnLS1wbGF0Zm9ybScs
ICd0ZXN0JywgJy0nXSwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyKQorICAgICAgICByZXMgPSBtb2Nr
X2RydC5tYWluKFsnLS1wbGF0Zm9ybScsICd0ZXN0J10gKyBzZWxmLmV4dHJhX2FyZ3MoRmFsc2Up
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzeXN0ZW0sIHN0ZGluLCBzdGRvdXQs
IHN0ZGVycikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIDApCiAgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoc3Rkb3V0LmdldHZhbHVlKCksICcnKQogICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKHN0ZGVyci5nZXR2YWx1ZSgpLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxl
c3lzdGVtLndyaXR0ZW5fZmlsZXMsIHt9KQogCiAgICAgZGVmIHRlc3RfcGl4ZWx0ZXN0X3Bhc3Nl
cyhzZWxmKToKICAgICAgICAgIyBUaGlzIGFsc28gdGVzdHMgdGhhdCB3ZSBoYW5kbGUgSFRUUDog
dGVzdCBVUkxzIHByb3Blcmx5LgpAQCAtMTkzLDUgKzIwMCw2MiBAQCBjbGFzcyBNb2NrRFJUVGVz
dCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHNlbGYuYXNzZXJ0VGVzdCgncGFzc2VzL2lt
YWdlLmh0bWwnLCBGYWxzZSkKIAogCitjbGFzcyBNb2NrQ2hyb21pdW1EUlRUZXN0KE1vY2tEUlRU
ZXN0KToKKyAgICBkZWYgZXh0cmFfYXJncyhzZWxmLCBwaXhlbF90ZXN0cyk6CisgICAgICAgIGlm
IHBpeGVsX3Rlc3RzOgorICAgICAgICAgICAgcmV0dXJuIFsnLS1waXhlbC10ZXN0cz0vdG1wL3Bu
Z19yZXN1bHQwLnBuZyddCisgICAgICAgIHJldHVybiBbXQorCisgICAgZGVmIG1ha2VfZHJ0KHNl
bGYsIG9wdGlvbnMsIGFyZ3MsIGZpbGVzeXN0ZW0sIHN0ZGluLCBzdGRvdXQsIHN0ZGVycik6Cisg
ICAgICAgIG9wdGlvbnMuY2hyb21pdW0gPSBUcnVlCisKKyAgICAgICAgIyBXZSBoYXZlIHRvIHNl
dCB0aGVzZSBieSBoYW5kIGJlY2F1c2UgLS1wbGF0Zm9ybSB0ZXN0IHdvbid0IHRyaWdnZXIKKyAg
ICAgICAgIyB0aGUgQ2hyb21pdW0gY29kZSBwYXRocy4KKyAgICAgICAgb3B0aW9ucy5waXhlbF9w
YXRoID0gJy90bXAvcG5nX3Jlc3VsdDAucG5nJworICAgICAgICBvcHRpb25zLnBpeGVsX3Rlc3Rz
ID0gVHJ1ZQorCisgICAgICAgIHJldHVybiBtb2NrX2RydC5Nb2NrQ2hyb21pdW1EUlQob3B0aW9u
cywgYXJncywgZmlsZXN5c3RlbSwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyKQorCisgICAgZGVmIGlu
cHV0X2xpbmUoc2VsZiwgcG9ydCwgdGVzdF9uYW1lLCBjaGVja3N1bT1Ob25lKToKKyAgICAgICAg
dXJsID0gcG9ydC5maWxlbmFtZV90b191cmkoc2VsZi50b19wYXRoKHBvcnQsIHRlc3RfbmFtZSkp
CisgICAgICAgIGlmIGNoZWNrc3VtOgorICAgICAgICAgICAgcmV0dXJuIHVybCArICcgNjAwMCAn
ICsgY2hlY2tzdW0gKyAnXG4nCisgICAgICAgIHJldHVybiB1cmwgKyAnIDYwMDBcbicKKworICAg
IGRlZiBleHBlY3RlZF9vdXRwdXQoc2VsZiwgcG9ydCwgdGVzdF9uYW1lLCBwaXhlbF90ZXN0cywg
dGV4dF9vdXRwdXQsIGV4cGVjdGVkX2NoZWNrc3VtKToKKyAgICAgICAgdXJsID0gcG9ydC5maWxl
bmFtZV90b191cmkoc2VsZi50b19wYXRoKHBvcnQsIHRlc3RfbmFtZSkpCisgICAgICAgIGlmIHBp
eGVsX3Rlc3RzIGFuZCBleHBlY3RlZF9jaGVja3N1bToKKyAgICAgICAgICAgIHJldHVybiBbJyNV
Ukw6JXNcbicgJSB1cmwsCisgICAgICAgICAgICAgICAgICAgICcjTUQ1OiVzXG4nICUgZXhwZWN0
ZWRfY2hlY2tzdW0sCisgICAgICAgICAgICAgICAgICAgIHRleHRfb3V0cHV0LAorICAgICAgICAg
ICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAnI0VPRlxuJ10KKyAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgIHJldHVybiBbJyNVUkw6JXNcbicgJSB1cmwsCisgICAgICAgICAg
ICAgICAgICAgIHRleHRfb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAg
ICAgICAgICAgICAgICAnI0VPRlxuJ10KKworICAgIGRlZiB0ZXN0X3BpeGVsdGVzdF9fZmFpbHMo
c2VsZik6CisgICAgICAgIGZpbGVzeXN0ZW0gPSB0ZXN0LnVuaXRfdGVzdF9maWxlc3lzdGVtKCkK
KyAgICAgICAgc2VsZi5hc3NlcnRUZXN0KCdmYWlsdXJlcy9leHBlY3RlZC9jaGVja3N1bS5odG1s
JywgcGl4ZWxfdGVzdHM9VHJ1ZSwKKyAgICAgICAgICAgIGV4cGVjdGVkX2NoZWNrc3VtPSd3cm9u
Zy1jaGVja3N1bScsCisgICAgICAgICAgICBkcnRfb3V0cHV0PVsnI1VSTDpmaWxlOi8vL3Rlc3Qu
Y2hlY2tvdXQvTGF5b3V0VGVzdHMvZmFpbHVyZXMvZXhwZWN0ZWQvY2hlY2tzdW0uaHRtbFxuJywK
KyAgICAgICAgICAgICAgICAgICAgICAgICcjTUQ1OmNoZWNrc3VtLWNoZWNrc3VtXG4nLAorICAg
ICAgICAgICAgICAgICAgICAgICAgJ2NoZWNrc3VtLXR4dCcsCisgICAgICAgICAgICAgICAgICAg
ICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgJyNFT0ZcbiddLAorICAgICAgICAg
ICAgZmlsZXN5c3RlbT1maWxlc3lzdGVtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmaWxl
c3lzdGVtLndyaXR0ZW5fZmlsZXMsCisgICAgICAgICAgICB7Jy90bXAvcG5nX3Jlc3VsdDAucG5n
JzogJ2NoZWNrc3VtXHg4YS1wbmcnfSkKKworICAgIGRlZiB0ZXN0X2Nocm9taXVtX3BhcnNlX29w
dGlvbnMoc2VsZik6CisgICAgICAgIG9wdGlvbnMsIGFyZ3MgPSBtb2NrX2RydC5wYXJzZV9vcHRp
b25zKFsnLS1wbGF0Zm9ybScsICdjaHJvbWl1bS1tYWMnLAorICAgICAgICAgICAgJy0tcGl4ZWwt
dGVzdHM9L3RtcC9wbmdfcmVzdWx0MC5wbmcnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9w
dGlvbnMuY2hyb21pdW0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcHRpb25zLnBpeGVsX3Rl
c3RzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcHRpb25zLnBpeGVsX3BhdGgsICcvdG1w
L3BuZ19yZXN1bHQwLnBuZycpCisKKwogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1
bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CmluZGV4IDA3NGQ5YzQ2ZGIzNTI5MzA4NThjYzhl
YTQ4NTlkYjNjYmJjYjUwNTQuLjE5NzFkNTQ2MjJjNWM5ODZmMjI2MDQzODY5N2NmZmM2YjkyNmVi
NjkgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93
ZWJraXRfdGVzdHMucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cnVuX3dlYmtpdF90ZXN0cy5weQpAQCAtMzksNiArMzksNyBAQCBpbXBvcnQgc3lzCiAKIGZyb20g
bGF5b3V0X3BhY2thZ2UgaW1wb3J0IHByaW50aW5nCiBmcm9tIGxheW91dF9wYWNrYWdlIGltcG9y
dCB0ZXN0X3J1bm5lcgorZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9ydW5uZXIyCiAK
IGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgdXNlcgogZnJvbSB3ZWJraXRweS50
aGlyZHBhcnR5IGltcG9ydCBzaW1wbGVqc29uCkBAIC04Nyw3ICs4OCwxMSBAQCBkZWYgcnVuKHBv
cnQsIG9wdGlvbnMsIGFyZ3MsIHJlZ3VsYXJfb3V0cHV0PXN5cy5zdGRlcnIsCiAgICAgIyBpbiBh
IHRyeS9maW5hbGx5IHRvIGVuc3VyZSB0aGF0IHdlIGNsZWFuIHVwIHRoZSBsb2dnaW5nIGNvbmZp
Z3VyYXRpb24uCiAgICAgbnVtX3VuZXhwZWN0ZWRfcmVzdWx0cyA9IC0xCiAgICAgdHJ5OgotICAg
ICAgICBydW5uZXIgPSB0ZXN0X3J1bm5lci5UZXN0UnVubmVyKHBvcnQsIG9wdGlvbnMsIHByaW50
ZXIpCisgICAgICAgIGlmIG9wdGlvbnMud29ya2VyX21vZGVsIGluICgnaW5saW5lJywgJ3RocmVh
ZHMnLCAncHJvY2Vzc2VzJyk6CisgICAgICAgICAgICBydW5uZXIgPSB0ZXN0X3J1bm5lcjIuVGVz
dFJ1bm5lcjIocG9ydCwgb3B0aW9ucywgcHJpbnRlcikKKyAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgIHJ1bm5lciA9IHRlc3RfcnVubmVyLlRlc3RSdW5uZXIocG9ydCwgb3B0aW9ucywgcHJpbnRl
cikKKwogICAgICAgICBydW5uZXIuX3ByaW50X2NvbmZpZygpCiAKICAgICAgICAgcHJpbnRlci5w
cmludF91cGRhdGUoIkNvbGxlY3RpbmcgdGVzdHMgLi4uIikKQEAgLTEyOSw5ICsxMzQsOSBAQCBk
ZWYgX3NldF91cF9kZXJpdmVkX29wdGlvbnMocG9ydF9vYmosIG9wdGlvbnMpOgogICAgIGlmIG9w
dGlvbnMud29ya2VyX21vZGVsIGlzIE5vbmU6CiAgICAgICAgIG9wdGlvbnMud29ya2VyX21vZGVs
ID0gcG9ydF9vYmouZGVmYXVsdF93b3JrZXJfbW9kZWwoKQogCi0gICAgaWYgb3B0aW9ucy53b3Jr
ZXJfbW9kZWwgPT0gJ29sZC1pbmxpbmUnOgorICAgIGlmIG9wdGlvbnMud29ya2VyX21vZGVsIGlu
ICgnaW5saW5lJywgJ29sZC1pbmxpbmUnKToKICAgICAgICAgaWYgb3B0aW9ucy5jaGlsZF9wcm9j
ZXNzZXMgYW5kIGludChvcHRpb25zLmNoaWxkX3Byb2Nlc3NlcykgPiAxOgotICAgICAgICAgICAg
d2FybmluZ3MuYXBwZW5kKCItLXdvcmtlci1tb2RlbD1vbGQtaW5saW5lIG92ZXJyaWRlcyAtLWNo
aWxkLXByb2Nlc3NlcyIpCisgICAgICAgICAgICB3YXJuaW5ncy5hcHBlbmQoIi0td29ya2VyLW1v
ZGVsPSVzIG92ZXJyaWRlcyAtLWNoaWxkLXByb2Nlc3NlcyIgJSBvcHRpb25zLndvcmtlcl9tb2Rl
bCkKICAgICAgICAgb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMgPSAiMSIKICAgICBpZiBub3Qgb3B0
aW9ucy5jaGlsZF9wcm9jZXNzZXM6CiAgICAgICAgIG9wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzID0g
b3MuZW52aXJvbi5nZXQoIldFQktJVF9URVNUX0NISUxEX1BST0NFU1NFUyIsCkBAIC0zNjksOCAr
Mzc0LDggQEAgZGVmIHBhcnNlX2FyZ3MoYXJncz1Ob25lKToKICAgICAgICAgICAgIGhlbHA9Ik51
bWJlciBvZiBEdW1wUmVuZGVyVHJlZXMgdG8gcnVuIGluIHBhcmFsbGVsLiIpLAogICAgICAgICAj
IEZJWE1FOiBEaXNwbGF5IGRlZmF1bHQgbnVtYmVyIG9mIGNoaWxkIHByb2Nlc3NlcyB0aGF0IHdp
bGwgcnVuLgogICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS13b3JrZXItbW9kZWwiLCBh
Y3Rpb249InN0b3JlIiwKLSAgICAgICAgICAgIGRlZmF1bHQ9Tm9uZSwgaGVscD0oImNvbnRyb2xz
IHdvcmtlciBtb2RlbC4gVmFsaWQgdmFsdWVzICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImFyZSAnb2xkLWlubGluZScsICdvbGQtdGhyZWFkcycuIikpLAorICAgICAgICAgICAg
ZGVmYXVsdD1Ob25lLCBoZWxwPSgiY29udHJvbHMgd29ya2VyIG1vZGVsLiBWYWxpZCB2YWx1ZXMg
YXJlICdvbGQtaW5saW5lJywgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJ29s
ZC10aHJlYWRzJywgJ2lubGluZScsICd0aHJlYWRzJywgYW5kICdwcm9jZXNzZXMnLiIpKSwKICAg
ICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tZXhwZXJpbWVudGFsLWZ1bGx5LXBhcmFsbGVs
IiwKICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlZmF1bHQ9RmFsc2UsCiAgICAg
ICAgICAgICBoZWxwPSJydW4gYWxsIHRlc3RzIGluIHBhcmFsbGVsIiksCmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0
ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90
ZXN0c191bml0dGVzdC5weQppbmRleCAxMTJlNDAyNzk0YzllYmM3YmQ5M2JmODYwOWViM2ZmZTM1
NjYxYTMzLi44N2I3MmU3ZWYyMzVhNGE5MDM2ZGZlNTMwMzk1NTU4ZjA5MjNhMWI0IDEwMDY0NAot
LS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3Rz
X3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1
bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkKQEAgLTQ1MiwxMSArNDUyLDIwIEBAIGNsYXNzIE1h
aW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25l
LCB0ZXN0X3BvcnQudG9sZXJhbmNlX3VzZWRfZm9yX2RpZmZfaW1hZ2UpCiAKICAgICBkZWYgdGVz
dF93b3JrZXJfbW9kZWxfX2lubGluZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBh
c3NpbmdfcnVuKFsnLS13b3JrZXItbW9kZWwnLCAnaW5saW5lJ10pKQorCisgICAgZGVmIHRlc3Rf
d29ya2VyX21vZGVsX19vbGRfaW5saW5lKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFRydWUo
cGFzc2luZ19ydW4oWyctLXdvcmtlci1tb2RlbCcsICdvbGQtaW5saW5lJ10pKQogCi0gICAgZGVm
IHRlc3Rfd29ya2VyX21vZGVsX190aHJlYWRzKHNlbGYpOgorICAgIGRlZiB0ZXN0X3dvcmtlcl9t
b2RlbF9fb2xkX3RocmVhZHMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5n
X3J1bihbJy0td29ya2VyLW1vZGVsJywgJ29sZC10aHJlYWRzJ10pKQogCisgICAgZGVmIHRlc3Rf
d29ya2VyX21vZGVsX19wcm9jZXNzZXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShw
YXNzaW5nX3J1bihbJy0td29ya2VyLW1vZGVsJywgJ3Byb2Nlc3NlcyddKSkKKworICAgIGRlZiB0
ZXN0X3dvcmtlcl9tb2RlbF9fdGhyZWFkcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVl
KHBhc3NpbmdfcnVuKFsnLS13b3JrZXItbW9kZWwnLCAndGhyZWFkcyddKSkKKwogICAgIGRlZiB0
ZXN0X3dvcmtlcl9tb2RlbF9fdW5rbm93bihzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlz
ZXMoVmFsdWVFcnJvciwgbG9nZ2luZ19ydW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFsn
LS13b3JrZXItbW9kZWwnLCAndW5rbm93biddKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81324</attachid>
            <date>2011-02-04 16:58:29 -0800</date>
            <delta_ts>2011-02-08 19:04:45 -0800</delta_ts>
            <desc>full patch from tip-of-tree @ r77682</desc>
            <filename>bug-49566-20110204165828.patch</filename>
            <type>text/plain</type>
            <size>72398</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA4OTE4
NjEzZTllYzg5ZWRhODBlOTllM2RhMTRkNjc3ODJhODIxYTllLi4xODI1NmY1MDNjZTc4NDk5NDc5
OTBkN2I1NWU5ZTgxNDhkYTAzNWM3IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzAgQEAKKzIwMTEtMDEtMTAgIERpcmsgUHJhbmtl
ICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgbmV3LXJ1bi13ZWJraXQtdGVzdHM6IGNoZWNrcG9pbnQgbWVyZ2Ug
b2YgZHVhbC1tb2RlIG11bHRpcHJvY2Vzc2luZyB3b3JrCisKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5NTY2CisKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyX3dvcmtlcl9icm9rZXIu
cHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL21hbmFnZXJfd29ya2VyX2Jyb2tlcl91bml0dGVzdC5weTogQWRkZWQuCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWVzc2Fn
ZV9icm9rZXIyLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tlcjJfdW5pdHRlc3QucHk6IEFkZGVkLgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rl
c3RfcnVubmVyMi5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvbGF5b3V0X3BhY2thZ2Uvd29ya2VyLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHk6CisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9tYWMucHk6CisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tYWMucHk6CisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weToKKworMjAxMS0wMi0w
MiAgRGlyayBQcmFua2UgIDxkcHJhbmtlQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBuZXctcnVuLXdlYmtpdC10ZXN0czogc3Bs
aXQgb3V0IHRocmVhZCBzdGFjayBsb2dnaW5nIGNvZGUgaW50byBhIHNoYXJhYmxlIG1vZHVsZQor
CisgICAgICAgIFRoaXMgcGF0Y2ggc3BsaXRzIG91dCB0aGUgY29kZSB1c2VkIHRvIGZpbmQgYW5k
IGxvZyB0aHJlYWQKKyAgICAgICAgc3RhY2tzIGZyb20gTlJXVC1zcGVjaWZpYyBwYWNrYWdlcyB0
byBzb21ldGhpbmcgZ2VuZXJpYyBhbmQKKyAgICAgICAgc2hhcmVhYmxlIGJ5IG90aGVyIHB5dGhv
biBtb2R1bGVzLiBJdCB3aWxsIGJlIHNoYXJlZCBpbiB0aGUgbmVhcgorICAgICAgICBmdXR1cmUg
YnkgdGhlIG1hbmFnZXJfd29ya2VyX2Jyb2tlciBtb2R1bGUsIGZvciBleGFtcGxlLgorCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzY1NgorCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3N0YWNrX3V0aWxzLnB5OiBBZGRl
ZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vc3RhY2tfdXRpbHNf
dW5pdHRlc3QucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2VfYnJva2VyLnB5OgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2VfYnJva2VyX3VuaXR0
ZXN0LnB5OgorCisyMDExLTAxLTMxICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIG5ldy1y
dW4td2Via2l0LXRlc3RzOiBhZGQgc3R1YnMgZm9yIHRoZSBNYW5hZ2VyIG9iamVjdHMgdGhhdAor
ICAgICAgICB3aWxsIGFic3RyYWN0IHRoZSBjb25jdXJyZW5jeSBpbXBsZW1lbnRhdGlvbiAoaW5s
aW5lIC8gdGhyZWFkcyAvCisgICAgICAgIHByb2Nlc3NlcykuIFRoZXNlIGNsYXNzZXMgZG8gbm90
aGluZyB5ZXQgYW5kIGFyZSBub3Qgd2lyZWQgdXAgdG8KKyAgICAgICAgYW55dGhpbmcuCisKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzNDc3CisKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5h
Z2VyX3dvcmtlcl9icm9rZXIucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21hbmFnZXJfd29ya2VyX2Jyb2tlcl91bml0dGVz
dC5weTogQWRkZWQuCisKKzIwMTEtMDEtMjUgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
bmV3LXJ1bi13ZWJraXQtdGVzdHM6IGFkZCBzaW1wbGlmaWVkIG1lc3NhZ2UgYnJva2VyIGZvciBu
ZXctc3R5bGUKKyAgICAgICAgbWVzc2FnaW5nLiBUaGlzIGNoYW5nZSBhZGRzIGEgdmVyeSBzaW1w
bGUgbWVzc2FnZSBicm9rZXIgdGhhdAorICAgICAgICB3aWxsIGJlIHVzZWQgdG8gc2h1dHRsZSBt
ZXNzYWdlcyBiZXR3ZWVuIHRoZSBUZXN0UnVubmVyMiBtYW5hZ2VyCisgICAgICAgIHRocmVhZCBh
bmQgdGhlIFdvcmtlciB0aHJlYWRzLiBGb3Igbm93IHRoZSBjbGFzcyBpcyBub3QgdXNlZCBieQor
ICAgICAgICBhbnl0aGluZywgYnV0IHRoZSBldmVudHVhbCB1c2FnZSBjYW4gYmUgc2VlbiBpbiB0
aGUgcGF0Y2hlcworICAgICAgICBhdHRhY2hlZCB0byBidWcgNDk1NjYuCisKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzMTU4CisKKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tl
cjIucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL21lc3NhZ2VfYnJva2VyMl91bml0dGVzdC5weTogQWRkZWQuCisKIDIwMTEt
MDItMDQgIEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBhIHRl
c3QgY2FzZSBmb3IgZW5jb2RlL2RlY29kZSBvZiBGb3JtRGF0YS9Gb3JtRGF0YUVsZW1lbnQKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9zdGFja191dGls
cy5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9zdGFja191dGlscy5w
eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5mMTg3M2UyODg5YTdjZjExODM1YjY1YzEyYTNmNzk0YzJjNmQwMDc3Ci0t
LSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3N0
YWNrX3V0aWxzLnB5CkBAIC0wLDAgKzEsNTkgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDExIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMK
KyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJTaW1w
bGUgcm91dGluZXMgZm9yIGxvZ2dpbmcsIG9idGFpbmluZyB0aHJlYWQgc3RhY2sgaW5mb3JtYXRp
b24uIiIiCisKK2ltcG9ydCBzeXMKK2ltcG9ydCB0cmFjZWJhY2sKKworCitkZWYgbG9nX3dlZGdl
ZF90aHJlYWQobG9nZ2VyLCBuYW1lLCBpZCk6CisgICAgIiIiTG9nIGluZm9ybWF0aW9uIGFib3V0
IHRoZSBnaXZlbiB0aHJlYWQgc3RhdGUuIiIiCisgICAgc3RhY2sgPSBmaW5kX3RocmVhZF9zdGFj
ayhpZCkKKyAgICBhc3NlcnQoc3RhY2sgaXMgbm90IE5vbmUpCisgICAgbG9nZ2VyKCIiKQorICAg
IGxvZ2dlcigiJXMgKHRpZCAlZCkgaXMgd2VkZ2VkIiAlIChuYW1lLCBpZCkpCisgICAgbG9nX3N0
YWNrKGxvZ2dlciwgc3RhY2spCisgICAgbG9nZ2VyKCIiKQorCisKK2RlZiBmaW5kX3RocmVhZF9z
dGFjayhpZCk6CisgICAgIiIiUmV0dXJucyBhIHN0YWNrIG9iamVjdCB0aGF0IGNhbiBiZSB1c2Vk
IHRvIGR1bXAgYSBzdGFjayB0cmFjZSBmb3IKKyAgICB0aGUgZ2l2ZW4gdGhyZWFkIGlkIChvciBO
b25lIGlmIHRoZSBpZCBpcyBub3QgZm91bmQpLiIiIgorICAgIGZvciB0aHJlYWRfaWQsIHN0YWNr
IGluIHN5cy5fY3VycmVudF9mcmFtZXMoKS5pdGVtcygpOgorICAgICAgICBpZiB0aHJlYWRfaWQg
PT0gaWQ6CisgICAgICAgICAgICByZXR1cm4gc3RhY2sKKyAgICByZXR1cm4gTm9uZQorCisKK2Rl
ZiBsb2dfc3RhY2sobG9nZ2VyLCBzdGFjayk6CisgICAgIiIiTG9nIGEgc3RhY2sgdHJhY2UgdG8g
bG9nLmVycm9yKCkuIiIiCisgICAgZm9yIGZpbGVuYW1lLCBsaW5lbm8sIG5hbWUsIGxpbmUgaW4g
dHJhY2ViYWNrLmV4dHJhY3Rfc3RhY2soc3RhY2spOgorICAgICAgICBsb2dnZXIoJ0ZpbGU6ICIl
cyIsIGxpbmUgJWQsIGluICVzJyAlIChmaWxlbmFtZSwgbGluZW5vLCBuYW1lKSkKKyAgICAgICAg
aWYgbGluZToKKyAgICAgICAgICAgIGxvZ2dlcignICAlcycgJSBsaW5lLnN0cmlwKCkpCmRpZmYg
LS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vc3RhY2tfdXRpbHNf
dW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vc3RhY2tf
dXRpbHNfdW5pdHRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2RmYjcyYmVkY2FjZDEzN2YzYjJjYzNjNjAw
ZDgzNmM5NmM5NDBmZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3N5c3RlbS9zdGFja191dGlsc191bml0dGVzdC5weQpAQCAtMCwwICsxLDYyIEBACisj
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIwor
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgor
IyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKworaW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gd2Vi
a2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgb3V0cHV0Y2FwdHVyZQorZnJvbSB3ZWJraXRweS5j
b21tb24uc3lzdGVtIGltcG9ydCBzdGFja191dGlscworCisKK2RlZiBjdXJyZW50X3RocmVhZF9p
ZCgpOgorICAgIGlkLCBfID0gc3lzLl9jdXJyZW50X2ZyYW1lcygpLml0ZW1zKClbMF0KKyAgICBy
ZXR1cm4gaWQKKworCitjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVz
dF9maW5kX3RocmVhZF9zdGFja19mb3VuZChzZWxmKToKKyAgICAgICAgaWQgPSBjdXJyZW50X3Ro
cmVhZF9pZCgpCisgICAgICAgIGZvdW5kX3N0YWNrID0gc3RhY2tfdXRpbHMuZmluZF90aHJlYWRf
c3RhY2soaWQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZm91bmRfc3RhY2ssIE5vbmUp
CisKKyAgICBkZWYgdGVzdF9maW5kX3RocmVhZF9zdGFja19ub3RfZm91bmQoc2VsZik6CisgICAg
ICAgIGZvdW5kX3N0YWNrID0gc3RhY2tfdXRpbHMuZmluZF90aHJlYWRfc3RhY2soMCkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChmb3VuZF9zdGFjaywgTm9uZSkKKworICAgIGRlZiB0ZXN0X2xv
Z193ZWRnZWRfdGhyZWFkKHNlbGYpOgorICAgICAgICBtc2dzID0gW10KKworICAgICAgICBkZWYg
bG9nZ2VyKG1zZyk6CisgICAgICAgICAgICBtc2dzLmFwcGVuZChtc2cpCisKKyAgICAgICAgaWQg
PSBjdXJyZW50X3RocmVhZF9pZCgpCisgICAgICAgIHN0YWNrX3V0aWxzLmxvZ193ZWRnZWRfdGhy
ZWFkKGxvZ2dlciwgInRlc3QiLCBpZCkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgor
ICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlcl93b3JrZXJfYnJva2VyLnB5IGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlcl93
b3JrZXJfYnJva2VyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc4YjM4MjA5ZjBlYmUyNzAzYTcyNTExMmFjY2Mz
M2IyOGNiZmY5YjEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyX3dvcmtlcl9icm9rZXIucHkKQEAgLTAs
MCArMSwzMjIgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMg
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBk
aXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisj
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisj
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJNb2R1bGUgZm9yIGhhbmRsaW5nIG1l
c3NhZ2VzIGFuZCBjb25jdXJyZW5jeSBmb3IgcnVuLXdlYmtpdC10ZXN0cy4KKworVGhpcyBtb2R1
bGUgYnVpbGRzIG9uIHRoZSBmdW5jdGlvbmFsaXR5IG9mIG1lc3NhZ2VfYnJva2VyMiB0byBwcm92
aWRlCithIHNpbXBsZSBtZXNzYWdlIGJyb2tlciBmb3IgYSBtYW5hZ2VyIHNlbmRpbmcgbWVzc2Fn
ZXMgdG8gKGFuZCBnZXR0aW5nCityZXBsaWVzIGZyb20pIGEgcG9vbCBvZiB3b3JrZXJzLiBJbiBh
ZGRpdGlvbiBpdCBwcm92aWRlcyBhIGNob2ljZSBvZgorY29uY3VycmVuY3kgbW9kZWxzIGZvciBj
YWxsZXJzIHRvIGNob29zZSBmcm9tIChzaW5nbGUtdGhyZWFkZWQgaW5saW5lCittb2RlbCwgdGhy
ZWFkcywgb3IgcHJvY2Vzc2VzKS4KKworRklYTUU6IEF0IHRoZSBtb21lbnQsIHRoaXMgbW9kdWxl
IGlzIGp1c3QgYSBidW5jaCBvZiBzdHVicywgYnV0IGl0IHdpbGwKK2V2ZW50dWFsbHkgd29yayBh
cyBmb2xsb3dzOgorCisiIiIKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcHRwYXJzZQoraW1w
b3J0IG9zCitpbXBvcnQgUXVldWUKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aHJlYWQKK2ltcG9ydCB0
aHJlYWRpbmcKK2ltcG9ydCB0aW1lCitpbXBvcnQgdHJhY2ViYWNrCisKKworIworIyBIYW5kbGUg
UHl0aG9uIDwgMi42IHdoZXJlIG11bHRpcHJvY2Vzc2luZyBpc24ndCBhdmFpbGFibGUuCisjCit0
cnk6CisgICAgX211bHRpcHJvY2Vzc2luZ19pc19hdmFpbGFibGUgPSBUcnVlCisgICAgZnJvbSBt
dWx0aXByb2Nlc3NpbmcgaW1wb3J0IFByb2Nlc3MgYXMgX011bHRpcHJvY2Vzc2luZ19Qcm9jZXNz
CisgICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFF1ZXVlIGFzIF9NdWx0aXByb2Nlc3Np
bmdfUXVldWUKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBfbXVsdGlwcm9jZXNzaW5nX2lzX2F2
YWlsYWJsZSA9IEZhbHNlCisgICAgX011bHRpcHJvY2Vzc2luZ19Qcm9jZXNzID0gdGhyZWFkaW5n
LlRocmVhZAorICAgIF9NdWx0aXByb2Nlc3NpbmdfUXVldWUgPSBRdWV1ZS5RdWV1ZQorCisKK2Zy
b20gd2Via2l0cHkgaW1wb3J0IGxheW91dF90ZXN0cworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVz
dHMgaW1wb3J0IHBvcnQKKworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2th
Z2UgaW1wb3J0IG1lc3NhZ2VfYnJva2VyMgorCisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihf
X25hbWVfXykKKworCisjCisjIFRvcGljIG5hbWVzIGZvciBNYW5hZ2VyIDwtPiBXb3JrZXIgbWVz
c2FnaW5nCisjCitNQU5BR0VSX1RPUElDID0gJ21hbmFnZXJzJworQU5ZX1dPUktFUl9UT1BJQyA9
ICd3b3JrZXJzJworCisKK2RlZiBydW50aW1lX29wdGlvbnMoKToKKyAgICAiIiJSZXR1cm4gYSBs
aXN0IG9mIG9wdHBhcnNlLk9wdGlvbiBvYmplY3RzIGZvciBhbnkgcnVudGltZSB2YWx1ZXMgdXNl
ZAorICAgIGJ5IHRoaXMgbWV0aG9kLiIiIgorICAgIG9wdGlvbnMgPSBbCisgICAgICAgIG9wdHBh
cnNlLm1ha2Vfb3B0aW9uKCItLXdvcmtlci1tb2RlbCIsIGFjdGlvbj0ic3RvcmUiLAorICAgICAg
ICAgICAgaGVscD0oImNvbnRyb2xzIHdvcmtlciBtb2RlbC4gVmFsaWQgdmFsdWVzIGFyZSAiCisg
ICAgICAgICAgICAiJ2lubGluZScsICd0aHJlYWRzJywgYW5kICdwcm9jZXNzZXMnLiIpKSwKKyAg
ICBdCisgICAgcmV0dXJuIG9wdGlvbnMKKworCitkZWYgZ2V0KHBvcnQsIG9wdGlvbnMsIG1hbmFn
ZXIsIHdvcmtlcl9jbGFzcyk6CisgICAgIiIiUmV0dXJuIGEgY29ubmVjdGlvbiB0byBhIG1hbmFn
ZXIvd29ya2VyIG1lc3NhZ2VfYnJva2VyCisKKyAgICBBcmdzOgorICAgICAgICBwb3J0IC0gaGFu
ZGxlIHRvIGxheW91dF90ZXN0cy9wb3J0IG9iamVjdCBmb3IgcG9ydC1zcGVjaWZpYyBzdHVmZgor
ICAgICAgICBvcHRpb25zIC0gb3B0cGFyc2UgYXJndW1lbnQgZm9yIGNvbW1hbmQtbGluZSBvcHRp
b25zCisgICAgICAgIG1hbmFnZXIgLSBvYmplY3QgdG8gZGlzcGF0Y2ggcmVwbGllcyB0bworICAg
ICAgICB3b3JrZXJfY2xhc3MgLSB0eXBlIG9mIHdvcmtlcnMgdG8gY3JlYXRlLiBUaGlzIGNsYXNz
IG11c3QgaW1wbGVtZW50CisgICAgICAgICAgICB0aGUgbWV0aG9kcyBpbiBtZXNzYWdlX2Jyb2tl
cjIuQ2xpZW50SW50ZXJmYWNlLgorICAgIFJldHVybnM6CisgICAgICAgIEEgaGFuZGxlIHRvIGFu
IG9iamVjdCB0aGF0IHdpbGwgdGFsayB0byBhIG1lc3NhZ2UgYnJva2VyIGNvbmZpZ3VyZWQKKyAg
ICAgICAgZm9yIHRoZSBub3JtYWwgbWFuYWdlci93b3JrZXIgY29tbXVuaWNhdGlvbi4KKyAgICAi
IiIKKyAgICB3b3JrZXJfbW9kZWwgPSBvcHRpb25zLndvcmtlcl9tb2RlbAorICAgIGlmIHdvcmtl
cl9tb2RlbCA9PSAnaW5saW5lJzoKKyAgICAgICAgcXVldWVfY2xhc3MgPSBRdWV1ZS5RdWV1ZQor
ICAgICAgICBtYW5hZ2VyX2NsYXNzID0gX0lubGluZU1hbmFnZXIKKyAgICBlbGlmIHdvcmtlcl9t
b2RlbCA9PSAndGhyZWFkcyc6CisgICAgICAgIHF1ZXVlX2NsYXNzID0gUXVldWUuUXVldWUKKyAg
ICAgICAgbWFuYWdlcl9jbGFzcyA9IF9UaHJlYWRlZE1hbmFnZXIKKyAgICBlbGlmIHdvcmtlcl9t
b2RlbCA9PSAncHJvY2Vzc2VzJyBhbmQgX211bHRpcHJvY2Vzc2luZ19pc19hdmFpbGFibGU6Cisg
ICAgICAgIHF1ZXVlX2NsYXNzID0gX011bHRpcHJvY2Vzc2luZ19RdWV1ZQorICAgICAgICBtYW5h
Z2VyX2NsYXNzID0gX011bHRpUHJvY2Vzc01hbmFnZXIKKyAgICBlbHNlOgorICAgICAgICByYWlz
ZSBWYWx1ZUVycm9yKCJ1bnN1cHBvcnRlZCB2YWx1ZSBmb3IgLS13b3JrZXItbW9kZWw6ICVzIiAl
CisgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyX21vZGVsKQorCisgICAgYnJva2VyID0g
bWVzc2FnZV9icm9rZXIyLkJyb2tlcihvcHRpb25zLCBxdWV1ZV9jbGFzcykKKyAgICByZXR1cm4g
bWFuYWdlcl9jbGFzcyhicm9rZXIsIHBvcnQsIG9wdGlvbnMsIG1hbmFnZXIsIHdvcmtlcl9jbGFz
cykKKworCitjbGFzcyBfQWJzdHJhY3RNYW5hZ2VyKG1lc3NhZ2VfYnJva2VyMi5Ccm9rZXJDb25u
ZWN0aW9uKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCBvcHRpb25zLCBtYW5hZ2Vy
LCB3b3JrZXJfY2xhc3MpOgorICAgICAgICBtZXNzYWdlX2Jyb2tlcjIuQnJva2VyQ29ubmVjdGlv
bi5fX2luaXRfXyhzZWxmLCBicm9rZXIsIE1BTkFHRVJfVE9QSUMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU5ZX1dPUktFUl9UT1BJQykKKyAgICAg
ICAgc2VsZi5fYnJva2VyID0gYnJva2VyCisgICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25z
CisgICAgICAgIHNlbGYuX21hbmFnZXIgPSBtYW5hZ2VyCisgICAgICAgIHNlbGYuX3dvcmtlcl9j
b25uZWN0aW9uX2NsYXNzID0gTm9uZQorICAgICAgICBzZWxmLl93b3JrZXJfY2xhc3MgPSB3b3Jr
ZXJfY2xhc3MKKworICAgIGRlZiBfbWFrZV93b3JrZXJfY29ubmVjdGlvbihzZWxmKToKKyAgICAg
ICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIF9tYWtlX3dvcmtlcihzZWxm
LCB3b3JrZXJfY29ubmVjdGlvbiwgd29ya2VyX251bWJlciwgKiprd2FyZ3MpOgorICAgICAgICBy
ZXR1cm4gc2VsZi5fd29ya2VyX2NsYXNzKHdvcmtlcl9jb25uZWN0aW9uLCB3b3JrZXJfbnVtYmVy
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMsICoqa3dh
cmdzKQorCisgICAgZGVmIGNsaWVudChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX21hbmFn
ZXIKKworICAgIGRlZiBzdGFydF93b3JrZXIoc2VsZiwgd29ya2VyX251bWJlciwgKiprd2FyZ3Mp
OgorICAgICAgICB3b3JrZXJfY29ubmVjdGlvbiA9IHNlbGYuX21ha2Vfd29ya2VyX2Nvbm5lY3Rp
b24oKQorICAgICAgICB3b3JrZXIgPSBzZWxmLl9tYWtlX3dvcmtlcih3b3JrZXJfY29ubmVjdGlv
biwgd29ya2VyX251bWJlciwgKiprd2FyZ3MpCisgICAgICAgIHdvcmtlcl9jb25uZWN0aW9uLnNl
dF93b3JrZXIod29ya2VyKQorICAgICAgICB3b3JrZXJfY29ubmVjdGlvbi5zdGFydCgpCisgICAg
ICAgIHJldHVybiB3b3JrZXJfY29ubmVjdGlvbgorCisKK2NsYXNzIF9JbmxpbmVNYW5hZ2VyKF9B
YnN0cmFjdE1hbmFnZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXIsIHBvcnQsIG9w
dGlvbnMsIG1hbmFnZXIsIHdvcmtlcl9jbGFzcyk6CisgICAgICAgIF9BYnN0cmFjdE1hbmFnZXIu
X19pbml0X18oc2VsZiwgYnJva2VyLCBvcHRpb25zLCBtYW5hZ2VyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdvcmtlcl9jbGFzcykKKyAgICAgICAgc2VsZi5fcG9ydCA9IHBv
cnQKKyAgICAgICAgc2VsZi5faW5saW5lX3dvcmtlciA9IE5vbmUKKworICAgIGRlZiBfbWFrZV93
b3JrZXJfY29ubmVjdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5faW5saW5lX3dvcmtlciA9IF9J
bmxpbmVXb3JrZXIoc2VsZi5fYnJva2VyLCBzZWxmLl9wb3J0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9tYW5hZ2VyKQorICAgICAgICByZXR1cm4g
c2VsZi5faW5saW5lX3dvcmtlcgorCisgICAgZGVmIHJ1bl9tZXNzYWdlX2xvb3Aoc2VsZiwgZGVs
YXlfc2Vjcz1Ob25lKToKKyAgICAgICAgIyBOb3RlIHRoYXQgZGVsYXlfc2VjcyBpcyBpZ25vcmVk
IGluIHRoaXMgY2FzZSBzaW5jZSB3ZSBjYW4ndCBlYXNpbHkKKyAgICAgICAgIyBpbXBsZW1lbnQg
aXQuCisgICAgICAgIHNlbGYuX2lubGluZV93b3JrZXIucnVuKCkKKyAgICAgICAgc2VsZi5fYnJv
a2VyLnJ1bl9hbGxfcGVuZGluZyhNQU5BR0VSX1RPUElDLCBzZWxmLl9tYW5hZ2VyKQorCisKK2Ns
YXNzIF9UaHJlYWRlZE1hbmFnZXIoX0Fic3RyYWN0TWFuYWdlcik6CisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIGJyb2tlciwgcG9ydCwgb3B0aW9ucywgbWFuYWdlciwgd29ya2VyX2NsYXNzKToKKyAg
ICAgICAgX0Fic3RyYWN0TWFuYWdlci5fX2luaXRfXyhzZWxmLCBicm9rZXIsIG9wdGlvbnMsIG1h
bmFnZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJfY2xhc3Mp
CisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CisKKyAgICBkZWYgX21ha2Vfd29ya2VyX2Nvbm5l
Y3Rpb24oc2VsZik6CisgICAgICAgIHJldHVybiBfVGhyZWFkZWRXb3JrZXIoc2VsZi5fYnJva2Vy
LCBzZWxmLl9wb3J0KQorCisKK2NsYXNzIF9NdWx0aVByb2Nlc3NNYW5hZ2VyKF9BYnN0cmFjdE1h
bmFnZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXIsIHBvcnQsIG9wdGlvbnMsIG1h
bmFnZXIsIHdvcmtlcl9jbGFzcyk6CisgICAgICAgIF9BYnN0cmFjdE1hbmFnZXIuX19pbml0X18o
c2VsZiwgYnJva2VyLCBvcHRpb25zLCBtYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgd29ya2VyX2NsYXNzKQorICAgICAgICBzZWxmLl9wbGF0Zm9ybV9uYW1lID0g
cG9ydC5yZWFsX25hbWUoKQorCisgICAgZGVmIF9tYWtlX3dvcmtlcl9jb25uZWN0aW9uKHNlbGYp
OgorICAgICAgICByZXR1cm4gX011bHRpUHJvY2Vzc1dvcmtlcihzZWxmLl9icm9rZXIsIHNlbGYu
X3BsYXRmb3JtX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYu
X29wdGlvbnMpCisKKworY2xhc3MgX1dvcmtlckNvbm5lY3Rpb24obWVzc2FnZV9icm9rZXIyLkJy
b2tlckNvbm5lY3Rpb24pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXIpOgorICAgICAg
ICBtZXNzYWdlX2Jyb2tlcjIuQnJva2VyQ29ubmVjdGlvbi5fX2luaXRfXyhzZWxmLCBicm9rZXIs
IEFOWV9XT1JLRVJfVE9QSUMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTUFOQUdFUl9UT1BJQykKKyAgICAgICAgc2VsZi5fd29ya2VyID0gTm9uZQor
CisgICAgZGVmIHNldF93b3JrZXIoc2VsZiwgd29ya2VyKToKKyAgICAgICAgc2VsZi5fd29ya2Vy
ID0gd29ya2VyCisgICAgICAgIHNlbGYubmFtZSA9IHdvcmtlci5uYW1lKCkKKworICAgIGRlZiBj
bGllbnQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl93b3JrZXIKKworICAgIGRlZiBzdGFy
dChzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHJ1
bihzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHlp
ZWxkX3RvX2Jyb2tlcihzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGNhbmNlbChzZWxm
KToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGlzX2FsaXZl
KHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgam9p
bihzZWxmLCB0aW1lb3V0KToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisg
ICAgZGVmIGxvZ193ZWRnZWRfd29ya2VyKHNlbGYsIHRlc3RfbmFtZSk6CisgICAgICAgIHJhaXNl
IE5vdEltcGxlbWVudGVkRXJyb3IKKworCitjbGFzcyBfSW5saW5lV29ya2VyKF9Xb3JrZXJDb25u
ZWN0aW9uKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCBwb3J0LCBtYW5hZ2VyKToK
KyAgICAgICAgX1dvcmtlckNvbm5lY3Rpb24uX19pbml0X18oc2VsZiwgYnJva2VyKQorICAgICAg
ICBzZWxmLl9wb3J0ID0gcG9ydAorICAgICAgICBzZWxmLl9tYW5hZ2VyID0gbWFuYWdlcgorICAg
ICAgICBzZWxmLl9hbGl2ZSA9IEZhbHNlCisKKyAgICBkZWYgc3RhcnQoc2VsZik6CisgICAgICAg
IHBhc3MKKworICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgIHNlbGYuX2FsaXZlID0gVHJ1ZQor
ICAgICAgICBzZWxmLl93b3JrZXIucnVuKHNlbGYuX3BvcnQpCisgICAgICAgIHNlbGYuX2FsaXZl
ID0gRmFsc2UKKworICAgIGRlZiB5aWVsZF90b19icm9rZXIoc2VsZik6CisgICAgICAgIHNlbGYu
X2Jyb2tlci5ydW5fYWxsX3BlbmRpbmcoTUFOQUdFUl9UT1BJQywgc2VsZi5fbWFuYWdlcikKKwor
ICAgIGRlZiBjYW5jZWwoc2VsZik6CisgICAgICAgIHNlbGYuX3dvcmtlci5jYW5jZWwoKQorCisg
ICAgZGVmIGlzX2FsaXZlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fYWxpdmUKKworICAg
IGRlZiBqb2luKHNlbGYsIHRpbWVvdXQpOgorICAgICAgICBhc3NlcnQgbm90IHNlbGYuaXNfYWxp
dmUoKQorCisgICAgZGVmIGxvZ193ZWRnZWRfd29ya2VyKHNlbGYsIHRlc3RfbmFtZSk6CisgICAg
ICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJfSW5saW5lV29ya2VyLmxvZ193ZWRnZWRfd29ya2Vy
KCkgY2FsbGVkIikKKworCitjbGFzcyBfVGhyZWFkZWRXb3JrZXIodGhyZWFkaW5nLlRocmVhZCwg
X1dvcmtlckNvbm5lY3Rpb24pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXIsIHBvcnQp
OgorICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLl9faW5pdF9fKHNlbGYpCisgICAgICAgIF9Xb3Jr
ZXJDb25uZWN0aW9uLl9faW5pdF9fKHNlbGYsIGJyb2tlcikKKyAgICAgICAgc2VsZi5fcG9ydCA9
IHBvcnQKKworICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgICMgRklYTUU6IFdlIGNhbiByZW1v
dmUgdGhpcyBvbmNlIGV2ZXJ5b25lIGlzIG9uIDIuNi4KKyAgICAgICAgaWYgbm90IGhhc2F0dHIo
c2VsZiwgJ2lkZW50Jyk6CisgICAgICAgICAgICBzZWxmLmlkZW50ID0gdGhyZWFkLmdldF9pZGVu
dCgpCisgICAgICAgIHNlbGYuX3dvcmtlci5ydW4oc2VsZi5fcG9ydCkKKworICAgIGRlZiBjYW5j
ZWwoc2VsZik6CisgICAgICAgIHNlbGYuX3dvcmtlci5jYW5jZWwoKQorCisgICAgZGVmIGlzX2Fs
aXZlKHNlbGYpOgorICAgICAgICAjIEZJWE1FOiBXZSBjYW4gcmVtb3ZlIHRoaXMgb25jZSBldmVy
eW9uZSBpcyBvbiAyLjYuCisgICAgICAgIHNlbGYuaXNBbGl2ZSgpCisKKyAgICBkZWYgbG9nX3dl
ZGdlZF93b3JrZXIoc2VsZiwgdGVzdF9uYW1lKToKKyAgICAgICAgdGlkID0gc2VsZi5pZGVudAor
ICAgICAgICBzdGFjayA9IF9maW5kX3RocmVhZF9zdGFjayh0aWQpCisgICAgICAgIGFzc2VydChz
dGFjayBpcyBub3QgTm9uZSkKKyAgICAgICAgX2xvZy5lcnJvcigiJXMgKHRpZCAlZCkgaXMgd2Vk
Z2VkIG9uIHRlc3QgJXMiICUKKyAgICAgICAgICAgICAgICAgICAoc2VsZi5uYW1lLCB0aWQsIHRl
c3RfbmFtZSkpCisgICAgICAgIF9sb2dfc3RhY2soc3RhY2spCisKKworY2xhc3MgX011bHRpUHJv
Y2Vzc1dvcmtlcihfTXVsdGlwcm9jZXNzaW5nX1Byb2Nlc3MsIF9Xb3JrZXJDb25uZWN0aW9uKToK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCBwbGF0Zm9ybV9uYW1lLCBvcHRpb25zKToK
KyAgICAgICAgX011bHRpcHJvY2Vzc2luZ19Qcm9jZXNzLl9faW5pdF9fKHNlbGYpCisgICAgICAg
IF9Xb3JrZXJDb25uZWN0aW9uLl9faW5pdF9fKHNlbGYsIGJyb2tlcikKKyAgICAgICAgc2VsZi5f
b3B0aW9ucyA9IG9wdGlvbnMKKyAgICAgICAgc2VsZi5fcGxhdGZvcm1fbmFtZSA9IHBsYXRmb3Jt
X25hbWUKKworICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgICMgUmUtY29uZmlndXJlIHRoZSBs
b2dnZXIuCisgICAgICAgICMgRklYTUU6IGZpZ3VyZSBvdXQgaG93IHRvIGdldCBhIGhhbmRsZSB0
byB0aGUgcmlnaHQgc3RyZWFtLgorICAgICAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKCkKKyAgICAg
ICAgcG9ydCA9IGxheW91dF90ZXN0cy5wb3J0LmdldChzZWxmLl9wbGF0Zm9ybV9uYW1lLCBzZWxm
Ll9vcHRpb25zKQorICAgICAgICBzZWxmLl93b3JrZXIucnVuKHBvcnQpCisKKyAgICBkZWYgY2Fu
Y2VsKHNlbGYpOgorICAgICAgICBzZWxmLnRlcm1pbmF0ZSgpCisKKyAgICBkZWYgbG9nX3dlZGdl
ZF93b3JrZXIoc2VsZiwgdGVzdF9uYW1lKToKKyAgICAgICAgX2xvZy5lcnJvcigiJXMgKHBpZCAl
ZCkgaXMgd2VkZ2VkIG9uIHRlc3QgJXMiICUKKyAgICAgICAgICAgICAgICAgICAoc2VsZi5uYW1l
LCBzZWxmLnBpZCwgdGVzdF9uYW1lKSkKKworCitkZWYgX2ZpbmRfdGhyZWFkX3N0YWNrKHRpZCk6
CisgICAgIiIiUmV0dXJucyBhIHN0YWNrIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIGR1bXAg
YSBzdGFjayB0cmFjZSBmb3IKKyAgICB0aGUgZ2l2ZW4gdGhyZWFkIGlkIChvciBOb25lIGlmIHRo
ZSBpZCBpcyBub3QgZm91bmQpLiIiIgorICAgIGZvciB0aHJlYWRfaWQsIHN0YWNrIGluIHN5cy5f
Y3VycmVudF9mcmFtZXMoKS5pdGVtcygpOgorICAgICAgICBpZiB0aHJlYWRfaWQgPT0gdGlkOgor
ICAgICAgICAgICAgcmV0dXJuIHN0YWNrCisgICAgcmV0dXJuIE5vbmUKKworCitkZWYgX2xvZ19z
dGFjayhzdGFjayk6CisgICAgIiIiTG9nIGEgc3RhY2sgdHJhY2UgdG8gbG9nLmVycm9yKCkuIiIi
CisgICAgZm9yIGZpbGVuYW1lLCBsaW5lbm8sIG5hbWUsIGxpbmUgaW4gdHJhY2ViYWNrLmV4dHJh
Y3Rfc3RhY2soc3RhY2spOgorICAgICAgICBfbG9nLmVycm9yKCdGaWxlOiAiJXMiLCBsaW5lICVk
LCBpbiAlcycgJSAoZmlsZW5hbWUsIGxpbmVubywgbmFtZSkpCisgICAgICAgIGlmIGxpbmU6Cisg
ICAgICAgICAgICBfbG9nLmVycm9yKCcgICVzJyAlIGxpbmUuc3RyaXAoKSkKZGlmZiAtLWdpdCBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21hbmFn
ZXJfd29ya2VyX2Jyb2tlcl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21hbmFnZXJfd29ya2VyX2Jyb2tlcl91bml0dGVzdC5w
eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4yYTJmOTQxMDVkNjZjNmY5M2RiMjIxY2M3ZDc0N2FmYmIyMjlmM2VhCi0t
LSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5
b3V0X3BhY2thZ2UvbWFuYWdlcl93b3JrZXJfYnJva2VyX3VuaXR0ZXN0LnB5CkBAIC0wLDAgKzEs
MzExIEBACisjIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJp
YnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IG9wdHBhcnNlCitpbXBvcnQgUXVldWUK
K2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAorCit0cnk6CisgICAgX211bHRpcHJvY2Vzc2lu
Z19pc19hdmFpbGFibGUgPSBUcnVlCisgICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFF1
ZXVlIGFzIF9NdWx0aXByb2Nlc3NpbmdfUXVldWUKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBf
bXVsdGlwcm9jZXNzaW5nX2lzX2F2YWlsYWJsZSA9IEZhbHNlCisgICAgX011bHRpcHJvY2Vzc2lu
Z19RdWV1ZSA9IFF1ZXVlLlF1ZXVlCisKKworZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGlt
cG9ydCBvdXRwdXRjYXB0dXJlCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cyBpbXBvcnQgcG9y
dAorCitpbXBvcnQgbWVzc2FnZV9icm9rZXIyCitpbXBvcnQgbWFuYWdlcl93b3JrZXJfYnJva2Vy
CitpbXBvcnQgcHJpbnRpbmcKKworCitjbGFzcyBUZXN0V29ya2VyKG1lc3NhZ2VfYnJva2VyMi5C
cm9rZXJDbGllbnQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXIsIHdvcmtlcl9udW1i
ZXIsIG9wdGlvbnMsICoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5fYnJva2VyID0gYnJva2VyCisg
ICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCisgICAgICAgIHNlbGYuX3dvcmtlcl9udW1i
ZXIgPSB3b3JrZXJfbnVtYmVyCisgICAgICAgIHNlbGYuX25hbWUgPSAnVGVzdFdvcmtlci8lZCcg
JSB3b3JrZXJfbnVtYmVyCisgICAgICAgIHNlbGYuX2NhbmNlbGVkID0gRmFsc2UKKyAgICAgICAg
c2VsZi5fc3RvcHBlZCA9IEZhbHNlCisgICAgICAgIHNlbGYuX3N0YXJ0aW5nX3F1ZXVlID0ga3dh
cmdzLmdldCgnc3RhcnRpbmdfcXVldWUnKQorICAgICAgICBzZWxmLl9zdG9wcGluZ19xdWV1ZSA9
IGt3YXJncy5nZXQoJ3N0b3BwaW5nX3F1ZXVlJykKKworICAgIGRlZiBjYW5jZWwoc2VsZik6Cisg
ICAgICAgIHNlbGYuX2NhbmNlbGVkID0gVHJ1ZQorCisgICAgZGVmIGhhbmRsZV9zdG9wKHNlbGYs
IHNyYyk6CisgICAgICAgIHNlbGYuX3N0b3BwZWQgPSBUcnVlCisKKyAgICBkZWYgaGFuZGxlX3Rl
c3Qoc2VsZiwgc3JjLCBhbl9pbnQsIGFfc3RyKToKKyAgICAgICAgYXNzZXJ0IGFuX2ludCA9PSAx
CisgICAgICAgIGFzc2VydCBhX3N0ciA9PSAiaGVsbG8sIHdvcmxkIgorICAgICAgICBzZWxmLl9i
cm9rZXIucG9zdF9tZXNzYWdlKCd0ZXN0JywgMiwgJ2hpLCBldmVyeWJvZHknKQorCisgICAgZGVm
IGlzX2RvbmUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9zdG9wcGVkIG9yIHNlbGYuX2Nh
bmNlbGVkCisKKyAgICBkZWYgbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX25hbWUK
KworICAgIGRlZiBzdGFydChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHJ1bihzZWxm
LCBwb3J0KToKKyAgICAgICAgaWYgc2VsZi5fc3RhcnRpbmdfcXVldWU6CisgICAgICAgICAgICBz
ZWxmLl9zdGFydGluZ19xdWV1ZS5wdXQoJycpCisgICAgICAgIGlmIHNlbGYuX3N0b3BwaW5nX3F1
ZXVlOgorICAgICAgICAgICAgc2VsZi5fc3RvcHBpbmdfcXVldWUuZ2V0KCkKKyAgICAgICAgdHJ5
OgorICAgICAgICAgICAgc2VsZi5fYnJva2VyLnJ1bl9tZXNzYWdlX2xvb3AoKQorICAgICAgICAg
ICAgc2VsZi5fYnJva2VyLnlpZWxkX3RvX2Jyb2tlcigpCisgICAgICAgICAgICBzZWxmLl9icm9r
ZXIucG9zdF9tZXNzYWdlKCdkb25lJykKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAg
ICAgICAgICAgIHNlbGYuX2Jyb2tlci5wb3N0X21lc3NhZ2UoJ2V4Y2VwdGlvbicsICh0eXBlKGUp
LCBzdHIoZSksIE5vbmUpKQorCisKK2RlZiBnZXRfb3B0aW9ucyh3b3JrZXJfbW9kZWwpOgorICAg
IG9wdGlvbl9saXN0ID0gbWFuYWdlcl93b3JrZXJfYnJva2VyLnJ1bnRpbWVfb3B0aW9ucygpCisg
ICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKG9wdGlvbl9saXN0PW9wdGlvbl9saXN0
KQorICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyhhcmdzPVsnLS13b3JrZXIt
bW9kZWwnLCB3b3JrZXJfbW9kZWxdKQorICAgIHJldHVybiBvcHRpb25zCisKKworZGVmIG1ha2Vf
YnJva2VyKG1hbmFnZXIsIHdvcmtlcl9tb2RlbCk6CisgICAgb3B0aW9ucyA9IGdldF9vcHRpb25z
KHdvcmtlcl9tb2RlbCkKKyAgICByZXR1cm4gbWFuYWdlcl93b3JrZXJfYnJva2VyLmdldChwb3J0
LmdldCgidGVzdCIpLCBvcHRpb25zLCBtYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFRlc3RXb3JrZXIpCisKKworY2xhc3MgRnVuY3Rpb25UZXN0cyh1bml0dGVz
dC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfZ2V0X19pbmxpbmUoc2VsZik6CisgICAgICAgIHNl
bGYuYXNzZXJ0VHJ1ZShtYWtlX2Jyb2tlcihzZWxmLCAnaW5saW5lJykgaXMgbm90IE5vbmUpCisK
KyAgICBkZWYgdGVzdF9nZXRfX3RocmVhZHMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZShtYWtlX2Jyb2tlcihzZWxmLCAndGhyZWFkcycpIGlzIG5vdCBOb25lKQorCisgICAgZGVmIHRl
c3RfZ2V0X19wcm9jZXNzZXMoc2VsZik6CisgICAgICAgIGlmIF9tdWx0aXByb2Nlc3NpbmdfaXNf
YXZhaWxhYmxlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1ha2VfYnJva2VyKHNlbGYs
ICdwcm9jZXNzZXMnKSBpcyBub3QgTm9uZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNl
bGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1ha2VfYnJva2VyLCBzZWxmLCAncHJvY2Vzc2Vz
JykKKworICAgIGRlZiB0ZXN0X2dldF9fdW5rbm93bihzZWxmKToKKyAgICAgICAgc2VsZi5hc3Nl
cnRSYWlzZXMoVmFsdWVFcnJvciwgbWFrZV9icm9rZXIsIHNlbGYsICd1bmtub3duJykKKworCitj
bGFzcyBfVGVzdHNNaXhpbihvYmplY3QpOgorICAgICIiIk1peGluIGNsYXNzIHRoYXQgaW1wbGVt
ZW50cyBhIHNlcmllcyBvZiB0ZXN0cyB0byBlbmZvcmNlIHRoZQorICAgIGNvbnRyYWN0IGFsbCBp
bXBsZW1lbnRhdGlvbnMgbXVzdCBmb2xsb3cuIiIiCisKKyAgICAjCisgICAgIyBNZXRob2RzIHRv
IGltcGxlbWVudCB0aGUgTWFuYWdlciBzaWRlIG9mIHRoZSBDbGllbnRJbnRlcmZhY2UKKyAgICAj
CisgICAgZGVmIG5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiAnVGVzdGVyJworCisgICAgZGVm
IGlzX2RvbmUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9kb25lCisKKyAgICAjCisgICAg
IyBIYW5kbGVycyBmb3IgdGhlIG1lc3NhZ2VzIHRoZSBUZXN0V29ya2VyIG1heSBzZW5kLgorICAg
ICMKKyAgICBkZWYgaGFuZGxlX2RvbmUoc2VsZiwgc3JjKToKKyAgICAgICAgc2VsZi5fZG9uZSA9
IFRydWUKKworICAgIGRlZiBoYW5kbGVfdGVzdChzZWxmLCBzcmMsIGFuX2ludCwgYV9zdHIpOgor
ICAgICAgICBzZWxmLl9hbl9pbnQgPSBhbl9pbnQKKyAgICAgICAgc2VsZi5fYV9zdHIgPSBhX3N0
cgorCisgICAgZGVmIGhhbmRsZV9leGNlcHRpb24oc2VsZiwgc3JjLCBleGNfaW5mbyk6CisgICAg
ICAgIHNlbGYuX2V4Y2VwdGlvbiA9IGV4Y19pbmZvCisgICAgICAgIHNlbGYuX2RvbmUgPSBUcnVl
CisKKyAgICAjCisgICAgIyBUZXN0aW5nIGhlbHBlciBtZXRob2RzCisgICAgIworICAgIGRlZiBz
ZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5fYW5faW50ID0gTm9uZQorICAgICAgICBzZWxmLl9h
X3N0ciA9IE5vbmUKKyAgICAgICAgc2VsZi5fYnJva2VyID0gTm9uZQorICAgICAgICBzZWxmLl9k
b25lID0gRmFsc2UKKyAgICAgICAgc2VsZi5fZXhjZXB0aW9uID0gTm9uZQorICAgICAgICBzZWxm
Ll93b3JrZXJfbW9kZWwgPSBOb25lCisKKyAgICBkZWYgbWFrZV9icm9rZXIoc2VsZik6CisgICAg
ICAgIHNlbGYuX2Jyb2tlciA9IG1ha2VfYnJva2VyKHNlbGYsIHNlbGYuX3dvcmtlcl9tb2RlbCkK
KworICAgICMKKyAgICAjIEFjdHVhbCB1bml0IHRlc3RzCisgICAgIworICAgIGRlZiB0ZXN0X2Nh
bmNlbChzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuX3dvcmtlcl9tb2RlbDoKKyAgICAgICAg
ICAgIHJldHVybgorICAgICAgICBzZWxmLm1ha2VfYnJva2VyKCkKKyAgICAgICAgd29ya2VyID0g
c2VsZi5fYnJva2VyLnN0YXJ0X3dvcmtlcigwKQorICAgICAgICB3b3JrZXIuY2FuY2VsKCkKKyAg
ICAgICAgc2VsZi5fYnJva2VyLnBvc3RfbWVzc2FnZSgndGVzdCcsIDEsICdoZWxsbywgd29ybGQn
KQorICAgICAgICB3b3JrZXIuam9pbigwLjUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uod29y
a2VyLmlzX2FsaXZlKCkpCisKKyAgICBkZWYgdGVzdF9kb25lKHNlbGYpOgorICAgICAgICBpZiBu
b3Qgc2VsZi5fd29ya2VyX21vZGVsOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYu
bWFrZV9icm9rZXIoKQorICAgICAgICB3b3JrZXIgPSBzZWxmLl9icm9rZXIuc3RhcnRfd29ya2Vy
KDApCisgICAgICAgIHNlbGYuX2Jyb2tlci5wb3N0X21lc3NhZ2UoJ3Rlc3QnLCAxLCAnaGVsbG8s
IHdvcmxkJykKKyAgICAgICAgc2VsZi5fYnJva2VyLnBvc3RfbWVzc2FnZSgnc3RvcCcpCisgICAg
ICAgIHNlbGYuX2Jyb2tlci5ydW5fbWVzc2FnZV9sb29wKCkKKyAgICAgICAgd29ya2VyLmpvaW4o
MC41KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHdvcmtlci5pc19hbGl2ZSgpKQorICAgICAg
ICBzZWxmLmFzc2VydFRydWUoc2VsZi5pc19kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoc2VsZi5fYW5faW50LCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2Ffc3Ry
LCAnaGksIGV2ZXJ5Ym9keScpCisKKyAgICBkZWYgdGVzdF9sb2dfd2VkZ2VkX3dvcmtlcihzZWxm
KToKKyAgICAgICAgaWYgbm90IHNlbGYuX3dvcmtlcl9tb2RlbDoKKyAgICAgICAgICAgIHJldHVy
bgorICAgICAgICBzdGFydGluZ19xdWV1ZSA9IHNlbGYucXVldWUoKQorICAgICAgICBzdG9wcGlu
Z19xdWV1ZSA9IHNlbGYucXVldWUoKQorICAgICAgICBzZWxmLm1ha2VfYnJva2VyKCkKKyAgICAg
ICAgb2MgPSBvdXRwdXRjYXB0dXJlLk91dHB1dENhcHR1cmUoKQorICAgICAgICBvYy5jYXB0dXJl
X291dHB1dCgpCisgICAgICAgIHdvcmtlciA9IHNlbGYuX2Jyb2tlci5zdGFydF93b3JrZXIoMCwK
KyAgICAgICAgICAgIHN0YXJ0aW5nX3F1ZXVlPXN0YXJ0aW5nX3F1ZXVlLCBzdG9wcGluZ19xdWV1
ZT1zdG9wcGluZ19xdWV1ZSkKKyAgICAgICAgc3RhcnRpbmdfcXVldWUuZ2V0KCkKKyAgICAgICAg
d29ya2VyLmxvZ193ZWRnZWRfd29ya2VyKCd0ZXN0X25hbWUnKQorICAgICAgICBzdG9wcGluZ19x
dWV1ZS5wdXQoJycpCisgICAgICAgIHNlbGYuX2Jyb2tlci5wb3N0X21lc3NhZ2UoJ3N0b3AnKQor
ICAgICAgICBzZWxmLl9icm9rZXIucnVuX21lc3NhZ2VfbG9vcCgpCisgICAgICAgIHdvcmtlci5q
b2luKDAuNSkKKyAgICAgICAgb2MucmVzdG9yZV9vdXRwdXQoKQorICAgICAgICBzZWxmLmFzc2Vy
dEZhbHNlKHdvcmtlci5pc19hbGl2ZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5p
c19kb25lKCkpCisKKyAgICBkZWYgdGVzdF91bmtub3duX21lc3NhZ2Uoc2VsZik6CisgICAgICAg
IGlmIG5vdCBzZWxmLl93b3JrZXJfbW9kZWw6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAg
c2VsZi5tYWtlX2Jyb2tlcigpCisgICAgICAgIHdvcmtlciA9IHNlbGYuX2Jyb2tlci5zdGFydF93
b3JrZXIoMCkKKyAgICAgICAgc2VsZi5fYnJva2VyLnBvc3RfbWVzc2FnZSgndW5rbm93bicpCisg
ICAgICAgIHNlbGYuX2Jyb2tlci5ydW5fbWVzc2FnZV9sb29wKCkKKyAgICAgICAgd29ya2VyLmpv
aW4oMC41KQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmlzX2RvbmUoKSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRGYWxzZSh3b3JrZXIuaXNfYWxpdmUoKSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbHMoc2VsZi5fZXhjZXB0aW9uWzBdLCBWYWx1ZUVycm9yKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFscyhzZWxmLl9leGNlcHRpb25bMV0sCisgICAgICAgICAgICAiVGVzdFdvcmtlci8w
OiByZWNlaXZlZCBtZXNzYWdlICd1bmtub3duJyBpdCBjb3VsZG4ndCBoYW5kbGUiKQorCisKK2Ns
YXNzIElubGluZUJyb2tlclRlc3RzKF9UZXN0c01peGluLCB1bml0dGVzdC5UZXN0Q2FzZSk6Cisg
ICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBfVGVzdHNNaXhpbi5zZXRVcChzZWxmKQorICAg
ICAgICBzZWxmLl93b3JrZXJfbW9kZWwgPSAnaW5saW5lJworCisgICAgZGVmIHRlc3RfbG9nX3dl
ZGdlZF93b3JrZXIoc2VsZik6CisgICAgICAgIHNlbGYubWFrZV9icm9rZXIoKQorICAgICAgICB3
b3JrZXIgPSBzZWxmLl9icm9rZXIuc3RhcnRfd29ya2VyKDApCisgICAgICAgIHNlbGYuYXNzZXJ0
UmFpc2VzKEFzc2VydGlvbkVycm9yLCB3b3JrZXIubG9nX3dlZGdlZF93b3JrZXIsIE5vbmUpCisK
KworY2xhc3MgTXVsdGlQcm9jZXNzQnJva2VyVGVzdHMoX1Rlc3RzTWl4aW4sIHVuaXR0ZXN0LlRl
c3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIF9UZXN0c01peGluLnNldFVw
KHNlbGYpCisgICAgICAgIGlmIF9tdWx0aXByb2Nlc3NpbmdfaXNfYXZhaWxhYmxlOgorICAgICAg
ICAgICAgc2VsZi5fd29ya2VyX21vZGVsID0gJ3Byb2Nlc3NlcycKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIHNlbGYuX3dvcmtlcl9tb2RlbCA9IE5vbmUKKworICAgIGRlZiBxdWV1ZShzZWxm
KToKKyAgICAgICAgcmV0dXJuIF9NdWx0aXByb2Nlc3NpbmdfUXVldWUoKQorCisKK2NsYXNzIFRo
cmVhZGVkQnJva2VyVGVzdHMoX1Rlc3RzTWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBk
ZWYgcXVldWUoc2VsZik6CisgICAgICAgIHJldHVybiBRdWV1ZS5RdWV1ZSgpCisKKyAgICBkZWYg
c2V0VXAoc2VsZik6CisgICAgICAgIF9UZXN0c01peGluLnNldFVwKHNlbGYpCisgICAgICAgIHNl
bGYuX3dvcmtlcl9tb2RlbCA9ICd0aHJlYWRzJworCisKK2NsYXNzIEZ1bmN0aW9uc1Rlc3QodW5p
dHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2ZpbmRfdGhyZWFkX3N0YWNrX2ZvdW5kKHNl
bGYpOgorICAgICAgICBpZCwgc3RhY2sgPSBzeXMuX2N1cnJlbnRfZnJhbWVzKCkuaXRlbXMoKVsw
XQorICAgICAgICBmb3VuZF9zdGFjayA9IG1hbmFnZXJfd29ya2VyX2Jyb2tlci5fZmluZF90aHJl
YWRfc3RhY2soaWQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZm91bmRfc3RhY2ssIE5v
bmUpCisKKyAgICBkZWYgdGVzdF9maW5kX3RocmVhZF9zdGFja19ub3RfZm91bmQoc2VsZik6Cisg
ICAgICAgIGZvdW5kX3N0YWNrID0gbWFuYWdlcl93b3JrZXJfYnJva2VyLl9maW5kX3RocmVhZF9z
dGFjaygwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvdW5kX3N0YWNrLCBOb25lKQorCisg
ICAgZGVmIHRlc3RfbG9nX3N0YWNrKHNlbGYpOgorICAgICAgICBpZCwgc3RhY2sgPSBzeXMuX2N1
cnJlbnRfZnJhbWVzKCkuaXRlbXMoKVswXQorICAgICAgICBvYyA9IG91dHB1dGNhcHR1cmUuT3V0
cHV0Q2FwdHVyZSgpCisgICAgICAgICMgRklYTUU6IHZlcmlmeSBvdXRwdXQ/CisgICAgICAgIG9j
LmNhcHR1cmVfb3V0cHV0KCkKKyAgICAgICAgbWFuYWdlcl93b3JrZXJfYnJva2VyLl9sb2dfc3Rh
Y2soc3RhY2spCisgICAgICAgIG9jLnJlc3RvcmVfb3V0cHV0KCkKKworICAgIGRlZiB0ZXN0X3J1
bnRpbWVfb3B0aW9ucyhzZWxmKToKKyAgICAgICAgb3B0aW9uX2xpc3QgPSBtYW5hZ2VyX3dvcmtl
cl9icm9rZXIucnVudGltZV9vcHRpb25zKCkKKyAgICAgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0
aW9uUGFyc2VyKG9wdGlvbl9saXN0PW9wdGlvbl9saXN0KQorICAgICAgICBvcHRpb25zLCBhcmdz
ID0gcGFyc2VyLnBhcnNlX2FyZ3MoW10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcHRpb25z
KQorCisKK2NsYXNzIEludGVyZmFjZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVGhl
c2UgdGVzdHMgbW9zdGx5IGV4aXN0IHRvIHBhY2lmeSBjb3ZlcmFnZS4KKworICAgICMgRklYTUU6
IFRoZXJlIG11c3QgYmUgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMgYW5kIGFsc28gdmVyaWZ5Cisg
ICAgIyB0aGF0IGNsYXNzZXMgZG8gaW1wbGVtZW50IGV2ZXJ5IGFic3RyYWN0IG1ldGhvZCBpbiBh
biBpbnRlcmZhY2UuCisgICAgZGVmIHRlc3RfYWJzdHJhY3RtYW5hZ2VyX2lzX2Fic3RyYWN0KHNl
bGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBhbGwgdGhlIGJhc2UgY2xhc3MgbWV0aG9kcyBhcmUg
YWJzdHJhY3QgYW5kIGhhdmUgdGhlCisgICAgICAgICMgc2lnbmF0dXJlIHdlIGV4cGVjdC4KKyAg
ICAgICAgYnJva2VyID0gbWFrZV9icm9rZXIoc2VsZiwgJ2lubGluZScpCisgICAgICAgIG9iaiA9
IG1hbmFnZXJfd29ya2VyX2Jyb2tlci5fQWJzdHJhY3RNYW5hZ2VyKGJyb2tlci5fYnJva2VyLCBO
b25lLCBzZWxmLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRl
ZEVycm9yLCBvYmouX21ha2Vfd29ya2VyX2Nvbm5lY3Rpb24pCisKKyAgICBkZWYgdGVzdF93b3Jr
ZXJjb25uZWN0aW9uX2lzX2Fic3RyYWN0KHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBhbGwg
dGhlIGJhc2UgY2xhc3MgbWV0aG9kcyBhcmUgYWJzdHJhY3QgYW5kIGhhdmUgdGhlCisgICAgICAg
ICMgc2lnbmF0dXJlIHdlIGV4cGVjdC4KKyAgICAgICAgYnJva2VyID0gbWFrZV9icm9rZXIoc2Vs
ZiwgJ2lubGluZScpCisgICAgICAgIG9iaiA9IG1hbmFnZXJfd29ya2VyX2Jyb2tlci5fV29ya2Vy
Q29ubmVjdGlvbihicm9rZXIuX2Jyb2tlcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90
SW1wbGVtZW50ZWRFcnJvciwgb2JqLnN0YXJ0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhO
b3RJbXBsZW1lbnRlZEVycm9yLCBvYmoucnVuKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhO
b3RJbXBsZW1lbnRlZEVycm9yLCBvYmouY2FuY2VsKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNl
cyhOb3RJbXBsZW1lbnRlZEVycm9yLCBvYmouaXNfYWxpdmUpCisgICAgICAgIHNlbGYuYXNzZXJ0
UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIG9iai5qb2luLCBOb25lKQorICAgICAgICBzZWxm
LmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBvYmoubG9nX3dlZGdlZF93b3JrZXIs
IE5vbmUpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWlu
KCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL21lc3NhZ2VfYnJva2VyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWVzc2FnZV9icm9rZXIucHkKaW5kZXggZDk5ZmNlZDc3
YzFkMTVlOTFiNjkxOTYxZWEwNWIyN2RkZGNiYTVhOC4uNzk2NzBkMzg4ZTgzOTI5MDIwMjk3YmI0
NWM5MzBmOGJjMGM4NGFjYiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWVzc2FnZV9icm9rZXIucHkKKysrIGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWVzc2FnZV9icm9rZXIu
cHkKQEAgLTQxLDkgKzQxLDkgQEAgcmVxdWVzdGVkIGNvbmZpZ3VyYXRpb24uCiAiIiIKIAogaW1w
b3J0IGxvZ2dpbmcKLWltcG9ydCBzeXMKIGltcG9ydCB0aW1lCi1pbXBvcnQgdHJhY2ViYWNrCisK
K2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgc3RhY2tfdXRpbHMKIAogaW1wb3J0
IGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkCiAKQEAgLTE1Miw3ICsxNTIsNyBAQCBjbGFzcyBNdWx0
aVRocmVhZGVkQnJva2VyKFdvcmtlck1lc3NhZ2VCcm9rZXIpOgogICAgICAgICAgICAgICAgICAg
ICBzb21lX3RocmVhZF9pc19hbGl2ZSA9IFRydWUKICAgICAgICAgICAgICAgICAgICAgbmV4dF90
aW1lb3V0ID0gdGhyZWFkLm5leHRfdGltZW91dCgpCiAgICAgICAgICAgICAgICAgICAgIGlmIG5l
eHRfdGltZW91dCBhbmQgdCA+IG5leHRfdGltZW91dDoKLSAgICAgICAgICAgICAgICAgICAgICAg
IGxvZ193ZWRnZWRfd29ya2VyKHRocmVhZC5nZXROYW1lKCksIHRocmVhZC5pZCgpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhY2tfdXRpbHMubG9nX3dlZGdlZF90aHJlYWQoX2xvZy5lcnJv
ciwgdGhyZWFkLmdldE5hbWUoKSwgdGhyZWFkLmlkKCkpCiAgICAgICAgICAgICAgICAgICAgICAg
ICB0aHJlYWQuY2xlYXJfbmV4dF90aW1lb3V0KCkKICAgICAgICAgICAgICAgICAgICAgICAgIHdl
ZGdlZF90aHJlYWRzLmFkZCh0aHJlYWQpCiAKQEAgLTE3NiwzMCArMTc2LDMgQEAgY2xhc3MgTXVs
dGlUaHJlYWRlZEJyb2tlcihXb3JrZXJNZXNzYWdlQnJva2VyKToKICAgICAgICAgdGhyZWFkcyA9
IHNlbGYuX3RocmVhZHMoKQogICAgICAgICBmb3IgdGhyZWFkIGluIHRocmVhZHM6CiAgICAgICAg
ICAgICB0aHJlYWQuY2FuY2VsKCkKLQotCi1kZWYgbG9nX3dlZGdlZF93b3JrZXIobmFtZSwgaWQp
OgotICAgICIiIkxvZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZ2l2ZW4gd29ya2VyIHN0YXRlLiIi
IgotICAgIHN0YWNrID0gX2ZpbmRfdGhyZWFkX3N0YWNrKGlkKQotICAgIGFzc2VydChzdGFjayBp
cyBub3QgTm9uZSkKLSAgICBfbG9nLmVycm9yKCIiKQotICAgIF9sb2cuZXJyb3IoIiVzICh0aWQg
JWQpIGlzIHdlZGdlZCIgJSAobmFtZSwgaWQpKQotICAgIF9sb2dfc3RhY2soc3RhY2spCi0gICAg
X2xvZy5lcnJvcigiIikKLQotCi1kZWYgX2ZpbmRfdGhyZWFkX3N0YWNrKGlkKToKLSAgICAiIiJS
ZXR1cm5zIGEgc3RhY2sgb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gZHVtcCBhIHN0YWNrIHRy
YWNlIGZvcgotICAgIHRoZSBnaXZlbiB0aHJlYWQgaWQgKG9yIE5vbmUgaWYgdGhlIGlkIGlzIG5v
dCBmb3VuZCkuIiIiCi0gICAgZm9yIHRocmVhZF9pZCwgc3RhY2sgaW4gc3lzLl9jdXJyZW50X2Zy
YW1lcygpLml0ZW1zKCk6Ci0gICAgICAgIGlmIHRocmVhZF9pZCA9PSBpZDoKLSAgICAgICAgICAg
IHJldHVybiBzdGFjawotICAgIHJldHVybiBOb25lCi0KLQotZGVmIF9sb2dfc3RhY2soc3RhY2sp
OgotICAgICIiIkxvZyBhIHN0YWNrIHRyYWNlIHRvIGxvZy5lcnJvcigpLiIiIgotICAgIGZvciBm
aWxlbmFtZSwgbGluZW5vLCBuYW1lLCBsaW5lIGluIHRyYWNlYmFjay5leHRyYWN0X3N0YWNrKHN0
YWNrKToKLSAgICAgICAgX2xvZy5lcnJvcignRmlsZTogIiVzIiwgbGluZSAlZCwgaW4gJXMnICUg
KGZpbGVuYW1lLCBsaW5lbm8sIG5hbWUpKQotICAgICAgICBpZiBsaW5lOgotICAgICAgICAgICAg
X2xvZy5lcnJvcignICAlcycgJSBsaW5lLnN0cmlwKCkpCmRpZmYgLS1naXQgYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tlcjIu
cHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9t
ZXNzYWdlX2Jyb2tlcjIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzVjMjE2MGYxMjhlOTA0YzMyMmI4NDlhZWVi
ZTg5ZjAxOTJkZDJkYQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2VfYnJva2VyMi5weQpAQCAtMCwwICsx
LDIwOSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3Ry
aWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIk1vZHVsZSBmb3IgaGFuZGxpbmcgbWVzc2Fn
aW5nIGZvciBydW4td2Via2l0LXRlc3RzLgorCitUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIGEgc2lt
cGxlIG1lc3NhZ2UgYnJva2VyIGFic3RyYWN0aW9uIHRoYXQgd2lsbCBiZQordXNlZCB0byBjb29y
ZGluYXRlIG1lc3NhZ2VzIGJldHdlZW4gdGhlIG1haW4gcnVuLXdlYmtpdC10ZXN0cyB0aHJlYWQK
Kyhha2EgVGVzdFJ1bm5lcikgYW5kIHRoZSBpbmRpdmlkdWFsIHdvcmtlciB0aHJlYWRzIChwcmV2
aW91c2x5IGtub3duIGFzCitkdW1wX3JlbmRlcl90cmVlX3RocmVhZHMpLgorCitUaGUgYnJva2Vy
IHNpbXBseSBkaXN0cmlidXRlcyBtZXNzYWdlcyBvbnRvIG5hbWVkIHF1ZXVlczsgdGhlIGFjdHVh
bAorcXVldWVzIHRoZW1zZWx2ZXMgYXJlIHByb3ZpZGVkIGJ5IHRoZSBjYWxsZXIsIGFzIHRoZSBx
dWV1ZSdzIGltcGxlbWVudGF0aW9uCityZXF1aXJlbWVudHMgdmFyaWVzIHZhcnkgZGVwZW5kaW5n
IG9uIHRoZSBkZXNpcmVkIGNvbmN1cnJlbmN5IG1vZGVsCisobm9uZS90aHJlYWRzL3Byb2Nlc3Nl
cykuCisKK0luIG9yZGVyIGZvciBzaGFyZWQtbm90aGluZyBtZXNzYWdpbmcgYmV0d2VlbiBwcm9j
ZXNzaW5nIHRvIGJlIHBvc3NpYmxlLAorTWVzc2FnZXMgbXVzdCBiZSBwaWNrbGFibGUuCisKK1Ro
ZSBtb2R1bGUgZGVmaW5lcyBvbmUgaW50ZXJmYWNlIGFuZCB0d28gY2xhc3Nlcy4gQ2FsbGVycyBv
ZiB0aGlzIHBhY2thZ2UKK211c3QgaW1wbGVtZW50IHRoZSBCcm9rZXJDbGllbnQgaW50ZXJmYWNl
LCBhbmQgbW9zdCBjYWxsZXJzIHdpbGwgY3JlYXRlCitCcm9rZXJDb25uZWN0aW9ucyBhcyB3ZWxs
IGFzIEJyb2tlcnMuCisKK1RoZSBjbGFzc2VzIHJlbGF0ZSB0byBlYWNoIG90aGVyIGFzOgorCisg
ICAgVGVzdFJ1bm5lciAgICAgLS0tLS0tPiAgICBCcm9rZXJDb25uZWN0aW9uCisgICAgICAgICAg
ICAgICAgICAgICAgIDwgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIFwgICAg
ICAgICAgdgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCcm9rZXIKKworKFRlc3RS
dW5uZXIgbmV2ZXIgY2FsbHMgYnJva2VyIGRpcmVjdGx5IGFmdGVyIGl0IGlzIGNyZWF0ZWQsIG9u
bHkKK0Jyb2tlckNvbm5lY3Rpb24uICBCcm9rZXJDb25uZWN0aW9uIHBhc3NlcyBhIHJlZmVyZW5j
ZSB0byBUZXN0UnVubmVyIHRvIEJyb2tlciwKK2FuZCBCcm9rZXIgb25seSBpbnZva2VzIHRoYXQg
cmVmZXJlbmNlLCBuZXZlciB0YWxraW5nIGRpcmVjdGx5IHRvCitCcm9rZXJDb25uZWN0aW9uKS4K
KworIiIiCisKK2ltcG9ydCBjUGlja2xlCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IFF1ZXVlCitp
bXBvcnQgdGltZQorCisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKKworCitj
bGFzcyBCcm9rZXJDbGllbnQob2JqZWN0KToKKyAgICAiIiJBYnN0cmFjdCBiYXNlIGNsYXNzIC8g
aW50ZXJmYWNlIHRoYXQgYWxsIG1lc3NhZ2UgYnJva2VyIGNsaWVudHMgbXVzdAorICAgIGltcGxl
bWVudC4gSW4gYWRkaXRpb24gdG8gdGhlIG1ldGhvZHMgYmVsb3csIGJ5IGNvbnZlbnRpb24gY2xp
ZW50cworICAgIGltcGxlbWVudCByb3V0aW5lcyBvZiB0aGUgc2lnbmF0dXJlIHR5cGUKKworICAg
ICAgICBoYW5kbGVfTUVTU0FHRV9OQU1FKHNlbGYsIHNyYywgLi4uKToKKworICAgIHdoZXJlIE1F
U1NBR0VfTkFNRSBtYXRjaGVzIHRoZSBzdHJpbmcgcGFzc2VkIHRvIHBvc3RfbWVzc2FnZSgpLCBh
bmQKKyAgICBzcmMgaW5kaWNhdGVzIHRoZSBuYW1lIG9mIHRoZSBzZW5kZXIuIElmIHRoZSBtZXNz
YWdlIGNvbnRhaW5zIHZhbHVlcyBpbgorICAgIHRoZSBtZXNzYWdlIGJvZHksIHRob3NlIHdpbGwg
YmUgcHJvdmlkZWQgYXMgb3B0cGFyYW1zLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJy
b2tlcl9jb25uZWN0aW9uLCB3b3JrZXJfbnVtYmVyLCBvcHRpb25zLCAqKmt3YXJncyk6CisgICAg
ICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBjYW5jZWwoc2VsZik6Cisg
ICAgICAgICIiIkNhbGxlZCAoaWYgcG9zc2libGUpIHRvIG5vdGlmeSB0aGUgd29ya2VyIHRoYXQg
aXQgaGFzIGJlZW4gYWJvcnRlZC4KKworICAgICAgICBPbmx5IHdvcmtlcnMgbmVlZCBpbXBsZW1l
bnQgdGhpcyBtZXRob2QuIFdvcmtlcnMgY2Fubm90IHJlbHkgb24gdGhpcworICAgICAgICBtZXRo
b2QgYWx3YXlzIGJlaW5nIGNhbGxlZC4gRm9yIGV4YW1wbGUsIHdvcmtlcnMgcnVubmluZyBpbiB0
aGVpcgorICAgICAgICBvd24gcHJvY2Vzc2VzIG1heSBiZSBraWxsZWQgZGlyZWN0bHkgaW5zdGVh
ZCBvZiBpbnZva2luZyB0aGlzIG1ldGhvZAorICAgICAgICBhbmQgd2FpdGluZyBmb3IgdGhlIHRo
ZSB3b3JrZXIgdG8gZXhpdC4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgor
CisgICAgZGVmIGlzX2RvbmUoc2VsZik6CisgICAgICAgICIiIkNhbGxlZCBmcm9tIGluc2lkZSBy
dW5fbWVzc2FnZV9sb29wKCkgdG8gaW5kaWNhdGUgd2hldGhlciB0byBleGl0LiIiIgorICAgICAg
ICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgbmFtZShzZWxmKToKKyAgICAg
ICAgIiIiUmV0dXJuIGEgbmFtZSB0aGF0IGlkZW50aWZpZXMgdGhlIHdvcmtlciBvciBtYW5hZ2Vy
LiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgcnVuKHNl
bGYsIHBvcnQpOgorICAgICAgICAiIiJPbmx5IHdvcmtlcnMgbmVlZCBpbXBsZW1lbnQgdGhpcyBt
ZXRob2QuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworCitjbGFzcyBC
cm9rZXIob2JqZWN0KToKKyAgICAiIiJCcm9rZXJzIHByb3ZpZGUgdGhlIGJhc2ljIG1vZGVsIG9m
IG5hbWVkIHF1ZXVlcy4gQ2xpZW50cyBjYW4gcG9zdCBhCisgICAgbWVzc2FnZSB0byBhbnkgbmFt
ZSB1c2luZyBwb3N0X21lc3NhZ2UoKSwgYW5kIGNhbiBwcm9jZXNzIG1lc3NhZ2VzIGZyb20KKyAg
ICBvbmUgbmFtZSBhdCBhIHRpbWUgdXNpbmcgcnVuX21lc3NhZ2VfbG9vcCgpLiIiIgorCisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIG9wdGlvbnMsIHF1ZXVlX21ha2VyKToKKyAgICAgICAgIiIiQXJn
czoKKyAgICAgICAgICAgIG9wdGlvbnM6IGEgcnVudGltZSBvcHRpb24gY2xhc3MgZnJvbSBvcHRw
YXJzZQorICAgICAgICAgICAgcXVldWVfbWFrZXI6IGEgZmFjdG9yeSBtZXRob2QgdGhhdCByZXR1
cm5zIG9iamVjdHMgaW1wbGVtZW50aW5nIGEKKyAgICAgICAgICAgICAgICBRdWV1ZSBpbnRlcmZh
Y2UgKHB1dCgpL2dldCgpKS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX29wdGlvbnMgPSBv
cHRpb25zCisgICAgICAgIHNlbGYuX3F1ZXVlX21ha2VyID0gcXVldWVfbWFrZXIKKyAgICAgICAg
c2VsZi5fdG9waWNzID0ge30KKworICAgIGRlZiBhZGRfdG9waWMoc2VsZiwgdG9waWNfbmFtZSk6
CisgICAgICAgIGlmIHRvcGljX25hbWUgbm90IGluIHNlbGYuX3RvcGljczoKKyAgICAgICAgICAg
IHNlbGYuX3RvcGljc1t0b3BpY19uYW1lXSA9IHNlbGYuX3F1ZXVlX21ha2VyKCkKKworICAgIGRl
ZiBfZ2V0X3F1ZXVlX2Zvcl90b3BpYyhzZWxmLCB0b3BpY19uYW1lKToKKyAgICAgICAgcmV0dXJu
IHNlbGYuX3RvcGljc1t0b3BpY19uYW1lXQorCisgICAgZGVmIHBvc3RfbWVzc2FnZShzZWxmLCBj
bGllbnQsIHRvcGljX25hbWUsIG1lc3NhZ2VfbmFtZSwgKm9wdGFyZ3MpOgorICAgICAgICAiIiJQ
b3N0IGEgbWVzc2FnZSB0byB0aGUgYXBwcm9wcmlhdGUgdG9waWMgbmFtZS4KKworICAgICAgICBN
ZXNzYWdlcyBoYXZlIGEgbmFtZSBhbmQgYSB0dXBsZSBvZiBvcHRpb25hbCBhcmd1bWVudHMuIEJv
dGggbXVzdCBiZSBwaWNrbGFibGUuIiIiCisgICAgICAgIG1lc3NhZ2UgPSBfTWVzc2FnZShjbGll
bnQubmFtZSgpLCB0b3BpY19uYW1lLCBtZXNzYWdlX25hbWUsIG9wdGFyZ3MpCisgICAgICAgIHF1
ZXVlID0gc2VsZi5fZ2V0X3F1ZXVlX2Zvcl90b3BpYyh0b3BpY19uYW1lKQorICAgICAgICBxdWV1
ZS5wdXQoX01lc3NhZ2UuZHVtcHMobWVzc2FnZSkpCisKKyAgICBkZWYgcnVuX21lc3NhZ2VfbG9v
cChzZWxmLCB0b3BpY19uYW1lLCBjbGllbnQsIGRlbGF5X3NlY3M9Tm9uZSk6CisgICAgICAgICIi
Ikxvb3AgcHJvY2Vzc2luZyBtZXNzYWdlcyB1bnRpbCBjbGllbnQuaXNfZG9uZSgpIG9yIGRlbGF5
IHBhc3Nlcy4iIiIKKyAgICAgICAgYXNzZXJ0IGRlbGF5X3NlY3MgaXMgTm9uZSBvciBkZWxheV9z
ZWNzID4gMAorICAgICAgICBzZWxmLl9ydW5fbG9vcCh0b3BpY19uYW1lLCBjbGllbnQsIFRydWUs
IGRlbGF5X3NlY3MpCisKKyAgICBkZWYgcnVuX2FsbF9wZW5kaW5nKHNlbGYsIHRvcGljX25hbWUs
IGNsaWVudCk6CisgICAgICAgICIiIlByb2Nlc3MgbWVzc2FnZXMgdW50aWwgY2xpZW50LmlzX2Rv
bmUoKSBvciBjYWxsZXIgd291bGQgYmxvY2suIiIiCisgICAgICAgIHNlbGYuX3J1bl9sb29wKHRv
cGljX25hbWUsIGNsaWVudCwgYmxvY2s9RmFsc2UsIGRlbGF5X3NlY3M9Tm9uZSkKKworICAgIGRl
ZiBfcnVuX2xvb3Aoc2VsZiwgdG9waWNfbmFtZSwgY2xpZW50LCBibG9jaywgZGVsYXlfc2Vjcyk6
CisgICAgICAgIHF1ZXVlID0gc2VsZi5fZ2V0X3F1ZXVlX2Zvcl90b3BpYyh0b3BpY19uYW1lKQor
ICAgICAgICB3aGlsZSBub3QgY2xpZW50LmlzX2RvbmUoKToKKyAgICAgICAgICAgIHRyeToKKyAg
ICAgICAgICAgICAgICBzID0gcXVldWUuZ2V0KGJsb2NrLCBkZWxheV9zZWNzKQorICAgICAgICAg
ICAgZXhjZXB0IFF1ZXVlLkVtcHR5OgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAg
ICAgbXNnID0gX01lc3NhZ2UubG9hZHMocykKKyAgICAgICAgICAgIHNlbGYuX2Rpc3BhdGNoX21l
c3NhZ2UobXNnLCBjbGllbnQpCisKKyAgICBkZWYgX2Rpc3BhdGNoX21lc3NhZ2Uoc2VsZiwgbWVz
c2FnZSwgY2xpZW50KToKKyAgICAgICAgaWYgbm90IGhhc2F0dHIoY2xpZW50LCAnaGFuZGxlXycg
KyBtZXNzYWdlLm5hbWUpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAg
ICAgICAgICIlczogcmVjZWl2ZWQgbWVzc2FnZSAnJXMnIGl0IGNvdWxkbid0IGhhbmRsZSIgJQor
ICAgICAgICAgICAgICAgKGNsaWVudC5uYW1lKCksIG1lc3NhZ2UubmFtZSkpCisgICAgICAgIG9w
dGFyZ3MgPSBtZXNzYWdlLmJvZHkKKyAgICAgICAgbWVzc2FnZV9oYW5kbGVyID0gZ2V0YXR0cihj
bGllbnQsICdoYW5kbGVfJyArIG1lc3NhZ2UubmFtZSkKKyAgICAgICAgbWVzc2FnZV9oYW5kbGVy
KG1lc3NhZ2Uuc3JjLCAqb3B0YXJncykKKworCitjbGFzcyBfTWVzc2FnZShvYmplY3QpOgorICAg
IEBzdGF0aWNtZXRob2QKKyAgICBkZWYgbG9hZHMoc3RyKToKKyAgICAgICAgb2JqID0gY1BpY2ts
ZS5sb2FkcyhzdHIpCisgICAgICAgIGFzc2VydChpc2luc3RhbmNlKG9iaiwgX01lc3NhZ2UpKQor
ICAgICAgICByZXR1cm4gb2JqCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3JjLCB0b3BpY19u
YW1lLCBtZXNzYWdlX25hbWUsIG1lc3NhZ2VfYm9keSk6CisgICAgICAgIHNlbGYuc3JjID0gc3Jj
CisgICAgICAgIHNlbGYudG9waWNfbmFtZSA9IHRvcGljX25hbWUKKyAgICAgICAgc2VsZi5uYW1l
ID0gbWVzc2FnZV9uYW1lCisgICAgICAgIHNlbGYuYm9keSA9IG1lc3NhZ2VfYm9keQorCisgICAg
ZGVmIGR1bXBzKHNlbGYpOgorICAgICAgICByZXR1cm4gY1BpY2tsZS5kdW1wcyhzZWxmKQorCisg
ICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gKCJfTWVzc2FnZShmcm9tPScl
cycsIHRvcGljX25hbWU9JyVzJywgbWVzc2FnZV9uYW1lPSclcycpIiAlCisgICAgICAgICAgICAg
ICAgKHNlbGYuc3JjLCBzZWxmLnRvcGljX25hbWUsIHNlbGYubmFtZSkpCisKKworY2xhc3MgQnJv
a2VyQ29ubmVjdGlvbihvYmplY3QpOgorICAgICIiIkJyb2tlckNvbm5lY3Rpb24gcHJvdmlkZXMg
YSBjb25uZWN0aW9uLW9yaWVudGVkIGZhY2FkZSBvbiB0b3Agb2YgYSBCcm9rZXIsCisgICAgc28g
dGhhdCBjYWxsZXJzIGRvbid0IGhhdmUgdG8gcmVwZWF0ZWRseSBwYXNzIHRoZSBzYW1lIHRvcGlj
IG5hbWVzIG92ZXIgYW5kIG92ZXIuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2Vy
LCBydW5fdG9waWMsIHBvc3RfdG9waWMpOgorICAgICAgICAiIiJDcmVhdGUgYSBCcm9rZXJDb25u
ZWN0aW9uIG9uIHRvcCBvZiBhIEJyb2tlci4gTm90ZSB0aGF0IHRoZSBCcm9rZXIKKyAgICAgICAg
aXMgcGFzc2VkIGluIHJhdGhlciB0aGFuIGNyZWF0ZWQgc28gdGhhdCBhIHNpbmdsZSBCcm9rZXIg
Y2FuIGJlIHVzZWQKKyAgICAgICAgYnkgbXVsdGlwbGUgQnJva2VyQ29ubmVjdGlvbnMuIiIiCisg
ICAgICAgIHNlbGYuX2Jyb2tlciA9IGJyb2tlcgorICAgICAgICBzZWxmLl9wb3N0X3RvcGljID0g
cG9zdF90b3BpYworICAgICAgICBzZWxmLl9ydW5fdG9waWMgPSBydW5fdG9waWMKKyAgICAgICAg
YnJva2VyLmFkZF90b3BpYyhydW5fdG9waWMpCisgICAgICAgIGJyb2tlci5hZGRfdG9waWMocG9z
dF90b3BpYykKKworICAgIGRlZiBjbGllbnQoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxl
bWVudGVkRXJyb3IKKworICAgIGRlZiBydW5fbWVzc2FnZV9sb29wKHNlbGYsIGRlbGF5X3NlY3M9
Tm9uZSk6CisgICAgICAgIHNlbGYuX2Jyb2tlci5ydW5fbWVzc2FnZV9sb29wKHNlbGYuX3J1bl90
b3BpYywgc2VsZi5jbGllbnQoKSwgZGVsYXlfc2VjcykKKworICAgIGRlZiBwb3N0X21lc3NhZ2Uo
c2VsZiwgbWVzc2FnZV9uYW1lLCAqbWVzc2FnZV9hcmdzKToKKyAgICAgICAgc2VsZi5fYnJva2Vy
LnBvc3RfbWVzc2FnZShzZWxmLmNsaWVudCgpLCBzZWxmLl9wb3N0X3RvcGljLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VfbmFtZSwgKm1lc3NhZ2VfYXJncykKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNr
YWdlL21lc3NhZ2VfYnJva2VyMl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2VfYnJva2VyMl91bml0dGVzdC5weQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi42MmZmNzJmN2Y5NmQyNDQ0NDk0OGEwYTgzYTJkZjdiNzBkMTFiM2M5Ci0tLSAv
ZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0
X3BhY2thZ2UvbWVzc2FnZV9icm9rZXIyX3VuaXR0ZXN0LnB5CkBAIC0wLDAgKzEsOTcgQEAKKyMg
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisj
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisj
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
IyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSB3ZWJraXRweS5sYXlvdXRf
dGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IG1lc3NhZ2VfYnJva2VyMgorCisjIFRoaXMgZmls
ZSBleGlzdHMgdG8gdGVzdCByb3V0aW5lcyB0aGF0IGFyZW4ndCBuZWNlc3NhcmlseSBjb3ZlcmVk
IGVsc2V3aGVyZTsKKyMgbW9zdCBvZiB0aGUgdGVzdGluZyBvZiBtZXNzYWdlX2Jyb2tlcjIgd2ls
bCBiZSBjb3ZlcmVkIHVuZGVyIHRoZSB0ZXN0cyBpbgorIyB0aGUgbWFuYWdlcl93b3JrZXJfYnJv
a2VyIG1vZHVsZS4KKworCitjbGFzcyBNZXNzYWdlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Cisg
ICAgZGVmIHRlc3RfX25vX2JvZHkoc2VsZik6CisgICAgICAgIG1zZyA9IG1lc3NhZ2VfYnJva2Vy
Mi5fTWVzc2FnZSgnc3JjJywgJ3RvcGljX25hbWUnLCAnbWVzc2FnZV9uYW1lJywgTm9uZSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIobXNnKSkKKyAgICAgICAgcyA9IG1zZy5kdW1wcygp
CisgICAgICAgIG5ld19tc2cgPSBtZXNzYWdlX2Jyb2tlcjIuX01lc3NhZ2UubG9hZHMocykKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdfbXNnLm5hbWUsICdtZXNzYWdlX25hbWUnKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld19tc2cuYm9keSwgTm9uZSkKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChuZXdfbXNnLnRvcGljX25hbWUsICd0b3BpY19uYW1lJykKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChuZXdfbXNnLnNyYywgJ3NyYycpCisKKyAgICBkZWYgdGVzdF9fYm9keShz
ZWxmKToKKyAgICAgICAgbXNnID0gbWVzc2FnZV9icm9rZXIyLl9NZXNzYWdlKCdzcmMnLCAndG9w
aWNfbmFtZScsICdtZXNzYWdlX25hbWUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoJ2JvZHknLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIobXNnKSkK
KyAgICAgICAgcyA9IG1zZy5kdW1wcygpCisgICAgICAgIG5ld19tc2cgPSBtZXNzYWdlX2Jyb2tl
cjIuX01lc3NhZ2UubG9hZHMocykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdfbXNnLm5h
bWUsICdtZXNzYWdlX25hbWUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld19tc2cuYm9k
eSwgKCdib2R5JywgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3X21zZy50b3BpY19u
YW1lLCAndG9waWNfbmFtZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3X21zZy5zcmMs
ICdzcmMnKQorCisKK2NsYXNzIEludGVyZmFjZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAg
ICMgVGhlc2UgdGVzdHMgbW9zdGx5IGV4aXN0IHRvIHBhY2lmeSBjb3ZlcmFnZS4KKworICAgICMg
RklYTUU6IFRoZXJlIG11c3QgYmUgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMgYW5kIGFsc28gdmVy
aWZ5CisgICAgIyB0aGF0IGNsYXNzZXMgZG8gaW1wbGVtZW50IGV2ZXJ5IGFic3RyYWN0IG1ldGhv
ZCBpbiBhbiBpbnRlcmZhY2UuCisKKyAgICBkZWYgdGVzdF9jbGllbnRpbnRlcmZhY2VfaXNfYWJz
dHJhY3Qoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IHdlIGNhbid0IGNyZWF0ZSBhbiBpbnN0
YW5jZSBkaXJlY3RseS4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRF
cnJvciwgbWVzc2FnZV9icm9rZXIyLkJyb2tlckNsaWVudCwKKyAgICAgICAgICAgIE5vbmUsIE5v
bmUsIE5vbmUpCisKKyAgICAgICAgY2xhc3MgVGVzdENsaWVudChtZXNzYWdlX2Jyb2tlcjIuQnJv
a2VyQ2xpZW50KToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqb3B0YXJncyk6Cisg
ICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICMgVGVzdCB0aGF0IGFsbCB0aGUgYmFzZSBj
bGFzcyBtZXRob2RzIGFyZSBhYnN0cmFjdCBhbmQgaGF2ZSB0aGUKKyAgICAgICAgIyBzaWduYXR1
cmUgd2UgZXhwZWN0LgorICAgICAgICBvYmogPSBUZXN0Q2xpZW50KCkKKyAgICAgICAgc2VsZi5h
c3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgb2JqLmNhbmNlbCkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgb2JqLmlzX2RvbmUpCisgICAgICAg
IHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIG9iai5uYW1lKQorICAgICAg
ICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBvYmoucnVuLCBOb25lKQor
CisgICAgZGVmIHRlc3RfYnJva2VyY29ubmVjdGlvbl9pc19hYnN0cmFjdChzZWxmKToKKyAgICAg
ICAgY2xhc3MgVGVzdEJyb2tlckNvbm5lY3Rpb24obWVzc2FnZV9icm9rZXIyLkJyb2tlckNvbm5l
Y3Rpb24pOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsICpvcHRhcmdzKToKKyAgICAg
ICAgICAgICAgICBwYXNzCisKKyAgICAgICAgIyBUZXN0IHRoYXQgYWxsIHRoZSBiYXNlIGNsYXNz
IG1ldGhvZHMgYXJlIGFic3RyYWN0IGFuZCBoYXZlIHRoZQorICAgICAgICAjIHNpZ25hdHVyZSB3
ZSBleHBlY3QuCisgICAgICAgIGJyb2tlciA9IG1lc3NhZ2VfYnJva2VyMi5Ccm9rZXIoTm9uZSwg
Tm9uZSkKKyAgICAgICAgb2JqID0gVGVzdEJyb2tlckNvbm5lY3Rpb24oYnJva2VyLCAiZm9vIiwg
ImJhciIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIG9i
ai5jbGllbnQpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5t
YWluKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL21lc3NhZ2VfYnJva2VyX3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWVzc2FnZV9icm9rZXJfdW5pdHRl
c3QucHkKaW5kZXggYWUyMTU2M2VmMDNlNWVmMjZhMDM4YWJjNzU2NzNiN2QxNTVkZWNkMC4uZjRj
YjVkMjc1ODI0ODkzYmM2OWViYTFlZDJhNTViYmJmNDM2ZmVkNiAxMDA2NDQKLS0tIGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWVzc2FnZV9icm9r
ZXJfdW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bGF5b3V0X3BhY2thZ2UvbWVzc2FnZV9icm9rZXJfdW5pdHRlc3QucHkKQEAgLTkwLDcgKzkwLDYg
QEAgY2xhc3MgVGVzdFRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKICAgICBkZWYgY2xlYXJfbmV4
dF90aW1lb3V0KHNlbGYpOgogICAgICAgICBzZWxmLl9uZXh0X3RpbWVvdXQgPSBOb25lCiAKLQog
Y2xhc3MgVGVzdEhhbmRsZXIobG9nZ2luZy5IYW5kbGVyKToKICAgICBkZWYgX19pbml0X18oc2Vs
ZiwgYXN0cmVhbSk6CiAgICAgICAgIGxvZ2dpbmcuSGFuZGxlci5fX2luaXRfXyhzZWxmKQpAQCAt
MTU3LDE1ICsxNTYsNiBAQCBjbGFzcyBNdWx0aVRocmVhZGVkQnJva2VyVGVzdCh1bml0dGVzdC5U
ZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfZXhjZXB0aW9uKHNlbGYpOgogICAgICAgICBzZWxmLmFz
c2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnJ1bl9vbmVfdGhyZWFkLCAnRXhjZXB0aW9uJykK
IAotICAgIGRlZiB0ZXN0X2ZpbmRfdGhyZWFkX3N0YWNrX2ZvdW5kKHNlbGYpOgotICAgICAgICBp
ZCwgc3RhY2sgPSBzeXMuX2N1cnJlbnRfZnJhbWVzKCkuaXRlbXMoKVswXQotICAgICAgICBmb3Vu
ZF9zdGFjayA9IG1lc3NhZ2VfYnJva2VyLl9maW5kX3RocmVhZF9zdGFjayhpZCkKLSAgICAgICAg
c2VsZi5hc3NlcnROb3RFcXVhbChmb3VuZF9zdGFjaywgTm9uZSkKLQotICAgIGRlZiB0ZXN0X2Zp
bmRfdGhyZWFkX3N0YWNrX25vdF9mb3VuZChzZWxmKToKLSAgICAgICAgZm91bmRfc3RhY2sgPSBt
ZXNzYWdlX2Jyb2tlci5fZmluZF90aHJlYWRfc3RhY2soMCkKLSAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChmb3VuZF9zdGFjaywgTm9uZSkKLQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgog
ICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9ydW5uZXIyLnB5IGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9ydW5uZXIyLnB5Cmlu
ZGV4IGViNzg3NTI1NWMzYzNjMTBjYzY4MWU1YmQxZmU4MDFlMzgxOGNiZjcuLjZkOTkyYWQ4ZTNm
NzI5ZmRlNDhjMjE2ZThkZWQ5YzliYWYzMTIwYWEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfcnVubmVyMi5weQorKysg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0
X3J1bm5lcjIucHkKQEAgLTM1LDE5ICszNSwxODQgQEAgdGVzdHMgYW5kIHRoZW4gcHJvY2VzcyB0
aGUgY29tcGxldGlvbiBtZXNzYWdlcyBhY2NvcmRpbmdseS4KICIiIgogCiBpbXBvcnQgbG9nZ2lu
ZworaW1wb3J0IHRpbWUKIAorZnJvbSB3ZWJraXRweS50b29sIGltcG9ydCBncmFtbWFyCisKK2lt
cG9ydCBtYW5hZ2VyX3dvcmtlcl9icm9rZXIKIGltcG9ydCB0ZXN0X3J1bm5lcgoraW1wb3J0IHdv
cmtlcgogCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCiAKIAorY2xhc3MgX1dv
cmtlclN0YXRlKG9iamVjdCk6CisgICAgIiIiQSBjbGFzcyBmb3IgdGhlIFRlc3RSdW5uZXIvbWFu
YWdlciB0byB1c2UgdG8gdHJhY2sgdGhlIGN1cnJlbnQgc3RhdGUKKyAgICBvZiB0aGUgd29ya2Vy
cy4iIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbnVtYmVyLCB3b3JrZXIpOgorICAgICAgICBz
ZWxmLndvcmtlciA9IHdvcmtlcgorICAgICAgICBzZWxmLm51bWJlciA9IG51bWJlcgorICAgICAg
ICBzZWxmLmRvbmUgPSBGYWxzZQorICAgICAgICBzZWxmLm5leHRfdGltZW91dCA9IE5vbmUKKyAg
ICAgICAgc2VsZi53ZWRnZWQgPSBGYWxzZQorICAgICAgICBzZWxmLnN0YXRzID0ge30KKyAgICAg
ICAgc2VsZi5zdGF0c1snbmFtZSddID0gd29ya2VyLm5hbWUKKyAgICAgICAgc2VsZi5zdGF0c1sn
bnVtX3Rlc3RzJ10gPSAwCisgICAgICAgIHNlbGYuc3RhdHNbJ3RvdGFsX3RpbWUnXSA9IDAKKwor
ICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJfV29ya2VyU3RhdGUoIiAr
IHN0cihzZWxmLl9fZGljdF9fKSArICIpIgorCisKIGNsYXNzIFRlc3RSdW5uZXIyKHRlc3RfcnVu
bmVyLlRlc3RSdW5uZXIpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zLCBw
cmludGVyKToKKyAgICAgICAgdGVzdF9ydW5uZXIuVGVzdFJ1bm5lci5fX2luaXRfXyhzZWxmLCBw
b3J0LCBvcHRpb25zLCBwcmludGVyKQorICAgICAgICBzZWxmLl9tZXNzYWdlX2Jyb2tlciA9IE5v
bmUKIAotICAgICAgICAjIEZJWE1FOiBUaGlzJ2xsIGdldCByZXBsYWNlZCB3aXRoIGEgcmVhbCBp
bXBsZW1lbnRhdGlvbiBzb29uIGVub3VnaC4KLSAgICAgICAgaWYgb3B0aW9ucy53b3JrZXJfbW9k
ZWwgaW4gKCdpbmxpbmUnLCAndGhyZWFkcycpOgotICAgICAgICAgICAgb3B0aW9ucy53b3JrZXJf
bW9kZWwgPSAnb2xkLScgKyBvcHRpb25zLndvcmtlcl9tb2RlbAotICAgICAgICBpZiBvcHRpb25z
Lndvcmtlcl9tb2RlbCA9PSAncHJvY2Vzc2VzJzoKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJy
b3IoIi0td29ya2VyLW1vZGVsPXByb2Nlc3NlcyBub3Qgc3VwcG9ydGVkIHlldCIpCisgICAgICAg
ICMgVGhpcyBtYXBzIHdvcmtlciBuYW1lcyB0byB0aGUgc3RhdGUgd2UgYXJlIHRyYWNraW5nIGZv
ciBlYWNoIG9mIHRoZW0uCisgICAgICAgIHNlbGYuX3dvcmtlcnMgPSB7fQogCi0gICAgICAgIHRl
c3RfcnVubmVyLlRlc3RSdW5uZXIuX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucywgcHJpbnRl
cikKKyAgICBkZWYgaXNfZG9uZShzZWxmKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBk
ZWYgbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuICdUZXN0UnVubmVyMicKKworICAgIGRlZiBf
cnVuX3Rlc3RzKHNlbGYsIGZpbGVfbGlzdCwgcmVzdWx0X3N1bW1hcnkpOgorICAgICAgICAiIiJS
dW5zIHRoZSB0ZXN0cyBpbiB0aGUgZmlsZV9saXN0LgorCisgICAgICAgIFJldHVybjogQSB0dXBs
ZSAoa2V5Ym9hcmRfaW50ZXJydXB0ZWQsIHRocmVhZF90aW1pbmdzLCB0ZXN0X3RpbWluZ3MsCisg
ICAgICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncykKKyAgICAgICAgICAgIGtleWJvYXJk
X2ludGVycnVwdGVkIGlzIHdoZXRoZXIgc29tZW9uZSB0eXBlZCBDdHJsXkMKKyAgICAgICAgICAg
IHRocmVhZF90aW1pbmdzIGlzIGEgbGlzdCBvZiBkaWN0cyB3aXRoIHRoZSB0b3RhbCBydW50aW1l
CisgICAgICAgICAgICAgIG9mIGVhY2ggdGhyZWFkIHdpdGggJ25hbWUnLCAnbnVtX3Rlc3RzJywg
J3RvdGFsX3RpbWUnIHByb3BlcnRpZXMKKyAgICAgICAgICAgIHRlc3RfdGltaW5ncyBpcyBhIGxp
c3Qgb2YgdGltaW5ncyBmb3IgZWFjaCBzaGFyZGVkIHN1YmRpcmVjdG9yeQorICAgICAgICAgICAg
ICBvZiB0aGUgZm9ybSBbdGltZSwgZGlyZWN0b3J5X25hbWUsIG51bV90ZXN0c10KKyAgICAgICAg
ICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzIGlzIGEgbGlzdCBvZiBydW4gdGltZXMgZm9yIGVh
Y2ggdGVzdAorICAgICAgICAgICAgICBpbiB0aGUgZm9ybSB7ZmlsZW5hbWU6ZmlsZW5hbWUsIHRl
c3RfcnVuX3RpbWU6dGVzdF9ydW5fdGltZX0KKyAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5OiBz
dW1tYXJ5IG9iamVjdCB0byBwb3B1bGF0ZSB3aXRoIHRoZSByZXN1bHRzCisgICAgICAgICIiIgor
ICAgICAgICBudW1fd29ya2VycyA9IHNlbGYuX251bV93b3JrZXJzKCkKKworICAgICAgICBzZWxm
Ll9jdXJyZW50X2ZpbGVfbGlzdCA9IGZpbGVfbGlzdAorICAgICAgICBzZWxmLl9jdXJyZW50X3Jl
c3VsdF9zdW1tYXJ5ID0gcmVzdWx0X3N1bW1hcnkKKworICAgICAgICBzZWxmLl9hbGxfcmVzdWx0
cyA9IFtdCisgICAgICAgIHNlbGYuX2dyb3VwX3N0YXRzID0ge30KKyAgICAgICAgc2VsZi5fd29y
a2VycyA9IHt9CisKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF91cGRhdGUoJ1NoYXJkaW5n
IHRlc3RzIC4uLicpCisgICAgICAgIHRlc3RfbGlzdHMgPSBzZWxmLl9zaGFyZF90ZXN0cyhmaWxl
X2xpc3QsCisgICAgICAgICAgICBudW1fd29ya2VycyA+IDEgYW5kIG5vdCBzZWxmLl9vcHRpb25z
LmV4cGVyaW1lbnRhbF9mdWxseV9wYXJhbGxlbCkKKyAgICAgICAgX2xvZy5kZWJ1ZygiVXNpbmcg
JWQgc2hhcmRzIiAlIGxlbih0ZXN0X2xpc3RzKSkKKworICAgICAgICBicm9rZXIgPSBtYW5hZ2Vy
X3dvcmtlcl9icm9rZXIuZ2V0KHNlbGYuX3BvcnQsIHNlbGYuX29wdGlvbnMsIHNlbGYsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyLldvcmtlcikKKwor
ICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgnU3RhcnRpbmcgJXMgLi4uJyAlCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYW1tYXIucGx1cmFsaXplKCd3b3Jr
ZXInLCBudW1fd29ya2VycykpCisgICAgICAgIGZvciB3b3JrZXJfbnVtYmVyIGluIHhyYW5nZShu
dW1fd29ya2Vycyk6CisgICAgICAgICAgICB3ID0gYnJva2VyLnN0YXJ0X3dvcmtlcih3b3JrZXJf
bnVtYmVyKQorICAgICAgICAgICAgd3MgPSBfV29ya2VyU3RhdGUod29ya2VyX251bWJlciwgdykK
KyAgICAgICAgICAgIHNlbGYuX3dvcmtlcnNbdy5uYW1lXSA9IHdzCisgICAgICAgICAgICB0aW1l
LnNsZWVwKDAuMSkKKworICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgiU3RhcnRp
bmcgdGVzdGluZyAuLi4iKQorICAgICAgICBmb3IgdGVzdF9saXN0IGluIHRlc3RfbGlzdHM6Cisg
ICAgICAgICAgICBicm9rZXIucG9zdF9tZXNzYWdlKCd0ZXN0X2xpc3QnLCB0ZXN0X2xpc3RbMF0s
IHRlc3RfbGlzdFsxXSkKKworICAgICAgICAjIFRlbGwgdGhlIHdvcmtlcnMgdG8gc2h1dCBkb3du
IGFmdGVyIHRoZXkncmUgZG9uZSBydW5uaW5nIGFsbCB0aGUKKyAgICAgICAgIyB0ZXN0cy4KKyAg
ICAgICAgZm9yIGkgaW4geHJhbmdlKG51bV93b3JrZXJzKToKKyAgICAgICAgICAgIGJyb2tlci5w
b3N0X21lc3NhZ2UoJ3N0b3AnKQorCisgICAgICAgIGludGVycnVwdGVkID0gRmFsc2UKKyAgICAg
ICAga2V5Ym9hcmRfaW50ZXJydXB0ZWQgPSBGYWxzZQorICAgICAgICB0cnk6CisgICAgICAgICAg
ICBpZiBub3Qgc2VsZi5fb3B0aW9ucy5kcnlfcnVuOgorICAgICAgICAgICAgICAgIHdoaWxlIG5v
dCBzZWxmLl9jaGVja19pZl9kb25lKCk6CisgICAgICAgICAgICAgICAgICAgIGJyb2tlci5ydW5f
bWVzc2FnZV9sb29wKGRlbGF5X3NlY3M9MS4wKQorCisgICAgICAgICAgICAgICAgZm9yIHcgaW4g
c2VsZi5fd29ya2Vycy52YWx1ZXMoKToKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHcud2Vk
Z2VkIGFuZCB3Lndvcmtlci5pc19hbGl2ZSgpOgorICAgICAgICAgICAgICAgICAgICAgICAgdy53
b3JrZXIuam9pbigwLjUpCisgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQgbm90IHcud29y
a2VyLmlzX2FsaXZlKCkKKworICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAg
ICAgICAgICBfbG9nLmluZm8oIkludGVycnVwdGVkLCBleGl0aW5nIikKKyAgICAgICAgICAgIGZv
ciB3IGluIHNlbGYuX3dvcmtlcnMudmFsdWVzKCk6CisgICAgICAgICAgICAgICAgdy53b3JrZXIu
Y2FuY2VsKCkKKyAgICAgICAgICAgIGtleWJvYXJkX2ludGVycnVwdGVkID0gVHJ1ZQorICAgICAg
ICBleGNlcHQgdGVzdF9ydW5uZXIuVGVzdFJ1bkludGVycnVwdGVkRXhjZXB0aW9uLCBlOgorICAg
ICAgICAgICAgX2xvZy5pbmZvKGUucmVhc29uKQorICAgICAgICAgICAgYnJva2VyLmNhbmNlbF93
b3JrZXJzKCkKKyAgICAgICAgICAgIGludGVycnVwdGVkID0gVHJ1ZQorICAgICAgICBleGNlcHQ6
CisgICAgICAgICAgICAjIFVuZXhwZWN0ZWQgZXhjZXB0aW9uOyBkb24ndCB0cnkgdG8gY2xlYW4g
dXAgd29ya2Vycy4KKyAgICAgICAgICAgIF9sb2cuaW5mbygiRXhjZXB0aW9uIHJhaXNlZCwgZXhp
dGluZyIpCisgICAgICAgICAgICByYWlzZQorCisgICAgICAgIHRocmVhZF90aW1pbmdzID0gW3cu
c3RhdHMgZm9yIHcgaW4gc2VsZi5fd29ya2Vycy52YWx1ZXMoKV0KKyAgICAgICAgcmV0dXJuIChp
bnRlcnJ1cHRlZCwga2V5Ym9hcmRfaW50ZXJydXB0ZWQsIHRocmVhZF90aW1pbmdzLAorICAgICAg
ICAgICAgICAgIHNlbGYuX2dyb3VwX3N0YXRzLCBzZWxmLl9hbGxfcmVzdWx0cykKKworICAgIGRl
ZiBfY2hlY2tfaWZfZG9uZShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyB0cnVlIGlmZiBhbGwg
dGhlIHdvcmtlcnMgaGF2ZSBlaXRoZXIgY29tcGxldGVkIG9yIHdlZGdlZC4iIiIKKyAgICAgICAg
ZG9uZSA9IFRydWUKKyAgICAgICAgdCA9IHRpbWUudGltZSgpCisgICAgICAgIGZvciB3IGluIHNl
bGYuX3dvcmtlcnMudmFsdWVzKCk6CisgICAgICAgICAgICBpZiBub3Qgdy5kb25lIGFuZCBub3Qg
dy53ZWRnZWQ6CisgICAgICAgICAgICAgICAgbmV4dF90aW1lb3V0ID0gdy5uZXh0X3RpbWVvdXQK
KyAgICAgICAgICAgICAgICBXRURHRV9QQURESU5HID0gNDAuMAorICAgICAgICAgICAgICAgIGlm
IG5leHRfdGltZW91dCBhbmQgdCA+IG5leHRfdGltZW91dCArIFdFREdFX1BBRERJTkc6CisgICAg
ICAgICAgICAgICAgICAgIF9sb2cuZXJyb3IoJycpCisgICAgICAgICAgICAgICAgICAgIHcud29y
a2VyLmxvZ193ZWRnZWRfd29ya2VyKHcuY3VycmVudF90ZXN0X25hbWUpCisgICAgICAgICAgICAg
ICAgICAgIF9sb2cuZXJyb3IoJycpCisgICAgICAgICAgICAgICAgICAgIHcud2VkZ2VkID0gVHJ1
ZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBGYWxz
ZQorCisgICAgICAgIGlmIGRvbmU6CisgICAgICAgICAgICBpZiBhbnkoW3cud2VkZ2VkIGZvciB3
IGluIHNlbGYuX3dvcmtlcnMudmFsdWVzKCldKToKKyAgICAgICAgICAgICAgICBfbG9nLmVycm9y
KCcnKQorICAgICAgICAgICAgICAgIF9sb2cuZXJyb3IoJ1JlbWFpbmluZyB3b3JrZXJzIGFyZSB3
ZWRnZWQsIGJhaWxpbmcgb3V0LicpCisgICAgICAgICAgICAgICAgX2xvZy5lcnJvcignJykKKyAg
ICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgX2xvZy5kZWJ1ZygnTm8gd2VkZ2VkIHRo
cmVhZHMnKQorICAgICAgICByZXR1cm4gZG9uZQorCisgICAgZGVmIGhhbmRsZV9zdGFydGVkX3Rl
c3Qoc2VsZiwgc3JjLCB0ZXN0X2luZm8sIGhhbmdfdGltZW91dCk6CisgICAgICAgIHcgPSBzZWxm
Ll93b3JrZXJzW3NyY10KKyAgICAgICAgdy5jdXJyZW50X3Rlc3RfbmFtZSA9IHNlbGYuX3BvcnQu
cmVsYXRpdmVfdGVzdF9maWxlbmFtZSgKKyAgICAgICAgICAgIHRlc3RfaW5mby5maWxlbmFtZSkK
KyAgICAgICAgdy5uZXh0X3RpbWVvdXQgPSB0aW1lLnRpbWUoKSArIGhhbmdfdGltZW91dAorCisg
ICAgZGVmIGhhbmRsZV9kb25lKHNlbGYsIHNyYyk6CisgICAgICAgIHcgPSBzZWxmLl93b3JrZXJz
W3NyY10KKyAgICAgICAgdy5kb25lID0gVHJ1ZQorCisgICAgZGVmIGhhbmRsZV9maW5pc2hlZF90
ZXN0KHNlbGYsIHNyYywgcmVzdWx0LCBlbGFwc2VkX3RpbWUpOgorICAgICAgICAiIiJVcGRhdGUg
dGhlIHN1bW1hcnkgYW5kIHByaW50IHJlc3VsdHMgd2l0aCBhbnkgY29tcGxldGVkIHRlc3RzLiIi
IgorICAgICAgICB3ID0gc2VsZi5fd29ya2Vyc1tzcmNdCisgICAgICAgIHcubmV4dF90aW1lb3V0
ID0gTm9uZQorICAgICAgICB3LmN1cnJlbnRfdGVzdCA9IE5vbmUKKworICAgICAgICBpZiB3Lndl
ZGdlZDoKKyAgICAgICAgICAgICMgSG1tLiBUaGlzIHNob3VsZG4ndCBoYXBwZW4gaWYgd2UgaGF2
ZSBvdXIgdGltZW91dHMKKyAgICAgICAgICAgICMgdHVuZWQgcHJvcGVybHkuCisgICAgICAgICAg
ICBfbG9nLmVycm9yKCIlcyB1bndlZGdlZCIsIHcubmFtZSkKKworICAgICAgICBzZWxmLl91cGRh
dGVfd29ya2VyX3N0YXRzKHNyYywgcmVzdWx0LCBlbGFwc2VkX3RpbWUpCisKKyAgICAgICAgc2Vs
Zi5fdXBkYXRlX3N1bW1hcnlfd2l0aF9yZXN1bHQoc2VsZi5fY3VycmVudF9yZXN1bHRfc3VtbWFy
eSwgcmVzdWx0KQorCisgICAgZGVmIGhhbmRsZV9maW5pc2hlZF9saXN0KHNlbGYsIHNyYywgbGlz
dF9uYW1lLCBudW1fdGVzdHMsIGVsYXBzZWRfdGltZSk6CisgICAgICAgIHNlbGYuX2dyb3VwX3N0
YXRzW2xpc3RfbmFtZV0gPSAobnVtX3Rlc3RzLCBlbGFwc2VkX3RpbWUpCisKKyAgICBkZWYgaGFu
ZGxlX2V4Y2VwdGlvbihzZWxmLCBzcmMsIGV4Y2VwdGlvbl9pbmZvKToKKyAgICAgICAgcmFpc2Ug
ZXhjZXB0aW9uX2luZm8KKworICAgIGRlZiBfdXBkYXRlX3dvcmtlcl9zdGF0cyhzZWxmLCBzcmMs
IHJlc3VsdCwgZWxhcHNlZF90aW1lKToKKyAgICAgICAgc2VsZi5fd29ya2Vyc1tzcmNdLnN0YXRz
Wyd0b3RhbF90aW1lJ10gKz0gZWxhcHNlZF90aW1lCisgICAgICAgIHNlbGYuX3dvcmtlcnNbc3Jj
XS5zdGF0c1snbnVtX3Rlc3RzJ10gKz0gMQorICAgICAgICBzZWxmLl9hbGxfcmVzdWx0cy5hcHBl
bmQocmVzdWx0KQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2Uvd29ya2VyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvd29ya2VyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgxOGQ5OTdjZjFl
N2QwYzcwNjA3NTQyNTBjNDVhYTFmNjgzNmIzOWQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS93b3JrZXIucHkKQEAg
LTAsMCArMSwzMzAgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDEw
IEdhYm9yIFJhcGNzYW55aSAocmdhYm9yQGluZi51LXN6ZWdlZC5odSksIFVuaXZlcnNpdHkgb2Yg
U3plZ2VkCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0
cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJBIFRocmVhZCBvYmplY3QgZm9yIHJ1bm5p
bmcgRHVtcFJlbmRlclRyZWUgYW5kIHByb2Nlc3NpbmcgVVJMcyBmcm9tIGEKK3NoYXJlZCBxdWV1
ZS4KKworRWFjaCB0aHJlYWQgcnVucyBhIHNlcGFyYXRlIGluc3RhbmNlIG9mIHRoZSBEdW1wUmVu
ZGVyVHJlZSBiaW5hcnkgYW5kIHZhbGlkYXRlcwordGhlIG91dHB1dC4gIFdoZW4gdGhlcmUgYXJl
IG5vIG1vcmUgVVJMcyB0byBwcm9jZXNzIGluIHRoZSBzaGFyZWQgcXVldWUsIHRoZQordGhyZWFk
IGV4aXRzLgorIiIiCisKK2ltcG9ydCBjb3B5CitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHNpZ25h
bAoraW1wb3J0IHN5cworaW1wb3J0IHRocmVhZGluZworaW1wb3J0IHRpbWUKK2ltcG9ydCB0cmFj
ZWJhY2sKKworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMudGVzdF90eXBlcyBpbXBvcnQgaW1h
Z2VfZGlmZgorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMudGVzdF90eXBlcyBpbXBvcnQgdGVz
dF90eXBlX2Jhc2UKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnRlc3RfdHlwZXMgaW1wb3J0
IHRleHRfZGlmZgorCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBp
bXBvcnQgbWVzc2FnZV9icm9rZXIyCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRf
cGFja2FnZSBpbXBvcnQgc2luZ2xlX3Rlc3RfcnVubmVyCitmcm9tIHdlYmtpdHB5LmxheW91dF90
ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9mYWlsdXJlcworZnJvbSB3ZWJraXRweS5s
YXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfcmVzdWx0cworCisKK19sb2cg
PSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKKworCitjbGFzcyBXb3JrZXIobWVzc2FnZV9i
cm9rZXIyLkJyb2tlckNsaWVudCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb2tlciwgd29y
a2VyX251bWJlciwgb3B0aW9ucyk6CisgICAgICAgIHNlbGYuX2Jyb2tlciA9IGJyb2tlcgorICAg
ICAgICBzZWxmLl93b3JrZXJfbnVtYmVyID0gd29ya2VyX251bWJlcgorICAgICAgICBzZWxmLl9v
cHRpb25zID0gb3B0aW9ucworICAgICAgICBzZWxmLl9uYW1lID0gJ3dvcmtlci8lZCcgJSB3b3Jr
ZXJfbnVtYmVyCisgICAgICAgIHNlbGYuX2NhbmNlbGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5f
ZG9uZSA9IEZhbHNlCisKKyAgICAgICAgc2VsZi5fcG9ydCA9IE5vbmUKKyAgICAgICAgc2VsZi5f
YmF0Y2hfY291bnQgPSAwCisgICAgICAgIHNlbGYuX2JhdGNoX3NpemUgPSAwCisgICAgICAgIHNl
bGYuX2RyaXZlciA9IE5vbmUKKyAgICAgICAgc2VsZi5faGF2ZV9odHRwX2xvY2sgPSBGYWxzZQor
ICAgICAgICBzZWxmLl90ZXN0X3R5cGVzID0gW10KKyAgICAgICAgc2VsZi5fdGVzdHNfcnVuX2Zp
bGUgPSBOb25lCisKKyAgICBkZWYgX2RlZmVycmVkX2luaXQoc2VsZiwgcG9ydCk6CisgICAgICAg
IHNlbGYuX3BvcnQgPSBwb3J0CisgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0gPSBwb3J0Ll9maWxl
c3lzdGVtCisgICAgICAgIHNlbGYuX2JhdGNoX3NpemUgPSBzZWxmLl9vcHRpb25zLmJhdGNoX3Np
emUKKyAgICAgICAgZm9yIGNscyBpbiBzZWxmLl9nZXRfdGVzdF90eXBlX2NsYXNzZXMoKToKKyAg
ICAgICAgICAgIHNlbGYuX3Rlc3RfdHlwZXMuYXBwZW5kKGNscyhzZWxmLl9wb3J0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMucmVzdWx0c19k
aXJlY3RvcnkpKQorCisgICAgICAgICMgQXBwZW5kIHRlc3RzIHdlJ3JlIHJ1bm5pbmcgdG8gdGhl
IGV4aXN0aW5nIHRlc3RzX3J1bi50eHQgZmlsZS4KKyAgICAgICAgIyBUaGlzIGlzIGNyZWF0ZWQg
aW4gcnVuX3dlYmtpdF90ZXN0cy5weTpfUHJlcGFyZUxpc3RzQW5kUHJpbnRPdXRwdXQuCisgICAg
ICAgIHRlc3RzX3J1bl9maWxlbmFtZSA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLl9vcHRp
b25zLnJlc3VsdHNfZGlyZWN0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgInRlc3RzX3J1bi50eHQiKQorICAgICAgICBzZWxmLl90ZXN0c19y
dW5fZmlsZSA9IHNlbGYuX2ZpbGVzeXN0ZW0ub3Blbl90ZXh0X2ZpbGVfZm9yX3dyaXRpbmcodGVz
dHNfcnVuX2ZpbGVuYW1lLCBhcHBlbmQ9VHJ1ZSkKKworICAgIGRlZiBfX2RlbF9fKHNlbGYpOgor
ICAgICAgICBzZWxmLl9jbGVhbnVwKCkKKworICAgIGRlZiBfZ2V0X3Rlc3RfdHlwZV9jbGFzc2Vz
KHNlbGYpOgorICAgICAgICBjbGFzc2VzID0gW3RleHRfZGlmZi5UZXN0VGV4dERpZmZdCisgICAg
ICAgIGlmIHNlbGYuX29wdGlvbnMucGl4ZWxfdGVzdHM6CisgICAgICAgICAgICBjbGFzc2VzLmFw
cGVuZChpbWFnZV9kaWZmLkltYWdlRGlmZikKKyAgICAgICAgcmV0dXJuIGNsYXNzZXMKKworICAg
IGRlZiBjYW5jZWwoc2VsZik6CisgICAgICAgICIiIkF0dGVtcHQgdG8gYWJvcnQgcHJvY2Vzc2lu
ZyAoYmVzdCBlZmZvcnQpLiIiIgorICAgICAgICBzZWxmLl9jYW5jZWxlZCA9IFRydWUKKworICAg
IGRlZiBpc19kb25lKHNlbGYpOgorICAgICAgICAjIFRoaXMgaXMgdXNlZCBmb3IgYXNzZXJ0aW9u
IGNoZWNraW5nIGluIHRoZSBtYW5hZ2VyLgorICAgICAgICByZXR1cm4gc2VsZi5fZG9uZSBvciBz
ZWxmLl9jYW5jZWxlZAorCisgICAgZGVmIG5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxm
Ll9uYW1lCisKKyAgICBkZWYgcnVuKHNlbGYsIHBvcnQpOgorICAgICAgICBzZWxmLl9kZWZlcnJl
ZF9pbml0KHBvcnQpCisKKyAgICAgICAgZXhjZXB0aW9uX21zZyA9ICIiCisgICAgICAgIF9sb2cu
ZGVidWcoIiVzIHN0YXJ0aW5nIiAlIHNlbGYuX25hbWUpCisKKyAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgc2VsZi5fYnJva2VyLnJ1bl9tZXNzYWdlX2xvb3AoKQorICAgICAgICAgICAgaWYgbm90
IHNlbGYuaXNfZG9uZSgpOgorICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCIl
czogcmFuIG91dCBvZiBtZXNzYWdlcyBpbiB3b3JrZXIgcXVldWUuIgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICUgc2VsZi5fbmFtZSkKKyAgICAgICAgZXhjZXB0IEtleWJv
YXJkSW50ZXJydXB0OgorICAgICAgICAgICAgZXhjZXB0aW9uX21zZyA9ICIsIGludGVycnVwdGVk
IgorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBleGNlcHRpb25fbXNnID0gIiwgZXhjZXB0
aW9uIHJhaXNlZCIKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIF9sb2cuZGVidWcoIiVz
IGRvbmUlcyIgJSAoc2VsZi5fbmFtZSwgZXhjZXB0aW9uX21zZykpCisgICAgICAgICAgICBpZiBl
eGNlcHRpb25fbXNnOgorICAgICAgICAgICAgICAgIGV4Y19pbmZvID0gc3lzLmV4Y19pbmZvKCkK
KyAgICAgICAgICAgICAgICBzZWxmLl9sb2dfdHJhY2ViYWNrKGV4Y19pbmZvWzJdKQorICAgICAg
ICAgICAgICAgICMgRklYTUU6IEZpZ3VyZSBvdXQgaG93IHRvIHNlbmQgYSBtZXNzYWdlIHdpdGgg
YSB0cmFjZWJhY2suCisgICAgICAgICAgICAgICAgc2VsZi5fYnJva2VyLnBvc3RfbWVzc2FnZSgn
ZXhjZXB0aW9uJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChl
eGNfaW5mb1swXSwgZXhjX2luZm9bMV0sIE5vbmUpKQorICAgICAgICAgICAgc2VsZi5fYnJva2Vy
LnBvc3RfbWVzc2FnZSgnZG9uZScpCisgICAgICAgICAgICBzZWxmLl9jbGVhbnVwKCkKKworICAg
IGRlZiBfbG9nX3RyYWNlYmFjayhzZWxmLCB0Yik6CisgICAgICAgIHN0YWNrID0gdHJhY2ViYWNr
LmV4dHJhY3RfdGIodGIpCisgICAgICAgIGZvciBmcmFtZV9zdHIgaW4gdHJhY2ViYWNrLmZvcm1h
dF9saXN0KHN0YWNrKToKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGZyYW1lX3N0ci5zcGxpdCgn
XG4nKToKKyAgICAgICAgICAgICAgICBpZiBsaW5lOgorICAgICAgICAgICAgICAgICAgICBfbG9n
LmVycm9yKCIgICVzIiAlIGxpbmUpCisKKyAgICBkZWYgX2NsZWFudXAoc2VsZik6CisgICAgICAg
IHNlbGYuX2tpbGxfZHVtcF9yZW5kZXJfdHJlZSgpCisgICAgICAgIGlmIHNlbGYuX2hhdmVfaHR0
cF9sb2NrOgorICAgICAgICAgICAgc2VsZi5fc3RvcF9zZXJ2ZXJzX3dpdGhfbG9jaygpCisgICAg
ICAgIGlmIHNlbGYuX3Rlc3RzX3J1bl9maWxlOgorICAgICAgICAgICAgc2VsZi5fdGVzdHNfcnVu
X2ZpbGUuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5fdGVzdHNfcnVuX2ZpbGUgPSBOb25lCisK
KyAgICBkZWYgaGFuZGxlX3Rlc3RfbGlzdChzZWxmLCBzcmMsIGxpc3RfbmFtZSwgdGVzdF9saXN0
KToKKyAgICAgICAgaWYgbGlzdF9uYW1lID09ICJ0ZXN0c190b19odHRwX2xvY2siOgorICAgICAg
ICAgICAgc2VsZi5fc3RhcnRfc2VydmVyc193aXRoX2xvY2soKQorCisgICAgICAgIHN0YXJ0X3Rp
bWUgPSB0aW1lLnRpbWUoKQorICAgICAgICBudW1fdGVzdHMgPSAwCisgICAgICAgIGZvciB0ZXN0
X2lucHV0IGluIHRlc3RfbGlzdDoKKyAgICAgICAgICAgIHNlbGYuX3J1bl90ZXN0KHRlc3RfaW5w
dXQpCisgICAgICAgICAgICBzZWxmLl9icm9rZXIueWllbGRfdG9fYnJva2VyKCkKKyAgICAgICAg
ICAgIGlmIHNlbGYuX2NhbmNlbGVkOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAg
ICBudW1fdGVzdHMgKz0gMQorCisgICAgICAgIGVsYXBzZWRfdGltZSA9IHRpbWUudGltZSgpIC0g
c3RhcnRfdGltZQorCisgICAgICAgIGlmIHNlbGYuX2hhdmVfaHR0cF9sb2NrOgorICAgICAgICAg
ICAgc2VsZi5fc3RvcF9zZXJ2ZXJzX3dpdGhfbG9jaygpCisKKyAgICAgICAgc2VsZi5fYnJva2Vy
LnBvc3RfbWVzc2FnZSgnZmluaXNoZWRfbGlzdCcsIGxpc3RfbmFtZSwgbnVtX3Rlc3RzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsYXBzZWRfdGltZSkKKworICAgIGRlZiBo
YW5kbGVfc3RvcChzZWxmLCBzcmMpOgorICAgICAgICAiIiJTdG9wIHJlY2VpdmVkIC0gbm8gbW9y
ZSB0ZXN0cyB0byBydW4uIiIiCisgICAgICAgIHNlbGYuX2RvbmUgPSBUcnVlCisKKyAgICBkZWYg
X3J1bl90ZXN0KHNlbGYsIHRlc3RfaW5wdXQpOgorICAgICAgICBzZWxmLl9zZXRfdXBfdGVzdCh0
ZXN0X2lucHV0KQorCisgICAgICAgICMgV2UgY2FsY3VsYXRlIGhvdyBsb25nIHdlIGV4cGVjdCB0
aGUgdGVzdCB0byB0YWtlLgorICAgICAgICAjCisgICAgICAgICMgVGhlIER1bXBSZW5kZXJUcmVl
IHdhdGNoZG9nIHVzZXMgMi41eCB0aGUgdGltZW91dDsgd2Ugd2FudCB0byBiZQorICAgICAgICAj
IGxhcmdlciB0aGFuIHRoYXQuIFdlIGFsc28gYWRkIGEgbGl0dGxlIG1vcmUgcGFkZGluZyBpZiB3
ZSdyZQorICAgICAgICAjIHJ1bm5pbmcgdGVzdHMgaW4gYSBzZXBhcmF0ZSB0aHJlYWQuCisgICAg
ICAgICMKKyAgICAgICAgIyBOb3RlIHRoYXQgd2UgbmVlZCB0byBjb252ZXJ0IHRoZSB0ZXN0IHRp
bWVvdXQgZnJvbSBhCisgICAgICAgICMgc3RyaW5nIHZhbHVlIGluIG1pbGxpc2Vjb25kcyB0byBh
IGZsb2F0IGZvciBQeXRob24uCisgICAgICAgIGRyaXZlcl90aW1lb3V0X3NlYyA9IDMuMCAqIGZs
b2F0KHRlc3RfaW5wdXQudGltZW91dCkgLyAxMDAwLjAKKyAgICAgICAgdGhyZWFkX3BhZGRpbmdf
c2VjID0gMS4wCisgICAgICAgIHRocmVhZF90aW1lb3V0X3NlYyA9IGRyaXZlcl90aW1lb3V0X3Nl
YyArIHRocmVhZF9wYWRkaW5nX3NlYworICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnJ1bl9zaW5n
bHk6CisgICAgICAgICAgICB0ZXN0X3RpbWVvdXRfc2VjID0gdGhyZWFkX3RpbWVvdXRfc2VjCisg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICB0ZXN0X3RpbWVvdXRfc2VjID0gZHJpdmVyX3RpbWVv
dXRfc2VjCisKKyAgICAgICAgc3RhcnQgPSB0aW1lLnRpbWUoKQorICAgICAgICBzZWxmLl9icm9r
ZXIucG9zdF9tZXNzYWdlKCdzdGFydGVkX3Rlc3QnLCB0ZXN0X2lucHV0LCB0ZXN0X3RpbWVvdXRf
c2VjKQorCisgICAgICAgIGlmIHNlbGYuX29wdGlvbnMucnVuX3NpbmdseToKKyAgICAgICAgICAg
IHJlc3VsdCA9IHNlbGYuX3J1bl90ZXN0X2luX2Fub3RoZXJfdGhyZWFkKHRlc3RfaW5wdXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJl
YWRfdGltZW91dF9zZWMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXN1bHQgPSBzZWxm
Ll9ydW5fdGVzdF9pbl90aGlzX3RocmVhZCh0ZXN0X2lucHV0KQorCisgICAgICAgIHNlbGYuX3Rl
YXJfZG93bl90ZXN0KHRlc3RfaW5wdXQsIHJlc3VsdCwgdGltZS50aW1lKCkgLSBzdGFydCkKKwor
ICAgIGRlZiBfc2V0X3VwX3Rlc3Qoc2VsZiwgdGVzdF9pbnB1dCk6CisgICAgICAgIHRlc3RfaW5w
dXQudXJpID0gc2VsZi5fcG9ydC5maWxlbmFtZV90b191cmkodGVzdF9pbnB1dC5maWxlbmFtZSkK
KyAgICAgICAgaWYgc2VsZi5fc2hvdWxkX2ZldGNoX2V4cGVjdGVkX2NoZWNrc3VtKCk6CisgICAg
ICAgICAgICB0ZXN0X2lucHV0LmltYWdlX2NoZWNrc3VtID0gc2VsZi5fcG9ydC5leHBlY3RlZF9j
aGVja3N1bSgKKyAgICAgICAgICAgICAgICB0ZXN0X2lucHV0LmZpbGVuYW1lKQorCisgICAgZGVm
IF9zaG91bGRfZmV0Y2hfZXhwZWN0ZWRfY2hlY2tzdW0oc2VsZik6CisgICAgICAgIHJldHVybiAo
c2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0cyBhbmQgbm90CisgICAgICAgICAgICAgICAgKHNlbGYu
X29wdGlvbnMubmV3X2Jhc2VsaW5lIG9yIHNlbGYuX29wdGlvbnMucmVzZXRfcmVzdWx0cykpCisK
KyAgICBkZWYgX3J1bl90ZXN0X2luX2Fub3RoZXJfdGhyZWFkKHNlbGYsIHRlc3RfaW5wdXQsIHRo
cmVhZF90aW1lb3V0X3NlYyk6CisgICAgICAgICIiIlJ1biBhIHRlc3QgaW4gYSBzZXBhcmF0ZSB0
aHJlYWQsIGVuZm9yY2luZyBhIGhhcmQgdGltZSBsaW1pdC4KKworICAgICAgICBTaW5jZSB3ZSBj
YW4gb25seSBkZXRlY3QgdGhlIHRlcm1pbmF0aW9uIG9mIGEgdGhyZWFkLCBub3QgYW55IGludGVy
bmFsCisgICAgICAgIHN0YXRlIG9yIHByb2dyZXNzLCB3ZSBjYW4gb25seSBydW4gcGVyLXRlc3Qg
dGltZW91dHMgd2hlbiBydW5uaW5nIHRlc3QKKyAgICAgICAgZmlsZXMgc2luZ2x5LgorCisgICAg
ICAgIEFyZ3M6CisgICAgICAgICAgdGVzdF9pbnB1dDogT2JqZWN0IGNvbnRhaW5pbmcgdGhlIHRl
c3QgZmlsZW5hbWUgYW5kIHRpbWVvdXQKKyAgICAgICAgICB0aHJlYWRfdGltZW91dF9zZWM6IHRp
bWUgdG8gd2FpdCBiZWZvcmUga2lsbGluZyB0aGUgZHJpdmVyIHByb2Nlc3MuCisgICAgICAgIFJl
dHVybnM6CisgICAgICAgICAgQSBUZXN0UmVzdWx0CisgICAgICAgICIiIgorICAgICAgICB3b3Jr
ZXIgPSBzZWxmCisgICAgICAgIHJlc3VsdCA9IE5vbmUKKworICAgICAgICBkcml2ZXIgPSB3b3Jr
ZXIuX3BvcnQuY3JlYXRlX2RyaXZlcih3b3JrZXIuX3dvcmtlcl9udW1iZXIpCisgICAgICAgIGRy
aXZlci5zdGFydCgpCisKKyAgICAgICAgY2xhc3MgU2luZ2xlVGVzdFRocmVhZCh0aHJlYWRpbmcu
VGhyZWFkKToKKyAgICAgICAgICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgICAgICAgICAgcmVz
dWx0ID0gd29ya2VyLl9ydW5fc2luZ2xlX3Rlc3QodGVzdF9pbnB1dCwgZHJpdmVyKQorCisgICAg
ICAgIHRocmVhZCA9IFNpbmdsZVRlc3RUaHJlYWQoKQorICAgICAgICB0aHJlYWQuc3RhcnQoKQor
ICAgICAgICB0aHJlYWQuam9pbih0aHJlYWRfdGltZW91dF9zZWMpCisgICAgICAgIGlmIHRocmVh
ZC5pc0FsaXZlKCk6CisgICAgICAgICAgICAjIElmIGpvaW4oKSByZXR1cm5lZCB3aXRoIHRoZSB0
aHJlYWQgc3RpbGwgcnVubmluZywgdGhlCisgICAgICAgICAgICAjIER1bXBSZW5kZXJUcmVlIGlz
IGNvbXBsZXRlbHkgaHVuZyBhbmQgdGhlcmUncyBub3RoaW5nCisgICAgICAgICAgICAjIG1vcmUg
d2UgY2FuIGRvIHdpdGggaXQuICBXZSBoYXZlIHRvIGtpbGwgYWxsIHRoZQorICAgICAgICAgICAg
IyBEdW1wUmVuZGVyVHJlZXMgdG8gZnJlZSBpdCB1cC4gSWYgd2UncmUgcnVubmluZyBtb3JlIHRo
YW4KKyAgICAgICAgICAgICMgb25lIER1bXBSZW5kZXJUcmVlIHRocmVhZCwgd2UnbGwgZW5kIHVw
IGtpbGxpbmcgdGhlIG90aGVyCisgICAgICAgICAgICAjIER1bXBSZW5kZXJUcmVlcyB0b28sIGlu
dHJvZHVjaW5nIHNwdXJpb3VzIGNyYXNoZXMuIFdlIGFjY2VwdAorICAgICAgICAgICAgIyB0aGF0
IHRyYWRlb2ZmIGluIG9yZGVyIHRvIGF2b2lkIGxvc2luZyB0aGUgcmVzdCBvZiB0aGlzCisgICAg
ICAgICAgICAjIHRocmVhZCdzIHJlc3VsdHMuCisgICAgICAgICAgICBfbG9nLmVycm9yKCdUZXN0
IHRocmVhZCBodW5nOiBraWxsaW5nIGFsbCBEdW1wUmVuZGVyVHJlZXMnKQorCisgICAgICAgIGRy
aXZlci5zdG9wKCkKKworICAgICAgICBpZiBub3QgcmVzdWx0OgorICAgICAgICAgICAgcmVzdWx0
ID0gdGVzdF9yZXN1bHRzLlRlc3RSZXN1bHQodGVzdF9pbnB1dC5maWxlbmFtZSwgZmFpbHVyZXM9
W10sCisgICAgICAgICAgICAgICAgdGVzdF9ydW5fdGltZT0wLCB0b3RhbF90aW1lX2Zvcl9hbGxf
ZGlmZnM9MCwgdGltZV9mb3JfZGlmZnM9e30pCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAg
IGRlZiBfcnVuX3Rlc3RfaW5fdGhpc190aHJlYWQoc2VsZiwgdGVzdF9pbnB1dCk6CisgICAgICAg
ICIiIlJ1biBhIHNpbmdsZSB0ZXN0IGZpbGUgdXNpbmcgYSBzaGFyZWQgRHVtcFJlbmRlclRyZWUg
cHJvY2Vzcy4KKworICAgICAgICBBcmdzOgorICAgICAgICAgIHRlc3RfaW5wdXQ6IE9iamVjdCBj
b250YWluaW5nIHRoZSB0ZXN0IGZpbGVuYW1lLCB1cmkgYW5kIHRpbWVvdXQKKworICAgICAgICBS
ZXR1cm5zOiBhIFRlc3RSZXN1bHQgb2JqZWN0LgorICAgICAgICAiIiIKKyAgICAgICAgIyBwb2xs
KCkgaXMgbm90IHRocmVhZHNhZmUgYW5kIGNhbiB0aHJvdyBPU0Vycm9yIGR1ZSB0bzoKKyAgICAg
ICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTczMTcxNworICAgICAgICBpZiBub3Qg
c2VsZi5fZHJpdmVyIG9yIHNlbGYuX2RyaXZlci5wb2xsKCkgaXMgbm90IE5vbmU6CisgICAgICAg
ICAgICBzZWxmLl9kcml2ZXIgPSBzZWxmLl9wb3J0LmNyZWF0ZV9kcml2ZXIoc2VsZi5fd29ya2Vy
X251bWJlcikKKyAgICAgICAgICAgIHNlbGYuX2RyaXZlci5zdGFydCgpCisgICAgICAgIHJldHVy
biBzZWxmLl9ydW5fc2luZ2xlX3Rlc3QodGVzdF9pbnB1dCwgc2VsZi5fZHJpdmVyKQorCisgICAg
ZGVmIF9ydW5fc2luZ2xlX3Rlc3Qoc2VsZiwgdGVzdF9pbnB1dCwgZHJpdmVyKToKKyAgICAgICAg
cmV0dXJuIHNpbmdsZV90ZXN0X3J1bm5lci5ydW5fc2luZ2xlX3Rlc3Qoc2VsZi5fcG9ydCwgc2Vs
Zi5fb3B0aW9ucywKKyAgICAgICAgICAgIHRlc3RfaW5wdXQsIGRyaXZlciwgc2VsZi5fbmFtZSwg
c2VsZi5fdGVzdF90eXBlcykKKworICAgIGRlZiBfdGVhcl9kb3duX3Rlc3Qoc2VsZiwgdGVzdF9p
bnB1dCwgcmVzdWx0LCBlbGFwc2VkX3RpbWUpOgorICAgICAgICBzZWxmLl9iYXRjaF9jb3VudCAr
PSAxCisgICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9maWxlLndyaXRlKHRlc3RfaW5wdXQuZmlsZW5h
bWUgKyAiXG4iKQorICAgICAgICB0ZXN0X25hbWUgPSBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3Rf
ZmlsZW5hbWUodGVzdF9pbnB1dC5maWxlbmFtZSkKKworICAgICAgICBpZiByZXN1bHQuZmFpbHVy
ZXM6CisgICAgICAgICAgICAjIENoZWNrIGFuZCBraWxsIER1bXBSZW5kZXJUcmVlIGlmIHdlIG5l
ZWQgdG8uCisgICAgICAgICAgICBpZiBhbnkoW2Yuc2hvdWxkX2tpbGxfZHVtcF9yZW5kZXJfdHJl
ZSgpIGZvciBmIGluIHJlc3VsdC5mYWlsdXJlc10pOgorICAgICAgICAgICAgICAgIHNlbGYuX2tp
bGxfZHVtcF9yZW5kZXJfdHJlZSgpCisgICAgICAgICAgICAgICAgIyBSZXNldCB0aGUgYmF0Y2gg
Y291bnQgc2luY2UgdGhlIHNoZWxsIGp1c3QgYm91bmNlZC4KKyAgICAgICAgICAgICAgICBzZWxm
Ll9iYXRjaF9jb3VudCA9IDAKKworICAgICAgICAgICAgIyBQcmludCB0aGUgZXJyb3IgbWVzc2Fn
ZShzKS4KKyAgICAgICAgICAgIF9sb2cuZGVidWcoIiVzICVzIGZhaWxlZDoiICUgKHNlbGYuX25h
bWUsIHRlc3RfbmFtZSkpCisgICAgICAgICAgICBmb3IgZiBpbiByZXN1bHQuZmFpbHVyZXM6Cisg
ICAgICAgICAgICAgICAgX2xvZy5kZWJ1ZygiJXMgICVzIiAlIChzZWxmLl9uYW1lLCBmLm1lc3Nh
Z2UoKSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyAlcyBwYXNz
ZWQiICUgKHNlbGYuX25hbWUsIHRlc3RfbmFtZSkpCisKKyAgICAgICAgc2VsZi5fYnJva2VyLnBv
c3RfbWVzc2FnZSgnZmluaXNoZWRfdGVzdCcsIHJlc3VsdCwgZWxhcHNlZF90aW1lKQorCisgICAg
ICAgIGlmIHNlbGYuX2JhdGNoX3NpemUgPiAwIGFuZCBzZWxmLl9iYXRjaF9jb3VudCA+PSBzZWxm
Ll9iYXRjaF9zaXplOgorICAgICAgICAgICAgIyBCb3VuY2UgdGhlIHNoZWxsIGFuZCByZXNldCBj
b3VudC4KKyAgICAgICAgICAgIHNlbGYuX2tpbGxfZHVtcF9yZW5kZXJfdHJlZSgpCisgICAgICAg
ICAgICBzZWxmLl9iYXRjaF9jb3VudCA9IDAKKworICAgIGRlZiBfc3RhcnRfc2VydmVyc193aXRo
X2xvY2soc2VsZik6CisgICAgICAgIF9sb2cuZGVidWcoJ0FjcXVpcmluZyBodHRwIGxvY2sgLi4u
JykKKyAgICAgICAgc2VsZi5fcG9ydC5hY3F1aXJlX2h0dHBfbG9jaygpCisgICAgICAgIF9sb2cu
ZGVidWcoJ1N0YXJ0aW5nIEhUVFAgc2VydmVyIC4uLicpCisgICAgICAgIHNlbGYuX3BvcnQuc3Rh
cnRfaHR0cF9zZXJ2ZXIoKQorICAgICAgICBfbG9nLmRlYnVnKCdTdGFydGluZyBXZWJTb2NrZXQg
c2VydmVyIC4uLicpCisgICAgICAgIHNlbGYuX3BvcnQuc3RhcnRfd2Vic29ja2V0X3NlcnZlcigp
CisgICAgICAgIHNlbGYuX2hhdmVfaHR0cF9sb2NrID0gVHJ1ZQorCisgICAgZGVmIF9zdG9wX3Nl
cnZlcnNfd2l0aF9sb2NrKHNlbGYpOgorICAgICAgICAiIiJTdG9wIHRoZSBzZXJ2ZXJzIGFuZCBy
ZWxlYXNlIGh0dHAgbG9jay4iIiIKKyAgICAgICAgaWYgc2VsZi5faGF2ZV9odHRwX2xvY2s6Cisg
ICAgICAgICAgICBfbG9nLmRlYnVnKCdTdG9wcGluZyBIVFRQIHNlcnZlciAuLi4nKQorICAgICAg
ICAgICAgc2VsZi5fcG9ydC5zdG9wX2h0dHBfc2VydmVyKCkKKyAgICAgICAgICAgIF9sb2cuZGVi
dWcoJ1N0b3BwaW5nIFdlYlNvY2tldCBzZXJ2ZXIgLi4uJykKKyAgICAgICAgICAgIHNlbGYuX3Bv
cnQuc3RvcF93ZWJzb2NrZXRfc2VydmVyKCkKKyAgICAgICAgICAgIF9sb2cuZGVidWcoJ1JlbGVh
c2luZyBzZXJ2ZXIgbG9jayAuLi4nKQorICAgICAgICAgICAgc2VsZi5fcG9ydC5yZWxlYXNlX2h0
dHBfbG9jaygpCisgICAgICAgICAgICBzZWxmLl9oYXZlX2h0dHBfbG9jayA9IEZhbHNlCisKKyAg
ICBkZWYgX2tpbGxfZHVtcF9yZW5kZXJfdHJlZShzZWxmKToKKyAgICAgICAgIiIiS2lsbCB0aGUg
RHVtcFJlbmRlclRyZWUgcHJvY2VzcyBpZiBpdCdzIHJ1bm5pbmcuIiIiCisgICAgICAgIGlmIHNl
bGYuX2RyaXZlcjoKKyAgICAgICAgICAgIHNlbGYuX2RyaXZlci5zdG9wKCkKKyAgICAgICAgICAg
IHNlbGYuX2RyaXZlciA9IE5vbmUKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvYmFzZS5weQppbmRleCBlM2Q1ZjhlOWE0NThmMTlkMTkzMDY2ODExMzcxMDlj
OGRjZTc0ZmZlLi45Nzc5OTFjZGNlYTc1OTA0ODYxNzhiYThkMDYwODVmOTU5MTM1YWY1IDEwMDY0
NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkK
KysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CkBA
IC00NzMsNiArNDczLDEwIEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAgICAgICAgKCdjcHUnKS4i
IiIKICAgICAgICAgcmV0dXJuICdjcHUnCiAKKyAgICBkZWYgcmVhbF9uYW1lKHNlbGYpOgorICAg
ICAgICAiIiJSZXR1cm5zIHRoZSBhY3R1YWwgbmFtZSBvZiB0aGUgcG9ydCwgbm90IHRoZSBkZWxl
Z2F0ZSdzLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5uYW1lKCkKKwogICAgIGRlZiBnZXRfb3B0
aW9uKHNlbGYsIG5hbWUsIGRlZmF1bHRfdmFsdWU9Tm9uZSk6CiAgICAgICAgICMgRklYTUU6IEV2
ZW50dWFsbHkgd2Ugc2hvdWxkIG5vdCBoYXZlIHRvIGRvIGEgdGVzdCBmb3IKICAgICAgICAgIyBo
YXNhdHRyKCksIGFuZCB3ZSBzaG91bGQgYmUgYWJsZSB0byBqdXN0IGRvCmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21vY2tfZHJ0LnB5IGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tb2NrX2RydC5weQppbmRleCAz
NzAzMjdmYjAxYjU4M2MwZGQwMjU4N2U2NDNkOTc4YjE4NGViMDFlLi4xMTQ3ODQ2ZDYwOTUwODQ0
YjU1M2MwZWYwMzcwMTJjZGFjNjFmNDhkIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L21vY2tfZHJ0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbW9ja19kcnQucHkKQEAgLTUzLDYgKzUzLDEwIEBAIGNs
YXNzIE1vY2tEUlRQb3J0KG9iamVjdCk6CiAgICAgICAgIGlmICdwb3J0X25hbWUnIGluIGt3YXJn
czoKICAgICAgICAgICAgIGt3YXJnc1sncG9ydF9uYW1lJ10gPSBrd2FyZ3NbJ3BvcnRfbmFtZSdd
W2xlbihwcmVmaXgpOl0KICAgICAgICAgc2VsZi5fX2RlbGVnYXRlID0gZmFjdG9yeS5nZXQoKipr
d2FyZ3MpCisgICAgICAgIHNlbGYuX19yZWFsX25hbWUgPSBwcmVmaXggKyBzZWxmLl9fZGVsZWdh
dGUubmFtZSgpCisKKyAgICBkZWYgcmVhbF9uYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2Vs
Zi5fX3JlYWxfbmFtZQogCiAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgogICAgICAg
ICByZXR1cm4gZ2V0YXR0cihzZWxmLl9fZGVsZWdhdGUsIG5hbWUpCkBAIC0yNzEsNyArMjc1LDYg
QEAgY2xhc3MgTW9ja0Nocm9taXVtRFJUKE1vY2tEUlQpOgogICAgICAgICBzZWxmLl9zdGRvdXQu
Zmx1c2goKQogCiAKLQogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICBmcyA9IGZpbGVz
eXN0ZW0uRmlsZVN5c3RlbSgpCiAgICAgc3lzLmV4aXQobWFpbihzeXMuYXJndlsxOl0sIGZzLCBz
eXMuc3RkaW4sIHN5cy5zdGRvdXQsIHN5cy5zdGRlcnIpKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weSBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5p
dHRlc3QucHkKaW5kZXggZmZmMzU3NzE2MTMxNzBmZmQyOGJjYWI0ZmJlMmU1OWIzM2FhMmY3NC4u
ZDQwMjkxYjgyOTkyNjVlYTM2N2M3MzA1OGRkNWRkODIzNjg5YmY5ZSAxMDA2NDQKLS0tIGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVz
dC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0
X3Rlc3RzX3VuaXR0ZXN0LnB5CkBAIC00NjcsNyArNDY3LDcgQEAgY2xhc3MgTWFpblRlc3QodW5p
dHRlc3QuVGVzdENhc2UpOgogICAgICAgICBzZWxmLmFzc2VydFRydWUocGFzc2luZ19ydW4oWyct
LXdvcmtlci1tb2RlbCcsICdvbGQtdGhyZWFkcyddKSkKIAogICAgIGRlZiB0ZXN0X3dvcmtlcl9t
b2RlbF9fcHJvY2Vzc2VzKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVy
cm9yLCBsb2dnaW5nX3J1biwgWyctLXdvcmtlci1tb2RlbCcsICdwcm9jZXNzZXMnXSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKHBhc3NpbmdfcnVuKFsnLS13b3JrZXItbW9kZWwnLCAncHJvY2Vz
c2VzJ10pKQogCiAgICAgZGVmIHRlc3Rfd29ya2VyX21vZGVsX190aHJlYWRzKHNlbGYpOgogICAg
ICAgICBzZWxmLmFzc2VydFRydWUocGFzc2luZ19ydW4oWyctLXdvcmtlci1tb2RlbCcsICd0aHJl
YWRzJ10pKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81325</attachid>
            <date>2011-02-04 16:59:54 -0800</date>
            <delta_ts>2011-02-08 19:04:48 -0800</delta_ts>
            <desc>incremental patch from bug 53656</desc>
            <filename>bug-49566-20110204165953.patch</filename>
            <type>text/plain</type>
            <size>42786</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBkZjM5
NzNlZDZhZWQ3NzFlNTAzZjNkYzMxYTc0NDU5OTczMTBjNTZmLi4xODI1NmY1MDNjZTc4NDk5NDc5
OTBkN2I1NWU5ZTgxNDhkYTAzNWM3IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMDEtMTAgIERpcmsgUHJhbmtl
ICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgbmV3LXJ1bi13ZWJraXQtdGVzdHM6IGNoZWNrcG9pbnQgbWVyZ2Ug
b2YgZHVhbC1tb2RlIG11bHRpcHJvY2Vzc2luZyB3b3JrCisKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5NTY2CisKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyX3dvcmtlcl9icm9rZXIu
cHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL21hbmFnZXJfd29ya2VyX2Jyb2tlcl91bml0dGVzdC5weTogQWRkZWQuCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWVzc2Fn
ZV9icm9rZXIyLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tlcjJfdW5pdHRlc3QucHk6IEFkZGVkLgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rl
c3RfcnVubmVyMi5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvbGF5b3V0X3BhY2thZ2Uvd29ya2VyLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHk6CisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9tYWMucHk6CisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tYWMucHk6CisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weToKKwogMjAxMS0wMi0w
MiAgRGlyayBQcmFua2UgIDxkcHJhbmtlQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21hbmFnZXJfd29ya2VyX2Jyb2tlci5weSBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21hbmFnZXJf
d29ya2VyX2Jyb2tlci5weQppbmRleCBlMGE0YjI1NGMwOTk2NWYyODM0MjQ5NzQyYjgwM2FhMmY3
MTk2NWIyLi43OGIzODIwOWYwZWJlMjcwM2E3MjUxMTJhY2NjMzNiMjhjYmZmOWIxIDEwMDY0NAot
LS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9t
YW5hZ2VyX3dvcmtlcl9icm9rZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlcl93b3JrZXJfYnJva2VyLnB5CkBAIC00MSw4
ICs0MSwxNCBAQCBldmVudHVhbGx5IHdvcmsgYXMgZm9sbG93czoKIAogaW1wb3J0IGxvZ2dpbmcK
IGltcG9ydCBvcHRwYXJzZQoraW1wb3J0IG9zCiBpbXBvcnQgUXVldWUKK2ltcG9ydCBzeXMKK2lt
cG9ydCB0aHJlYWQKIGltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCB0aW1lCitpbXBvcnQgdHJhY2Vi
YWNrCisKIAogIwogIyBIYW5kbGUgUHl0aG9uIDwgMi42IHdoZXJlIG11bHRpcHJvY2Vzc2luZyBp
c24ndCBhdmFpbGFibGUuCkBAIC01NywxMSArNjMsMTUgQEAgZXhjZXB0IEltcG9ydEVycm9yOgog
ICAgIF9NdWx0aXByb2Nlc3NpbmdfUXVldWUgPSBRdWV1ZS5RdWV1ZQogCiAKK2Zyb20gd2Via2l0
cHkgaW1wb3J0IGxheW91dF90ZXN0cworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMgaW1wb3J0
IHBvcnQKKwogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0
IG1lc3NhZ2VfYnJva2VyMgogCiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykK
IAorCiAjCiAjIFRvcGljIG5hbWVzIGZvciBNYW5hZ2VyIDwtPiBXb3JrZXIgbWVzc2FnaW5nCiAj
CkBAIC0xMTEsMzAgKzEyMSwyMDIgQEAgZGVmIGdldChwb3J0LCBvcHRpb25zLCBtYW5hZ2VyLCB3
b3JrZXJfY2xhc3MpOgogICAgIHJldHVybiBtYW5hZ2VyX2NsYXNzKGJyb2tlciwgcG9ydCwgb3B0
aW9ucywgbWFuYWdlciwgd29ya2VyX2NsYXNzKQogCiAKLWNsYXNzIF9BYnN0cmFjdE1hbmFnZXIo
b2JqZWN0KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCBwb3J0LCBvcHRpb25zLCBt
YW5hZ2VyLCB3b3JrZXJfY2xhc3MpOgotICAgICAgICAiIiJCYXNlIGluaXRpYWxpemF0aW9uIGZv
ciBhbGwgTWFuYWdlciBvYmplY3RzLgotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgICBicm9r
ZXI6IGhhbmRsZSB0byB0aGUgbWVzc2FnZV9icm9rZXIyIG9iamVjdAotICAgICAgICAgICAgcG9y
dDogaGFuZGxlIHRvIHBvcnQtc3BlY2lmaWMgZnVuY3Rpb25hbGl0eQotICAgICAgICAgICAgb3B0
aW9uczogY29tbWFuZCBsaW5lIG9wdGlvbnMgb2JqZWN0Ci0gICAgICAgICAgICBtYW5hZ2VyOiBN
YW5hZ2VyIGNhbGxiYWNrIG9iamVjdCAodGhlIGNhbGxlcikKLSAgICAgICAgICAgIHdvcmtlcl9j
bGFzczogY2xhc3Mgb2JqZWN0IHRvIHVzZSB0byBjcmVhdGUgd29ya2Vycy4KLSAgICAgICAgIiIi
CitjbGFzcyBfQWJzdHJhY3RNYW5hZ2VyKG1lc3NhZ2VfYnJva2VyMi5Ccm9rZXJDb25uZWN0aW9u
KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCBvcHRpb25zLCBtYW5hZ2VyLCB3b3Jr
ZXJfY2xhc3MpOgorICAgICAgICBtZXNzYWdlX2Jyb2tlcjIuQnJva2VyQ29ubmVjdGlvbi5fX2lu
aXRfXyhzZWxmLCBicm9rZXIsIE1BTkFHRVJfVE9QSUMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQU5ZX1dPUktFUl9UT1BJQykKICAgICAgICAgc2Vs
Zi5fYnJva2VyID0gYnJva2VyCiAgICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCiAgICAg
ICAgIHNlbGYuX21hbmFnZXIgPSBtYW5hZ2VyCisgICAgICAgIHNlbGYuX3dvcmtlcl9jb25uZWN0
aW9uX2NsYXNzID0gTm9uZQogICAgICAgICBzZWxmLl93b3JrZXJfY2xhc3MgPSB3b3JrZXJfY2xh
c3MKIAorICAgIGRlZiBfbWFrZV93b3JrZXJfY29ubmVjdGlvbihzZWxmKToKKyAgICAgICAgcmFp
c2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIF9tYWtlX3dvcmtlcihzZWxmLCB3b3Jr
ZXJfY29ubmVjdGlvbiwgd29ya2VyX251bWJlciwgKiprd2FyZ3MpOgorICAgICAgICByZXR1cm4g
c2VsZi5fd29ya2VyX2NsYXNzKHdvcmtlcl9jb25uZWN0aW9uLCB3b3JrZXJfbnVtYmVyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMsICoqa3dhcmdzKQor
CisgICAgZGVmIGNsaWVudChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX21hbmFnZXIKKwor
ICAgIGRlZiBzdGFydF93b3JrZXIoc2VsZiwgd29ya2VyX251bWJlciwgKiprd2FyZ3MpOgorICAg
ICAgICB3b3JrZXJfY29ubmVjdGlvbiA9IHNlbGYuX21ha2Vfd29ya2VyX2Nvbm5lY3Rpb24oKQor
ICAgICAgICB3b3JrZXIgPSBzZWxmLl9tYWtlX3dvcmtlcih3b3JrZXJfY29ubmVjdGlvbiwgd29y
a2VyX251bWJlciwgKiprd2FyZ3MpCisgICAgICAgIHdvcmtlcl9jb25uZWN0aW9uLnNldF93b3Jr
ZXIod29ya2VyKQorICAgICAgICB3b3JrZXJfY29ubmVjdGlvbi5zdGFydCgpCisgICAgICAgIHJl
dHVybiB3b3JrZXJfY29ubmVjdGlvbgorCiAKIGNsYXNzIF9JbmxpbmVNYW5hZ2VyKF9BYnN0cmFj
dE1hbmFnZXIpOgotICAgIHBhc3MKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCBwb3J0
LCBvcHRpb25zLCBtYW5hZ2VyLCB3b3JrZXJfY2xhc3MpOgorICAgICAgICBfQWJzdHJhY3RNYW5h
Z2VyLl9faW5pdF9fKHNlbGYsIGJyb2tlciwgb3B0aW9ucywgbWFuYWdlciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJfY2xhc3MpCisgICAgICAgIHNlbGYuX3BvcnQg
PSBwb3J0CisgICAgICAgIHNlbGYuX2lubGluZV93b3JrZXIgPSBOb25lCisKKyAgICBkZWYgX21h
a2Vfd29ya2VyX2Nvbm5lY3Rpb24oc2VsZik6CisgICAgICAgIHNlbGYuX2lubGluZV93b3JrZXIg
PSBfSW5saW5lV29ya2VyKHNlbGYuX2Jyb2tlciwgc2VsZi5fcG9ydCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbWFuYWdlcikKKyAgICAgICAgcmV0
dXJuIHNlbGYuX2lubGluZV93b3JrZXIKKworICAgIGRlZiBydW5fbWVzc2FnZV9sb29wKHNlbGYs
IGRlbGF5X3NlY3M9Tm9uZSk6CisgICAgICAgICMgTm90ZSB0aGF0IGRlbGF5X3NlY3MgaXMgaWdu
b3JlZCBpbiB0aGlzIGNhc2Ugc2luY2Ugd2UgY2FuJ3QgZWFzaWx5CisgICAgICAgICMgaW1wbGVt
ZW50IGl0LgorICAgICAgICBzZWxmLl9pbmxpbmVfd29ya2VyLnJ1bigpCisgICAgICAgIHNlbGYu
X2Jyb2tlci5ydW5fYWxsX3BlbmRpbmcoTUFOQUdFUl9UT1BJQywgc2VsZi5fbWFuYWdlcikKIAog
CiBjbGFzcyBfVGhyZWFkZWRNYW5hZ2VyKF9BYnN0cmFjdE1hbmFnZXIpOgotICAgIHBhc3MKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCBwb3J0LCBvcHRpb25zLCBtYW5hZ2VyLCB3b3Jr
ZXJfY2xhc3MpOgorICAgICAgICBfQWJzdHJhY3RNYW5hZ2VyLl9faW5pdF9fKHNlbGYsIGJyb2tl
ciwgb3B0aW9ucywgbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdvcmtlcl9jbGFzcykKKyAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKKworICAgIGRlZiBfbWFr
ZV93b3JrZXJfY29ubmVjdGlvbihzZWxmKToKKyAgICAgICAgcmV0dXJuIF9UaHJlYWRlZFdvcmtl
cihzZWxmLl9icm9rZXIsIHNlbGYuX3BvcnQpCiAKIAogY2xhc3MgX011bHRpUHJvY2Vzc01hbmFn
ZXIoX0Fic3RyYWN0TWFuYWdlcik6Ci0gICAgcGFzcworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBi
cm9rZXIsIHBvcnQsIG9wdGlvbnMsIG1hbmFnZXIsIHdvcmtlcl9jbGFzcyk6CisgICAgICAgIF9B
YnN0cmFjdE1hbmFnZXIuX19pbml0X18oc2VsZiwgYnJva2VyLCBvcHRpb25zLCBtYW5hZ2VyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyX2NsYXNzKQorICAgICAg
ICBzZWxmLl9wbGF0Zm9ybV9uYW1lID0gcG9ydC5yZWFsX25hbWUoKQorCisgICAgZGVmIF9tYWtl
X3dvcmtlcl9jb25uZWN0aW9uKHNlbGYpOgorICAgICAgICByZXR1cm4gX011bHRpUHJvY2Vzc1dv
cmtlcihzZWxmLl9icm9rZXIsIHNlbGYuX3BsYXRmb3JtX25hbWUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMpCisKKworY2xhc3MgX1dvcmtlckNvbm5l
Y3Rpb24obWVzc2FnZV9icm9rZXIyLkJyb2tlckNvbm5lY3Rpb24pOgorICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBicm9rZXIpOgorICAgICAgICBtZXNzYWdlX2Jyb2tlcjIuQnJva2VyQ29ubmVjdGlv
bi5fX2luaXRfXyhzZWxmLCBicm9rZXIsIEFOWV9XT1JLRVJfVE9QSUMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFOQUdFUl9UT1BJQykKKyAgICAg
ICAgc2VsZi5fd29ya2VyID0gTm9uZQorCisgICAgZGVmIHNldF93b3JrZXIoc2VsZiwgd29ya2Vy
KToKKyAgICAgICAgc2VsZi5fd29ya2VyID0gd29ya2VyCisgICAgICAgIHNlbGYubmFtZSA9IHdv
cmtlci5uYW1lKCkKKworICAgIGRlZiBjbGllbnQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxm
Ll93b3JrZXIKKworICAgIGRlZiBzdGFydChzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVt
ZW50ZWRFcnJvcgorCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVt
ZW50ZWRFcnJvcgorCisgICAgZGVmIHlpZWxkX3RvX2Jyb2tlcihzZWxmKToKKyAgICAgICAgcGFz
cworCisgICAgZGVmIGNhbmNlbChzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRF
cnJvcgorCisgICAgZGVmIGlzX2FsaXZlKHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1l
bnRlZEVycm9yCisKKyAgICBkZWYgam9pbihzZWxmLCB0aW1lb3V0KToKKyAgICAgICAgcmFpc2Ug
Tm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGxvZ193ZWRnZWRfd29ya2VyKHNlbGYsIHRl
c3RfbmFtZSk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworCitjbGFzcyBf
SW5saW5lV29ya2VyKF9Xb3JrZXJDb25uZWN0aW9uKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
YnJva2VyLCBwb3J0LCBtYW5hZ2VyKToKKyAgICAgICAgX1dvcmtlckNvbm5lY3Rpb24uX19pbml0
X18oc2VsZiwgYnJva2VyKQorICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAorICAgICAgICBzZWxm
Ll9tYW5hZ2VyID0gbWFuYWdlcgorICAgICAgICBzZWxmLl9hbGl2ZSA9IEZhbHNlCisKKyAgICBk
ZWYgc3RhcnQoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBydW4oc2VsZik6CisgICAg
ICAgIHNlbGYuX2FsaXZlID0gVHJ1ZQorICAgICAgICBzZWxmLl93b3JrZXIucnVuKHNlbGYuX3Bv
cnQpCisgICAgICAgIHNlbGYuX2FsaXZlID0gRmFsc2UKKworICAgIGRlZiB5aWVsZF90b19icm9r
ZXIoc2VsZik6CisgICAgICAgIHNlbGYuX2Jyb2tlci5ydW5fYWxsX3BlbmRpbmcoTUFOQUdFUl9U
T1BJQywgc2VsZi5fbWFuYWdlcikKKworICAgIGRlZiBjYW5jZWwoc2VsZik6CisgICAgICAgIHNl
bGYuX3dvcmtlci5jYW5jZWwoKQorCisgICAgZGVmIGlzX2FsaXZlKHNlbGYpOgorICAgICAgICBy
ZXR1cm4gc2VsZi5fYWxpdmUKKworICAgIGRlZiBqb2luKHNlbGYsIHRpbWVvdXQpOgorICAgICAg
ICBhc3NlcnQgbm90IHNlbGYuaXNfYWxpdmUoKQorCisgICAgZGVmIGxvZ193ZWRnZWRfd29ya2Vy
KHNlbGYsIHRlc3RfbmFtZSk6CisgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJfSW5saW5l
V29ya2VyLmxvZ193ZWRnZWRfd29ya2VyKCkgY2FsbGVkIikKKworCitjbGFzcyBfVGhyZWFkZWRX
b3JrZXIodGhyZWFkaW5nLlRocmVhZCwgX1dvcmtlckNvbm5lY3Rpb24pOgorICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBicm9rZXIsIHBvcnQpOgorICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLl9faW5p
dF9fKHNlbGYpCisgICAgICAgIF9Xb3JrZXJDb25uZWN0aW9uLl9faW5pdF9fKHNlbGYsIGJyb2tl
cikKKyAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKKworICAgIGRlZiBydW4oc2VsZik6CisgICAg
ICAgICMgRklYTUU6IFdlIGNhbiByZW1vdmUgdGhpcyBvbmNlIGV2ZXJ5b25lIGlzIG9uIDIuNi4K
KyAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgJ2lkZW50Jyk6CisgICAgICAgICAgICBzZWxm
LmlkZW50ID0gdGhyZWFkLmdldF9pZGVudCgpCisgICAgICAgIHNlbGYuX3dvcmtlci5ydW4oc2Vs
Zi5fcG9ydCkKKworICAgIGRlZiBjYW5jZWwoc2VsZik6CisgICAgICAgIHNlbGYuX3dvcmtlci5j
YW5jZWwoKQorCisgICAgZGVmIGlzX2FsaXZlKHNlbGYpOgorICAgICAgICAjIEZJWE1FOiBXZSBj
YW4gcmVtb3ZlIHRoaXMgb25jZSBldmVyeW9uZSBpcyBvbiAyLjYuCisgICAgICAgIHNlbGYuaXNB
bGl2ZSgpCisKKyAgICBkZWYgbG9nX3dlZGdlZF93b3JrZXIoc2VsZiwgdGVzdF9uYW1lKToKKyAg
ICAgICAgdGlkID0gc2VsZi5pZGVudAorICAgICAgICBzdGFjayA9IF9maW5kX3RocmVhZF9zdGFj
ayh0aWQpCisgICAgICAgIGFzc2VydChzdGFjayBpcyBub3QgTm9uZSkKKyAgICAgICAgX2xvZy5l
cnJvcigiJXMgKHRpZCAlZCkgaXMgd2VkZ2VkIG9uIHRlc3QgJXMiICUKKyAgICAgICAgICAgICAg
ICAgICAoc2VsZi5uYW1lLCB0aWQsIHRlc3RfbmFtZSkpCisgICAgICAgIF9sb2dfc3RhY2soc3Rh
Y2spCisKKworY2xhc3MgX011bHRpUHJvY2Vzc1dvcmtlcihfTXVsdGlwcm9jZXNzaW5nX1Byb2Nl
c3MsIF9Xb3JrZXJDb25uZWN0aW9uKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCBw
bGF0Zm9ybV9uYW1lLCBvcHRpb25zKToKKyAgICAgICAgX011bHRpcHJvY2Vzc2luZ19Qcm9jZXNz
Ll9faW5pdF9fKHNlbGYpCisgICAgICAgIF9Xb3JrZXJDb25uZWN0aW9uLl9faW5pdF9fKHNlbGYs
IGJyb2tlcikKKyAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKKyAgICAgICAgc2VsZi5f
cGxhdGZvcm1fbmFtZSA9IHBsYXRmb3JtX25hbWUKKworICAgIGRlZiBydW4oc2VsZik6CisgICAg
ICAgICMgUmUtY29uZmlndXJlIHRoZSBsb2dnZXIuCisgICAgICAgICMgRklYTUU6IGZpZ3VyZSBv
dXQgaG93IHRvIGdldCBhIGhhbmRsZSB0byB0aGUgcmlnaHQgc3RyZWFtLgorICAgICAgICBsb2dn
aW5nLmJhc2ljQ29uZmlnKCkKKyAgICAgICAgcG9ydCA9IGxheW91dF90ZXN0cy5wb3J0LmdldChz
ZWxmLl9wbGF0Zm9ybV9uYW1lLCBzZWxmLl9vcHRpb25zKQorICAgICAgICBzZWxmLl93b3JrZXIu
cnVuKHBvcnQpCisKKyAgICBkZWYgY2FuY2VsKHNlbGYpOgorICAgICAgICBzZWxmLnRlcm1pbmF0
ZSgpCisKKyAgICBkZWYgbG9nX3dlZGdlZF93b3JrZXIoc2VsZiwgdGVzdF9uYW1lKToKKyAgICAg
ICAgX2xvZy5lcnJvcigiJXMgKHBpZCAlZCkgaXMgd2VkZ2VkIG9uIHRlc3QgJXMiICUKKyAgICAg
ICAgICAgICAgICAgICAoc2VsZi5uYW1lLCBzZWxmLnBpZCwgdGVzdF9uYW1lKSkKKworCitkZWYg
X2ZpbmRfdGhyZWFkX3N0YWNrKHRpZCk6CisgICAgIiIiUmV0dXJucyBhIHN0YWNrIG9iamVjdCB0
aGF0IGNhbiBiZSB1c2VkIHRvIGR1bXAgYSBzdGFjayB0cmFjZSBmb3IKKyAgICB0aGUgZ2l2ZW4g
dGhyZWFkIGlkIChvciBOb25lIGlmIHRoZSBpZCBpcyBub3QgZm91bmQpLiIiIgorICAgIGZvciB0
aHJlYWRfaWQsIHN0YWNrIGluIHN5cy5fY3VycmVudF9mcmFtZXMoKS5pdGVtcygpOgorICAgICAg
ICBpZiB0aHJlYWRfaWQgPT0gdGlkOgorICAgICAgICAgICAgcmV0dXJuIHN0YWNrCisgICAgcmV0
dXJuIE5vbmUKKworCitkZWYgX2xvZ19zdGFjayhzdGFjayk6CisgICAgIiIiTG9nIGEgc3RhY2sg
dHJhY2UgdG8gbG9nLmVycm9yKCkuIiIiCisgICAgZm9yIGZpbGVuYW1lLCBsaW5lbm8sIG5hbWUs
IGxpbmUgaW4gdHJhY2ViYWNrLmV4dHJhY3Rfc3RhY2soc3RhY2spOgorICAgICAgICBfbG9nLmVy
cm9yKCdGaWxlOiAiJXMiLCBsaW5lICVkLCBpbiAlcycgJSAoZmlsZW5hbWUsIGxpbmVubywgbmFt
ZSkpCisgICAgICAgIGlmIGxpbmU6CisgICAgICAgICAgICBfbG9nLmVycm9yKCcgICVzJyAlIGxp
bmUuc3RyaXAoKSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2xheW91dF9wYWNrYWdlL21hbmFnZXJfd29ya2VyX2Jyb2tlcl91bml0dGVzdC5weSBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21hbmFnZXJf
d29ya2VyX2Jyb2tlcl91bml0dGVzdC5weQppbmRleCA3MDlmNzhmNTc4NDc5ZWE3NDU5MDIxMWQ5
Mjc1YjBmNWI2MWQ0ZDMwLi4yYTJmOTQxMDVkNjZjNmY5M2RiMjIxY2M3ZDc0N2FmYmIyMjlmM2Vh
IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRf
cGFja2FnZS9tYW5hZ2VyX3dvcmtlcl9icm9rZXJfdW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlcl93b3JrZXJf
YnJva2VyX3VuaXR0ZXN0LnB5CkBAIC00MCwxNCArNDAsNTUgQEAgZXhjZXB0IEltcG9ydEVycm9y
OgogCiAKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgb3V0cHV0Y2FwdHVyZQot
CiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cyBpbXBvcnQgcG9ydAotZnJvbSB3ZWJraXRweS5s
YXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IG1hbmFnZXJfd29ya2VyX2Jyb2tlcgot
ZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IG1lc3NhZ2Vf
YnJva2VyMgogCitpbXBvcnQgbWVzc2FnZV9icm9rZXIyCitpbXBvcnQgbWFuYWdlcl93b3JrZXJf
YnJva2VyCitpbXBvcnQgcHJpbnRpbmcKKworCitjbGFzcyBUZXN0V29ya2VyKG1lc3NhZ2VfYnJv
a2VyMi5Ccm9rZXJDbGllbnQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXIsIHdvcmtl
cl9udW1iZXIsIG9wdGlvbnMsICoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5fYnJva2VyID0gYnJv
a2VyCisgICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCisgICAgICAgIHNlbGYuX3dvcmtl
cl9udW1iZXIgPSB3b3JrZXJfbnVtYmVyCisgICAgICAgIHNlbGYuX25hbWUgPSAnVGVzdFdvcmtl
ci8lZCcgJSB3b3JrZXJfbnVtYmVyCisgICAgICAgIHNlbGYuX2NhbmNlbGVkID0gRmFsc2UKKyAg
ICAgICAgc2VsZi5fc3RvcHBlZCA9IEZhbHNlCisgICAgICAgIHNlbGYuX3N0YXJ0aW5nX3F1ZXVl
ID0ga3dhcmdzLmdldCgnc3RhcnRpbmdfcXVldWUnKQorICAgICAgICBzZWxmLl9zdG9wcGluZ19x
dWV1ZSA9IGt3YXJncy5nZXQoJ3N0b3BwaW5nX3F1ZXVlJykKKworICAgIGRlZiBjYW5jZWwoc2Vs
Zik6CisgICAgICAgIHNlbGYuX2NhbmNlbGVkID0gVHJ1ZQorCisgICAgZGVmIGhhbmRsZV9zdG9w
KHNlbGYsIHNyYyk6CisgICAgICAgIHNlbGYuX3N0b3BwZWQgPSBUcnVlCisKKyAgICBkZWYgaGFu
ZGxlX3Rlc3Qoc2VsZiwgc3JjLCBhbl9pbnQsIGFfc3RyKToKKyAgICAgICAgYXNzZXJ0IGFuX2lu
dCA9PSAxCisgICAgICAgIGFzc2VydCBhX3N0ciA9PSAiaGVsbG8sIHdvcmxkIgorICAgICAgICBz
ZWxmLl9icm9rZXIucG9zdF9tZXNzYWdlKCd0ZXN0JywgMiwgJ2hpLCBldmVyeWJvZHknKQogCi1j
bGFzcyBUZXN0V29ya2VyKG9iamVjdCk6Ci0gICAgcGFzcworICAgIGRlZiBpc19kb25lKHNlbGYp
OgorICAgICAgICByZXR1cm4gc2VsZi5fc3RvcHBlZCBvciBzZWxmLl9jYW5jZWxlZAorCisgICAg
ZGVmIG5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9uYW1lCisKKyAgICBkZWYgc3Rh
cnQoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBydW4oc2VsZiwgcG9ydCk6CisgICAg
ICAgIGlmIHNlbGYuX3N0YXJ0aW5nX3F1ZXVlOgorICAgICAgICAgICAgc2VsZi5fc3RhcnRpbmdf
cXVldWUucHV0KCcnKQorICAgICAgICBpZiBzZWxmLl9zdG9wcGluZ19xdWV1ZToKKyAgICAgICAg
ICAgIHNlbGYuX3N0b3BwaW5nX3F1ZXVlLmdldCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAg
IHNlbGYuX2Jyb2tlci5ydW5fbWVzc2FnZV9sb29wKCkKKyAgICAgICAgICAgIHNlbGYuX2Jyb2tl
ci55aWVsZF90b19icm9rZXIoKQorICAgICAgICAgICAgc2VsZi5fYnJva2VyLnBvc3RfbWVzc2Fn
ZSgnZG9uZScpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBzZWxm
Ll9icm9rZXIucG9zdF9tZXNzYWdlKCdleGNlcHRpb24nLCAodHlwZShlKSwgc3RyKGUpLCBOb25l
KSkKIAogCiBkZWYgZ2V0X29wdGlvbnMod29ya2VyX21vZGVsKToKQEAgLTc5LDYgKzEyMCwxNjEg
QEAgY2xhc3MgRnVuY3Rpb25UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3Rf
Z2V0X191bmtub3duKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9y
LCBtYWtlX2Jyb2tlciwgc2VsZiwgJ3Vua25vd24nKQogCisKK2NsYXNzIF9UZXN0c01peGluKG9i
amVjdCk6CisgICAgIiIiTWl4aW4gY2xhc3MgdGhhdCBpbXBsZW1lbnRzIGEgc2VyaWVzIG9mIHRl
c3RzIHRvIGVuZm9yY2UgdGhlCisgICAgY29udHJhY3QgYWxsIGltcGxlbWVudGF0aW9ucyBtdXN0
IGZvbGxvdy4iIiIKKworICAgICMKKyAgICAjIE1ldGhvZHMgdG8gaW1wbGVtZW50IHRoZSBNYW5h
Z2VyIHNpZGUgb2YgdGhlIENsaWVudEludGVyZmFjZQorICAgICMKKyAgICBkZWYgbmFtZShzZWxm
KToKKyAgICAgICAgcmV0dXJuICdUZXN0ZXInCisKKyAgICBkZWYgaXNfZG9uZShzZWxmKToKKyAg
ICAgICAgcmV0dXJuIHNlbGYuX2RvbmUKKworICAgICMKKyAgICAjIEhhbmRsZXJzIGZvciB0aGUg
bWVzc2FnZXMgdGhlIFRlc3RXb3JrZXIgbWF5IHNlbmQuCisgICAgIworICAgIGRlZiBoYW5kbGVf
ZG9uZShzZWxmLCBzcmMpOgorICAgICAgICBzZWxmLl9kb25lID0gVHJ1ZQorCisgICAgZGVmIGhh
bmRsZV90ZXN0KHNlbGYsIHNyYywgYW5faW50LCBhX3N0cik6CisgICAgICAgIHNlbGYuX2FuX2lu
dCA9IGFuX2ludAorICAgICAgICBzZWxmLl9hX3N0ciA9IGFfc3RyCisKKyAgICBkZWYgaGFuZGxl
X2V4Y2VwdGlvbihzZWxmLCBzcmMsIGV4Y19pbmZvKToKKyAgICAgICAgc2VsZi5fZXhjZXB0aW9u
ID0gZXhjX2luZm8KKyAgICAgICAgc2VsZi5fZG9uZSA9IFRydWUKKworICAgICMKKyAgICAjIFRl
c3RpbmcgaGVscGVyIG1ldGhvZHMKKyAgICAjCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAg
ICBzZWxmLl9hbl9pbnQgPSBOb25lCisgICAgICAgIHNlbGYuX2Ffc3RyID0gTm9uZQorICAgICAg
ICBzZWxmLl9icm9rZXIgPSBOb25lCisgICAgICAgIHNlbGYuX2RvbmUgPSBGYWxzZQorICAgICAg
ICBzZWxmLl9leGNlcHRpb24gPSBOb25lCisgICAgICAgIHNlbGYuX3dvcmtlcl9tb2RlbCA9IE5v
bmUKKworICAgIGRlZiBtYWtlX2Jyb2tlcihzZWxmKToKKyAgICAgICAgc2VsZi5fYnJva2VyID0g
bWFrZV9icm9rZXIoc2VsZiwgc2VsZi5fd29ya2VyX21vZGVsKQorCisgICAgIworICAgICMgQWN0
dWFsIHVuaXQgdGVzdHMKKyAgICAjCisgICAgZGVmIHRlc3RfY2FuY2VsKHNlbGYpOgorICAgICAg
ICBpZiBub3Qgc2VsZi5fd29ya2VyX21vZGVsOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAg
IHNlbGYubWFrZV9icm9rZXIoKQorICAgICAgICB3b3JrZXIgPSBzZWxmLl9icm9rZXIuc3RhcnRf
d29ya2VyKDApCisgICAgICAgIHdvcmtlci5jYW5jZWwoKQorICAgICAgICBzZWxmLl9icm9rZXIu
cG9zdF9tZXNzYWdlKCd0ZXN0JywgMSwgJ2hlbGxvLCB3b3JsZCcpCisgICAgICAgIHdvcmtlci5q
b2luKDAuNSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh3b3JrZXIuaXNfYWxpdmUoKSkKKwor
ICAgIGRlZiB0ZXN0X2RvbmUoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLl93b3JrZXJfbW9k
ZWw6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5tYWtlX2Jyb2tlcigpCisgICAg
ICAgIHdvcmtlciA9IHNlbGYuX2Jyb2tlci5zdGFydF93b3JrZXIoMCkKKyAgICAgICAgc2VsZi5f
YnJva2VyLnBvc3RfbWVzc2FnZSgndGVzdCcsIDEsICdoZWxsbywgd29ybGQnKQorICAgICAgICBz
ZWxmLl9icm9rZXIucG9zdF9tZXNzYWdlKCdzdG9wJykKKyAgICAgICAgc2VsZi5fYnJva2VyLnJ1
bl9tZXNzYWdlX2xvb3AoKQorICAgICAgICB3b3JrZXIuam9pbigwLjUpCisgICAgICAgIHNlbGYu
YXNzZXJ0RmFsc2Uod29ya2VyLmlzX2FsaXZlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShz
ZWxmLmlzX2RvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9hbl9pbnQsIDIp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYV9zdHIsICdoaSwgZXZlcnlib2R5JykK
KworICAgIGRlZiB0ZXN0X2xvZ193ZWRnZWRfd29ya2VyKHNlbGYpOgorICAgICAgICBpZiBub3Qg
c2VsZi5fd29ya2VyX21vZGVsOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHN0YXJ0aW5n
X3F1ZXVlID0gc2VsZi5xdWV1ZSgpCisgICAgICAgIHN0b3BwaW5nX3F1ZXVlID0gc2VsZi5xdWV1
ZSgpCisgICAgICAgIHNlbGYubWFrZV9icm9rZXIoKQorICAgICAgICBvYyA9IG91dHB1dGNhcHR1
cmUuT3V0cHV0Q2FwdHVyZSgpCisgICAgICAgIG9jLmNhcHR1cmVfb3V0cHV0KCkKKyAgICAgICAg
d29ya2VyID0gc2VsZi5fYnJva2VyLnN0YXJ0X3dvcmtlcigwLAorICAgICAgICAgICAgc3RhcnRp
bmdfcXVldWU9c3RhcnRpbmdfcXVldWUsIHN0b3BwaW5nX3F1ZXVlPXN0b3BwaW5nX3F1ZXVlKQor
ICAgICAgICBzdGFydGluZ19xdWV1ZS5nZXQoKQorICAgICAgICB3b3JrZXIubG9nX3dlZGdlZF93
b3JrZXIoJ3Rlc3RfbmFtZScpCisgICAgICAgIHN0b3BwaW5nX3F1ZXVlLnB1dCgnJykKKyAgICAg
ICAgc2VsZi5fYnJva2VyLnBvc3RfbWVzc2FnZSgnc3RvcCcpCisgICAgICAgIHNlbGYuX2Jyb2tl
ci5ydW5fbWVzc2FnZV9sb29wKCkKKyAgICAgICAgd29ya2VyLmpvaW4oMC41KQorICAgICAgICBv
Yy5yZXN0b3JlX291dHB1dCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uod29ya2VyLmlzX2Fs
aXZlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmlzX2RvbmUoKSkKKworICAgIGRl
ZiB0ZXN0X3Vua25vd25fbWVzc2FnZShzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuX3dvcmtl
cl9tb2RlbDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLm1ha2VfYnJva2VyKCkK
KyAgICAgICAgd29ya2VyID0gc2VsZi5fYnJva2VyLnN0YXJ0X3dvcmtlcigwKQorICAgICAgICBz
ZWxmLl9icm9rZXIucG9zdF9tZXNzYWdlKCd1bmtub3duJykKKyAgICAgICAgc2VsZi5fYnJva2Vy
LnJ1bl9tZXNzYWdlX2xvb3AoKQorICAgICAgICB3b3JrZXIuam9pbigwLjUpCisKKyAgICAgICAg
c2VsZi5hc3NlcnRUcnVlKHNlbGYuaXNfZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNl
KHdvcmtlci5pc19hbGl2ZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLl9leGNl
cHRpb25bMF0sIFZhbHVlRXJyb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuX2V4
Y2VwdGlvblsxXSwKKyAgICAgICAgICAgICJUZXN0V29ya2VyLzA6IHJlY2VpdmVkIG1lc3NhZ2Ug
J3Vua25vd24nIGl0IGNvdWxkbid0IGhhbmRsZSIpCisKKworY2xhc3MgSW5saW5lQnJva2VyVGVz
dHMoX1Rlc3RzTWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6
CisgICAgICAgIF9UZXN0c01peGluLnNldFVwKHNlbGYpCisgICAgICAgIHNlbGYuX3dvcmtlcl9t
b2RlbCA9ICdpbmxpbmUnCisKKyAgICBkZWYgdGVzdF9sb2dfd2VkZ2VkX3dvcmtlcihzZWxmKToK
KyAgICAgICAgc2VsZi5tYWtlX2Jyb2tlcigpCisgICAgICAgIHdvcmtlciA9IHNlbGYuX2Jyb2tl
ci5zdGFydF93b3JrZXIoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJy
b3IsIHdvcmtlci5sb2dfd2VkZ2VkX3dvcmtlciwgTm9uZSkKKworCitjbGFzcyBNdWx0aVByb2Nl
c3NCcm9rZXJUZXN0cyhfVGVzdHNNaXhpbiwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBz
ZXRVcChzZWxmKToKKyAgICAgICAgX1Rlc3RzTWl4aW4uc2V0VXAoc2VsZikKKyAgICAgICAgaWYg
X211bHRpcHJvY2Vzc2luZ19pc19hdmFpbGFibGU6CisgICAgICAgICAgICBzZWxmLl93b3JrZXJf
bW9kZWwgPSAncHJvY2Vzc2VzJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fd29y
a2VyX21vZGVsID0gTm9uZQorCisgICAgZGVmIHF1ZXVlKHNlbGYpOgorICAgICAgICByZXR1cm4g
X011bHRpcHJvY2Vzc2luZ19RdWV1ZSgpCisKKworY2xhc3MgVGhyZWFkZWRCcm9rZXJUZXN0cyhf
VGVzdHNNaXhpbiwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBxdWV1ZShzZWxmKToKKyAg
ICAgICAgcmV0dXJuIFF1ZXVlLlF1ZXVlKCkKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAg
ICAgX1Rlc3RzTWl4aW4uc2V0VXAoc2VsZikKKyAgICAgICAgc2VsZi5fd29ya2VyX21vZGVsID0g
J3RocmVhZHMnCisKKworY2xhc3MgRnVuY3Rpb25zVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Cisg
ICAgZGVmIHRlc3RfZmluZF90aHJlYWRfc3RhY2tfZm91bmQoc2VsZik6CisgICAgICAgIGlkLCBz
dGFjayA9IHN5cy5fY3VycmVudF9mcmFtZXMoKS5pdGVtcygpWzBdCisgICAgICAgIGZvdW5kX3N0
YWNrID0gbWFuYWdlcl93b3JrZXJfYnJva2VyLl9maW5kX3RocmVhZF9zdGFjayhpZCkKKyAgICAg
ICAgc2VsZi5hc3NlcnROb3RFcXVhbChmb3VuZF9zdGFjaywgTm9uZSkKKworICAgIGRlZiB0ZXN0
X2ZpbmRfdGhyZWFkX3N0YWNrX25vdF9mb3VuZChzZWxmKToKKyAgICAgICAgZm91bmRfc3RhY2sg
PSBtYW5hZ2VyX3dvcmtlcl9icm9rZXIuX2ZpbmRfdGhyZWFkX3N0YWNrKDApCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoZm91bmRfc3RhY2ssIE5vbmUpCisKKyAgICBkZWYgdGVzdF9sb2dfc3Rh
Y2soc2VsZik6CisgICAgICAgIGlkLCBzdGFjayA9IHN5cy5fY3VycmVudF9mcmFtZXMoKS5pdGVt
cygpWzBdCisgICAgICAgIG9jID0gb3V0cHV0Y2FwdHVyZS5PdXRwdXRDYXB0dXJlKCkKKyAgICAg
ICAgIyBGSVhNRTogdmVyaWZ5IG91dHB1dD8KKyAgICAgICAgb2MuY2FwdHVyZV9vdXRwdXQoKQor
ICAgICAgICBtYW5hZ2VyX3dvcmtlcl9icm9rZXIuX2xvZ19zdGFjayhzdGFjaykKKyAgICAgICAg
b2MucmVzdG9yZV9vdXRwdXQoKQorCiAgICAgZGVmIHRlc3RfcnVudGltZV9vcHRpb25zKHNlbGYp
OgogICAgICAgICBvcHRpb25fbGlzdCA9IG1hbmFnZXJfd29ya2VyX2Jyb2tlci5ydW50aW1lX29w
dGlvbnMoKQogICAgICAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIob3B0aW9uX2xp
c3Q9b3B0aW9uX2xpc3QpCkBAIC04Niw1ICsyODIsMzAgQEAgY2xhc3MgRnVuY3Rpb25UZXN0cyh1
bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcHRpb25zKQogCiAK
K2NsYXNzIEludGVyZmFjZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVGhlc2UgdGVz
dHMgbW9zdGx5IGV4aXN0IHRvIHBhY2lmeSBjb3ZlcmFnZS4KKworICAgICMgRklYTUU6IFRoZXJl
IG11c3QgYmUgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMgYW5kIGFsc28gdmVyaWZ5CisgICAgIyB0
aGF0IGNsYXNzZXMgZG8gaW1wbGVtZW50IGV2ZXJ5IGFic3RyYWN0IG1ldGhvZCBpbiBhbiBpbnRl
cmZhY2UuCisgICAgZGVmIHRlc3RfYWJzdHJhY3RtYW5hZ2VyX2lzX2Fic3RyYWN0KHNlbGYpOgor
ICAgICAgICAjIFRlc3QgdGhhdCBhbGwgdGhlIGJhc2UgY2xhc3MgbWV0aG9kcyBhcmUgYWJzdHJh
Y3QgYW5kIGhhdmUgdGhlCisgICAgICAgICMgc2lnbmF0dXJlIHdlIGV4cGVjdC4KKyAgICAgICAg
YnJva2VyID0gbWFrZV9icm9rZXIoc2VsZiwgJ2lubGluZScpCisgICAgICAgIG9iaiA9IG1hbmFn
ZXJfd29ya2VyX2Jyb2tlci5fQWJzdHJhY3RNYW5hZ2VyKGJyb2tlci5fYnJva2VyLCBOb25lLCBz
ZWxmLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9y
LCBvYmouX21ha2Vfd29ya2VyX2Nvbm5lY3Rpb24pCisKKyAgICBkZWYgdGVzdF93b3JrZXJjb25u
ZWN0aW9uX2lzX2Fic3RyYWN0KHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBhbGwgdGhlIGJh
c2UgY2xhc3MgbWV0aG9kcyBhcmUgYWJzdHJhY3QgYW5kIGhhdmUgdGhlCisgICAgICAgICMgc2ln
bmF0dXJlIHdlIGV4cGVjdC4KKyAgICAgICAgYnJva2VyID0gbWFrZV9icm9rZXIoc2VsZiwgJ2lu
bGluZScpCisgICAgICAgIG9iaiA9IG1hbmFnZXJfd29ya2VyX2Jyb2tlci5fV29ya2VyQ29ubmVj
dGlvbihicm9rZXIuX2Jyb2tlcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVt
ZW50ZWRFcnJvciwgb2JqLnN0YXJ0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBs
ZW1lbnRlZEVycm9yLCBvYmoucnVuKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBs
ZW1lbnRlZEVycm9yLCBvYmouY2FuY2VsKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJ
bXBsZW1lbnRlZEVycm9yLCBvYmouaXNfYWxpdmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2Vz
KE5vdEltcGxlbWVudGVkRXJyb3IsIG9iai5qb2luLCBOb25lKQorICAgICAgICBzZWxmLmFzc2Vy
dFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBvYmoubG9nX3dlZGdlZF93b3JrZXIsIE5vbmUp
CisKKwogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNr
YWdlL21lc3NhZ2VfYnJva2VyMi5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2VfYnJva2VyMi5weQppbmRleCBiMDg1OThlZDliOTQ0
ZTNjZTY2NzMzNWJmYzNiMzhiNmNkNTM2YmMwLi43NWMyMTYwZjEyOGU5MDRjMzIyYjg0OWFlZWJl
ODlmMDE5MmRkMmRhIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tlcjIucHkKKysrIGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWVzc2FnZV9icm9rZXIyLnB5
CkBAIC0xNDQsNyArMTQ0LDcgQEAgY2xhc3MgQnJva2VyKG9iamVjdCk6CiAgICAgICAgIHNlbGYu
X3J1bl9sb29wKHRvcGljX25hbWUsIGNsaWVudCwgYmxvY2s9RmFsc2UsIGRlbGF5X3NlY3M9Tm9u
ZSkKIAogICAgIGRlZiBfcnVuX2xvb3Aoc2VsZiwgdG9waWNfbmFtZSwgY2xpZW50LCBibG9jaywg
ZGVsYXlfc2Vjcyk6Ci0gICAgICAgIHF1ZXVlID0gc2VsZi5fZmluZF90b3BpYyh0b3BpY19uYW1l
KQorICAgICAgICBxdWV1ZSA9IHNlbGYuX2dldF9xdWV1ZV9mb3JfdG9waWModG9waWNfbmFtZSkK
ICAgICAgICAgd2hpbGUgbm90IGNsaWVudC5pc19kb25lKCk6CiAgICAgICAgICAgICB0cnk6CiAg
ICAgICAgICAgICAgICAgcyA9IHF1ZXVlLmdldChibG9jaywgZGVsYXlfc2VjcykKZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rl
c3RfcnVubmVyMi5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL3Rlc3RfcnVubmVyMi5weQppbmRleCBlYjc4NzUyNTVjM2MzYzEwY2M2ODFlNWJk
MWZlODAxZTM4MThjYmY3Li42ZDk5MmFkOGUzZjcyOWZkZTQ4YzIxNmU4ZGVkOWM5YmFmMzEyMGFh
IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRf
cGFja2FnZS90ZXN0X3J1bm5lcjIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9ydW5uZXIyLnB5CkBAIC0zNSwxOSArMzUsMTg0
IEBAIHRlc3RzIGFuZCB0aGVuIHByb2Nlc3MgdGhlIGNvbXBsZXRpb24gbWVzc2FnZXMgYWNjb3Jk
aW5nbHkuCiAiIiIKIAogaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCB0aW1lCiAKK2Zyb20gd2Via2l0
cHkudG9vbCBpbXBvcnQgZ3JhbW1hcgorCitpbXBvcnQgbWFuYWdlcl93b3JrZXJfYnJva2VyCiBp
bXBvcnQgdGVzdF9ydW5uZXIKK2ltcG9ydCB3b3JrZXIKIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9n
Z2VyKF9fbmFtZV9fKQogCiAKK2NsYXNzIF9Xb3JrZXJTdGF0ZShvYmplY3QpOgorICAgICIiIkEg
Y2xhc3MgZm9yIHRoZSBUZXN0UnVubmVyL21hbmFnZXIgdG8gdXNlIHRvIHRyYWNrIHRoZSBjdXJy
ZW50IHN0YXRlCisgICAgb2YgdGhlIHdvcmtlcnMuIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYs
IG51bWJlciwgd29ya2VyKToKKyAgICAgICAgc2VsZi53b3JrZXIgPSB3b3JrZXIKKyAgICAgICAg
c2VsZi5udW1iZXIgPSBudW1iZXIKKyAgICAgICAgc2VsZi5kb25lID0gRmFsc2UKKyAgICAgICAg
c2VsZi5uZXh0X3RpbWVvdXQgPSBOb25lCisgICAgICAgIHNlbGYud2VkZ2VkID0gRmFsc2UKKyAg
ICAgICAgc2VsZi5zdGF0cyA9IHt9CisgICAgICAgIHNlbGYuc3RhdHNbJ25hbWUnXSA9IHdvcmtl
ci5uYW1lCisgICAgICAgIHNlbGYuc3RhdHNbJ251bV90ZXN0cyddID0gMAorICAgICAgICBzZWxm
LnN0YXRzWyd0b3RhbF90aW1lJ10gPSAwCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAg
ICAgIHJldHVybiAiX1dvcmtlclN0YXRlKCIgKyBzdHIoc2VsZi5fX2RpY3RfXykgKyAiKSIKKwor
CiBjbGFzcyBUZXN0UnVubmVyMih0ZXN0X3J1bm5lci5UZXN0UnVubmVyKToKICAgICBkZWYgX19p
bml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucywgcHJpbnRlcik6CisgICAgICAgIHRlc3RfcnVubmVy
LlRlc3RSdW5uZXIuX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucywgcHJpbnRlcikKKyAgICAg
ICAgc2VsZi5fbWVzc2FnZV9icm9rZXIgPSBOb25lCiAKLSAgICAgICAgIyBGSVhNRTogVGhpcyds
bCBnZXQgcmVwbGFjZWQgd2l0aCBhIHJlYWwgaW1wbGVtZW50YXRpb24gc29vbiBlbm91Z2guCi0g
ICAgICAgIGlmIG9wdGlvbnMud29ya2VyX21vZGVsIGluICgnaW5saW5lJywgJ3RocmVhZHMnKToK
LSAgICAgICAgICAgIG9wdGlvbnMud29ya2VyX21vZGVsID0gJ29sZC0nICsgb3B0aW9ucy53b3Jr
ZXJfbW9kZWwKLSAgICAgICAgaWYgb3B0aW9ucy53b3JrZXJfbW9kZWwgPT0gJ3Byb2Nlc3Nlcyc6
Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCItLXdvcmtlci1tb2RlbD1wcm9jZXNzZXMg
bm90IHN1cHBvcnRlZCB5ZXQiKQorICAgICAgICAjIFRoaXMgbWFwcyB3b3JrZXIgbmFtZXMgdG8g
dGhlIHN0YXRlIHdlIGFyZSB0cmFja2luZyBmb3IgZWFjaCBvZiB0aGVtLgorICAgICAgICBzZWxm
Ll93b3JrZXJzID0ge30KIAotICAgICAgICB0ZXN0X3J1bm5lci5UZXN0UnVubmVyLl9faW5pdF9f
KHNlbGYsIHBvcnQsIG9wdGlvbnMsIHByaW50ZXIpCisgICAgZGVmIGlzX2RvbmUoc2VsZik6Cisg
ICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIG5hbWUoc2VsZik6CisgICAgICAgIHJldHVy
biAnVGVzdFJ1bm5lcjInCisKKyAgICBkZWYgX3J1bl90ZXN0cyhzZWxmLCBmaWxlX2xpc3QsIHJl
c3VsdF9zdW1tYXJ5KToKKyAgICAgICAgIiIiUnVucyB0aGUgdGVzdHMgaW4gdGhlIGZpbGVfbGlz
dC4KKworICAgICAgICBSZXR1cm46IEEgdHVwbGUgKGtleWJvYXJkX2ludGVycnVwdGVkLCB0aHJl
YWRfdGltaW5ncywgdGVzdF90aW1pbmdzLAorICAgICAgICAgICAgaW5kaXZpZHVhbF90ZXN0X3Rp
bWluZ3MpCisgICAgICAgICAgICBrZXlib2FyZF9pbnRlcnJ1cHRlZCBpcyB3aGV0aGVyIHNvbWVv
bmUgdHlwZWQgQ3RybF5DCisgICAgICAgICAgICB0aHJlYWRfdGltaW5ncyBpcyBhIGxpc3Qgb2Yg
ZGljdHMgd2l0aCB0aGUgdG90YWwgcnVudGltZQorICAgICAgICAgICAgICBvZiBlYWNoIHRocmVh
ZCB3aXRoICduYW1lJywgJ251bV90ZXN0cycsICd0b3RhbF90aW1lJyBwcm9wZXJ0aWVzCisgICAg
ICAgICAgICB0ZXN0X3RpbWluZ3MgaXMgYSBsaXN0IG9mIHRpbWluZ3MgZm9yIGVhY2ggc2hhcmRl
ZCBzdWJkaXJlY3RvcnkKKyAgICAgICAgICAgICAgb2YgdGhlIGZvcm0gW3RpbWUsIGRpcmVjdG9y
eV9uYW1lLCBudW1fdGVzdHNdCisgICAgICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncyBp
cyBhIGxpc3Qgb2YgcnVuIHRpbWVzIGZvciBlYWNoIHRlc3QKKyAgICAgICAgICAgICAgaW4gdGhl
IGZvcm0ge2ZpbGVuYW1lOmZpbGVuYW1lLCB0ZXN0X3J1bl90aW1lOnRlc3RfcnVuX3RpbWV9Cisg
ICAgICAgICAgICByZXN1bHRfc3VtbWFyeTogc3VtbWFyeSBvYmplY3QgdG8gcG9wdWxhdGUgd2l0
aCB0aGUgcmVzdWx0cworICAgICAgICAiIiIKKyAgICAgICAgbnVtX3dvcmtlcnMgPSBzZWxmLl9u
dW1fd29ya2VycygpCisKKyAgICAgICAgc2VsZi5fY3VycmVudF9maWxlX2xpc3QgPSBmaWxlX2xp
c3QKKyAgICAgICAgc2VsZi5fY3VycmVudF9yZXN1bHRfc3VtbWFyeSA9IHJlc3VsdF9zdW1tYXJ5
CisKKyAgICAgICAgc2VsZi5fYWxsX3Jlc3VsdHMgPSBbXQorICAgICAgICBzZWxmLl9ncm91cF9z
dGF0cyA9IHt9CisgICAgICAgIHNlbGYuX3dvcmtlcnMgPSB7fQorCisgICAgICAgIHNlbGYuX3By
aW50ZXIucHJpbnRfdXBkYXRlKCdTaGFyZGluZyB0ZXN0cyAuLi4nKQorICAgICAgICB0ZXN0X2xp
c3RzID0gc2VsZi5fc2hhcmRfdGVzdHMoZmlsZV9saXN0LAorICAgICAgICAgICAgbnVtX3dvcmtl
cnMgPiAxIGFuZCBub3Qgc2VsZi5fb3B0aW9ucy5leHBlcmltZW50YWxfZnVsbHlfcGFyYWxsZWwp
CisgICAgICAgIF9sb2cuZGVidWcoIlVzaW5nICVkIHNoYXJkcyIgJSBsZW4odGVzdF9saXN0cykp
CisKKyAgICAgICAgYnJva2VyID0gbWFuYWdlcl93b3JrZXJfYnJva2VyLmdldChzZWxmLl9wb3J0
LCBzZWxmLl9vcHRpb25zLCBzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdvcmtlci5Xb3JrZXIpCisKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF91
cGRhdGUoJ1N0YXJ0aW5nICVzIC4uLicgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBncmFtbWFyLnBsdXJhbGl6ZSgnd29ya2VyJywgbnVtX3dvcmtlcnMpKQorICAgICAgICBm
b3Igd29ya2VyX251bWJlciBpbiB4cmFuZ2UobnVtX3dvcmtlcnMpOgorICAgICAgICAgICAgdyA9
IGJyb2tlci5zdGFydF93b3JrZXIod29ya2VyX251bWJlcikKKyAgICAgICAgICAgIHdzID0gX1dv
cmtlclN0YXRlKHdvcmtlcl9udW1iZXIsIHcpCisgICAgICAgICAgICBzZWxmLl93b3JrZXJzW3cu
bmFtZV0gPSB3cworICAgICAgICAgICAgdGltZS5zbGVlcCgwLjEpCisKKyAgICAgICAgc2VsZi5f
cHJpbnRlci5wcmludF91cGRhdGUoIlN0YXJ0aW5nIHRlc3RpbmcgLi4uIikKKyAgICAgICAgZm9y
IHRlc3RfbGlzdCBpbiB0ZXN0X2xpc3RzOgorICAgICAgICAgICAgYnJva2VyLnBvc3RfbWVzc2Fn
ZSgndGVzdF9saXN0JywgdGVzdF9saXN0WzBdLCB0ZXN0X2xpc3RbMV0pCisKKyAgICAgICAgIyBU
ZWxsIHRoZSB3b3JrZXJzIHRvIHNodXQgZG93biBhZnRlciB0aGV5J3JlIGRvbmUgcnVubmluZyBh
bGwgdGhlCisgICAgICAgICMgdGVzdHMuCisgICAgICAgIGZvciBpIGluIHhyYW5nZShudW1fd29y
a2Vycyk6CisgICAgICAgICAgICBicm9rZXIucG9zdF9tZXNzYWdlKCdzdG9wJykKKworICAgICAg
ICBpbnRlcnJ1cHRlZCA9IEZhbHNlCisgICAgICAgIGtleWJvYXJkX2ludGVycnVwdGVkID0gRmFs
c2UKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX29wdGlvbnMuZHJ5X3J1
bjoKKyAgICAgICAgICAgICAgICB3aGlsZSBub3Qgc2VsZi5fY2hlY2tfaWZfZG9uZSgpOgorICAg
ICAgICAgICAgICAgICAgICBicm9rZXIucnVuX21lc3NhZ2VfbG9vcChkZWxheV9zZWNzPTEuMCkK
KworICAgICAgICAgICAgICAgIGZvciB3IGluIHNlbGYuX3dvcmtlcnMudmFsdWVzKCk6CisgICAg
ICAgICAgICAgICAgICAgIGlmIG5vdCB3LndlZGdlZCBhbmQgdy53b3JrZXIuaXNfYWxpdmUoKToK
KyAgICAgICAgICAgICAgICAgICAgICAgIHcud29ya2VyLmpvaW4oMC41KQorICAgICAgICAgICAg
ICAgICAgICAgICAgYXNzZXJ0IG5vdCB3Lndvcmtlci5pc19hbGl2ZSgpCisKKyAgICAgICAgZXhj
ZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgX2xvZy5pbmZvKCJJbnRlcnJ1cHRl
ZCwgZXhpdGluZyIpCisgICAgICAgICAgICBmb3IgdyBpbiBzZWxmLl93b3JrZXJzLnZhbHVlcygp
OgorICAgICAgICAgICAgICAgIHcud29ya2VyLmNhbmNlbCgpCisgICAgICAgICAgICBrZXlib2Fy
ZF9pbnRlcnJ1cHRlZCA9IFRydWUKKyAgICAgICAgZXhjZXB0IHRlc3RfcnVubmVyLlRlc3RSdW5J
bnRlcnJ1cHRlZEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIF9sb2cuaW5mbyhlLnJlYXNvbikK
KyAgICAgICAgICAgIGJyb2tlci5jYW5jZWxfd29ya2VycygpCisgICAgICAgICAgICBpbnRlcnJ1
cHRlZCA9IFRydWUKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgIyBVbmV4cGVjdGVkIGV4
Y2VwdGlvbjsgZG9uJ3QgdHJ5IHRvIGNsZWFuIHVwIHdvcmtlcnMuCisgICAgICAgICAgICBfbG9n
LmluZm8oIkV4Y2VwdGlvbiByYWlzZWQsIGV4aXRpbmciKQorICAgICAgICAgICAgcmFpc2UKKwor
ICAgICAgICB0aHJlYWRfdGltaW5ncyA9IFt3LnN0YXRzIGZvciB3IGluIHNlbGYuX3dvcmtlcnMu
dmFsdWVzKCldCisgICAgICAgIHJldHVybiAoaW50ZXJydXB0ZWQsIGtleWJvYXJkX2ludGVycnVw
dGVkLCB0aHJlYWRfdGltaW5ncywKKyAgICAgICAgICAgICAgICBzZWxmLl9ncm91cF9zdGF0cywg
c2VsZi5fYWxsX3Jlc3VsdHMpCisKKyAgICBkZWYgX2NoZWNrX2lmX2RvbmUoc2VsZik6CisgICAg
ICAgICIiIlJldHVybnMgdHJ1ZSBpZmYgYWxsIHRoZSB3b3JrZXJzIGhhdmUgZWl0aGVyIGNvbXBs
ZXRlZCBvciB3ZWRnZWQuIiIiCisgICAgICAgIGRvbmUgPSBUcnVlCisgICAgICAgIHQgPSB0aW1l
LnRpbWUoKQorICAgICAgICBmb3IgdyBpbiBzZWxmLl93b3JrZXJzLnZhbHVlcygpOgorICAgICAg
ICAgICAgaWYgbm90IHcuZG9uZSBhbmQgbm90IHcud2VkZ2VkOgorICAgICAgICAgICAgICAgIG5l
eHRfdGltZW91dCA9IHcubmV4dF90aW1lb3V0CisgICAgICAgICAgICAgICAgV0VER0VfUEFERElO
RyA9IDQwLjAKKyAgICAgICAgICAgICAgICBpZiBuZXh0X3RpbWVvdXQgYW5kIHQgPiBuZXh0X3Rp
bWVvdXQgKyBXRURHRV9QQURESU5HOgorICAgICAgICAgICAgICAgICAgICBfbG9nLmVycm9yKCcn
KQorICAgICAgICAgICAgICAgICAgICB3Lndvcmtlci5sb2dfd2VkZ2VkX3dvcmtlcih3LmN1cnJl
bnRfdGVzdF9uYW1lKQorICAgICAgICAgICAgICAgICAgICBfbG9nLmVycm9yKCcnKQorICAgICAg
ICAgICAgICAgICAgICB3LndlZGdlZCA9IFRydWUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgICAgICAgICBkb25lID0gRmFsc2UKKworICAgICAgICBpZiBkb25lOgorICAgICAg
ICAgICAgaWYgYW55KFt3LndlZGdlZCBmb3IgdyBpbiBzZWxmLl93b3JrZXJzLnZhbHVlcygpXSk6
CisgICAgICAgICAgICAgICAgX2xvZy5lcnJvcignJykKKyAgICAgICAgICAgICAgICBfbG9nLmVy
cm9yKCdSZW1haW5pbmcgd29ya2VycyBhcmUgd2VkZ2VkLCBiYWlsaW5nIG91dC4nKQorICAgICAg
ICAgICAgICAgIF9sb2cuZXJyb3IoJycpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAg
ICAgIF9sb2cuZGVidWcoJ05vIHdlZGdlZCB0aHJlYWRzJykKKyAgICAgICAgcmV0dXJuIGRvbmUK
KworICAgIGRlZiBoYW5kbGVfc3RhcnRlZF90ZXN0KHNlbGYsIHNyYywgdGVzdF9pbmZvLCBoYW5n
X3RpbWVvdXQpOgorICAgICAgICB3ID0gc2VsZi5fd29ya2Vyc1tzcmNdCisgICAgICAgIHcuY3Vy
cmVudF90ZXN0X25hbWUgPSBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoCisgICAg
ICAgICAgICB0ZXN0X2luZm8uZmlsZW5hbWUpCisgICAgICAgIHcubmV4dF90aW1lb3V0ID0gdGlt
ZS50aW1lKCkgKyBoYW5nX3RpbWVvdXQKKworICAgIGRlZiBoYW5kbGVfZG9uZShzZWxmLCBzcmMp
OgorICAgICAgICB3ID0gc2VsZi5fd29ya2Vyc1tzcmNdCisgICAgICAgIHcuZG9uZSA9IFRydWUK
KworICAgIGRlZiBoYW5kbGVfZmluaXNoZWRfdGVzdChzZWxmLCBzcmMsIHJlc3VsdCwgZWxhcHNl
ZF90aW1lKToKKyAgICAgICAgIiIiVXBkYXRlIHRoZSBzdW1tYXJ5IGFuZCBwcmludCByZXN1bHRz
IHdpdGggYW55IGNvbXBsZXRlZCB0ZXN0cy4iIiIKKyAgICAgICAgdyA9IHNlbGYuX3dvcmtlcnNb
c3JjXQorICAgICAgICB3Lm5leHRfdGltZW91dCA9IE5vbmUKKyAgICAgICAgdy5jdXJyZW50X3Rl
c3QgPSBOb25lCisKKyAgICAgICAgaWYgdy53ZWRnZWQ6CisgICAgICAgICAgICAjIEhtbS4gVGhp
cyBzaG91bGRuJ3QgaGFwcGVuIGlmIHdlIGhhdmUgb3VyIHRpbWVvdXRzCisgICAgICAgICAgICAj
IHR1bmVkIHByb3Blcmx5LgorICAgICAgICAgICAgX2xvZy5lcnJvcigiJXMgdW53ZWRnZWQiLCB3
Lm5hbWUpCisKKyAgICAgICAgc2VsZi5fdXBkYXRlX3dvcmtlcl9zdGF0cyhzcmMsIHJlc3VsdCwg
ZWxhcHNlZF90aW1lKQorCisgICAgICAgIHNlbGYuX3VwZGF0ZV9zdW1tYXJ5X3dpdGhfcmVzdWx0
KHNlbGYuX2N1cnJlbnRfcmVzdWx0X3N1bW1hcnksIHJlc3VsdCkKKworICAgIGRlZiBoYW5kbGVf
ZmluaXNoZWRfbGlzdChzZWxmLCBzcmMsIGxpc3RfbmFtZSwgbnVtX3Rlc3RzLCBlbGFwc2VkX3Rp
bWUpOgorICAgICAgICBzZWxmLl9ncm91cF9zdGF0c1tsaXN0X25hbWVdID0gKG51bV90ZXN0cywg
ZWxhcHNlZF90aW1lKQorCisgICAgZGVmIGhhbmRsZV9leGNlcHRpb24oc2VsZiwgc3JjLCBleGNl
cHRpb25faW5mbyk6CisgICAgICAgIHJhaXNlIGV4Y2VwdGlvbl9pbmZvCisKKyAgICBkZWYgX3Vw
ZGF0ZV93b3JrZXJfc3RhdHMoc2VsZiwgc3JjLCByZXN1bHQsIGVsYXBzZWRfdGltZSk6CisgICAg
ICAgIHNlbGYuX3dvcmtlcnNbc3JjXS5zdGF0c1sndG90YWxfdGltZSddICs9IGVsYXBzZWRfdGlt
ZQorICAgICAgICBzZWxmLl93b3JrZXJzW3NyY10uc3RhdHNbJ251bV90ZXN0cyddICs9IDEKKyAg
ICAgICAgc2VsZi5fYWxsX3Jlc3VsdHMuYXBwZW5kKHJlc3VsdCkKZGlmZiAtLWdpdCBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3dvcmtlci5weSBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3dvcmtl
ci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi44MThkOTk3Y2YxZTdkMGM3MDYwNzU0MjUwYzQ1YWExZjY4MzZiMzlk
Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bGF5b3V0X3BhY2thZ2Uvd29ya2VyLnB5CkBAIC0wLDAgKzEsMzMwIEBACisjIS91c3IvYmluL2Vu
diBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAxMCBHYWJvciBSYXBjc2FueWkgKHJnYWJvckBpbmYu
dS1zemVnZWQuaHUpLCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorIworIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwor
IiIiQSBUaHJlYWQgb2JqZWN0IGZvciBydW5uaW5nIER1bXBSZW5kZXJUcmVlIGFuZCBwcm9jZXNz
aW5nIFVSTHMgZnJvbSBhCitzaGFyZWQgcXVldWUuCisKK0VhY2ggdGhyZWFkIHJ1bnMgYSBzZXBh
cmF0ZSBpbnN0YW5jZSBvZiB0aGUgRHVtcFJlbmRlclRyZWUgYmluYXJ5IGFuZCB2YWxpZGF0ZXMK
K3RoZSBvdXRwdXQuICBXaGVuIHRoZXJlIGFyZSBubyBtb3JlIFVSTHMgdG8gcHJvY2VzcyBpbiB0
aGUgc2hhcmVkIHF1ZXVlLCB0aGUKK3RocmVhZCBleGl0cy4KKyIiIgorCitpbXBvcnQgY29weQor
aW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aHJlYWRp
bmcKK2ltcG9ydCB0aW1lCitpbXBvcnQgdHJhY2ViYWNrCisKK2Zyb20gd2Via2l0cHkubGF5b3V0
X3Rlc3RzLnRlc3RfdHlwZXMgaW1wb3J0IGltYWdlX2RpZmYKK2Zyb20gd2Via2l0cHkubGF5b3V0
X3Rlc3RzLnRlc3RfdHlwZXMgaW1wb3J0IHRlc3RfdHlwZV9iYXNlCitmcm9tIHdlYmtpdHB5Lmxh
eW91dF90ZXN0cy50ZXN0X3R5cGVzIGltcG9ydCB0ZXh0X2RpZmYKKworZnJvbSB3ZWJraXRweS5s
YXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IG1lc3NhZ2VfYnJva2VyMgorZnJvbSB3
ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IHNpbmdsZV90ZXN0X3J1
bm5lcgorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRl
c3RfZmFpbHVyZXMKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGlt
cG9ydCB0ZXN0X3Jlc3VsdHMKKworCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18p
CisKKworY2xhc3MgV29ya2VyKG1lc3NhZ2VfYnJva2VyMi5Ccm9rZXJDbGllbnQpOgorICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBicm9rZXIsIHdvcmtlcl9udW1iZXIsIG9wdGlvbnMpOgorICAgICAg
ICBzZWxmLl9icm9rZXIgPSBicm9rZXIKKyAgICAgICAgc2VsZi5fd29ya2VyX251bWJlciA9IHdv
cmtlcl9udW1iZXIKKyAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKKyAgICAgICAgc2Vs
Zi5fbmFtZSA9ICd3b3JrZXIvJWQnICUgd29ya2VyX251bWJlcgorICAgICAgICBzZWxmLl9jYW5j
ZWxlZCA9IEZhbHNlCisgICAgICAgIHNlbGYuX2RvbmUgPSBGYWxzZQorCisgICAgICAgIHNlbGYu
X3BvcnQgPSBOb25lCisgICAgICAgIHNlbGYuX2JhdGNoX2NvdW50ID0gMAorICAgICAgICBzZWxm
Ll9iYXRjaF9zaXplID0gMAorICAgICAgICBzZWxmLl9kcml2ZXIgPSBOb25lCisgICAgICAgIHNl
bGYuX2hhdmVfaHR0cF9sb2NrID0gRmFsc2UKKyAgICAgICAgc2VsZi5fdGVzdF90eXBlcyA9IFtd
CisgICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9maWxlID0gTm9uZQorCisgICAgZGVmIF9kZWZlcnJl
ZF9pbml0KHNlbGYsIHBvcnQpOgorICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAorICAgICAgICBz
ZWxmLl9maWxlc3lzdGVtID0gcG9ydC5fZmlsZXN5c3RlbQorICAgICAgICBzZWxmLl9iYXRjaF9z
aXplID0gc2VsZi5fb3B0aW9ucy5iYXRjaF9zaXplCisgICAgICAgIGZvciBjbHMgaW4gc2VsZi5f
Z2V0X3Rlc3RfdHlwZV9jbGFzc2VzKCk6CisgICAgICAgICAgICBzZWxmLl90ZXN0X3R5cGVzLmFw
cGVuZChjbHMoc2VsZi5fcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxmLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KSkKKworICAgICAgICAjIEFwcGVu
ZCB0ZXN0cyB3ZSdyZSBydW5uaW5nIHRvIHRoZSBleGlzdGluZyB0ZXN0c19ydW4udHh0IGZpbGUu
CisgICAgICAgICMgVGhpcyBpcyBjcmVhdGVkIGluIHJ1bl93ZWJraXRfdGVzdHMucHk6X1ByZXBh
cmVMaXN0c0FuZFByaW50T3V0cHV0LgorICAgICAgICB0ZXN0c19ydW5fZmlsZW5hbWUgPSBzZWxm
Ll9maWxlc3lzdGVtLmpvaW4oc2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0c19ydW4u
dHh0IikKKyAgICAgICAgc2VsZi5fdGVzdHNfcnVuX2ZpbGUgPSBzZWxmLl9maWxlc3lzdGVtLm9w
ZW5fdGV4dF9maWxlX2Zvcl93cml0aW5nKHRlc3RzX3J1bl9maWxlbmFtZSwgYXBwZW5kPVRydWUp
CisKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fY2xlYW51cCgpCisKKyAg
ICBkZWYgX2dldF90ZXN0X3R5cGVfY2xhc3NlcyhzZWxmKToKKyAgICAgICAgY2xhc3NlcyA9IFt0
ZXh0X2RpZmYuVGVzdFRleHREaWZmXQorICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnBpeGVsX3Rl
c3RzOgorICAgICAgICAgICAgY2xhc3Nlcy5hcHBlbmQoaW1hZ2VfZGlmZi5JbWFnZURpZmYpCisg
ICAgICAgIHJldHVybiBjbGFzc2VzCisKKyAgICBkZWYgY2FuY2VsKHNlbGYpOgorICAgICAgICAi
IiJBdHRlbXB0IHRvIGFib3J0IHByb2Nlc3NpbmcgKGJlc3QgZWZmb3J0KS4iIiIKKyAgICAgICAg
c2VsZi5fY2FuY2VsZWQgPSBUcnVlCisKKyAgICBkZWYgaXNfZG9uZShzZWxmKToKKyAgICAgICAg
IyBUaGlzIGlzIHVzZWQgZm9yIGFzc2VydGlvbiBjaGVja2luZyBpbiB0aGUgbWFuYWdlci4KKyAg
ICAgICAgcmV0dXJuIHNlbGYuX2RvbmUgb3Igc2VsZi5fY2FuY2VsZWQKKworICAgIGRlZiBuYW1l
KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQorCisgICAgZGVmIHJ1bihzZWxmLCBw
b3J0KToKKyAgICAgICAgc2VsZi5fZGVmZXJyZWRfaW5pdChwb3J0KQorCisgICAgICAgIGV4Y2Vw
dGlvbl9tc2cgPSAiIgorICAgICAgICBfbG9nLmRlYnVnKCIlcyBzdGFydGluZyIgJSBzZWxmLl9u
YW1lKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX2Jyb2tlci5ydW5fbWVzc2Fn
ZV9sb29wKCkKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmlzX2RvbmUoKToKKyAgICAgICAgICAg
ICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigiJXM6IHJhbiBvdXQgb2YgbWVzc2FnZXMgaW4gd29y
a2VyIHF1ZXVlLiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIHNlbGYu
X25hbWUpCisgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgIGV4
Y2VwdGlvbl9tc2cgPSAiLCBpbnRlcnJ1cHRlZCIKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAg
ICAgZXhjZXB0aW9uX21zZyA9ICIsIGV4Y2VwdGlvbiByYWlzZWQiCisgICAgICAgIGZpbmFsbHk6
CisgICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyBkb25lJXMiICUgKHNlbGYuX25hbWUsIGV4Y2Vw
dGlvbl9tc2cpKQorICAgICAgICAgICAgaWYgZXhjZXB0aW9uX21zZzoKKyAgICAgICAgICAgICAg
ICBleGNfaW5mbyA9IHN5cy5leGNfaW5mbygpCisgICAgICAgICAgICAgICAgc2VsZi5fbG9nX3Ry
YWNlYmFjayhleGNfaW5mb1syXSkKKyAgICAgICAgICAgICAgICAjIEZJWE1FOiBGaWd1cmUgb3V0
IGhvdyB0byBzZW5kIGEgbWVzc2FnZSB3aXRoIGEgdHJhY2ViYWNrLgorICAgICAgICAgICAgICAg
IHNlbGYuX2Jyb2tlci5wb3N0X21lc3NhZ2UoJ2V4Y2VwdGlvbicsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoZXhjX2luZm9bMF0sIGV4Y19pbmZvWzFdLCBOb25l
KSkKKyAgICAgICAgICAgIHNlbGYuX2Jyb2tlci5wb3N0X21lc3NhZ2UoJ2RvbmUnKQorICAgICAg
ICAgICAgc2VsZi5fY2xlYW51cCgpCisKKyAgICBkZWYgX2xvZ190cmFjZWJhY2soc2VsZiwgdGIp
OgorICAgICAgICBzdGFjayA9IHRyYWNlYmFjay5leHRyYWN0X3RiKHRiKQorICAgICAgICBmb3Ig
ZnJhbWVfc3RyIGluIHRyYWNlYmFjay5mb3JtYXRfbGlzdChzdGFjayk6CisgICAgICAgICAgICBm
b3IgbGluZSBpbiBmcmFtZV9zdHIuc3BsaXQoJ1xuJyk6CisgICAgICAgICAgICAgICAgaWYgbGlu
ZToKKyAgICAgICAgICAgICAgICAgICAgX2xvZy5lcnJvcigiICAlcyIgJSBsaW5lKQorCisgICAg
ZGVmIF9jbGVhbnVwKHNlbGYpOgorICAgICAgICBzZWxmLl9raWxsX2R1bXBfcmVuZGVyX3RyZWUo
KQorICAgICAgICBpZiBzZWxmLl9oYXZlX2h0dHBfbG9jazoKKyAgICAgICAgICAgIHNlbGYuX3N0
b3Bfc2VydmVyc193aXRoX2xvY2soKQorICAgICAgICBpZiBzZWxmLl90ZXN0c19ydW5fZmlsZToK
KyAgICAgICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9maWxlLmNsb3NlKCkKKyAgICAgICAgICAgIHNl
bGYuX3Rlc3RzX3J1bl9maWxlID0gTm9uZQorCisgICAgZGVmIGhhbmRsZV90ZXN0X2xpc3Qoc2Vs
Ziwgc3JjLCBsaXN0X25hbWUsIHRlc3RfbGlzdCk6CisgICAgICAgIGlmIGxpc3RfbmFtZSA9PSAi
dGVzdHNfdG9faHR0cF9sb2NrIjoKKyAgICAgICAgICAgIHNlbGYuX3N0YXJ0X3NlcnZlcnNfd2l0
aF9sb2NrKCkKKworICAgICAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgbnVt
X3Rlc3RzID0gMAorICAgICAgICBmb3IgdGVzdF9pbnB1dCBpbiB0ZXN0X2xpc3Q6CisgICAgICAg
ICAgICBzZWxmLl9ydW5fdGVzdCh0ZXN0X2lucHV0KQorICAgICAgICAgICAgc2VsZi5fYnJva2Vy
LnlpZWxkX3RvX2Jyb2tlcigpCisgICAgICAgICAgICBpZiBzZWxmLl9jYW5jZWxlZDoKKyAgICAg
ICAgICAgICAgICBicmVhaworICAgICAgICAgICAgbnVtX3Rlc3RzICs9IDEKKworICAgICAgICBl
bGFwc2VkX3RpbWUgPSB0aW1lLnRpbWUoKSAtIHN0YXJ0X3RpbWUKKworICAgICAgICBpZiBzZWxm
Ll9oYXZlX2h0dHBfbG9jazoKKyAgICAgICAgICAgIHNlbGYuX3N0b3Bfc2VydmVyc193aXRoX2xv
Y2soKQorCisgICAgICAgIHNlbGYuX2Jyb2tlci5wb3N0X21lc3NhZ2UoJ2ZpbmlzaGVkX2xpc3Qn
LCBsaXN0X25hbWUsIG51bV90ZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbGFwc2VkX3RpbWUpCisKKyAgICBkZWYgaGFuZGxlX3N0b3Aoc2VsZiwgc3JjKToKKyAgICAg
ICAgIiIiU3RvcCByZWNlaXZlZCAtIG5vIG1vcmUgdGVzdHMgdG8gcnVuLiIiIgorICAgICAgICBz
ZWxmLl9kb25lID0gVHJ1ZQorCisgICAgZGVmIF9ydW5fdGVzdChzZWxmLCB0ZXN0X2lucHV0KToK
KyAgICAgICAgc2VsZi5fc2V0X3VwX3Rlc3QodGVzdF9pbnB1dCkKKworICAgICAgICAjIFdlIGNh
bGN1bGF0ZSBob3cgbG9uZyB3ZSBleHBlY3QgdGhlIHRlc3QgdG8gdGFrZS4KKyAgICAgICAgIwor
ICAgICAgICAjIFRoZSBEdW1wUmVuZGVyVHJlZSB3YXRjaGRvZyB1c2VzIDIuNXggdGhlIHRpbWVv
dXQ7IHdlIHdhbnQgdG8gYmUKKyAgICAgICAgIyBsYXJnZXIgdGhhbiB0aGF0LiBXZSBhbHNvIGFk
ZCBhIGxpdHRsZSBtb3JlIHBhZGRpbmcgaWYgd2UncmUKKyAgICAgICAgIyBydW5uaW5nIHRlc3Rz
IGluIGEgc2VwYXJhdGUgdGhyZWFkLgorICAgICAgICAjCisgICAgICAgICMgTm90ZSB0aGF0IHdl
IG5lZWQgdG8gY29udmVydCB0aGUgdGVzdCB0aW1lb3V0IGZyb20gYQorICAgICAgICAjIHN0cmlu
ZyB2YWx1ZSBpbiBtaWxsaXNlY29uZHMgdG8gYSBmbG9hdCBmb3IgUHl0aG9uLgorICAgICAgICBk
cml2ZXJfdGltZW91dF9zZWMgPSAzLjAgKiBmbG9hdCh0ZXN0X2lucHV0LnRpbWVvdXQpIC8gMTAw
MC4wCisgICAgICAgIHRocmVhZF9wYWRkaW5nX3NlYyA9IDEuMAorICAgICAgICB0aHJlYWRfdGlt
ZW91dF9zZWMgPSBkcml2ZXJfdGltZW91dF9zZWMgKyB0aHJlYWRfcGFkZGluZ19zZWMKKyAgICAg
ICAgaWYgc2VsZi5fb3B0aW9ucy5ydW5fc2luZ2x5OgorICAgICAgICAgICAgdGVzdF90aW1lb3V0
X3NlYyA9IHRocmVhZF90aW1lb3V0X3NlYworICAgICAgICBlbHNlOgorICAgICAgICAgICAgdGVz
dF90aW1lb3V0X3NlYyA9IGRyaXZlcl90aW1lb3V0X3NlYworCisgICAgICAgIHN0YXJ0ID0gdGlt
ZS50aW1lKCkKKyAgICAgICAgc2VsZi5fYnJva2VyLnBvc3RfbWVzc2FnZSgnc3RhcnRlZF90ZXN0
JywgdGVzdF9pbnB1dCwgdGVzdF90aW1lb3V0X3NlYykKKworICAgICAgICBpZiBzZWxmLl9vcHRp
b25zLnJ1bl9zaW5nbHk6CisgICAgICAgICAgICByZXN1bHQgPSBzZWxmLl9ydW5fdGVzdF9pbl9h
bm90aGVyX3RocmVhZCh0ZXN0X2lucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkX3RpbWVvdXRfc2VjKQorICAgICAgICBlbHNl
OgorICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5fcnVuX3Rlc3RfaW5fdGhpc190aHJlYWQodGVz
dF9pbnB1dCkKKworICAgICAgICBzZWxmLl90ZWFyX2Rvd25fdGVzdCh0ZXN0X2lucHV0LCByZXN1
bHQsIHRpbWUudGltZSgpIC0gc3RhcnQpCisKKyAgICBkZWYgX3NldF91cF90ZXN0KHNlbGYsIHRl
c3RfaW5wdXQpOgorICAgICAgICB0ZXN0X2lucHV0LnVyaSA9IHNlbGYuX3BvcnQuZmlsZW5hbWVf
dG9fdXJpKHRlc3RfaW5wdXQuZmlsZW5hbWUpCisgICAgICAgIGlmIHNlbGYuX3Nob3VsZF9mZXRj
aF9leHBlY3RlZF9jaGVja3N1bSgpOgorICAgICAgICAgICAgdGVzdF9pbnB1dC5pbWFnZV9jaGVj
a3N1bSA9IHNlbGYuX3BvcnQuZXhwZWN0ZWRfY2hlY2tzdW0oCisgICAgICAgICAgICAgICAgdGVz
dF9pbnB1dC5maWxlbmFtZSkKKworICAgIGRlZiBfc2hvdWxkX2ZldGNoX2V4cGVjdGVkX2NoZWNr
c3VtKHNlbGYpOgorICAgICAgICByZXR1cm4gKHNlbGYuX29wdGlvbnMucGl4ZWxfdGVzdHMgYW5k
IG5vdAorICAgICAgICAgICAgICAgIChzZWxmLl9vcHRpb25zLm5ld19iYXNlbGluZSBvciBzZWxm
Ll9vcHRpb25zLnJlc2V0X3Jlc3VsdHMpKQorCisgICAgZGVmIF9ydW5fdGVzdF9pbl9hbm90aGVy
X3RocmVhZChzZWxmLCB0ZXN0X2lucHV0LCB0aHJlYWRfdGltZW91dF9zZWMpOgorICAgICAgICAi
IiJSdW4gYSB0ZXN0IGluIGEgc2VwYXJhdGUgdGhyZWFkLCBlbmZvcmNpbmcgYSBoYXJkIHRpbWUg
bGltaXQuCisKKyAgICAgICAgU2luY2Ugd2UgY2FuIG9ubHkgZGV0ZWN0IHRoZSB0ZXJtaW5hdGlv
biBvZiBhIHRocmVhZCwgbm90IGFueSBpbnRlcm5hbAorICAgICAgICBzdGF0ZSBvciBwcm9ncmVz
cywgd2UgY2FuIG9ubHkgcnVuIHBlci10ZXN0IHRpbWVvdXRzIHdoZW4gcnVubmluZyB0ZXN0Cisg
ICAgICAgIGZpbGVzIHNpbmdseS4KKworICAgICAgICBBcmdzOgorICAgICAgICAgIHRlc3RfaW5w
dXQ6IE9iamVjdCBjb250YWluaW5nIHRoZSB0ZXN0IGZpbGVuYW1lIGFuZCB0aW1lb3V0CisgICAg
ICAgICAgdGhyZWFkX3RpbWVvdXRfc2VjOiB0aW1lIHRvIHdhaXQgYmVmb3JlIGtpbGxpbmcgdGhl
IGRyaXZlciBwcm9jZXNzLgorICAgICAgICBSZXR1cm5zOgorICAgICAgICAgIEEgVGVzdFJlc3Vs
dAorICAgICAgICAiIiIKKyAgICAgICAgd29ya2VyID0gc2VsZgorICAgICAgICByZXN1bHQgPSBO
b25lCisKKyAgICAgICAgZHJpdmVyID0gd29ya2VyLl9wb3J0LmNyZWF0ZV9kcml2ZXIod29ya2Vy
Ll93b3JrZXJfbnVtYmVyKQorICAgICAgICBkcml2ZXIuc3RhcnQoKQorCisgICAgICAgIGNsYXNz
IFNpbmdsZVRlc3RUaHJlYWQodGhyZWFkaW5nLlRocmVhZCk6CisgICAgICAgICAgICBkZWYgcnVu
KHNlbGYpOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHdvcmtlci5fcnVuX3NpbmdsZV90ZXN0
KHRlc3RfaW5wdXQsIGRyaXZlcikKKworICAgICAgICB0aHJlYWQgPSBTaW5nbGVUZXN0VGhyZWFk
KCkKKyAgICAgICAgdGhyZWFkLnN0YXJ0KCkKKyAgICAgICAgdGhyZWFkLmpvaW4odGhyZWFkX3Rp
bWVvdXRfc2VjKQorICAgICAgICBpZiB0aHJlYWQuaXNBbGl2ZSgpOgorICAgICAgICAgICAgIyBJ
ZiBqb2luKCkgcmV0dXJuZWQgd2l0aCB0aGUgdGhyZWFkIHN0aWxsIHJ1bm5pbmcsIHRoZQorICAg
ICAgICAgICAgIyBEdW1wUmVuZGVyVHJlZSBpcyBjb21wbGV0ZWx5IGh1bmcgYW5kIHRoZXJlJ3Mg
bm90aGluZworICAgICAgICAgICAgIyBtb3JlIHdlIGNhbiBkbyB3aXRoIGl0LiAgV2UgaGF2ZSB0
byBraWxsIGFsbCB0aGUKKyAgICAgICAgICAgICMgRHVtcFJlbmRlclRyZWVzIHRvIGZyZWUgaXQg
dXAuIElmIHdlJ3JlIHJ1bm5pbmcgbW9yZSB0aGFuCisgICAgICAgICAgICAjIG9uZSBEdW1wUmVu
ZGVyVHJlZSB0aHJlYWQsIHdlJ2xsIGVuZCB1cCBraWxsaW5nIHRoZSBvdGhlcgorICAgICAgICAg
ICAgIyBEdW1wUmVuZGVyVHJlZXMgdG9vLCBpbnRyb2R1Y2luZyBzcHVyaW91cyBjcmFzaGVzLiBX
ZSBhY2NlcHQKKyAgICAgICAgICAgICMgdGhhdCB0cmFkZW9mZiBpbiBvcmRlciB0byBhdm9pZCBs
b3NpbmcgdGhlIHJlc3Qgb2YgdGhpcworICAgICAgICAgICAgIyB0aHJlYWQncyByZXN1bHRzLgor
ICAgICAgICAgICAgX2xvZy5lcnJvcignVGVzdCB0aHJlYWQgaHVuZzoga2lsbGluZyBhbGwgRHVt
cFJlbmRlclRyZWVzJykKKworICAgICAgICBkcml2ZXIuc3RvcCgpCisKKyAgICAgICAgaWYgbm90
IHJlc3VsdDoKKyAgICAgICAgICAgIHJlc3VsdCA9IHRlc3RfcmVzdWx0cy5UZXN0UmVzdWx0KHRl
c3RfaW5wdXQuZmlsZW5hbWUsIGZhaWx1cmVzPVtdLAorICAgICAgICAgICAgICAgIHRlc3RfcnVu
X3RpbWU9MCwgdG90YWxfdGltZV9mb3JfYWxsX2RpZmZzPTAsIHRpbWVfZm9yX2RpZmZzPXt9KQor
ICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgX3J1bl90ZXN0X2luX3RoaXNfdGhyZWFk
KHNlbGYsIHRlc3RfaW5wdXQpOgorICAgICAgICAiIiJSdW4gYSBzaW5nbGUgdGVzdCBmaWxlIHVz
aW5nIGEgc2hhcmVkIER1bXBSZW5kZXJUcmVlIHByb2Nlc3MuCisKKyAgICAgICAgQXJnczoKKyAg
ICAgICAgICB0ZXN0X2lucHV0OiBPYmplY3QgY29udGFpbmluZyB0aGUgdGVzdCBmaWxlbmFtZSwg
dXJpIGFuZCB0aW1lb3V0CisKKyAgICAgICAgUmV0dXJuczogYSBUZXN0UmVzdWx0IG9iamVjdC4K
KyAgICAgICAgIiIiCisgICAgICAgICMgcG9sbCgpIGlzIG5vdCB0aHJlYWRzYWZlIGFuZCBjYW4g
dGhyb3cgT1NFcnJvciBkdWUgdG86CisgICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9p
c3N1ZTE3MzE3MTcKKyAgICAgICAgaWYgbm90IHNlbGYuX2RyaXZlciBvciBzZWxmLl9kcml2ZXIu
cG9sbCgpIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fZHJpdmVyID0gc2VsZi5fcG9y
dC5jcmVhdGVfZHJpdmVyKHNlbGYuX3dvcmtlcl9udW1iZXIpCisgICAgICAgICAgICBzZWxmLl9k
cml2ZXIuc3RhcnQoKQorICAgICAgICByZXR1cm4gc2VsZi5fcnVuX3NpbmdsZV90ZXN0KHRlc3Rf
aW5wdXQsIHNlbGYuX2RyaXZlcikKKworICAgIGRlZiBfcnVuX3NpbmdsZV90ZXN0KHNlbGYsIHRl
c3RfaW5wdXQsIGRyaXZlcik6CisgICAgICAgIHJldHVybiBzaW5nbGVfdGVzdF9ydW5uZXIucnVu
X3NpbmdsZV90ZXN0KHNlbGYuX3BvcnQsIHNlbGYuX29wdGlvbnMsCisgICAgICAgICAgICB0ZXN0
X2lucHV0LCBkcml2ZXIsIHNlbGYuX25hbWUsIHNlbGYuX3Rlc3RfdHlwZXMpCisKKyAgICBkZWYg
X3RlYXJfZG93bl90ZXN0KHNlbGYsIHRlc3RfaW5wdXQsIHJlc3VsdCwgZWxhcHNlZF90aW1lKToK
KyAgICAgICAgc2VsZi5fYmF0Y2hfY291bnQgKz0gMQorICAgICAgICBzZWxmLl90ZXN0c19ydW5f
ZmlsZS53cml0ZSh0ZXN0X2lucHV0LmZpbGVuYW1lICsgIlxuIikKKyAgICAgICAgdGVzdF9uYW1l
ID0gc2VsZi5fcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKHRlc3RfaW5wdXQuZmlsZW5hbWUp
CisKKyAgICAgICAgaWYgcmVzdWx0LmZhaWx1cmVzOgorICAgICAgICAgICAgIyBDaGVjayBhbmQg
a2lsbCBEdW1wUmVuZGVyVHJlZSBpZiB3ZSBuZWVkIHRvLgorICAgICAgICAgICAgaWYgYW55KFtm
LnNob3VsZF9raWxsX2R1bXBfcmVuZGVyX3RyZWUoKSBmb3IgZiBpbiByZXN1bHQuZmFpbHVyZXNd
KToKKyAgICAgICAgICAgICAgICBzZWxmLl9raWxsX2R1bXBfcmVuZGVyX3RyZWUoKQorICAgICAg
ICAgICAgICAgICMgUmVzZXQgdGhlIGJhdGNoIGNvdW50IHNpbmNlIHRoZSBzaGVsbCBqdXN0IGJv
dW5jZWQuCisgICAgICAgICAgICAgICAgc2VsZi5fYmF0Y2hfY291bnQgPSAwCisKKyAgICAgICAg
ICAgICMgUHJpbnQgdGhlIGVycm9yIG1lc3NhZ2UocykuCisgICAgICAgICAgICBfbG9nLmRlYnVn
KCIlcyAlcyBmYWlsZWQ6IiAlIChzZWxmLl9uYW1lLCB0ZXN0X25hbWUpKQorICAgICAgICAgICAg
Zm9yIGYgaW4gcmVzdWx0LmZhaWx1cmVzOgorICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoIiVz
ICAlcyIgJSAoc2VsZi5fbmFtZSwgZi5tZXNzYWdlKCkpKQorICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgX2xvZy5kZWJ1ZygiJXMgJXMgcGFzc2VkIiAlIChzZWxmLl9uYW1lLCB0ZXN0X25hbWUp
KQorCisgICAgICAgIHNlbGYuX2Jyb2tlci5wb3N0X21lc3NhZ2UoJ2ZpbmlzaGVkX3Rlc3QnLCBy
ZXN1bHQsIGVsYXBzZWRfdGltZSkKKworICAgICAgICBpZiBzZWxmLl9iYXRjaF9zaXplID4gMCBh
bmQgc2VsZi5fYmF0Y2hfY291bnQgPj0gc2VsZi5fYmF0Y2hfc2l6ZToKKyAgICAgICAgICAgICMg
Qm91bmNlIHRoZSBzaGVsbCBhbmQgcmVzZXQgY291bnQuCisgICAgICAgICAgICBzZWxmLl9raWxs
X2R1bXBfcmVuZGVyX3RyZWUoKQorICAgICAgICAgICAgc2VsZi5fYmF0Y2hfY291bnQgPSAwCisK
KyAgICBkZWYgX3N0YXJ0X3NlcnZlcnNfd2l0aF9sb2NrKHNlbGYpOgorICAgICAgICBfbG9nLmRl
YnVnKCdBY3F1aXJpbmcgaHR0cCBsb2NrIC4uLicpCisgICAgICAgIHNlbGYuX3BvcnQuYWNxdWly
ZV9odHRwX2xvY2soKQorICAgICAgICBfbG9nLmRlYnVnKCdTdGFydGluZyBIVFRQIHNlcnZlciAu
Li4nKQorICAgICAgICBzZWxmLl9wb3J0LnN0YXJ0X2h0dHBfc2VydmVyKCkKKyAgICAgICAgX2xv
Zy5kZWJ1ZygnU3RhcnRpbmcgV2ViU29ja2V0IHNlcnZlciAuLi4nKQorICAgICAgICBzZWxmLl9w
b3J0LnN0YXJ0X3dlYnNvY2tldF9zZXJ2ZXIoKQorICAgICAgICBzZWxmLl9oYXZlX2h0dHBfbG9j
ayA9IFRydWUKKworICAgIGRlZiBfc3RvcF9zZXJ2ZXJzX3dpdGhfbG9jayhzZWxmKToKKyAgICAg
ICAgIiIiU3RvcCB0aGUgc2VydmVycyBhbmQgcmVsZWFzZSBodHRwIGxvY2suIiIiCisgICAgICAg
IGlmIHNlbGYuX2hhdmVfaHR0cF9sb2NrOgorICAgICAgICAgICAgX2xvZy5kZWJ1ZygnU3RvcHBp
bmcgSFRUUCBzZXJ2ZXIgLi4uJykKKyAgICAgICAgICAgIHNlbGYuX3BvcnQuc3RvcF9odHRwX3Nl
cnZlcigpCisgICAgICAgICAgICBfbG9nLmRlYnVnKCdTdG9wcGluZyBXZWJTb2NrZXQgc2VydmVy
IC4uLicpCisgICAgICAgICAgICBzZWxmLl9wb3J0LnN0b3Bfd2Vic29ja2V0X3NlcnZlcigpCisg
ICAgICAgICAgICBfbG9nLmRlYnVnKCdSZWxlYXNpbmcgc2VydmVyIGxvY2sgLi4uJykKKyAgICAg
ICAgICAgIHNlbGYuX3BvcnQucmVsZWFzZV9odHRwX2xvY2soKQorICAgICAgICAgICAgc2VsZi5f
aGF2ZV9odHRwX2xvY2sgPSBGYWxzZQorCisgICAgZGVmIF9raWxsX2R1bXBfcmVuZGVyX3RyZWUo
c2VsZik6CisgICAgICAgICIiIktpbGwgdGhlIER1bXBSZW5kZXJUcmVlIHByb2Nlc3MgaWYgaXQn
cyBydW5uaW5nLiIiIgorICAgICAgICBpZiBzZWxmLl9kcml2ZXI6CisgICAgICAgICAgICBzZWxm
Ll9kcml2ZXIuc3RvcCgpCisgICAgICAgICAgICBzZWxmLl9kcml2ZXIgPSBOb25lCmRpZmYgLS1n
aXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkKaW5kZXggZTNk
NWY4ZTlhNDU4ZjE5ZDE5MzA2NjgxMTM3MTA5YzhkY2U3NGZmZS4uOTc3OTkxY2RjZWE3NTkwNDg2
MTc4YmE4ZDA2MDg1Zjk1OTEzNWFmNSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weQpAQCAtNDczLDYgKzQ3MywxMCBAQCBjbGFzcyBQb3J0
KG9iamVjdCk6CiAgICAgICAgICgnY3B1JykuIiIiCiAgICAgICAgIHJldHVybiAnY3B1JwogCisg
ICAgZGVmIHJlYWxfbmFtZShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgYWN0dWFsIG5h
bWUgb2YgdGhlIHBvcnQsIG5vdCB0aGUgZGVsZWdhdGUncy4iIiIKKyAgICAgICAgcmV0dXJuIHNl
bGYubmFtZSgpCisKICAgICBkZWYgZ2V0X29wdGlvbihzZWxmLCBuYW1lLCBkZWZhdWx0X3ZhbHVl
PU5vbmUpOgogICAgICAgICAjIEZJWE1FOiBFdmVudHVhbGx5IHdlIHNob3VsZCBub3QgaGF2ZSB0
byBkbyBhIHRlc3QgZm9yCiAgICAgICAgICMgaGFzYXR0cigpLCBhbmQgd2Ugc2hvdWxkIGJlIGFi
bGUgdG8ganVzdCBkbwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC9tb2NrX2RydC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvbW9ja19kcnQucHkKaW5kZXggMzcwMzI3ZmIwMWI1ODNjMGRkMDI1ODdlNjQzZDk3
OGIxODRlYjAxZS4uMTE0Nzg0NmQ2MDk1MDg0NGI1NTNjMGVmMDM3MDEyY2RhYzYxZjQ4ZCAxMDA2
NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tb2NrX2Ry
dC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21vY2tf
ZHJ0LnB5CkBAIC01Myw2ICs1MywxMCBAQCBjbGFzcyBNb2NrRFJUUG9ydChvYmplY3QpOgogICAg
ICAgICBpZiAncG9ydF9uYW1lJyBpbiBrd2FyZ3M6CiAgICAgICAgICAgICBrd2FyZ3NbJ3BvcnRf
bmFtZSddID0ga3dhcmdzWydwb3J0X25hbWUnXVtsZW4ocHJlZml4KTpdCiAgICAgICAgIHNlbGYu
X19kZWxlZ2F0ZSA9IGZhY3RvcnkuZ2V0KCoqa3dhcmdzKQorICAgICAgICBzZWxmLl9fcmVhbF9u
YW1lID0gcHJlZml4ICsgc2VsZi5fX2RlbGVnYXRlLm5hbWUoKQorCisgICAgZGVmIHJlYWxfbmFt
ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX19yZWFsX25hbWUKIAogICAgIGRlZiBfX2dl
dGF0dHJfXyhzZWxmLCBuYW1lKToKICAgICAgICAgcmV0dXJuIGdldGF0dHIoc2VsZi5fX2RlbGVn
YXRlLCBuYW1lKQpAQCAtMjcxLDcgKzI3NSw2IEBAIGNsYXNzIE1vY2tDaHJvbWl1bURSVChNb2Nr
RFJUKToKICAgICAgICAgc2VsZi5fc3Rkb3V0LmZsdXNoKCkKIAogCi0KIGlmIF9fbmFtZV9fID09
ICdfX21haW5fXyc6CiAgICAgZnMgPSBmaWxlc3lzdGVtLkZpbGVTeXN0ZW0oKQogICAgIHN5cy5l
eGl0KG1haW4oc3lzLmFyZ3ZbMTpdLCBmcywgc3lzLnN0ZGluLCBzeXMuc3Rkb3V0LCBzeXMuc3Rk
ZXJyKSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1
bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5CmluZGV4IGZmZjM1NzcxNjEzMTcw
ZmZkMjhiY2FiNGZiZTJlNTliMzNhYTJmNzQuLmQ0MDI5MWI4Mjk5MjY1ZWEzNjdjNzMwNThkZDVk
ZDgyMzY4OWJmOWUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weQpAQCAtNDY3LDcg
KzQ2Nyw3IEBAIGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgc2Vs
Zi5hc3NlcnRUcnVlKHBhc3NpbmdfcnVuKFsnLS13b3JrZXItbW9kZWwnLCAnb2xkLXRocmVhZHMn
XSkpCiAKICAgICBkZWYgdGVzdF93b3JrZXJfbW9kZWxfX3Byb2Nlc3NlcyhzZWxmKToKLSAgICAg
ICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbG9nZ2luZ19ydW4sIFsnLS13b3JrZXIt
bW9kZWwnLCAncHJvY2Vzc2VzJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5nX3J1
bihbJy0td29ya2VyLW1vZGVsJywgJ3Byb2Nlc3NlcyddKSkKIAogICAgIGRlZiB0ZXN0X3dvcmtl
cl9tb2RlbF9fdGhyZWFkcyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3Npbmdf
cnVuKFsnLS13b3JrZXItbW9kZWwnLCAndGhyZWFkcyddKSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81730</attachid>
            <date>2011-02-08 19:05:11 -0800</date>
            <delta_ts>2011-02-08 19:30:37 -0800</delta_ts>
            <desc>merge to r77998</desc>
            <filename>bug-49566-20110208190510.patch</filename>
            <type>text/plain</type>
            <size>40100</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzc5OTgKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCBmMDllOTYzZDhlYTBhZmNlMzVjMzExOTdhMjFiODg4NzA1
ZTZiMDM5Li44NmI2YjI2YjViNzM2MTQ2YWU3NDJlN2VmY2E1MjkwN2E4N2YyYjczIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMjIg
QEAKIDIwMTEtMDItMDggIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CiAKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgbmV3LXJ1bi13ZWJr
aXQtdGVzdHM6IGNoZWNrcG9pbnQgbWVyZ2Ugb2YgZHVhbC1tb2RlIG11bHRpcHJvY2Vzc2luZyB3
b3JrCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5
NTY2CisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFj
a2FnZS9tYW5hZ2VyX3dvcmtlcl9icm9rZXIucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21hbmFnZXJfd29ya2VyX2Jyb2tl
cl91bml0dGVzdC5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvbGF5b3V0X3BhY2thZ2UvbWVzc2FnZV9icm9rZXIyLnB5OiBBZGRlZC4KKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jy
b2tlcjJfdW5pdHRlc3QucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfcnVubmVyMi5weTogQWRkZWQuCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvd29ya2VyLnB5
OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jh
c2UucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtp
dF90ZXN0c191bml0dGVzdC5weToKKworMjAxMS0wMi0wOCAgRGlyayBQcmFua2UgIDxkcHJhbmtl
QGNocm9taXVtLm9yZz4KKwogICAgICAgICBSZXZpZXdlZCBieSBUb255IENoYW5nLgogCiAgICAg
ICAgIG5ldy1ydW4td2Via2l0LXRlc3RzOiBtb3ZlIHRoZSBsb2dpYyB0aGF0IHN0YXJ0cyBhbmQg
c3RvcHMgdGhlCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyX3dvcmtlcl9icm9rZXIucHkgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyX3dvcmtlcl9icm9r
ZXIucHkKaW5kZXggNDA1MjY3Nzc5YWYxYTAzNDIzNDZkZTU4Njg4MDVmMDEzNGUyMzZhNy4uOWUx
NDcyY2U3MDFjMTdhNTAyYTdlMWYxMDI5M2U5NjE3YjAyMGYzMSAxMDA2NDQKLS0tIGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlcl93b3Jr
ZXJfYnJva2VyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL21hbmFnZXJfd29ya2VyX2Jyb2tlci5weQpAQCAtMjgsMzIgKzI4LDQwIEBA
CiAKICIiIk1vZHVsZSBmb3IgaGFuZGxpbmcgbWVzc2FnZXMgYW5kIGNvbmN1cnJlbmN5IGZvciBy
dW4td2Via2l0LXRlc3RzLgogCi1UaGlzIG1vZHVsZSBidWlsZHMgb24gdGhlIGZ1bmN0aW9uYWxp
dHkgb2YgbWVzc2FnZV9icm9rZXIyIHRvIHByb3ZpZGUKLWEgc2ltcGxlIG1lc3NhZ2UgYnJva2Vy
IGZvciBhIG1hbmFnZXIgc2VuZGluZyBtZXNzYWdlcyB0byAoYW5kIGdldHRpbmcKLXJlcGxpZXMg
ZnJvbSkgYSBwb29sIG9mIHdvcmtlcnMuIEluIGFkZGl0aW9uIGl0IHByb3ZpZGVzIGEgY2hvaWNl
IG9mCi1jb25jdXJyZW5jeSBtb2RlbHMgZm9yIGNhbGxlcnMgdG8gY2hvb3NlIGZyb20gKHNpbmds
ZS10aHJlYWRlZCBpbmxpbmUKLW1vZGVsLCB0aHJlYWRzLCBvciBwcm9jZXNzZXMpLgotCi1GSVhN
RTogQXQgdGhlIG1vbWVudCwgdGhpcyBtb2R1bGUgaXMganVzdCBhIGJ1bmNoIG9mIHN0dWJzLCBi
dXQgZXZlbnR1YWxseQotaXQgd2lsbCBwcm92aWRlIHRocmVlIHNldHMgb2YgbWFuYWdlciBjbGFz
c2VzIGFuZCB3b3JrZXIgY2xhc3NlcyBmb3IKLXRoZSB0aHJlZSBjb25jdXJyZW5jeSBtb2RlbHMu
IFRoZSBnZXQoKSBmYWN0b3J5IG1ldGhvZCBzZWxlY3RzIGJldHdlZW4KLXRoZW0uCitUaGlzIG1v
ZHVsZSBpbXBsZW1lbnRzIGEgbWVzc2FnZSBicm9rZXIgdGhhdCBjb25uZWN0cyB0aGUgbWFuYWdl
ciB0byB0aGUKK3dvcmtlcnM6IGl0IHByb3ZpZGVzIGEgbWVzc2FnaW5nIGFic3RyYWN0aW9uIGFu
ZCBtZXNzYWdlIGxvb3BzLCBhbmQKK2hhbmRsZXMgbGF1bmNoaW5nIHRocmVhZHMgYW5kL29yIHBy
b2Nlc3NlcyBkZXBlbmRpbmcgb24gdGhlIHJlcXVlc3RlZAorY29uZmlndXJhdGlvbi4KKworQm90
aCBNYW5hZ2VycyBhbmQgV29ya2VycyBhcmUgcmVxdWlyZWQgdG8gaW1wbGVtZW50IHRoZSBtZXRo
b2RzIGluIHRoZQorQnJva2VyQ2xpZW50IGludGVyZmFjZSAvIGFic3RyYWN0IGJhc2UgY2xhc3Mg
aW4gb3JkZXIgZm9yIHRoZSBtZXNzYWdlCiticm9rZXIgdG8gcHJvcGVybHkgY29tbXVuaWNhdGUg
d2l0aCB0aGVtLgorCiAiIiIKIAogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBvcHRwYXJzZQogaW1w
b3J0IFF1ZXVlCitpbXBvcnQgc3lzCitpbXBvcnQgdGhyZWFkCiBpbXBvcnQgdGhyZWFkaW5nCitp
bXBvcnQgdGltZQorCiAKLSMKICMgSGFuZGxlIFB5dGhvbiA8IDIuNiB3aGVyZSBtdWx0aXByb2Nl
c3NpbmcgaXNuJ3QgYXZhaWxhYmxlLgogIworIyBfTXVsdGlwcm9jZXNzaW5nX1Byb2Nlc3MgaXMg
bmVlZGVkIHNvIHRoYXQgX011bHRpUHJvY2Vzc1dvcmtlcgorIyBjYW4gYmUgZGVmaW5lZCB3aXRo
IG9yIHdpdGhvdXQgbXVsdGlwcm9jZXNzaW5nLgogdHJ5OgogICAgIGltcG9ydCBtdWx0aXByb2Nl
c3NpbmcKKyAgICBfTXVsdGlwcm9jZXNzaW5nX1Byb2Nlc3MgPSBtdWx0aXByb2Nlc3NpbmcuUHJv
Y2VzcwogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIG11bHRpcHJvY2Vzc2luZyA9IE5vbmUKKyAg
ICBfTXVsdGlwcm9jZXNzaW5nX1Byb2Nlc3MgPSB0aHJlYWRpbmcuVGhyZWFkCiAKIAorZnJvbSB3
ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBzdGFja191dGlscworZnJvbSB3ZWJraXRweS5s
YXlvdXRfdGVzdHMgaW1wb3J0IHBvcnQKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91
dF9wYWNrYWdlIGltcG9ydCBtZXNzYWdlX2Jyb2tlcjIKIAogCkBAIC03NywxMyArODUsMTMgQEAg
ZGVmIHJ1bnRpbWVfb3B0aW9ucygpOgogICAgIHJldHVybiBvcHRpb25zCiAKIAotZGVmIGdldChw
b3J0LCBvcHRpb25zLCBtYW5hZ2VyLCB3b3JrZXJfY2xhc3MpOgorZGVmIGdldChwb3J0LCBvcHRp
b25zLCBjbGllbnQsIHdvcmtlcl9jbGFzcyk6CiAgICAgIiIiUmV0dXJuIGEgY29ubmVjdGlvbiB0
byBhIG1hbmFnZXIvd29ya2VyIG1lc3NhZ2VfYnJva2VyCiAKICAgICBBcmdzOgogICAgICAgICBw
b3J0IC0gaGFuZGxlIHRvIGxheW91dF90ZXN0cy9wb3J0IG9iamVjdCBmb3IgcG9ydC1zcGVjaWZp
YyBzdHVmZgogICAgICAgICBvcHRpb25zIC0gb3B0cGFyc2UgYXJndW1lbnQgZm9yIGNvbW1hbmQt
bGluZSBvcHRpb25zCi0gICAgICAgIG1hbmFnZXIgLSBvYmplY3QgdG8gZGlzcGF0Y2ggcmVwbGll
cyB0bworICAgICAgICBjbGllbnQgLSBvYmplY3QgdG8gZGlzcGF0Y2ggcmVwbGllcyB0bwogICAg
ICAgICB3b3JrZXJfY2xhc3MgLSB0eXBlIG9mIHdvcmtlcnMgdG8gY3JlYXRlLiBUaGlzIGNsYXNz
IG11c3QgaW1wbGVtZW50CiAgICAgICAgICAgICB0aGUgbWV0aG9kcyBpbiBBYnN0cmFjdFdvcmtl
ci4KICAgICBSZXR1cm5zOgpAQCAtMTA1LDcgKzExMyw3IEBAIGRlZiBnZXQocG9ydCwgb3B0aW9u
cywgbWFuYWdlciwgd29ya2VyX2NsYXNzKToKICAgICAgICAgICAgICAgICAgICAgICAgICB3b3Jr
ZXJfbW9kZWwpCiAKICAgICBicm9rZXIgPSBtZXNzYWdlX2Jyb2tlcjIuQnJva2VyKG9wdGlvbnMs
IHF1ZXVlX2NsYXNzKQotICAgIHJldHVybiBtYW5hZ2VyX2NsYXNzKGJyb2tlciwgcG9ydCwgb3B0
aW9ucywgbWFuYWdlciwgd29ya2VyX2NsYXNzKQorICAgIHJldHVybiBtYW5hZ2VyX2NsYXNzKGJy
b2tlciwgcG9ydCwgb3B0aW9ucywgY2xpZW50LCB3b3JrZXJfY2xhc3MpCiAKIAogY2xhc3MgQWJz
dHJhY3RXb3JrZXIobWVzc2FnZV9icm9rZXIyLkJyb2tlckNsaWVudCk6CkBAIC0xMzYsMzAgKzE0
NCwxODMgQEAgY2xhc3MgQWJzdHJhY3RXb3JrZXIobWVzc2FnZV9icm9rZXIyLkJyb2tlckNsaWVu
dCk6CiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKIAogCi1jbGFzcyBfQWJzdHJh
Y3RNYW5hZ2VyKG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb2tlciwgcG9ydCwg
b3B0aW9ucywgbWFuYWdlciwgd29ya2VyX2NsYXNzKToKLSAgICAgICAgIiIiQmFzZSBpbml0aWFs
aXphdGlvbiBmb3IgYWxsIE1hbmFnZXIgb2JqZWN0cy4KLQotICAgICAgICBBcmdzOgotICAgICAg
ICAgICAgYnJva2VyOiBoYW5kbGUgdG8gdGhlIG1lc3NhZ2VfYnJva2VyMiBvYmplY3QKLSAgICAg
ICAgICAgIHBvcnQ6IGhhbmRsZSB0byBwb3J0LXNwZWNpZmljIGZ1bmN0aW9uYWxpdHkKLSAgICAg
ICAgICAgIG9wdGlvbnM6IGNvbW1hbmQgbGluZSBvcHRpb25zIG9iamVjdAotICAgICAgICAgICAg
bWFuYWdlcjogTWFuYWdlciBjYWxsYmFjayBvYmplY3QgKHRoZSBjYWxsZXIpCi0gICAgICAgICAg
ICB3b3JrZXJfY2xhc3M6IGNsYXNzIG9iamVjdCB0byB1c2UgdG8gY3JlYXRlIHdvcmtlcnMuCi0g
ICAgICAgICIiIgorY2xhc3MgX01hbmFnZXJDb25uZWN0aW9uKG1lc3NhZ2VfYnJva2VyMi5Ccm9r
ZXJDb25uZWN0aW9uKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCBvcHRpb25zLCBj
bGllbnQsIHdvcmtlcl9jbGFzcyk6CisgICAgICAgIG1lc3NhZ2VfYnJva2VyMi5Ccm9rZXJDb25u
ZWN0aW9uLl9faW5pdF9fKHNlbGYsIGJyb2tlciwgY2xpZW50LAorICAgICAgICAgICAgTUFOQUdF
Ul9UT1BJQywgQU5ZX1dPUktFUl9UT1BJQykKICAgICAgICAgc2VsZi5fYnJva2VyID0gYnJva2Vy
CiAgICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCi0gICAgICAgIHNlbGYuX21hbmFnZXIg
PSBtYW5hZ2VyCisgICAgICAgIHNlbGYuX2NsaWVudCA9IGNsaWVudAorICAgICAgICBzZWxmLl93
b3JrZXJfY29ubmVjdGlvbl9jbGFzcyA9IE5vbmUKICAgICAgICAgc2VsZi5fd29ya2VyX2NsYXNz
ID0gd29ya2VyX2NsYXNzCiAKKyAgICBkZWYgX21ha2Vfd29ya2VyX2Nvbm5lY3Rpb24oc2VsZik6
CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBfbWFrZV93b3Jr
ZXIoc2VsZiwgd29ya2VyX2Nvbm5lY3Rpb24sIHdvcmtlcl9udW1iZXIsICoqa3dhcmdzKToKKyAg
ICAgICAgcmV0dXJuIHNlbGYuX3dvcmtlcl9jbGFzcyh3b3JrZXJfY29ubmVjdGlvbiwgd29ya2Vy
X251bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9vcHRpb25z
LCAqKmt3YXJncykKKworICAgIGRlZiBjbGllbnQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxm
Ll9tYW5hZ2VyCisKKyAgICBkZWYgc3RhcnRfd29ya2VyKHNlbGYsIHdvcmtlcl9udW1iZXIsICoq
a3dhcmdzKToKKyAgICAgICAgd29ya2VyX2Nvbm5lY3Rpb24gPSBzZWxmLl9tYWtlX3dvcmtlcl9j
b25uZWN0aW9uKCkKKyAgICAgICAgd29ya2VyID0gc2VsZi5fbWFrZV93b3JrZXIod29ya2VyX2Nv
bm5lY3Rpb24sIHdvcmtlcl9udW1iZXIsICoqa3dhcmdzKQorICAgICAgICB3b3JrZXJfY29ubmVj
dGlvbi5zZXRfd29ya2VyKHdvcmtlcikKKyAgICAgICAgd29ya2VyX2Nvbm5lY3Rpb24uc3RhcnQo
KQorICAgICAgICByZXR1cm4gd29ya2VyX2Nvbm5lY3Rpb24KKworCitjbGFzcyBfSW5saW5lTWFu
YWdlcihfTWFuYWdlckNvbm5lY3Rpb24pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXIs
IHBvcnQsIG9wdGlvbnMsIGNsaWVudCwgd29ya2VyX2NsYXNzKToKKyAgICAgICAgX01hbmFnZXJD
b25uZWN0aW9uLl9faW5pdF9fKHNlbGYsIGJyb2tlciwgb3B0aW9ucywgY2xpZW50LCB3b3JrZXJf
Y2xhc3MpCisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CisgICAgICAgIHNlbGYuX2lubGluZV93
b3JrZXIgPSBOb25lCisKKyAgICBkZWYgX21ha2Vfd29ya2VyX2Nvbm5lY3Rpb24oc2VsZik6Cisg
ICAgICAgIHNlbGYuX2lubGluZV93b3JrZXIgPSBfSW5saW5lV29ya2VyKHNlbGYuX2Jyb2tlciwg
c2VsZi5fcG9ydCwgc2VsZi5fY2xpZW50KQorICAgICAgICByZXR1cm4gc2VsZi5faW5saW5lX3dv
cmtlcgorCisgICAgZGVmIHJ1bl9tZXNzYWdlX2xvb3Aoc2VsZiwgZGVsYXlfc2Vjcz1Ob25lKToK
KyAgICAgICAgIyBOb3RlIHRoYXQgZGVsYXlfc2VjcyBpcyBpZ25vcmVkIGluIHRoaXMgY2FzZSBz
aW5jZSB3ZSBjYW4ndCBlYXNpbHkKKyAgICAgICAgIyBpbXBsZW1lbnQgaXQuCisgICAgICAgIHNl
bGYuX2lubGluZV93b3JrZXIucnVuKCkKKyAgICAgICAgc2VsZi5fYnJva2VyLnJ1bl9hbGxfcGVu
ZGluZyhNQU5BR0VSX1RPUElDLCBzZWxmLl9jbGllbnQpCisKIAotY2xhc3MgX0lubGluZU1hbmFn
ZXIoX0Fic3RyYWN0TWFuYWdlcik6Ci0gICAgcGFzcworY2xhc3MgX1RocmVhZGVkTWFuYWdlcihf
TWFuYWdlckNvbm5lY3Rpb24pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXIsIHBvcnQs
IG9wdGlvbnMsIGNsaWVudCwgd29ya2VyX2NsYXNzKToKKyAgICAgICAgX01hbmFnZXJDb25uZWN0
aW9uLl9faW5pdF9fKHNlbGYsIGJyb2tlciwgb3B0aW9ucywgY2xpZW50LCB3b3JrZXJfY2xhc3Mp
CisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CiAKKyAgICBkZWYgX21ha2Vfd29ya2VyX2Nvbm5l
Y3Rpb24oc2VsZik6CisgICAgICAgIHJldHVybiBfVGhyZWFkZWRXb3JrZXIoc2VsZi5fYnJva2Vy
LCBzZWxmLl9wb3J0KQogCi1jbGFzcyBfVGhyZWFkZWRNYW5hZ2VyKF9BYnN0cmFjdE1hbmFnZXIp
OgotICAgIHBhc3MKIAorY2xhc3MgX011bHRpUHJvY2Vzc01hbmFnZXIoX01hbmFnZXJDb25uZWN0
aW9uKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCBwb3J0LCBvcHRpb25zLCBjbGll
bnQsIHdvcmtlcl9jbGFzcyk6CisgICAgICAgICMgTm90ZSB0aGF0IHRoaXMgY2xhc3MgZG9lcyBu
b3Qga2VlcCBhIGhhbmRsZSB0byB0aGUgYWN0dWFsIHBvcnQKKyAgICAgICAgIyBvYmplY3QsIGJl
Y2F1c2UgaXQgaXNuJ3QgUGlja2xhYmxlLiBJbnN0ZWFkIGl0IGtlZXBzIHRoZSBwb3J0CisgICAg
ICAgICMgbmFtZSBhbmQgcmVjcmVhdGVzIHRoZSBwb3J0IGluIHRoZSBjaGlsZCBwcm9jZXNzIGZy
b20gdGhlIG5hbWUKKyAgICAgICAgIyBhbmQgb3B0aW9ucy4KKyAgICAgICAgX01hbmFnZXJDb25u
ZWN0aW9uLl9faW5pdF9fKHNlbGYsIGJyb2tlciwgb3B0aW9ucywgY2xpZW50LCB3b3JrZXJfY2xh
c3MpCisgICAgICAgIHNlbGYuX3BsYXRmb3JtX25hbWUgPSBwb3J0LnJlYWxfbmFtZSgpCisKKyAg
ICBkZWYgX21ha2Vfd29ya2VyX2Nvbm5lY3Rpb24oc2VsZik6CisgICAgICAgIHJldHVybiBfTXVs
dGlQcm9jZXNzV29ya2VyKHNlbGYuX2Jyb2tlciwgc2VsZi5fcGxhdGZvcm1fbmFtZSwgc2VsZi5f
b3B0aW9ucykKKworCitjbGFzcyBfV29ya2VyQ29ubmVjdGlvbihtZXNzYWdlX2Jyb2tlcjIuQnJv
a2VyQ29ubmVjdGlvbik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb2tlcik6CisgICAgICAg
IG1lc3NhZ2VfYnJva2VyMi5Ccm9rZXJDb25uZWN0aW9uLl9faW5pdF9fKHNlbGYsIGJyb2tlciwg
Tm9uZSwgQU5ZX1dPUktFUl9UT1BJQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBNQU5BR0VSX1RPUElDKQorICAgICAgICBzZWxmLl93b3JrZXIgPSBO
b25lCisKKyAgICBkZWYgc2V0X3dvcmtlcihzZWxmLCB3b3JrZXIpOgorICAgICAgICBzZWxmLl93
b3JrZXIgPSB3b3JrZXIKKyAgICAgICAgc2VsZi5uYW1lID0gd29ya2VyLm5hbWUoKQorCisgICAg
ZGVmIGNsaWVudChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3dvcmtlcgorCisgICAgZGVm
IHN0YXJ0KHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBk
ZWYgcnVuKHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBk
ZWYgeWllbGRfdG9fYnJva2VyKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgY2FuY2Vs
KHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgaXNf
YWxpdmUoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRl
ZiBqb2luKHNlbGYsIHRpbWVvdXQpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9y
CisKKyAgICBkZWYgbG9nX3dlZGdlZF93b3JrZXIoc2VsZiwgdGVzdF9uYW1lKToKKyAgICAgICAg
cmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisKK2NsYXNzIF9JbmxpbmVXb3JrZXIoX1dvcmtl
ckNvbm5lY3Rpb24pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXIsIHBvcnQsIG1hbmFn
ZXJfY2xpZW50KToKKyAgICAgICAgX1dvcmtlckNvbm5lY3Rpb24uX19pbml0X18oc2VsZiwgYnJv
a2VyKQorICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAorICAgICAgICBzZWxmLl9tYW5hZ2VyX2Ns
aWVudCA9IG1hbmFnZXJfY2xpZW50CisgICAgICAgIHNlbGYuX2FsaXZlID0gRmFsc2UKKworICAg
IGRlZiBzdGFydChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHJ1bihzZWxmKToKKyAg
ICAgICAgc2VsZi5fYWxpdmUgPSBUcnVlCisgICAgICAgIHNlbGYuX2NsaWVudCA9IHNlbGYuX3dv
cmtlcgorICAgICAgICBzZWxmLl93b3JrZXIucnVuKHNlbGYuX3BvcnQpCisgICAgICAgIHNlbGYu
X2FsaXZlID0gRmFsc2UKKworICAgIGRlZiB5aWVsZF90b19icm9rZXIoc2VsZik6CisgICAgICAg
IHNlbGYuX2Jyb2tlci5ydW5fYWxsX3BlbmRpbmcoTUFOQUdFUl9UT1BJQywgc2VsZi5fbWFuYWdl
cl9jbGllbnQpCisKKyAgICBkZWYgY2FuY2VsKHNlbGYpOgorICAgICAgICBzZWxmLl93b3JrZXIu
Y2FuY2VsKCkKKworICAgIGRlZiBpc19hbGl2ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYu
X2FsaXZlCisKKyAgICBkZWYgam9pbihzZWxmLCB0aW1lb3V0KToKKyAgICAgICAgYXNzZXJ0IG5v
dCBzZWxmLmlzX2FsaXZlKCkKKworICAgIGRlZiBsb2dfd2VkZ2VkX3dvcmtlcihzZWxmLCB0ZXN0
X25hbWUpOgorICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigiX0lubGluZVdvcmtlci5sb2df
d2VkZ2VkX3dvcmtlcigpIGNhbGxlZCIpCisKKworY2xhc3MgX1RocmVhZGVkV29ya2VyKHRocmVh
ZGluZy5UaHJlYWQsIF9Xb3JrZXJDb25uZWN0aW9uKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
YnJva2VyLCBwb3J0KToKKyAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyhzZWxmKQor
ICAgICAgICBfV29ya2VyQ29ubmVjdGlvbi5fX2luaXRfXyhzZWxmLCBicm9rZXIpCisgICAgICAg
IHNlbGYuX3BvcnQgPSBwb3J0CisKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICAjIEZJWE1F
OiBXZSBjYW4gcmVtb3ZlIHRoaXMgb25jZSBldmVyeW9uZSBpcyBvbiAyLjYuCisgICAgICAgIGlm
IG5vdCBoYXNhdHRyKHNlbGYsICdpZGVudCcpOgorICAgICAgICAgICAgc2VsZi5pZGVudCA9IHRo
cmVhZC5nZXRfaWRlbnQoKQorICAgICAgICBzZWxmLl9jbGllbnQgPSBzZWxmLl93b3JrZXIKKyAg
ICAgICAgc2VsZi5fd29ya2VyLnJ1bihzZWxmLl9wb3J0KQorCisgICAgZGVmIGNhbmNlbChzZWxm
KToKKyAgICAgICAgc2VsZi5fd29ya2VyLmNhbmNlbCgpCisKKyAgICBkZWYgaXNfYWxpdmUoc2Vs
Zik6CisgICAgICAgICMgRklYTUU6IFdlIGNhbiByZW1vdmUgdGhpcyBvbmNlIGV2ZXJ5b25lIGlz
IG9uIDIuNi4KKyAgICAgICAgc2VsZi5pc0FsaXZlKCkKKworICAgIGRlZiBsb2dfd2VkZ2VkX3dv
cmtlcihzZWxmLCB0ZXN0X25hbWUpOgorICAgICAgICBzdGFja191dGlscy5sb2dfdGhyZWFkX3N0
YXRlKF9sb2cuZXJyb3IsIHNlbGYubmFtZSwgc2VsZi5pZGVudCwKKyAgICAgICAgICAgICIgaXMg
d2VkZ2VkIG9uIHRlc3QgJXMiICUgdGVzdF9uYW1lKQorCisKK2NsYXNzIF9NdWx0aVByb2Nlc3NX
b3JrZXIoX011bHRpcHJvY2Vzc2luZ19Qcm9jZXNzLCBfV29ya2VyQ29ubmVjdGlvbik6CisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIGJyb2tlciwgcGxhdGZvcm1fbmFtZSwgb3B0aW9ucyk6CisgICAg
ICAgIF9NdWx0aXByb2Nlc3NpbmdfUHJvY2Vzcy5fX2luaXRfXyhzZWxmKQorICAgICAgICBfV29y
a2VyQ29ubmVjdGlvbi5fX2luaXRfXyhzZWxmLCBicm9rZXIpCisgICAgICAgIHNlbGYuX29wdGlv
bnMgPSBvcHRpb25zCisgICAgICAgIHNlbGYuX3BsYXRmb3JtX25hbWUgPSBwbGF0Zm9ybV9uYW1l
CisKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICAjIFJlLWNvbmZpZ3VyZSB0aGUgbG9nZ2Vy
LgorICAgICAgICAjIEZJWE1FOiBmaWd1cmUgb3V0IGhvdyB0byBnZXQgYSBoYW5kbGUgdG8gdGhl
IHJpZ2h0IHN0cmVhbS4KKyAgICAgICAgbG9nZ2luZy5iYXNpY0NvbmZpZygpCisgICAgICAgIHBv
cnRfb2JqID0gcG9ydC5nZXQoc2VsZi5fcGxhdGZvcm1fbmFtZSwgc2VsZi5fb3B0aW9ucykKKyAg
ICAgICAgc2VsZi5fY2xpZW50ID0gc2VsZi5fd29ya2VyCisgICAgICAgIHNlbGYuX3dvcmtlci5y
dW4ocG9ydF9vYmopCisKKyAgICBkZWYgY2FuY2VsKHNlbGYpOgorICAgICAgICBzZWxmLnRlcm1p
bmF0ZSgpCiAKLWNsYXNzIF9NdWx0aVByb2Nlc3NNYW5hZ2VyKF9BYnN0cmFjdE1hbmFnZXIpOgot
ICAgIHBhc3MKKyAgICBkZWYgbG9nX3dlZGdlZF93b3JrZXIoc2VsZiwgdGVzdF9uYW1lKToKKyAg
ICAgICAgX2xvZy5lcnJvcigiJXMgKHBpZCAlZCkgaXMgd2VkZ2VkIG9uIHRlc3QgJXMiICUKKyAg
ICAgICAgICAgICAgICAgICAoc2VsZi5uYW1lLCBzZWxmLnBpZCwgdGVzdF9uYW1lKSkKZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdl
L21hbmFnZXJfd29ya2VyX2Jyb2tlcl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21hbmFnZXJfd29ya2VyX2Jyb2tlcl91bml0
dGVzdC5weQppbmRleCAwYTMwYmRkNDVmYjQxZjk5YWU5NDNhYjRjZWMwNzNjYzg5MjAyNWZhLi5h
ZGYyYmJkMjI0ZTk3ZTkwNTFlMWJkZmQzOTI3MjU0OGUzMDZkMjhkIDEwMDY0NAotLS0gYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyX3dv
cmtlcl9icm9rZXJfdW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlcl93b3JrZXJfYnJva2VyX3VuaXR0ZXN0LnB5
CkBAIC0yNyw2ICsyNyw3IEBACiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKIGltcG9ydCBvcHRwYXJzZQoraW1w
b3J0IFF1ZXVlCiBpbXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QKIApAQCAtNDMsOCArNDQsNDgg
QEAgZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IG1hbmFn
ZXJfd29ya2VyX2Jyb2tlcgogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2th
Z2UgaW1wb3J0IG1lc3NhZ2VfYnJva2VyMgogCiAKLWNsYXNzIFRlc3RXb3JrZXIob2JqZWN0KToK
LSAgICBwYXNzCitjbGFzcyBUZXN0V29ya2VyKG1hbmFnZXJfd29ya2VyX2Jyb2tlci5BYnN0cmFj
dFdvcmtlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb2tlciwgd29ya2VyX251bWJlciwg
b3B0aW9ucywgKiprd2FyZ3MpOgorICAgICAgICBzZWxmLl9icm9rZXIgPSBicm9rZXIKKyAgICAg
ICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKKyAgICAgICAgc2VsZi5fd29ya2VyX251bWJlciA9
IHdvcmtlcl9udW1iZXIKKyAgICAgICAgc2VsZi5fbmFtZSA9ICdUZXN0V29ya2VyLyVkJyAlIHdv
cmtlcl9udW1iZXIKKyAgICAgICAgc2VsZi5fY2FuY2VsZWQgPSBGYWxzZQorICAgICAgICBzZWxm
Ll9zdG9wcGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5fc3RhcnRpbmdfcXVldWUgPSBrd2FyZ3Mu
Z2V0KCdzdGFydGluZ19xdWV1ZScpCisgICAgICAgIHNlbGYuX3N0b3BwaW5nX3F1ZXVlID0ga3dh
cmdzLmdldCgnc3RvcHBpbmdfcXVldWUnKQorCisgICAgZGVmIGNhbmNlbChzZWxmKToKKyAgICAg
ICAgc2VsZi5fY2FuY2VsZWQgPSBUcnVlCisKKyAgICBkZWYgaGFuZGxlX3N0b3Aoc2VsZiwgc3Jj
KToKKyAgICAgICAgc2VsZi5fc3RvcHBlZCA9IFRydWUKKworICAgIGRlZiBoYW5kbGVfdGVzdChz
ZWxmLCBzcmMsIGFuX2ludCwgYV9zdHIpOgorICAgICAgICBhc3NlcnQgYW5faW50ID09IDEKKyAg
ICAgICAgYXNzZXJ0IGFfc3RyID09ICJoZWxsbywgd29ybGQiCisgICAgICAgIHNlbGYuX2Jyb2tl
ci5wb3N0X21lc3NhZ2UoJ3Rlc3QnLCAyLCAnaGksIGV2ZXJ5Ym9keScpCisKKyAgICBkZWYgaXNf
ZG9uZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3N0b3BwZWQgb3Igc2VsZi5fY2FuY2Vs
ZWQKKworICAgIGRlZiBuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQorCisg
ICAgZGVmIHN0YXJ0KHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgcnVuKHNlbGYsIHBv
cnQpOgorICAgICAgICBpZiBzZWxmLl9zdGFydGluZ19xdWV1ZToKKyAgICAgICAgICAgIHNlbGYu
X3N0YXJ0aW5nX3F1ZXVlLnB1dCgnJykKKyAgICAgICAgaWYgc2VsZi5fc3RvcHBpbmdfcXVldWU6
CisgICAgICAgICAgICBzZWxmLl9zdG9wcGluZ19xdWV1ZS5nZXQoKQorICAgICAgICB0cnk6Cisg
ICAgICAgICAgICBzZWxmLl9icm9rZXIucnVuX21lc3NhZ2VfbG9vcCgpCisgICAgICAgICAgICBz
ZWxmLl9icm9rZXIueWllbGRfdG9fYnJva2VyKCkKKyAgICAgICAgICAgIHNlbGYuX2Jyb2tlci5w
b3N0X21lc3NhZ2UoJ2RvbmUnKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAg
ICAgICAgc2VsZi5fYnJva2VyLnBvc3RfbWVzc2FnZSgnZXhjZXB0aW9uJywgKHR5cGUoZSksIHN0
cihlKSwgTm9uZSkpCiAKIAogZGVmIGdldF9vcHRpb25zKHdvcmtlcl9tb2RlbCk6CkBAIC03Niw2
ICsxMTcsMTQ0IEBAIGNsYXNzIEZ1bmN0aW9uVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAg
IGRlZiB0ZXN0X2dldF9fdW5rbm93bihzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMo
VmFsdWVFcnJvciwgbWFrZV9icm9rZXIsIHNlbGYsICd1bmtub3duJykKIAorCitjbGFzcyBfVGVz
dHNNaXhpbihvYmplY3QpOgorICAgICIiIk1peGluIGNsYXNzIHRoYXQgaW1wbGVtZW50cyBhIHNl
cmllcyBvZiB0ZXN0cyB0byBlbmZvcmNlIHRoZQorICAgIGNvbnRyYWN0IGFsbCBpbXBsZW1lbnRh
dGlvbnMgbXVzdCBmb2xsb3cuIiIiCisKKyAgICAjCisgICAgIyBNZXRob2RzIHRvIGltcGxlbWVu
dCB0aGUgTWFuYWdlciBzaWRlIG9mIHRoZSBDbGllbnRJbnRlcmZhY2UKKyAgICAjCisgICAgZGVm
IG5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiAnVGVzdGVyJworCisgICAgZGVmIGlzX2RvbmUo
c2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9kb25lCisKKyAgICAjCisgICAgIyBIYW5kbGVy
cyBmb3IgdGhlIG1lc3NhZ2VzIHRoZSBUZXN0V29ya2VyIG1heSBzZW5kLgorICAgICMKKyAgICBk
ZWYgaGFuZGxlX2RvbmUoc2VsZiwgc3JjKToKKyAgICAgICAgc2VsZi5fZG9uZSA9IFRydWUKKwor
ICAgIGRlZiBoYW5kbGVfdGVzdChzZWxmLCBzcmMsIGFuX2ludCwgYV9zdHIpOgorICAgICAgICBz
ZWxmLl9hbl9pbnQgPSBhbl9pbnQKKyAgICAgICAgc2VsZi5fYV9zdHIgPSBhX3N0cgorCisgICAg
ZGVmIGhhbmRsZV9leGNlcHRpb24oc2VsZiwgc3JjLCBleGNfaW5mbyk6CisgICAgICAgIHNlbGYu
X2V4Y2VwdGlvbiA9IGV4Y19pbmZvCisgICAgICAgIHNlbGYuX2RvbmUgPSBUcnVlCisKKyAgICAj
CisgICAgIyBUZXN0aW5nIGhlbHBlciBtZXRob2RzCisgICAgIworICAgIGRlZiBzZXRVcChzZWxm
KToKKyAgICAgICAgc2VsZi5fYW5faW50ID0gTm9uZQorICAgICAgICBzZWxmLl9hX3N0ciA9IE5v
bmUKKyAgICAgICAgc2VsZi5fYnJva2VyID0gTm9uZQorICAgICAgICBzZWxmLl9kb25lID0gRmFs
c2UKKyAgICAgICAgc2VsZi5fZXhjZXB0aW9uID0gTm9uZQorICAgICAgICBzZWxmLl93b3JrZXJf
bW9kZWwgPSBOb25lCisKKyAgICBkZWYgbWFrZV9icm9rZXIoc2VsZik6CisgICAgICAgIHNlbGYu
X2Jyb2tlciA9IG1ha2VfYnJva2VyKHNlbGYsIHNlbGYuX3dvcmtlcl9tb2RlbCkKKworICAgICMK
KyAgICAjIEFjdHVhbCB1bml0IHRlc3RzCisgICAgIworICAgIGRlZiB0ZXN0X2NhbmNlbChzZWxm
KToKKyAgICAgICAgaWYgbm90IHNlbGYuX3dvcmtlcl9tb2RlbDoKKyAgICAgICAgICAgIHJldHVy
bgorICAgICAgICBzZWxmLm1ha2VfYnJva2VyKCkKKyAgICAgICAgd29ya2VyID0gc2VsZi5fYnJv
a2VyLnN0YXJ0X3dvcmtlcigwKQorICAgICAgICB3b3JrZXIuY2FuY2VsKCkKKyAgICAgICAgc2Vs
Zi5fYnJva2VyLnBvc3RfbWVzc2FnZSgndGVzdCcsIDEsICdoZWxsbywgd29ybGQnKQorICAgICAg
ICB3b3JrZXIuam9pbigwLjUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uod29ya2VyLmlzX2Fs
aXZlKCkpCisKKyAgICBkZWYgdGVzdF9kb25lKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5f
d29ya2VyX21vZGVsOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYubWFrZV9icm9r
ZXIoKQorICAgICAgICB3b3JrZXIgPSBzZWxmLl9icm9rZXIuc3RhcnRfd29ya2VyKDApCisgICAg
ICAgIHNlbGYuX2Jyb2tlci5wb3N0X21lc3NhZ2UoJ3Rlc3QnLCAxLCAnaGVsbG8sIHdvcmxkJykK
KyAgICAgICAgc2VsZi5fYnJva2VyLnBvc3RfbWVzc2FnZSgnc3RvcCcpCisgICAgICAgIHNlbGYu
X2Jyb2tlci5ydW5fbWVzc2FnZV9sb29wKCkKKyAgICAgICAgd29ya2VyLmpvaW4oMC41KQorICAg
ICAgICBzZWxmLmFzc2VydEZhbHNlKHdvcmtlci5pc19hbGl2ZSgpKQorICAgICAgICBzZWxmLmFz
c2VydFRydWUoc2VsZi5pc19kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5f
YW5faW50LCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2Ffc3RyLCAnaGksIGV2
ZXJ5Ym9keScpCisKKyAgICBkZWYgdGVzdF9sb2dfd2VkZ2VkX3dvcmtlcihzZWxmKToKKyAgICAg
ICAgaWYgbm90IHNlbGYuX3dvcmtlcl9tb2RlbDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAg
ICBzdGFydGluZ19xdWV1ZSA9IHNlbGYucXVldWUoKQorICAgICAgICBzdG9wcGluZ19xdWV1ZSA9
IHNlbGYucXVldWUoKQorICAgICAgICBzZWxmLm1ha2VfYnJva2VyKCkKKyAgICAgICAgb2MgPSBv
dXRwdXRjYXB0dXJlLk91dHB1dENhcHR1cmUoKQorICAgICAgICAjIG9jLmNhcHR1cmVfb3V0cHV0
KCkKKyAgICAgICAgd29ya2VyID0gc2VsZi5fYnJva2VyLnN0YXJ0X3dvcmtlcigwLAorICAgICAg
ICAgICAgc3RhcnRpbmdfcXVldWU9c3RhcnRpbmdfcXVldWUsIHN0b3BwaW5nX3F1ZXVlPXN0b3Bw
aW5nX3F1ZXVlKQorICAgICAgICBzdGFydGluZ19xdWV1ZS5nZXQoKQorICAgICAgICB3b3JrZXIu
bG9nX3dlZGdlZF93b3JrZXIoJ3Rlc3RfbmFtZScpCisgICAgICAgIHN0b3BwaW5nX3F1ZXVlLnB1
dCgnJykKKyAgICAgICAgc2VsZi5fYnJva2VyLnBvc3RfbWVzc2FnZSgnc3RvcCcpCisgICAgICAg
IHNlbGYuX2Jyb2tlci5ydW5fbWVzc2FnZV9sb29wKCkKKyAgICAgICAgd29ya2VyLmpvaW4oMC41
KQorICAgICAgICAjIG9jLnJlc3RvcmVfb3V0cHV0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxz
ZSh3b3JrZXIuaXNfYWxpdmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuaXNfZG9u
ZSgpKQorCisgICAgZGVmIHRlc3RfdW5rbm93bl9tZXNzYWdlKHNlbGYpOgorICAgICAgICBpZiBu
b3Qgc2VsZi5fd29ya2VyX21vZGVsOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYu
bWFrZV9icm9rZXIoKQorICAgICAgICB3b3JrZXIgPSBzZWxmLl9icm9rZXIuc3RhcnRfd29ya2Vy
KDApCisgICAgICAgIHNlbGYuX2Jyb2tlci5wb3N0X21lc3NhZ2UoJ3Vua25vd24nKQorICAgICAg
ICBzZWxmLl9icm9rZXIucnVuX21lc3NhZ2VfbG9vcCgpCisgICAgICAgIHdvcmtlci5qb2luKDAu
NSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5pc19kb25lKCkpCisgICAgICAgIHNl
bGYuYXNzZXJ0RmFsc2Uod29ya2VyLmlzX2FsaXZlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWxzKHNlbGYuX2V4Y2VwdGlvblswXSwgVmFsdWVFcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbHMoc2VsZi5fZXhjZXB0aW9uWzFdLAorICAgICAgICAgICAgIlRlc3RXb3JrZXIvMDogcmVj
ZWl2ZWQgbWVzc2FnZSAndW5rbm93bicgaXQgY291bGRuJ3QgaGFuZGxlIikKKworCitjbGFzcyBJ
bmxpbmVCcm9rZXJUZXN0cyhfVGVzdHNNaXhpbiwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRl
ZiBzZXRVcChzZWxmKToKKyAgICAgICAgX1Rlc3RzTWl4aW4uc2V0VXAoc2VsZikKKyAgICAgICAg
c2VsZi5fd29ya2VyX21vZGVsID0gJ2lubGluZScKKworICAgIGRlZiB0ZXN0X2xvZ193ZWRnZWRf
d29ya2VyKHNlbGYpOgorICAgICAgICBzZWxmLm1ha2VfYnJva2VyKCkKKyAgICAgICAgd29ya2Vy
ID0gc2VsZi5fYnJva2VyLnN0YXJ0X3dvcmtlcigwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNl
cyhBc3NlcnRpb25FcnJvciwgd29ya2VyLmxvZ193ZWRnZWRfd29ya2VyLCBOb25lKQorCisKK2Ns
YXNzIE11bHRpUHJvY2Vzc0Jyb2tlclRlc3RzKF9UZXN0c01peGluLCB1bml0dGVzdC5UZXN0Q2Fz
ZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBfVGVzdHNNaXhpbi5zZXRVcChzZWxm
KQorICAgICAgICBpZiBtdWx0aXByb2Nlc3Npbmc6CisgICAgICAgICAgICBzZWxmLl93b3JrZXJf
bW9kZWwgPSAncHJvY2Vzc2VzJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fd29y
a2VyX21vZGVsID0gTm9uZQorCisgICAgZGVmIHF1ZXVlKHNlbGYpOgorICAgICAgICByZXR1cm4g
bXVsdGlwcm9jZXNzaW5nLlF1ZXVlKCkKKworCitjbGFzcyBUaHJlYWRlZEJyb2tlclRlc3RzKF9U
ZXN0c01peGluLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHF1ZXVlKHNlbGYpOgorICAg
ICAgICByZXR1cm4gUXVldWUuUXVldWUoKQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAg
ICBfVGVzdHNNaXhpbi5zZXRVcChzZWxmKQorICAgICAgICBzZWxmLl93b3JrZXJfbW9kZWwgPSAn
dGhyZWFkcycKKworCitjbGFzcyBGdW5jdGlvbnNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAg
ICBkZWYgdGVzdF9ydW50aW1lX29wdGlvbnMoc2VsZik6CiAgICAgICAgIG9wdGlvbl9saXN0ID0g
bWFuYWdlcl93b3JrZXJfYnJva2VyLnJ1bnRpbWVfb3B0aW9ucygpCiAgICAgICAgIHBhcnNlciA9
IG9wdHBhcnNlLk9wdGlvblBhcnNlcihvcHRpb25fbGlzdD1vcHRpb25fbGlzdCkKQEAgLTgzLDUg
KzI2MiwzMCBAQCBjbGFzcyBGdW5jdGlvblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKG9wdGlvbnMpCiAKIAorY2xhc3MgSW50ZXJmYWNlVGVzdCh1bml0
dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBUaGVzZSB0ZXN0cyBtb3N0bHkgZXhpc3QgdG8gcGFjaWZ5
IGNvdmVyYWdlLgorCisgICAgIyBGSVhNRTogVGhlcmUgbXVzdCBiZSBhIGJldHRlciB3YXkgdG8g
ZG8gdGhpcyBhbmQgYWxzbyB2ZXJpZnkKKyAgICAjIHRoYXQgY2xhc3NlcyBkbyBpbXBsZW1lbnQg
ZXZlcnkgYWJzdHJhY3QgbWV0aG9kIGluIGFuIGludGVyZmFjZS4KKyAgICBkZWYgdGVzdF9tYW5h
Z2VyY29ubmVjdGlvbl9pc19hYnN0cmFjdChzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgYWxs
IHRoZSBiYXNlIGNsYXNzIG1ldGhvZHMgYXJlIGFic3RyYWN0IGFuZCBoYXZlIHRoZQorICAgICAg
ICAjIHNpZ25hdHVyZSB3ZSBleHBlY3QuCisgICAgICAgIGJyb2tlciA9IG1ha2VfYnJva2VyKHNl
bGYsICdpbmxpbmUnKQorICAgICAgICBvYmogPSBtYW5hZ2VyX3dvcmtlcl9icm9rZXIuX01hbmFn
ZXJDb25uZWN0aW9uKGJyb2tlci5fYnJva2VyLCBOb25lLCBzZWxmLCBOb25lKQorICAgICAgICBz
ZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBvYmouX21ha2Vfd29ya2VyX2Nv
bm5lY3Rpb24pCisKKyAgICBkZWYgdGVzdF93b3JrZXJjb25uZWN0aW9uX2lzX2Fic3RyYWN0KHNl
bGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBhbGwgdGhlIGJhc2UgY2xhc3MgbWV0aG9kcyBhcmUg
YWJzdHJhY3QgYW5kIGhhdmUgdGhlCisgICAgICAgICMgc2lnbmF0dXJlIHdlIGV4cGVjdC4KKyAg
ICAgICAgYnJva2VyID0gbWFrZV9icm9rZXIoc2VsZiwgJ2lubGluZScpCisgICAgICAgIG9iaiA9
IG1hbmFnZXJfd29ya2VyX2Jyb2tlci5fV29ya2VyQ29ubmVjdGlvbihicm9rZXIuX2Jyb2tlcikK
KyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgb2JqLnN0YXJ0
KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBvYmoucnVu
KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBvYmouY2Fu
Y2VsKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBvYmou
aXNfYWxpdmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3Is
IG9iai5qb2luLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRl
ZEVycm9yLCBvYmoubG9nX3dlZGdlZF93b3JrZXIsIE5vbmUpCisKKwogaWYgX19uYW1lX18gPT0g
J19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2VfYnJva2VyMi5w
eSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21l
c3NhZ2VfYnJva2VyMi5weQppbmRleCA4ZTE1OTIzZjYyMTJkOTU1MTUzNjhiMmY3ZmIyYTU3OGRl
YWM3ODM3Li5lYzNjOTcwMWI5OThlZmQyYzczZTcyOWMwYWM3YWMyMGIwYzJiOTRiIDEwMDY0NAot
LS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9t
ZXNzYWdlX2Jyb2tlcjIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2UvbWVzc2FnZV9icm9rZXIyLnB5CkBAIC0xMzIsNyArMTMyLDcgQEAg
Y2xhc3MgQnJva2VyKG9iamVjdCk6CiAgICAgICAgIHNlbGYuX3J1bl9sb29wKHRvcGljX25hbWUs
IGNsaWVudCwgYmxvY2s9RmFsc2UsIGRlbGF5X3NlY3M9Tm9uZSkKIAogICAgIGRlZiBfcnVuX2xv
b3Aoc2VsZiwgdG9waWNfbmFtZSwgY2xpZW50LCBibG9jaywgZGVsYXlfc2Vjcyk6Ci0gICAgICAg
IHF1ZXVlID0gc2VsZi5fZmluZF90b3BpYyh0b3BpY19uYW1lKQorICAgICAgICBxdWV1ZSA9IHNl
bGYuX2dldF9xdWV1ZV9mb3JfdG9waWModG9waWNfbmFtZSkKICAgICAgICAgd2hpbGUgbm90IGNs
aWVudC5pc19kb25lKCk6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcyA9IHF1
ZXVlLmdldChibG9jaywgZGVsYXlfc2VjcykKQEAgLTE0Niw3ICsxNDYsNyBAQCBjbGFzcyBCcm9r
ZXIob2JqZWN0KToKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAgICAg
ICAiJXM6IHJlY2VpdmVkIG1lc3NhZ2UgJyVzJyBpdCBjb3VsZG4ndCBoYW5kbGUiICUKICAgICAg
ICAgICAgICAgIChjbGllbnQubmFtZSgpLCBtZXNzYWdlLm5hbWUpKQotICAgICAgICBvcHRhcmdz
ID0gbWVzc2FnZS5ib2R5CisgICAgICAgIG9wdGFyZ3MgPSBtZXNzYWdlLmFyZ3MKICAgICAgICAg
bWVzc2FnZV9oYW5kbGVyID0gZ2V0YXR0cihjbGllbnQsICdoYW5kbGVfJyArIG1lc3NhZ2UubmFt
ZSkKICAgICAgICAgbWVzc2FnZV9oYW5kbGVyKG1lc3NhZ2Uuc3JjLCAqb3B0YXJncykKIApkaWZm
IC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2th
Z2UvbWVzc2FnZV9icm9rZXIyX3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWVzc2FnZV9icm9rZXIyX3VuaXR0ZXN0LnB5Cmlu
ZGV4IDBlMGE4OGQ5MWRkMDhkYTM3Y2U3ODI4Njc3ZDU0NWU0ZDI1YWMzNDcuLjA5ZDliMTI0YTlh
MTJmNTUzMjg2MDJiZjA2ZTc0OGQzZGVkMzkwMjYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2VfYnJva2VyMl91bml0
dGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRf
cGFja2FnZS9tZXNzYWdlX2Jyb2tlcjJfdW5pdHRlc3QucHkKQEAgLTM0LDcgKzM0LDYgQEAgZnJv
bSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IG1lc3NhZ2VfYnJv
a2VyMgogIyBtb3N0IG9mIHRoZSB0ZXN0aW5nIG9mIG1lc3NhZ2VfYnJva2VyMiB3aWxsIGJlIGNv
dmVyZWQgdW5kZXIgdGhlIHRlc3RzIGluCiAjIHRoZSBtYW5hZ2VyX3dvcmtlcl9icm9rZXIgbW9k
dWxlLgogCi0KIGNsYXNzIE1lc3NhZ2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYg
dGVzdF9fbm9fYm9keShzZWxmKToKICAgICAgICAgbXNnID0gbWVzc2FnZV9icm9rZXIyLl9NZXNz
YWdlKCdzcmMnLCAndG9waWNfbmFtZScsICdtZXNzYWdlX25hbWUnLCBOb25lKQpkaWZmIC0tZ2l0
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVz
dF9ydW5uZXIyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0
X3BhY2thZ2UvdGVzdF9ydW5uZXIyLnB5CmluZGV4IGViNzg3NTI1NWMzYzNjMTBjYzY4MWU1YmQx
ZmU4MDFlMzgxOGNiZjcuLmM5ZjVhZWU2YjJlMTA2OWQyZjk2NjQwNWYxNDU2ODNhODhlZWFjODkg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL3Rlc3RfcnVubmVyMi5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X3J1bm5lcjIucHkKQEAgLTI5LDI1ICsyOSwxOTAg
QEAKIAogIiIiCiBUaGUgVGVzdFJ1bm5lcjIgcGFja2FnZSBpcyBhbiBhbHRlcm5hdGUgaW1wbGVt
ZW50YXRpb24gb2YgdGhlIFRlc3RSdW5uZXIKLWNsYXNzLiBGb3Igbm93IGl0IGlzIGp1c3QgYSBz
dHViLCBidXQgZXZlbnR1YWxseSBpdCB3aWxsIHVzZSB0aGUKLW1lc3NhZ2UgYnJva2VyIGFic3Ry
YWN0aW9uIHRvIHBhc3MgbWVzc2FnZXMgdG8gd29ya2VycyB0byBydW4gc2V0cyBvZgotdGVzdHMg
YW5kIHRoZW4gcHJvY2VzcyB0aGUgY29tcGxldGlvbiBtZXNzYWdlcyBhY2NvcmRpbmdseS4KK2Ns
YXNzLiBJdCB1c2VzIHRoZSBtZXNzYWdlIGJyb2tlciBhYnN0cmFjdGlvbiB0byBwYXNzIG1lc3Nh
Z2VzIHRvIHdvcmtlcnMgdG8KK3J1biBzZXRzIG9mIHRlc3RzIGFuZCB0aGVuIHByb2Nlc3NlcyB0
aGUgY29tcGxldGlvbiBtZXNzYWdlcyBhY2NvcmRpbmdseS4KICIiIgogCiBpbXBvcnQgbG9nZ2lu
ZworaW1wb3J0IHRpbWUKIAorZnJvbSB3ZWJraXRweS50b29sIGltcG9ydCBncmFtbWFyCisKK2lt
cG9ydCBtYW5hZ2VyX3dvcmtlcl9icm9rZXIKIGltcG9ydCB0ZXN0X3J1bm5lcgoraW1wb3J0IHdv
cmtlcgorCiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKIAogCitjbGFzcyBf
V29ya2VyU3RhdGUob2JqZWN0KToKKyAgICAiIiJBIGNsYXNzIGZvciB0aGUgVGVzdFJ1bm5lci9t
YW5hZ2VyIHRvIHVzZSB0byB0cmFjayB0aGUgY3VycmVudCBzdGF0ZQorICAgIG9mIHRoZSB3b3Jr
ZXJzLiIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBudW1iZXIsIHdvcmtlcik6CisgICAgICAg
IHNlbGYud29ya2VyID0gd29ya2VyCisgICAgICAgIHNlbGYubnVtYmVyID0gbnVtYmVyCisgICAg
ICAgIHNlbGYuZG9uZSA9IEZhbHNlCisgICAgICAgIHNlbGYubmV4dF90aW1lb3V0ID0gTm9uZQor
ICAgICAgICBzZWxmLndlZGdlZCA9IEZhbHNlCisgICAgICAgIHNlbGYuc3RhdHMgPSB7fQorICAg
ICAgICBzZWxmLnN0YXRzWyduYW1lJ10gPSB3b3JrZXIubmFtZQorICAgICAgICBzZWxmLnN0YXRz
WydudW1fdGVzdHMnXSA9IDAKKyAgICAgICAgc2VsZi5zdGF0c1sndG90YWxfdGltZSddID0gMAor
CisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIl9Xb3JrZXJTdGF0ZSgi
ICsgc3RyKHNlbGYuX19kaWN0X18pICsgIikiCisKKwogY2xhc3MgVGVzdFJ1bm5lcjIodGVzdF9y
dW5uZXIuVGVzdFJ1bm5lcik6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMs
IHByaW50ZXIpOgorICAgICAgICB0ZXN0X3J1bm5lci5UZXN0UnVubmVyLl9faW5pdF9fKHNlbGYs
IHBvcnQsIG9wdGlvbnMsIHByaW50ZXIpCisgICAgICAgIHNlbGYuX21lc3NhZ2VfYnJva2VyID0g
Tm9uZQogCi0gICAgICAgICMgRklYTUU6IFRoaXMnbGwgZ2V0IHJlcGxhY2VkIHdpdGggYSByZWFs
IGltcGxlbWVudGF0aW9uIHNvb24gZW5vdWdoLgotICAgICAgICBpZiBvcHRpb25zLndvcmtlcl9t
b2RlbCBpbiAoJ2lubGluZScsICd0aHJlYWRzJyk6Ci0gICAgICAgICAgICBvcHRpb25zLndvcmtl
cl9tb2RlbCA9ICdvbGQtJyArIG9wdGlvbnMud29ya2VyX21vZGVsCi0gICAgICAgIGlmIG9wdGlv
bnMud29ya2VyX21vZGVsID09ICdwcm9jZXNzZXMnOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVF
cnJvcigiLS13b3JrZXItbW9kZWw9cHJvY2Vzc2VzIG5vdCBzdXBwb3J0ZWQgeWV0IikKKyAgICAg
ICAgIyBUaGlzIG1hcHMgd29ya2VyIG5hbWVzIHRvIHRoZSBzdGF0ZSB3ZSBhcmUgdHJhY2tpbmcg
Zm9yIGVhY2ggb2YgdGhlbS4KKyAgICAgICAgc2VsZi5fd29ya2VycyA9IHt9CiAKLSAgICAgICAg
dGVzdF9ydW5uZXIuVGVzdFJ1bm5lci5fX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zLCBwcmlu
dGVyKQorICAgIGRlZiBpc19kb25lKHNlbGYpOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAg
IGRlZiBuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gJ1Rlc3RSdW5uZXIyJworCisgICAgZGVm
IF9ydW5fdGVzdHMoc2VsZiwgZmlsZV9saXN0LCByZXN1bHRfc3VtbWFyeSk6CisgICAgICAgICIi
IlJ1bnMgdGhlIHRlc3RzIGluIHRoZSBmaWxlX2xpc3QuCisKKyAgICAgICAgUmV0dXJuOiBBIHR1
cGxlIChrZXlib2FyZF9pbnRlcnJ1cHRlZCwgdGhyZWFkX3RpbWluZ3MsIHRlc3RfdGltaW5ncywK
KyAgICAgICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzKQorICAgICAgICAgICAga2V5Ym9h
cmRfaW50ZXJydXB0ZWQgaXMgd2hldGhlciBzb21lb25lIHR5cGVkIEN0cmxeQworICAgICAgICAg
ICAgdGhyZWFkX3RpbWluZ3MgaXMgYSBsaXN0IG9mIGRpY3RzIHdpdGggdGhlIHRvdGFsIHJ1bnRp
bWUKKyAgICAgICAgICAgICAgb2YgZWFjaCB0aHJlYWQgd2l0aCAnbmFtZScsICdudW1fdGVzdHMn
LCAndG90YWxfdGltZScgcHJvcGVydGllcworICAgICAgICAgICAgdGVzdF90aW1pbmdzIGlzIGEg
bGlzdCBvZiB0aW1pbmdzIGZvciBlYWNoIHNoYXJkZWQgc3ViZGlyZWN0b3J5CisgICAgICAgICAg
ICAgIG9mIHRoZSBmb3JtIFt0aW1lLCBkaXJlY3RvcnlfbmFtZSwgbnVtX3Rlc3RzXQorICAgICAg
ICAgICAgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MgaXMgYSBsaXN0IG9mIHJ1biB0aW1lcyBmb3Ig
ZWFjaCB0ZXN0CisgICAgICAgICAgICAgIGluIHRoZSBmb3JtIHtmaWxlbmFtZTpmaWxlbmFtZSwg
dGVzdF9ydW5fdGltZTp0ZXN0X3J1bl90aW1lfQorICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnk6
IHN1bW1hcnkgb2JqZWN0IHRvIHBvcHVsYXRlIHdpdGggdGhlIHJlc3VsdHMKKyAgICAgICAgIiIi
CisgICAgICAgIG51bV93b3JrZXJzID0gc2VsZi5fbnVtX3dvcmtlcnMoKQorCisgICAgICAgIHNl
bGYuX2N1cnJlbnRfZmlsZV9saXN0ID0gZmlsZV9saXN0CisgICAgICAgIHNlbGYuX2N1cnJlbnRf
cmVzdWx0X3N1bW1hcnkgPSByZXN1bHRfc3VtbWFyeQorCisgICAgICAgIHNlbGYuX2FsbF9yZXN1
bHRzID0gW10KKyAgICAgICAgc2VsZi5fZ3JvdXBfc3RhdHMgPSB7fQorICAgICAgICBzZWxmLl93
b3JrZXJzID0ge30KKworICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgnU2hhcmRp
bmcgdGVzdHMgLi4uJykKKyAgICAgICAgdGVzdF9saXN0cyA9IHNlbGYuX3NoYXJkX3Rlc3RzKGZp
bGVfbGlzdCwKKyAgICAgICAgICAgIG51bV93b3JrZXJzID4gMSBhbmQgbm90IHNlbGYuX29wdGlv
bnMuZXhwZXJpbWVudGFsX2Z1bGx5X3BhcmFsbGVsKQorICAgICAgICBfbG9nLmRlYnVnKCJVc2lu
ZyAlZCBzaGFyZHMiICUgbGVuKHRlc3RfbGlzdHMpKQorCisgICAgICAgIGJyb2tlciA9IG1hbmFn
ZXJfd29ya2VyX2Jyb2tlci5nZXQoc2VsZi5fcG9ydCwgc2VsZi5fb3B0aW9ucywgc2VsZiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXIuV29ya2VyKQor
CisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCdTdGFydGluZyAlcyAuLi4nICUK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhbW1hci5wbHVyYWxpemUoJ3dv
cmtlcicsIG51bV93b3JrZXJzKSkKKyAgICAgICAgZm9yIHdvcmtlcl9udW1iZXIgaW4geHJhbmdl
KG51bV93b3JrZXJzKToKKyAgICAgICAgICAgIHcgPSBicm9rZXIuc3RhcnRfd29ya2VyKHdvcmtl
cl9udW1iZXIpCisgICAgICAgICAgICB3cyA9IF9Xb3JrZXJTdGF0ZSh3b3JrZXJfbnVtYmVyLCB3
KQorICAgICAgICAgICAgc2VsZi5fd29ya2Vyc1t3Lm5hbWVdID0gd3MKKyAgICAgICAgICAgIHRp
bWUuc2xlZXAoMC4xKQorCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCJTdGFy
dGluZyB0ZXN0aW5nIC4uLiIpCisgICAgICAgIGZvciB0ZXN0X2xpc3QgaW4gdGVzdF9saXN0czoK
KyAgICAgICAgICAgIGJyb2tlci5wb3N0X21lc3NhZ2UoJ3Rlc3RfbGlzdCcsIHRlc3RfbGlzdFsw
XSwgdGVzdF9saXN0WzFdKQorCisgICAgICAgICMgVGVsbCB0aGUgd29ya2VycyB0byBzaHV0IGRv
d24gYWZ0ZXIgdGhleSdyZSBkb25lIHJ1bm5pbmcgYWxsIHRoZQorICAgICAgICAjIHRlc3RzLgor
ICAgICAgICBmb3IgaSBpbiB4cmFuZ2UobnVtX3dvcmtlcnMpOgorICAgICAgICAgICAgYnJva2Vy
LnBvc3RfbWVzc2FnZSgnc3RvcCcpCisKKyAgICAgICAgaW50ZXJydXB0ZWQgPSBGYWxzZQorICAg
ICAgICBrZXlib2FyZF9pbnRlcnJ1cHRlZCA9IEZhbHNlCisgICAgICAgIHRyeToKKyAgICAgICAg
ICAgIGlmIG5vdCBzZWxmLl9vcHRpb25zLmRyeV9ydW46CisgICAgICAgICAgICAgICAgd2hpbGUg
bm90IHNlbGYuX2NoZWNrX2lmX2RvbmUoKToKKyAgICAgICAgICAgICAgICAgICAgYnJva2VyLnJ1
bl9tZXNzYWdlX2xvb3AoZGVsYXlfc2Vjcz0xLjApCisKKyAgICAgICAgICAgICAgICBmb3IgdyBp
biBzZWxmLl93b3JrZXJzLnZhbHVlcygpOgorICAgICAgICAgICAgICAgICAgICBpZiBub3Qgdy53
ZWRnZWQgYW5kIHcud29ya2VyLmlzX2FsaXZlKCk6CisgICAgICAgICAgICAgICAgICAgICAgICB3
Lndvcmtlci5qb2luKDAuNSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCBub3Qgdy53
b3JrZXIuaXNfYWxpdmUoKQorCisgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAg
ICAgICAgICAgIF9sb2cuaW5mbygiSW50ZXJydXB0ZWQsIGV4aXRpbmciKQorICAgICAgICAgICAg
Zm9yIHcgaW4gc2VsZi5fd29ya2Vycy52YWx1ZXMoKToKKyAgICAgICAgICAgICAgICB3Lndvcmtl
ci5jYW5jZWwoKQorICAgICAgICAgICAga2V5Ym9hcmRfaW50ZXJydXB0ZWQgPSBUcnVlCisgICAg
ICAgIGV4Y2VwdCB0ZXN0X3J1bm5lci5UZXN0UnVuSW50ZXJydXB0ZWRFeGNlcHRpb24sIGU6Cisg
ICAgICAgICAgICBfbG9nLmluZm8oZS5yZWFzb24pCisgICAgICAgICAgICBicm9rZXIuY2FuY2Vs
X3dvcmtlcnMoKQorICAgICAgICAgICAgaW50ZXJydXB0ZWQgPSBUcnVlCisgICAgICAgIGV4Y2Vw
dDoKKyAgICAgICAgICAgICMgVW5leHBlY3RlZCBleGNlcHRpb247IGRvbid0IHRyeSB0byBjbGVh
biB1cCB3b3JrZXJzLgorICAgICAgICAgICAgX2xvZy5pbmZvKCJFeGNlcHRpb24gcmFpc2VkLCBl
eGl0aW5nIikKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgdGhyZWFkX3RpbWluZ3MgPSBb
dy5zdGF0cyBmb3IgdyBpbiBzZWxmLl93b3JrZXJzLnZhbHVlcygpXQorICAgICAgICByZXR1cm4g
KGludGVycnVwdGVkLCBrZXlib2FyZF9pbnRlcnJ1cHRlZCwgdGhyZWFkX3RpbWluZ3MsCisgICAg
ICAgICAgICAgICAgc2VsZi5fZ3JvdXBfc3RhdHMsIHNlbGYuX2FsbF9yZXN1bHRzKQorCisgICAg
ZGVmIF9jaGVja19pZl9kb25lKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIHRydWUgaWZmIGFs
bCB0aGUgd29ya2VycyBoYXZlIGVpdGhlciBjb21wbGV0ZWQgb3Igd2VkZ2VkLiIiIgorICAgICAg
ICBkb25lID0gVHJ1ZQorICAgICAgICB0ID0gdGltZS50aW1lKCkKKyAgICAgICAgZm9yIHcgaW4g
c2VsZi5fd29ya2Vycy52YWx1ZXMoKToKKyAgICAgICAgICAgIGlmIG5vdCB3LmRvbmUgYW5kIG5v
dCB3LndlZGdlZDoKKyAgICAgICAgICAgICAgICBuZXh0X3RpbWVvdXQgPSB3Lm5leHRfdGltZW91
dAorICAgICAgICAgICAgICAgIFdFREdFX1BBRERJTkcgPSA0MC4wCisgICAgICAgICAgICAgICAg
aWYgbmV4dF90aW1lb3V0IGFuZCB0ID4gbmV4dF90aW1lb3V0ICsgV0VER0VfUEFERElORzoKKyAg
ICAgICAgICAgICAgICAgICAgX2xvZy5lcnJvcignJykKKyAgICAgICAgICAgICAgICAgICAgdy53
b3JrZXIubG9nX3dlZGdlZF93b3JrZXIody5jdXJyZW50X3Rlc3RfbmFtZSkKKyAgICAgICAgICAg
ICAgICAgICAgX2xvZy5lcnJvcignJykKKyAgICAgICAgICAgICAgICAgICAgdy53ZWRnZWQgPSBU
cnVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZG9uZSA9IEZh
bHNlCisKKyAgICAgICAgaWYgZG9uZToKKyAgICAgICAgICAgIGlmIGFueShbdy53ZWRnZWQgZm9y
IHcgaW4gc2VsZi5fd29ya2Vycy52YWx1ZXMoKV0pOgorICAgICAgICAgICAgICAgIF9sb2cuZXJy
b3IoJycpCisgICAgICAgICAgICAgICAgX2xvZy5lcnJvcignUmVtYWluaW5nIHdvcmtlcnMgYXJl
IHdlZGdlZCwgYmFpbGluZyBvdXQuJykKKyAgICAgICAgICAgICAgICBfbG9nLmVycm9yKCcnKQor
ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCdObyB3ZWRnZWQg
dGhyZWFkcycpCisgICAgICAgIHJldHVybiBkb25lCisKKyAgICBkZWYgaGFuZGxlX3N0YXJ0ZWRf
dGVzdChzZWxmLCBzcmMsIHRlc3RfaW5mbywgaGFuZ190aW1lb3V0KToKKyAgICAgICAgdyA9IHNl
bGYuX3dvcmtlcnNbc3JjXQorICAgICAgICB3LmN1cnJlbnRfdGVzdF9uYW1lID0gc2VsZi5fcG9y
dC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKAorICAgICAgICAgICAgdGVzdF9pbmZvLmZpbGVuYW1l
KQorICAgICAgICB3Lm5leHRfdGltZW91dCA9IHRpbWUudGltZSgpICsgaGFuZ190aW1lb3V0CisK
KyAgICBkZWYgaGFuZGxlX2RvbmUoc2VsZiwgc3JjKToKKyAgICAgICAgdyA9IHNlbGYuX3dvcmtl
cnNbc3JjXQorICAgICAgICB3LmRvbmUgPSBUcnVlCisKKyAgICBkZWYgaGFuZGxlX2ZpbmlzaGVk
X3Rlc3Qoc2VsZiwgc3JjLCByZXN1bHQsIGVsYXBzZWRfdGltZSk6CisgICAgICAgICIiIlVwZGF0
ZSB0aGUgc3VtbWFyeSBhbmQgcHJpbnQgcmVzdWx0cyB3aXRoIGFueSBjb21wbGV0ZWQgdGVzdHMu
IiIiCisgICAgICAgIHcgPSBzZWxmLl93b3JrZXJzW3NyY10KKyAgICAgICAgdy5uZXh0X3RpbWVv
dXQgPSBOb25lCisgICAgICAgIHcuY3VycmVudF90ZXN0ID0gTm9uZQorCisgICAgICAgIGlmIHcu
d2VkZ2VkOgorICAgICAgICAgICAgIyBIbW0uIFRoaXMgc2hvdWxkbid0IGhhcHBlbiBpZiB3ZSBo
YXZlIG91ciB0aW1lb3V0cworICAgICAgICAgICAgIyB0dW5lZCBwcm9wZXJseS4KKyAgICAgICAg
ICAgIF9sb2cuZXJyb3IoIiVzIHVud2VkZ2VkIiwgdy5uYW1lKQorCisgICAgICAgIHNlbGYuX3Vw
ZGF0ZV93b3JrZXJfc3RhdHMoc3JjLCByZXN1bHQsIGVsYXBzZWRfdGltZSkKKworICAgICAgICBz
ZWxmLl91cGRhdGVfc3VtbWFyeV93aXRoX3Jlc3VsdChzZWxmLl9jdXJyZW50X3Jlc3VsdF9zdW1t
YXJ5LCByZXN1bHQpCisKKyAgICBkZWYgaGFuZGxlX2ZpbmlzaGVkX2xpc3Qoc2VsZiwgc3JjLCBs
aXN0X25hbWUsIG51bV90ZXN0cywgZWxhcHNlZF90aW1lKToKKyAgICAgICAgc2VsZi5fZ3JvdXBf
c3RhdHNbbGlzdF9uYW1lXSA9IChudW1fdGVzdHMsIGVsYXBzZWRfdGltZSkKKworICAgIGRlZiBo
YW5kbGVfZXhjZXB0aW9uKHNlbGYsIHNyYywgZXhjZXB0aW9uX2luZm8pOgorICAgICAgICByYWlz
ZSBleGNlcHRpb25faW5mbworCisgICAgZGVmIF91cGRhdGVfd29ya2VyX3N0YXRzKHNlbGYsIHNy
YywgcmVzdWx0LCBlbGFwc2VkX3RpbWUpOgorICAgICAgICBzZWxmLl93b3JrZXJzW3NyY10uc3Rh
dHNbJ3RvdGFsX3RpbWUnXSArPSBlbGFwc2VkX3RpbWUKKyAgICAgICAgc2VsZi5fd29ya2Vyc1tz
cmNdLnN0YXRzWydudW1fdGVzdHMnXSArPSAxCisgICAgICAgIHNlbGYuX2FsbF9yZXN1bHRzLmFw
cGVuZChyZXN1bHQpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9sYXlvdXRfcGFja2FnZS93b3JrZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS93b3JrZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2ViNzE1YTFi
Mzk5ZWQ4ODEwNmVlZDljMjRiZGJjYTNlM2FlOWM3ZQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3dvcmtlci5weQpA
QCAtMCwwICsxLDE4NiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdhYm9yIFJhcGNzYW55aSAocmdh
Ym9yQGluZi51LXN6ZWdlZC5odSksIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisjCisjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorCisiIiJBIFRocmVhZCBvYmplY3QgZm9yIHJ1bm5pbmcgRHVtcFJlbmRlclRyZWUgYW5k
IHByb2Nlc3NpbmcgVVJMcyBmcm9tIGEKK3NoYXJlZCBxdWV1ZS4KKworRWFjaCB0aHJlYWQgcnVu
cyBhIHNlcGFyYXRlIGluc3RhbmNlIG9mIHRoZSBEdW1wUmVuZGVyVHJlZSBiaW5hcnkgYW5kIHZh
bGlkYXRlcwordGhlIG91dHB1dC4gIFdoZW4gdGhlcmUgYXJlIG5vIG1vcmUgVVJMcyB0byBwcm9j
ZXNzIGluIHRoZSBzaGFyZWQgcXVldWUsIHRoZQordGhyZWFkIGV4aXRzLgorIiIiCisKK2ltcG9y
dCBsb2dnaW5nCitpbXBvcnQgc3lzCitpbXBvcnQgdGltZQorCitmcm9tIHdlYmtpdHB5LmNvbW1v
bi5zeXN0ZW0gaW1wb3J0IHN0YWNrX3V0aWxzCisKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3Rz
LmxheW91dF9wYWNrYWdlIGltcG9ydCBtYW5hZ2VyX3dvcmtlcl9icm9rZXIKK2Zyb20gd2Via2l0
cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCBzaW5nbGVfdGVzdF9ydW5uZXIK
KworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCisKK2NsYXNzIFdvcmtlciht
YW5hZ2VyX3dvcmtlcl9icm9rZXIuQWJzdHJhY3RXb3JrZXIpOgorICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCB3b3JrZXJfY29ubmVjdGlvbiwgd29ya2VyX251bWJlciwgb3B0aW9ucyk6CisgICAgICAg
IHNlbGYuX3dvcmtlcl9jb25uZWN0aW9uID0gd29ya2VyX2Nvbm5lY3Rpb24KKyAgICAgICAgc2Vs
Zi5fd29ya2VyX251bWJlciA9IHdvcmtlcl9udW1iZXIKKyAgICAgICAgc2VsZi5fb3B0aW9ucyA9
IG9wdGlvbnMKKyAgICAgICAgc2VsZi5fbmFtZSA9ICd3b3JrZXIvJWQnICUgd29ya2VyX251bWJl
cgorICAgICAgICBzZWxmLl9jYW5jZWxlZCA9IEZhbHNlCisgICAgICAgIHNlbGYuX2RvbmUgPSBG
YWxzZQorCisgICAgICAgIHNlbGYuX3BvcnQgPSBOb25lCisgICAgICAgIHNlbGYuX2JhdGNoX2Nv
dW50ID0gMAorICAgICAgICBzZWxmLl9iYXRjaF9zaXplID0gMAorICAgICAgICBzZWxmLl9zaW5n
bGVfdGVzdF9ydW5uZXIgPSBOb25lCisgICAgICAgIHNlbGYuX3Rlc3RfdHlwZXMgPSBbXQorICAg
ICAgICBzZWxmLl90ZXN0X2FyZ3MgPSBbXQorICAgICAgICBzZWxmLl90ZXN0c19ydW5fZmlsZSA9
IE5vbmUKKworICAgIGRlZiBfZGVmZXJyZWRfaW5pdChzZWxmLCBwb3J0KToKKyAgICAgICAgc2Vs
Zi5fcG9ydCA9IHBvcnQKKyAgICAgICAgc2VsZi5fZmlsZXN5c3RlbSA9IHBvcnQuX2ZpbGVzeXN0
ZW0KKyAgICAgICAgc2VsZi5fYmF0Y2hfc2l6ZSA9IHNlbGYuX29wdGlvbnMuYmF0Y2hfc2l6ZQor
ICAgICAgICBzZWxmLl9zaW5nbGVfdGVzdF9ydW5uZXIgPSBzaW5nbGVfdGVzdF9ydW5uZXIuU2lu
Z2xlVGVzdFJ1bm5lcigKKyAgICAgICAgICAgc2VsZi5fb3B0aW9ucywgc2VsZi5fcG9ydCwgc2Vs
Zi5fbmFtZSwgc2VsZi5fd29ya2VyX251bWJlcikKKworICAgICAgICAjIEFwcGVuZCB0ZXN0cyB3
ZSdyZSBydW5uaW5nIHRvIHRoZSBleGlzdGluZyB0ZXN0c19ydW4udHh0IGZpbGUuCisgICAgICAg
ICMgVGhpcyBpcyBjcmVhdGVkIGluIHJ1bl93ZWJraXRfdGVzdHMucHk6X1ByZXBhcmVMaXN0c0Fu
ZFByaW50T3V0cHV0LgorICAgICAgICB0ZXN0c19ydW5fZmlsZW5hbWUgPSBzZWxmLl9maWxlc3lz
dGVtLmpvaW4oc2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0c19ydW4udHh0JWQiICUg
c2VsZi5fd29ya2VyX251bWJlcikKKyAgICAgICAgc2VsZi5fdGVzdHNfcnVuX2ZpbGUgPSBzZWxm
Ll9maWxlc3lzdGVtLm9wZW5fdGV4dF9maWxlX2Zvcl93cml0aW5nKHRlc3RzX3J1bl9maWxlbmFt
ZSkKKworICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9jbGVhbnVwKCkKKwor
ICAgIGRlZiBjYW5jZWwoc2VsZik6CisgICAgICAgICIiIkF0dGVtcHQgdG8gYWJvcnQgcHJvY2Vz
c2luZyAoYmVzdCBlZmZvcnQpLiIiIgorICAgICAgICBzZWxmLl9jYW5jZWxlZCA9IFRydWUKKwor
ICAgIGRlZiBpc19kb25lKHNlbGYpOgorICAgICAgICAjIFRoaXMgaXMgdXNlZCBmb3IgYXNzZXJ0
aW9uIGNoZWNraW5nIGluIHRoZSBtYW5hZ2VyLgorICAgICAgICByZXR1cm4gc2VsZi5fZG9uZSBv
ciBzZWxmLl9jYW5jZWxlZAorCisgICAgZGVmIG5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiBz
ZWxmLl9uYW1lCisKKyAgICBkZWYgcnVuKHNlbGYsIHBvcnQpOgorICAgICAgICBzZWxmLl9kZWZl
cnJlZF9pbml0KHBvcnQpCisKKyAgICAgICAgZXhjZXB0aW9uX21zZyA9ICIiCisgICAgICAgIF9s
b2cuZGVidWcoIiVzIHN0YXJ0aW5nIiAlIHNlbGYuX25hbWUpCisKKyAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgc2VsZi5fd29ya2VyX2Nvbm5lY3Rpb24ucnVuX21lc3NhZ2VfbG9vcCgpCisgICAg
ICAgICAgICBpZiBub3Qgc2VsZi5pc19kb25lKCk6CisgICAgICAgICAgICAgICAgcmFpc2UgQXNz
ZXJ0aW9uRXJyb3IoIiVzOiByYW4gb3V0IG9mIG1lc3NhZ2VzIGluIHdvcmtlciBxdWV1ZS4iCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBzZWxmLl9uYW1lKQorICAgICAg
ICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICBleGNlcHRpb25fbXNnID0g
IiwgaW50ZXJydXB0ZWQiCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGV4Y2VwdGlvbl9t
c2cgPSAiLCBleGNlcHRpb24gcmFpc2VkIgorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAg
X2xvZy5kZWJ1ZygiJXMgZG9uZSVzIiAlIChzZWxmLl9uYW1lLCBleGNlcHRpb25fbXNnKSkKKyAg
ICAgICAgICAgIGlmIGV4Y2VwdGlvbl9tc2c6CisgICAgICAgICAgICAgICAgaW1wb3J0IHBkYgor
ICAgICAgICAgICAgICAgIHBkYi5zZXRfdHJhY2UoKQorICAgICAgICAgICAgICAgIGV4Y19pbmZv
ID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgICAgICAgICBzdGFja191dGlscy5sb2dfdHJhY2Vi
YWNrKF9sb2cuZXJyb3IsIGV4Y19pbmZvWzJdKQorICAgICAgICAgICAgICAgICMgRklYTUU6IEZp
Z3VyZSBvdXQgaG93IHRvIHNlbmQgYSBtZXNzYWdlIHdpdGggYSB0cmFjZWJhY2suCisgICAgICAg
ICAgICAgICAgc2VsZi5fd29ya2VyX2Nvbm5lY3Rpb24ucG9zdF9tZXNzYWdlKCdleGNlcHRpb24n
LAorICAgICAgICAgICAgICAgICAgICAoZXhjX2luZm9bMF0sIGV4Y19pbmZvWzFdLCBOb25lKSkK
KyAgICAgICAgICAgIHNlbGYuX3dvcmtlcl9jb25uZWN0aW9uLnBvc3RfbWVzc2FnZSgnZG9uZScp
CisgICAgICAgICAgICBzZWxmLl9jbGVhbnVwKCkKKworICAgIGRlZiBfY2xlYW51cChzZWxmKToK
KyAgICAgICAgaWYgc2VsZi5fc2luZ2xlX3Rlc3RfcnVubmVyOgorICAgICAgICAgICAgaWYgc2Vs
Zi5fc2luZ2xlX3Rlc3RfcnVubmVyLmhhc19odHRwX2xvY2s6CisgICAgICAgICAgICAgICAgc2Vs
Zi5fc2luZ2xlX3Rlc3RfcnVubmVyLnN0b3Bfc2VydmVyc193aXRoX2xvY2soKQorICAgICAgICAg
ICAgc2VsZi5fc2luZ2xlX3Rlc3RfcnVubmVyLmNsZWFudXAoKQorICAgICAgICBpZiBzZWxmLl90
ZXN0c19ydW5fZmlsZToKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9maWxlLmNsb3NlKCkK
KyAgICAgICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9maWxlID0gTm9uZQorCisgICAgZGVmIGhhbmRs
ZV90ZXN0X2xpc3Qoc2VsZiwgc3JjLCBsaXN0X25hbWUsIHRlc3RfbGlzdCk6CisgICAgICAgIGlm
IGxpc3RfbmFtZSA9PSAidGVzdHNfdG9faHR0cF9sb2NrIjoKKyAgICAgICAgICAgIHNlbGYuX3Np
bmdsZV90ZXN0X3J1bm5lci5zdGFydF9zZXJ2ZXJzX3dpdGhfbG9jaygpCisKKyAgICAgICAgc3Rh
cnRfdGltZSA9IHRpbWUudGltZSgpCisgICAgICAgIG51bV90ZXN0cyA9IDAKKyAgICAgICAgZm9y
IHRlc3RfaW5wdXQgaW4gdGVzdF9saXN0OgorICAgICAgICAgICAgc2VsZi5fcnVuX3Rlc3QodGVz
dF9pbnB1dCkKKyAgICAgICAgICAgIHNlbGYuX3dvcmtlcl9jb25uZWN0aW9uLnlpZWxkX3RvX2Jy
b2tlcigpCisgICAgICAgICAgICBpZiBzZWxmLl9jYW5jZWxlZDoKKyAgICAgICAgICAgICAgICBi
cmVhaworICAgICAgICAgICAgbnVtX3Rlc3RzICs9IDEKKworICAgICAgICBlbGFwc2VkX3RpbWUg
PSB0aW1lLnRpbWUoKSAtIHN0YXJ0X3RpbWUKKworICAgICAgICBzZWxmLl93b3JrZXJfY29ubmVj
dGlvbi5wb3N0X21lc3NhZ2UoJ2ZpbmlzaGVkX2xpc3QnLCBsaXN0X25hbWUsIG51bV90ZXN0cywg
ZWxhcHNlZF90aW1lKQorCisgICAgICAgIGlmIHNlbGYuX3NpbmdsZV90ZXN0X3J1bm5lci5oYXNf
aHR0cF9sb2NrOgorICAgICAgICAgICAgc2VsZi5fc2luZ2xlX3Rlc3RfcnVubmVyLnN0b3Bfc2Vy
dmVyc193aXRoX2xvY2soKQorCisgICAgZGVmIGhhbmRsZV9zdG9wKHNlbGYsIHNyYyk6CisgICAg
ICAgICIiIlN0b3AgcmVjZWl2ZWQgLSBubyBtb3JlIHRlc3RzIHRvIHJ1bi4iIiIKKyAgICAgICAg
c2VsZi5fZG9uZSA9IFRydWUKKworICAgIGRlZiBfcnVuX3Rlc3Qoc2VsZiwgdGVzdF9pbnB1dCk6
CisgICAgICAgIHRlc3RfdGltZW91dF9zZWMgPSBzZWxmLl9zaW5nbGVfdGVzdF9ydW5uZXIudGlt
ZW91dCh0ZXN0X2lucHV0KQorICAgICAgICBzdGFydCA9IHRpbWUudGltZSgpCisgICAgICAgIHNl
bGYuX3dvcmtlcl9jb25uZWN0aW9uLnBvc3RfbWVzc2FnZSgnc3RhcnRlZF90ZXN0JywgdGVzdF9p
bnB1dCwgdGVzdF90aW1lb3V0X3NlYykKKworICAgICAgICByZXN1bHQgPSBzZWxmLl9zaW5nbGVf
dGVzdF9ydW5uZXIucnVuX3Rlc3QodGVzdF9pbnB1dCwgdGVzdF90aW1lb3V0X3NlYykKKyAgICAg
ICAgZWxhcHNlZF90aW1lID0gdGltZS50aW1lKCkgLSBzdGFydAorCisgICAgICAgIHNlbGYuX2Jh
dGNoX2NvdW50ICs9IDEKKyAgICAgICAgc2VsZi5fdGVzdHNfcnVuX2ZpbGUud3JpdGUodGVzdF9p
bnB1dC5maWxlbmFtZSArICJcbiIpCisgICAgICAgIHRlc3RfbmFtZSA9IHNlbGYuX3BvcnQucmVs
YXRpdmVfdGVzdF9maWxlbmFtZSh0ZXN0X2lucHV0LmZpbGVuYW1lKQorCisgICAgICAgIGlmIHJl
c3VsdC5mYWlsdXJlczoKKyAgICAgICAgICAgICMgQ2hlY2sgYW5kIGtpbGwgRHVtcFJlbmRlclRy
ZWUgaWYgd2UgbmVlZCB0by4KKyAgICAgICAgICAgIGlmIGFueShbZi5zaG91bGRfa2lsbF9kdW1w
X3JlbmRlcl90cmVlKCkgZm9yIGYgaW4gcmVzdWx0LmZhaWx1cmVzXSk6CisgICAgICAgICAgICAg
ICAgc2VsZi5fc2luZ2xlX3Rlc3RfcnVubmVyLmtpbGxfZHVtcF9yZW5kZXJfdHJlZSgpCisgICAg
ICAgICAgICAgICAgIyBSZXNldCB0aGUgYmF0Y2ggY291bnQgc2luY2UgdGhlIHNoZWxsIGp1c3Qg
Ym91bmNlZC4KKyAgICAgICAgICAgICAgICBzZWxmLl9iYXRjaF9jb3VudCA9IDAKKworICAgICAg
ICAgICAgIyBQcmludCB0aGUgZXJyb3IgbWVzc2FnZShzKS4KKyAgICAgICAgICAgIF9sb2cuZGVi
dWcoIiVzICVzIGZhaWxlZDoiICUgKHNlbGYuX25hbWUsIHRlc3RfbmFtZSkpCisgICAgICAgICAg
ICBmb3IgZiBpbiByZXN1bHQuZmFpbHVyZXM6CisgICAgICAgICAgICAgICAgX2xvZy5kZWJ1Zygi
JXMgICVzIiAlIChzZWxmLl9uYW1lLCBmLm1lc3NhZ2UoKSkpCisgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICBfbG9nLmRlYnVnKCIlcyAlcyBwYXNzZWQiICUgKHNlbGYuX25hbWUsIHRlc3RfbmFt
ZSkpCisKKyAgICAgICAgc2VsZi5fd29ya2VyX2Nvbm5lY3Rpb24ucG9zdF9tZXNzYWdlKCdmaW5p
c2hlZF90ZXN0JywgcmVzdWx0LCBlbGFwc2VkX3RpbWUpCisKKyAgICAgICAgaWYgc2VsZi5fYmF0
Y2hfc2l6ZSA+IDAgYW5kIHNlbGYuX2JhdGNoX2NvdW50ID49IHNlbGYuX2JhdGNoX3NpemU6Cisg
ICAgICAgICAgICAjIEJvdW5jZSB0aGUgc2hlbGwgYW5kIHJlc2V0IGNvdW50LgorICAgICAgICAg
ICAgc2VsZi5fc2luZ2xlX3Rlc3RfcnVuZXIua2lsbF9kdW1wX3JlbmRlcl90cmVlKCkKKyAgICAg
ICAgICAgIHNlbGYuX2JhdGNoX2NvdW50ID0gMApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CmluZGV4IGUzZDVmOGU5YTQ1OGYxOWQxOTMwNjY4
MTEzNzEwOWM4ZGNlNzRmZmUuLjk3Nzk5MWNkY2VhNzU5MDQ4NjE3OGJhOGQwNjA4NWY5NTkxMzVh
ZjUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
YmFzZS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jh
c2UucHkKQEAgLTQ3Myw2ICs0NzMsMTAgQEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAgICAgICAo
J2NwdScpLiIiIgogICAgICAgICByZXR1cm4gJ2NwdScKIAorICAgIGRlZiByZWFsX25hbWUoc2Vs
Zik6CisgICAgICAgICIiIlJldHVybnMgdGhlIGFjdHVhbCBuYW1lIG9mIHRoZSBwb3J0LCBub3Qg
dGhlIGRlbGVnYXRlJ3MuIiIiCisgICAgICAgIHJldHVybiBzZWxmLm5hbWUoKQorCiAgICAgZGVm
IGdldF9vcHRpb24oc2VsZiwgbmFtZSwgZGVmYXVsdF92YWx1ZT1Ob25lKToKICAgICAgICAgIyBG
SVhNRTogRXZlbnR1YWxseSB3ZSBzaG91bGQgbm90IGhhdmUgdG8gZG8gYSB0ZXN0IGZvcgogICAg
ICAgICAjIGhhc2F0dHIoKSwgYW5kIHdlIHNob3VsZCBiZSBhYmxlIHRvIGp1c3QgZG8KZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbW9ja19kcnQu
cHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21vY2tfZHJ0LnB5
CmluZGV4IDM3MDMyN2ZiMDFiNTgzYzBkZDAyNTg3ZTY0M2Q5NzhiMTg0ZWIwMWUuLjExNDc4NDZk
NjA5NTA4NDRiNTUzYzBlZjAzNzAxMmNkYWM2MWY0OGQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbW9ja19kcnQucHkKKysrIGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tb2NrX2RydC5weQpAQCAtNTMsNiArNTMs
MTAgQEAgY2xhc3MgTW9ja0RSVFBvcnQob2JqZWN0KToKICAgICAgICAgaWYgJ3BvcnRfbmFtZScg
aW4ga3dhcmdzOgogICAgICAgICAgICAga3dhcmdzWydwb3J0X25hbWUnXSA9IGt3YXJnc1sncG9y
dF9uYW1lJ11bbGVuKHByZWZpeCk6XQogICAgICAgICBzZWxmLl9fZGVsZWdhdGUgPSBmYWN0b3J5
LmdldCgqKmt3YXJncykKKyAgICAgICAgc2VsZi5fX3JlYWxfbmFtZSA9IHByZWZpeCArIHNlbGYu
X19kZWxlZ2F0ZS5uYW1lKCkKKworICAgIGRlZiByZWFsX25hbWUoc2VsZik6CisgICAgICAgIHJl
dHVybiBzZWxmLl9fcmVhbF9uYW1lCiAKICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFtZSk6
CiAgICAgICAgIHJldHVybiBnZXRhdHRyKHNlbGYuX19kZWxlZ2F0ZSwgbmFtZSkKQEAgLTI3MSw3
ICsyNzUsNiBAQCBjbGFzcyBNb2NrQ2hyb21pdW1EUlQoTW9ja0RSVCk6CiAgICAgICAgIHNlbGYu
X3N0ZG91dC5mbHVzaCgpCiAKIAotCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIGZz
ID0gZmlsZXN5c3RlbS5GaWxlU3lzdGVtKCkKICAgICBzeXMuZXhpdChtYWluKHN5cy5hcmd2WzE6
XSwgZnMsIHN5cy5zdGRpbiwgc3lzLnN0ZG91dCwgc3lzLnN0ZGVycikpCmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0
ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90
ZXN0c191bml0dGVzdC5weQppbmRleCBmNGU1MzUwZTZmODUzM2JmMzg5M2M0MTU4MjllMjlhYmQz
NjhlNDU1Li5jMjgyZDFjNWE0Y2M4MjA2YjRkOTA2MjQxNTcwNWZlOTM3ODYyODlkIDEwMDY0NAot
LS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3Rz
X3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1
bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkKQEAgLTQ2MCwxNCArNDYwLDEyIEBAIGNsYXNzIE1h
aW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMs
IDApCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnLS13b3JrZXItbW9kZWw9b2xkLWlubGluZSBv
dmVycmlkZXMgLS1jaGlsZC1wcm9jZXNzZXNcbicgaW4gZXJyLmdldCgpKQogCi0gICAgZGVmIHRl
c3Rfd29ya2VyX21vZGVsX19vbGRfaW5saW5lKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFRy
dWUocGFzc2luZ19ydW4oWyctLXdvcmtlci1tb2RlbCcsICdvbGQtaW5saW5lJ10pKQotCiAgICAg
ZGVmIHRlc3Rfd29ya2VyX21vZGVsX19vbGRfdGhyZWFkcyhzZWxmKToKICAgICAgICAgc2VsZi5h
c3NlcnRUcnVlKHBhc3NpbmdfcnVuKFsnLS13b3JrZXItbW9kZWwnLCAnb2xkLXRocmVhZHMnXSkp
CiAKICAgICBkZWYgdGVzdF93b3JrZXJfbW9kZWxfX3Byb2Nlc3NlcyhzZWxmKToKLSAgICAgICAg
c2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbG9nZ2luZ19ydW4sIFsnLS13b3JrZXItbW9k
ZWwnLCAncHJvY2Vzc2VzJ10pCisgICAgICAgIGlmIGNvbXBhcmVfdmVyc2lvbihzeXMsICcyLjYn
KVswXSA+PSAwOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3NpbmdfcnVuKFsnLS13
b3JrZXItbW9kZWwnLCAncHJvY2Vzc2VzJ10pKQogCiAgICAgZGVmIHRlc3Rfd29ya2VyX21vZGVs
X190aHJlYWRzKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFRydWUocGFzc2luZ19ydW4oWyct
LXdvcmtlci1tb2RlbCcsICd0aHJlYWRzJ10pKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81731</attachid>
            <date>2011-02-08 19:30:40 -0800</date>
            <delta_ts>2011-02-09 01:45:15 -0800</delta_ts>
            <desc>fix typos, review code</desc>
            <filename>bug-49566-20110208193039.patch</filename>
            <type>text/plain</type>
            <size>38661</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzc5OTgKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCBmMDllOTYzZDhlYTBhZmNlMzVjMzExOTdhMjFiODg4NzA1
ZTZiMDM5Li44NmI2YjI2YjViNzM2MTQ2YWU3NDJlN2VmY2E1MjkwN2E4N2YyYjczIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMjIg
QEAKIDIwMTEtMDItMDggIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CiAKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgbmV3LXJ1bi13ZWJr
aXQtdGVzdHM6IGNoZWNrcG9pbnQgbWVyZ2Ugb2YgZHVhbC1tb2RlIG11bHRpcHJvY2Vzc2luZyB3
b3JrCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5
NTY2CisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFj
a2FnZS9tYW5hZ2VyX3dvcmtlcl9icm9rZXIucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21hbmFnZXJfd29ya2VyX2Jyb2tl
cl91bml0dGVzdC5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvbGF5b3V0X3BhY2thZ2UvbWVzc2FnZV9icm9rZXIyLnB5OiBBZGRlZC4KKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jy
b2tlcjJfdW5pdHRlc3QucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfcnVubmVyMi5weTogQWRkZWQuCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvd29ya2VyLnB5
OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jh
c2UucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtp
dF90ZXN0c191bml0dGVzdC5weToKKworMjAxMS0wMi0wOCAgRGlyayBQcmFua2UgIDxkcHJhbmtl
QGNocm9taXVtLm9yZz4KKwogICAgICAgICBSZXZpZXdlZCBieSBUb255IENoYW5nLgogCiAgICAg
ICAgIG5ldy1ydW4td2Via2l0LXRlc3RzOiBtb3ZlIHRoZSBsb2dpYyB0aGF0IHN0YXJ0cyBhbmQg
c3RvcHMgdGhlCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyX3dvcmtlcl9icm9rZXIucHkgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyX3dvcmtlcl9icm9r
ZXIucHkKaW5kZXggNDA1MjY3Nzc5YWYxYTAzNDIzNDZkZTU4Njg4MDVmMDEzNGUyMzZhNy4uOTY5
ZjM0YjhjYTA2M2UyZjUzMThlYTM5Mjg1YTgxYjZhYWQ1M2Q0ZCAxMDA2NDQKLS0tIGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlcl93b3Jr
ZXJfYnJva2VyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL21hbmFnZXJfd29ya2VyX2Jyb2tlci5weQpAQCAtMjgsMzIgKzI4LDM2IEBA
CiAKICIiIk1vZHVsZSBmb3IgaGFuZGxpbmcgbWVzc2FnZXMgYW5kIGNvbmN1cnJlbmN5IGZvciBy
dW4td2Via2l0LXRlc3RzLgogCi1UaGlzIG1vZHVsZSBidWlsZHMgb24gdGhlIGZ1bmN0aW9uYWxp
dHkgb2YgbWVzc2FnZV9icm9rZXIyIHRvIHByb3ZpZGUKLWEgc2ltcGxlIG1lc3NhZ2UgYnJva2Vy
IGZvciBhIG1hbmFnZXIgc2VuZGluZyBtZXNzYWdlcyB0byAoYW5kIGdldHRpbmcKLXJlcGxpZXMg
ZnJvbSkgYSBwb29sIG9mIHdvcmtlcnMuIEluIGFkZGl0aW9uIGl0IHByb3ZpZGVzIGEgY2hvaWNl
IG9mCi1jb25jdXJyZW5jeSBtb2RlbHMgZm9yIGNhbGxlcnMgdG8gY2hvb3NlIGZyb20gKHNpbmds
ZS10aHJlYWRlZCBpbmxpbmUKLW1vZGVsLCB0aHJlYWRzLCBvciBwcm9jZXNzZXMpLgotCi1GSVhN
RTogQXQgdGhlIG1vbWVudCwgdGhpcyBtb2R1bGUgaXMganVzdCBhIGJ1bmNoIG9mIHN0dWJzLCBi
dXQgZXZlbnR1YWxseQotaXQgd2lsbCBwcm92aWRlIHRocmVlIHNldHMgb2YgbWFuYWdlciBjbGFz
c2VzIGFuZCB3b3JrZXIgY2xhc3NlcyBmb3IKLXRoZSB0aHJlZSBjb25jdXJyZW5jeSBtb2RlbHMu
IFRoZSBnZXQoKSBmYWN0b3J5IG1ldGhvZCBzZWxlY3RzIGJldHdlZW4KLXRoZW0uCitUaGlzIG1v
ZHVsZSBpbXBsZW1lbnRzIGEgbWVzc2FnZSBicm9rZXIgdGhhdCBjb25uZWN0cyB0aGUgbWFuYWdl
cgorKFRlc3RSdW5uZXIyKSB0byB0aGUgd29ya2VyczogaXQgcHJvdmlkZXMgYSBtZXNzYWdpbmcg
YWJzdHJhY3Rpb24gYW5kCittZXNzYWdlIGxvb3BzIChidWlsZGluZyBvbiB0b3Agb2YgbWVzc2Fn
ZV9icm9rZXIyKSwgYW5kIGhhbmRsZXMgc3RhcnRpbmcKK3dvcmtlcnMgYnkgbGF1bmNoaW5nIHRo
cmVhZHMgYW5kL29yIHByb2Nlc3NlcyBkZXBlbmRpbmcgb24gdGhlCityZXF1ZXN0ZWQgY29uZmln
dXJhdGlvbi4KICIiIgogCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG9wdHBhcnNlCiBpbXBvcnQg
UXVldWUKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aHJlYWQKIGltcG9ydCB0aHJlYWRpbmcKK2ltcG9y
dCB0aW1lCisKIAotIwogIyBIYW5kbGUgUHl0aG9uIDwgMi42IHdoZXJlIG11bHRpcHJvY2Vzc2lu
ZyBpc24ndCBhdmFpbGFibGUuCiAjCisjIF9NdWx0aXByb2Nlc3NpbmdfUHJvY2VzcyBpcyBuZWVk
ZWQgc28gdGhhdCBfTXVsdGlQcm9jZXNzV29ya2VyCisjIGNhbiBiZSBkZWZpbmVkIHdpdGggb3Ig
d2l0aG91dCBtdWx0aXByb2Nlc3NpbmcuCiB0cnk6CiAgICAgaW1wb3J0IG11bHRpcHJvY2Vzc2lu
ZworICAgIF9NdWx0aXByb2Nlc3NpbmdfUHJvY2VzcyA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNz
CiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgbXVsdGlwcm9jZXNzaW5nID0gTm9uZQorICAgIF9N
dWx0aXByb2Nlc3NpbmdfUHJvY2VzcyA9IHRocmVhZGluZy5UaHJlYWQKIAogCitmcm9tIHdlYmtp
dHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IHN0YWNrX3V0aWxzCitmcm9tIHdlYmtpdHB5LmxheW91
dF90ZXN0cyBpbXBvcnQgcG9ydAogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3Bh
Y2thZ2UgaW1wb3J0IG1lc3NhZ2VfYnJva2VyMgogCiAKQEAgLTc3LDEzICs4MSwxNCBAQCBkZWYg
cnVudGltZV9vcHRpb25zKCk6CiAgICAgcmV0dXJuIG9wdGlvbnMKIAogCi1kZWYgZ2V0KHBvcnQs
IG9wdGlvbnMsIG1hbmFnZXIsIHdvcmtlcl9jbGFzcyk6CitkZWYgZ2V0KHBvcnQsIG9wdGlvbnMs
IGNsaWVudCwgd29ya2VyX2NsYXNzKToKICAgICAiIiJSZXR1cm4gYSBjb25uZWN0aW9uIHRvIGEg
bWFuYWdlci93b3JrZXIgbWVzc2FnZV9icm9rZXIKIAogICAgIEFyZ3M6CiAgICAgICAgIHBvcnQg
LSBoYW5kbGUgdG8gbGF5b3V0X3Rlc3RzL3BvcnQgb2JqZWN0IGZvciBwb3J0LXNwZWNpZmljIHN0
dWZmCiAgICAgICAgIG9wdGlvbnMgLSBvcHRwYXJzZSBhcmd1bWVudCBmb3IgY29tbWFuZC1saW5l
IG9wdGlvbnMKLSAgICAgICAgbWFuYWdlciAtIG9iamVjdCB0byBkaXNwYXRjaCByZXBsaWVzIHRv
CisgICAgICAgIGNsaWVudCAtIG9iamVjdCB0byBkaXNwYXRjaCByZXBsaWVzIHRvLiBUaGlzIG9i
amVjdCBtdXN0IGltcGxlbWVudAorICAgICAgICAgICAgdGhlIG1ldGhvZHMgaW4gbWVzc2FnZV9i
cm9rZXIyLkJyb2tlckNsaWVudC4KICAgICAgICAgd29ya2VyX2NsYXNzIC0gdHlwZSBvZiB3b3Jr
ZXJzIHRvIGNyZWF0ZS4gVGhpcyBjbGFzcyBtdXN0IGltcGxlbWVudAogICAgICAgICAgICAgdGhl
IG1ldGhvZHMgaW4gQWJzdHJhY3RXb3JrZXIuCiAgICAgUmV0dXJuczoKQEAgLTEwNSw3ICsxMTAs
NyBAQCBkZWYgZ2V0KHBvcnQsIG9wdGlvbnMsIG1hbmFnZXIsIHdvcmtlcl9jbGFzcyk6CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgd29ya2VyX21vZGVsKQogCiAgICAgYnJva2VyID0gbWVzc2Fn
ZV9icm9rZXIyLkJyb2tlcihvcHRpb25zLCBxdWV1ZV9jbGFzcykKLSAgICByZXR1cm4gbWFuYWdl
cl9jbGFzcyhicm9rZXIsIHBvcnQsIG9wdGlvbnMsIG1hbmFnZXIsIHdvcmtlcl9jbGFzcykKKyAg
ICByZXR1cm4gbWFuYWdlcl9jbGFzcyhicm9rZXIsIHBvcnQsIG9wdGlvbnMsIGNsaWVudCwgd29y
a2VyX2NsYXNzKQogCiAKIGNsYXNzIEFic3RyYWN0V29ya2VyKG1lc3NhZ2VfYnJva2VyMi5Ccm9r
ZXJDbGllbnQpOgpAQCAtMTM2LDMwICsxNDEsMTgxIEBAIGNsYXNzIEFic3RyYWN0V29ya2VyKG1l
c3NhZ2VfYnJva2VyMi5Ccm9rZXJDbGllbnQpOgogICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRl
ZEVycm9yCiAKIAotY2xhc3MgX0Fic3RyYWN0TWFuYWdlcihvYmplY3QpOgotICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBicm9rZXIsIHBvcnQsIG9wdGlvbnMsIG1hbmFnZXIsIHdvcmtlcl9jbGFzcyk6
CitjbGFzcyBfTWFuYWdlckNvbm5lY3Rpb24obWVzc2FnZV9icm9rZXIyLkJyb2tlckNvbm5lY3Rp
b24pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXIsIG9wdGlvbnMsIGNsaWVudCwgd29y
a2VyX2NsYXNzKToKICAgICAgICAgIiIiQmFzZSBpbml0aWFsaXphdGlvbiBmb3IgYWxsIE1hbmFn
ZXIgb2JqZWN0cy4KIAogICAgICAgICBBcmdzOgogICAgICAgICAgICAgYnJva2VyOiBoYW5kbGUg
dG8gdGhlIG1lc3NhZ2VfYnJva2VyMiBvYmplY3QKICAgICAgICAgICAgIHBvcnQ6IGhhbmRsZSB0
byBwb3J0LXNwZWNpZmljIGZ1bmN0aW9uYWxpdHkKICAgICAgICAgICAgIG9wdGlvbnM6IGNvbW1h
bmQgbGluZSBvcHRpb25zIG9iamVjdAotICAgICAgICAgICAgbWFuYWdlcjogTWFuYWdlciBjYWxs
YmFjayBvYmplY3QgKHRoZSBjYWxsZXIpCisgICAgICAgICAgICBjbGllbnQ6IGNhbGxiYWNrIG9i
amVjdCAodGhlIGNhbGxlcikKICAgICAgICAgICAgIHdvcmtlcl9jbGFzczogY2xhc3Mgb2JqZWN0
IHRvIHVzZSB0byBjcmVhdGUgd29ya2Vycy4KLSAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuX2Jy
b2tlciA9IGJyb2tlcgorICAgICAgICAgIiIiCisgICAgICAgIG1lc3NhZ2VfYnJva2VyMi5Ccm9r
ZXJDb25uZWN0aW9uLl9faW5pdF9fKHNlbGYsIGJyb2tlciwgY2xpZW50LAorICAgICAgICAgICAg
TUFOQUdFUl9UT1BJQywgQU5ZX1dPUktFUl9UT1BJQykKICAgICAgICAgc2VsZi5fb3B0aW9ucyA9
IG9wdGlvbnMKLSAgICAgICAgc2VsZi5fbWFuYWdlciA9IG1hbmFnZXIKKyAgICAgICAgc2VsZi5f
d29ya2VyX2Nvbm5lY3Rpb25fY2xhc3MgPSBOb25lCiAgICAgICAgIHNlbGYuX3dvcmtlcl9jbGFz
cyA9IHdvcmtlcl9jbGFzcwogCisgICAgZGVmIF9tYWtlX3dvcmtlcl9jb25uZWN0aW9uKHNlbGYp
OgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgX21ha2Vfd29y
a2VyKHNlbGYsIHdvcmtlcl9jb25uZWN0aW9uLCB3b3JrZXJfbnVtYmVyLCAqKmt3YXJncyk6Cisg
ICAgICAgIHJldHVybiBzZWxmLl93b3JrZXJfY2xhc3Mod29ya2VyX2Nvbm5lY3Rpb24sIHdvcmtl
cl9udW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9u
cywgKiprd2FyZ3MpCisKKyAgICBkZWYgc3RhcnRfd29ya2VyKHNlbGYsIHdvcmtlcl9udW1iZXIs
ICoqa3dhcmdzKToKKyAgICAgICAgd29ya2VyX2Nvbm5lY3Rpb24gPSBzZWxmLl9tYWtlX3dvcmtl
cl9jb25uZWN0aW9uKCkKKyAgICAgICAgd29ya2VyID0gc2VsZi5fbWFrZV93b3JrZXIod29ya2Vy
X2Nvbm5lY3Rpb24sIHdvcmtlcl9udW1iZXIsICoqa3dhcmdzKQorICAgICAgICB3b3JrZXJfY29u
bmVjdGlvbi5zZXRfY2xpZW50KHdvcmtlcikKKyAgICAgICAgd29ya2VyX2Nvbm5lY3Rpb24uc3Rh
cnQoKQorICAgICAgICByZXR1cm4gd29ya2VyX2Nvbm5lY3Rpb24KKworCitjbGFzcyBfSW5saW5l
TWFuYWdlcihfTWFuYWdlckNvbm5lY3Rpb24pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9r
ZXIsIHBvcnQsIG9wdGlvbnMsIGNsaWVudCwgd29ya2VyX2NsYXNzKToKKyAgICAgICAgX01hbmFn
ZXJDb25uZWN0aW9uLl9faW5pdF9fKHNlbGYsIGJyb2tlciwgb3B0aW9ucywgY2xpZW50LCB3b3Jr
ZXJfY2xhc3MpCisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CisgICAgICAgIHNlbGYuX2lubGlu
ZV93b3JrZXIgPSBOb25lCisKKyAgICBkZWYgX21ha2Vfd29ya2VyX2Nvbm5lY3Rpb24oc2VsZik6
CisgICAgICAgIHNlbGYuX2lubGluZV93b3JrZXIgPSBfSW5saW5lV29ya2VyKHNlbGYuX2Jyb2tl
ciwgc2VsZi5fcG9ydCwgc2VsZi5fY2xpZW50KQorICAgICAgICByZXR1cm4gc2VsZi5faW5saW5l
X3dvcmtlcgorCisgICAgZGVmIHJ1bl9tZXNzYWdlX2xvb3Aoc2VsZiwgZGVsYXlfc2Vjcz1Ob25l
KToKKyAgICAgICAgIyBOb3RlIHRoYXQgZGVsYXlfc2VjcyBpcyBpZ25vcmVkIGluIHRoaXMgY2Fz
ZSBzaW5jZSB3ZSBjYW4ndCBlYXNpbHkKKyAgICAgICAgIyBpbXBsZW1lbnQgaXQuCisgICAgICAg
IHNlbGYuX2lubGluZV93b3JrZXIucnVuKCkKKyAgICAgICAgc2VsZi5fYnJva2VyLnJ1bl9hbGxf
cGVuZGluZyhNQU5BR0VSX1RPUElDLCBzZWxmLl9jbGllbnQpCisKKworY2xhc3MgX1RocmVhZGVk
TWFuYWdlcihfTWFuYWdlckNvbm5lY3Rpb24pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9r
ZXIsIHBvcnQsIG9wdGlvbnMsIGNsaWVudCwgd29ya2VyX2NsYXNzKToKKyAgICAgICAgX01hbmFn
ZXJDb25uZWN0aW9uLl9faW5pdF9fKHNlbGYsIGJyb2tlciwgb3B0aW9ucywgY2xpZW50LCB3b3Jr
ZXJfY2xhc3MpCisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CisKKyAgICBkZWYgX21ha2Vfd29y
a2VyX2Nvbm5lY3Rpb24oc2VsZik6CisgICAgICAgIHJldHVybiBfVGhyZWFkZWRXb3JrZXIoc2Vs
Zi5fYnJva2VyLCBzZWxmLl9wb3J0KQorCiAKLWNsYXNzIF9JbmxpbmVNYW5hZ2VyKF9BYnN0cmFj
dE1hbmFnZXIpOgotICAgIHBhc3MKK2NsYXNzIF9NdWx0aVByb2Nlc3NNYW5hZ2VyKF9NYW5hZ2Vy
Q29ubmVjdGlvbik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb2tlciwgcG9ydCwgb3B0aW9u
cywgY2xpZW50LCB3b3JrZXJfY2xhc3MpOgorICAgICAgICAjIE5vdGUgdGhhdCB0aGlzIGNsYXNz
IGRvZXMgbm90IGtlZXAgYSBoYW5kbGUgdG8gdGhlIGFjdHVhbCBwb3J0CisgICAgICAgICMgb2Jq
ZWN0LCBiZWNhdXNlIGl0IGlzbid0IFBpY2tsYWJsZS4gSW5zdGVhZCBpdCBrZWVwcyB0aGUgcG9y
dAorICAgICAgICAjIG5hbWUgYW5kIHJlY3JlYXRlcyB0aGUgcG9ydCBpbiB0aGUgY2hpbGQgcHJv
Y2VzcyBmcm9tIHRoZSBuYW1lCisgICAgICAgICMgYW5kIG9wdGlvbnMuCisgICAgICAgIF9NYW5h
Z2VyQ29ubmVjdGlvbi5fX2luaXRfXyhzZWxmLCBicm9rZXIsIG9wdGlvbnMsIGNsaWVudCwgd29y
a2VyX2NsYXNzKQorICAgICAgICBzZWxmLl9wbGF0Zm9ybV9uYW1lID0gcG9ydC5yZWFsX25hbWUo
KQogCisgICAgZGVmIF9tYWtlX3dvcmtlcl9jb25uZWN0aW9uKHNlbGYpOgorICAgICAgICByZXR1
cm4gX011bHRpUHJvY2Vzc1dvcmtlcihzZWxmLl9icm9rZXIsIHNlbGYuX3BsYXRmb3JtX25hbWUs
IHNlbGYuX29wdGlvbnMpCiAKLWNsYXNzIF9UaHJlYWRlZE1hbmFnZXIoX0Fic3RyYWN0TWFuYWdl
cik6Ci0gICAgcGFzcwogCitjbGFzcyBfV29ya2VyQ29ubmVjdGlvbihtZXNzYWdlX2Jyb2tlcjIu
QnJva2VyQ29ubmVjdGlvbik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb2tlcik6CisgICAg
ICAgIG1lc3NhZ2VfYnJva2VyMi5Ccm9rZXJDb25uZWN0aW9uLl9faW5pdF9fKHNlbGYsIGJyb2tl
ciwgTm9uZSwgQU5ZX1dPUktFUl9UT1BJQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBNQU5BR0VSX1RPUElDKQorICAgICAgICBzZWxmLl9jbGllbnQg
PSBOb25lCisKKyAgICBkZWYgc2V0X2NsaWVudChzZWxmLCBjbGllbnQpOgorICAgICAgICBzZWxm
Ll9jbGllbnQgPSBjbGllbnQKKyAgICAgICAgc2VsZi5uYW1lID0gY2xpZW50Lm5hbWUoKQorCisg
ICAgZGVmIHN0YXJ0KHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisK
KyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisK
KyAgICBkZWYgeWllbGRfdG9fYnJva2VyKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYg
Y2FuY2VsKHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBk
ZWYgaXNfYWxpdmUoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKwor
ICAgIGRlZiBqb2luKHNlbGYsIHRpbWVvdXQpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRl
ZEVycm9yCisKKyAgICBkZWYgbG9nX3dlZGdlZF93b3JrZXIoc2VsZiwgdGVzdF9uYW1lKToKKyAg
ICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisKK2NsYXNzIF9JbmxpbmVXb3JrZXIo
X1dvcmtlckNvbm5lY3Rpb24pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXIsIHBvcnQs
IG1hbmFnZXJfY2xpZW50KToKKyAgICAgICAgX1dvcmtlckNvbm5lY3Rpb24uX19pbml0X18oc2Vs
ZiwgYnJva2VyKQorICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAorICAgICAgICBzZWxmLl9tYW5h
Z2VyX2NsaWVudCA9IG1hbmFnZXJfY2xpZW50CisgICAgICAgIHNlbGYuX2FsaXZlID0gRmFsc2UK
KworICAgIGRlZiBzdGFydChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHJ1bihzZWxm
KToKKyAgICAgICAgc2VsZi5fYWxpdmUgPSBUcnVlCisgICAgICAgIHNlbGYuX2NsaWVudC5ydW4o
c2VsZi5fcG9ydCkKKyAgICAgICAgc2VsZi5fYWxpdmUgPSBGYWxzZQorCisgICAgZGVmIHlpZWxk
X3RvX2Jyb2tlcihzZWxmKToKKyAgICAgICAgc2VsZi5fYnJva2VyLnJ1bl9hbGxfcGVuZGluZyhN
QU5BR0VSX1RPUElDLCBzZWxmLl9tYW5hZ2VyX2NsaWVudCkKKworICAgIGRlZiBjYW5jZWwoc2Vs
Zik6CisgICAgICAgIHNlbGYuX2NsaWVudC5jYW5jZWwoKQorCisgICAgZGVmIGlzX2FsaXZlKHNl
bGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fYWxpdmUKKworICAgIGRlZiBqb2luKHNlbGYsIHRp
bWVvdXQpOgorICAgICAgICBhc3NlcnQgbm90IHNlbGYuaXNfYWxpdmUoKQorCisgICAgZGVmIGxv
Z193ZWRnZWRfd29ya2VyKHNlbGYsIHRlc3RfbmFtZSk6CisgICAgICAgIHJhaXNlIEFzc2VydGlv
bkVycm9yKCJfSW5saW5lV29ya2VyLmxvZ193ZWRnZWRfd29ya2VyKCkgY2FsbGVkIikKKworCitj
bGFzcyBfVGhyZWFkZWRXb3JrZXIodGhyZWFkaW5nLlRocmVhZCwgX1dvcmtlckNvbm5lY3Rpb24p
OgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXIsIHBvcnQpOgorICAgICAgICB0aHJlYWRp
bmcuVGhyZWFkLl9faW5pdF9fKHNlbGYpCisgICAgICAgIF9Xb3JrZXJDb25uZWN0aW9uLl9faW5p
dF9fKHNlbGYsIGJyb2tlcikKKyAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKKworICAgIGRlZiBy
dW4oc2VsZik6CisgICAgICAgICMgRklYTUU6IFdlIGNhbiByZW1vdmUgdGhpcyBvbmNlIGV2ZXJ5
b25lIGlzIG9uIDIuNi4KKyAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgJ2lkZW50Jyk6Cisg
ICAgICAgICAgICBzZWxmLmlkZW50ID0gdGhyZWFkLmdldF9pZGVudCgpCisgICAgICAgIHNlbGYu
X2NsaWVudC5ydW4oc2VsZi5fcG9ydCkKKworICAgIGRlZiBjYW5jZWwoc2VsZik6CisgICAgICAg
IHNlbGYuX2NsaWVudC5jYW5jZWwoKQorCisgICAgZGVmIGlzX2FsaXZlKHNlbGYpOgorICAgICAg
ICAjIEZJWE1FOiBXZSBjYW4gcmVtb3ZlIHRoaXMgb25jZSBldmVyeW9uZSBpcyBvbiAyLjYuCisg
ICAgICAgIHNlbGYuaXNBbGl2ZSgpCisKKyAgICBkZWYgbG9nX3dlZGdlZF93b3JrZXIoc2VsZiwg
dGVzdF9uYW1lKToKKyAgICAgICAgc3RhY2tfdXRpbHMubG9nX3RocmVhZF9zdGF0ZShfbG9nLmVy
cm9yLCBzZWxmLm5hbWUsIHNlbGYuaWRlbnQsCisgICAgICAgICAgICAiIGlzIHdlZGdlZCBvbiB0
ZXN0ICVzIiAlIHRlc3RfbmFtZSkKKworCitjbGFzcyBfTXVsdGlQcm9jZXNzV29ya2VyKF9NdWx0
aXByb2Nlc3NpbmdfUHJvY2VzcywgX1dvcmtlckNvbm5lY3Rpb24pOgorICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBicm9rZXIsIHBsYXRmb3JtX25hbWUsIG9wdGlvbnMpOgorICAgICAgICBfTXVsdGlw
cm9jZXNzaW5nX1Byb2Nlc3MuX19pbml0X18oc2VsZikKKyAgICAgICAgX1dvcmtlckNvbm5lY3Rp
b24uX19pbml0X18oc2VsZiwgYnJva2VyKQorICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9u
cworICAgICAgICBzZWxmLl9wbGF0Zm9ybV9uYW1lID0gcGxhdGZvcm1fbmFtZQorCisgICAgZGVm
IHJ1bihzZWxmKToKKyAgICAgICAgIyBSZS1jb25maWd1cmUgdGhlIGxvZ2dlci4KKyAgICAgICAg
IyBGSVhNRTogZmlndXJlIG91dCBob3cgdG8gZ2V0IGEgaGFuZGxlIHRvIHRoZSByaWdodCBzdHJl
YW0uCisgICAgICAgIGxvZ2dpbmcuYmFzaWNDb25maWcoKQorICAgICAgICBwb3J0X29iaiA9IHBv
cnQuZ2V0KHNlbGYuX3BsYXRmb3JtX25hbWUsIHNlbGYuX29wdGlvbnMpCisgICAgICAgIHNlbGYu
X2NsaWVudC5ydW4ocG9ydF9vYmopCisKKyAgICBkZWYgY2FuY2VsKHNlbGYpOgorICAgICAgICBz
ZWxmLnRlcm1pbmF0ZSgpCiAKLWNsYXNzIF9NdWx0aVByb2Nlc3NNYW5hZ2VyKF9BYnN0cmFjdE1h
bmFnZXIpOgotICAgIHBhc3MKKyAgICBkZWYgbG9nX3dlZGdlZF93b3JrZXIoc2VsZiwgdGVzdF9u
YW1lKToKKyAgICAgICAgX2xvZy5lcnJvcigiJXMgKHBpZCAlZCkgaXMgd2VkZ2VkIG9uIHRlc3Qg
JXMiICUKKyAgICAgICAgICAgICAgICAgICAoc2VsZi5uYW1lLCBzZWxmLnBpZCwgdGVzdF9uYW1l
KSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL21hbmFnZXJfd29ya2VyX2Jyb2tlcl91bml0dGVzdC5weSBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21hbmFnZXJfd29ya2VyX2Jy
b2tlcl91bml0dGVzdC5weQppbmRleCAwYTMwYmRkNDVmYjQxZjk5YWU5NDNhYjRjZWMwNzNjYzg5
MjAyNWZhLi5iNDY4ZGQxZDFmMGVlZTY3Y2E1NzQ4N2RmYzQ1ZGQ4MjI0ZTk0ZDkyIDEwMDY0NAot
LS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9t
YW5hZ2VyX3dvcmtlcl9icm9rZXJfdW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlcl93b3JrZXJfYnJva2VyX3Vu
aXR0ZXN0LnB5CkBAIC0yNyw2ICsyNyw3IEBACiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKIGltcG9ydCBvcHRw
YXJzZQoraW1wb3J0IFF1ZXVlCiBpbXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QKIApAQCAtNDMs
OCArNDQsNDggQEAgZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1w
b3J0IG1hbmFnZXJfd29ya2VyX2Jyb2tlcgogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5
b3V0X3BhY2thZ2UgaW1wb3J0IG1lc3NhZ2VfYnJva2VyMgogCiAKLWNsYXNzIFRlc3RXb3JrZXIo
b2JqZWN0KToKLSAgICBwYXNzCitjbGFzcyBUZXN0V29ya2VyKG1hbmFnZXJfd29ya2VyX2Jyb2tl
ci5BYnN0cmFjdFdvcmtlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb2tlciwgd29ya2Vy
X251bWJlciwgb3B0aW9ucywgKiprd2FyZ3MpOgorICAgICAgICBzZWxmLl9icm9rZXIgPSBicm9r
ZXIKKyAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKKyAgICAgICAgc2VsZi5fd29ya2Vy
X251bWJlciA9IHdvcmtlcl9udW1iZXIKKyAgICAgICAgc2VsZi5fbmFtZSA9ICdUZXN0V29ya2Vy
LyVkJyAlIHdvcmtlcl9udW1iZXIKKyAgICAgICAgc2VsZi5fY2FuY2VsZWQgPSBGYWxzZQorICAg
ICAgICBzZWxmLl9zdG9wcGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5fc3RhcnRpbmdfcXVldWUg
PSBrd2FyZ3MuZ2V0KCdzdGFydGluZ19xdWV1ZScpCisgICAgICAgIHNlbGYuX3N0b3BwaW5nX3F1
ZXVlID0ga3dhcmdzLmdldCgnc3RvcHBpbmdfcXVldWUnKQorCisgICAgZGVmIGNhbmNlbChzZWxm
KToKKyAgICAgICAgc2VsZi5fY2FuY2VsZWQgPSBUcnVlCisKKyAgICBkZWYgaGFuZGxlX3N0b3Ao
c2VsZiwgc3JjKToKKyAgICAgICAgc2VsZi5fc3RvcHBlZCA9IFRydWUKKworICAgIGRlZiBoYW5k
bGVfdGVzdChzZWxmLCBzcmMsIGFuX2ludCwgYV9zdHIpOgorICAgICAgICBhc3NlcnQgYW5faW50
ID09IDEKKyAgICAgICAgYXNzZXJ0IGFfc3RyID09ICJoZWxsbywgd29ybGQiCisgICAgICAgIHNl
bGYuX2Jyb2tlci5wb3N0X21lc3NhZ2UoJ3Rlc3QnLCAyLCAnaGksIGV2ZXJ5Ym9keScpCisKKyAg
ICBkZWYgaXNfZG9uZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3N0b3BwZWQgb3Igc2Vs
Zi5fY2FuY2VsZWQKKworICAgIGRlZiBuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5f
bmFtZQorCisgICAgZGVmIHN0YXJ0KHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgcnVu
KHNlbGYsIHBvcnQpOgorICAgICAgICBpZiBzZWxmLl9zdGFydGluZ19xdWV1ZToKKyAgICAgICAg
ICAgIHNlbGYuX3N0YXJ0aW5nX3F1ZXVlLnB1dCgnJykKKyAgICAgICAgaWYgc2VsZi5fc3RvcHBp
bmdfcXVldWU6CisgICAgICAgICAgICBzZWxmLl9zdG9wcGluZ19xdWV1ZS5nZXQoKQorICAgICAg
ICB0cnk6CisgICAgICAgICAgICBzZWxmLl9icm9rZXIucnVuX21lc3NhZ2VfbG9vcCgpCisgICAg
ICAgICAgICBzZWxmLl9icm9rZXIueWllbGRfdG9fYnJva2VyKCkKKyAgICAgICAgICAgIHNlbGYu
X2Jyb2tlci5wb3N0X21lc3NhZ2UoJ2RvbmUnKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBl
OgorICAgICAgICAgICAgc2VsZi5fYnJva2VyLnBvc3RfbWVzc2FnZSgnZXhjZXB0aW9uJywgKHR5
cGUoZSksIHN0cihlKSwgTm9uZSkpCiAKIAogZGVmIGdldF9vcHRpb25zKHdvcmtlcl9tb2RlbCk6
CkBAIC03Niw2ICsxMTcsMTQ0IEBAIGNsYXNzIEZ1bmN0aW9uVGVzdHModW5pdHRlc3QuVGVzdENh
c2UpOgogICAgIGRlZiB0ZXN0X2dldF9fdW5rbm93bihzZWxmKToKICAgICAgICAgc2VsZi5hc3Nl
cnRSYWlzZXMoVmFsdWVFcnJvciwgbWFrZV9icm9rZXIsIHNlbGYsICd1bmtub3duJykKIAorCitj
bGFzcyBfVGVzdHNNaXhpbihvYmplY3QpOgorICAgICIiIk1peGluIGNsYXNzIHRoYXQgaW1wbGVt
ZW50cyBhIHNlcmllcyBvZiB0ZXN0cyB0byBlbmZvcmNlIHRoZQorICAgIGNvbnRyYWN0IGFsbCBp
bXBsZW1lbnRhdGlvbnMgbXVzdCBmb2xsb3cuIiIiCisKKyAgICAjCisgICAgIyBNZXRob2RzIHRv
IGltcGxlbWVudCB0aGUgTWFuYWdlciBzaWRlIG9mIHRoZSBDbGllbnRJbnRlcmZhY2UKKyAgICAj
CisgICAgZGVmIG5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiAnVGVzdGVyJworCisgICAgZGVm
IGlzX2RvbmUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9kb25lCisKKyAgICAjCisgICAg
IyBIYW5kbGVycyBmb3IgdGhlIG1lc3NhZ2VzIHRoZSBUZXN0V29ya2VyIG1heSBzZW5kLgorICAg
ICMKKyAgICBkZWYgaGFuZGxlX2RvbmUoc2VsZiwgc3JjKToKKyAgICAgICAgc2VsZi5fZG9uZSA9
IFRydWUKKworICAgIGRlZiBoYW5kbGVfdGVzdChzZWxmLCBzcmMsIGFuX2ludCwgYV9zdHIpOgor
ICAgICAgICBzZWxmLl9hbl9pbnQgPSBhbl9pbnQKKyAgICAgICAgc2VsZi5fYV9zdHIgPSBhX3N0
cgorCisgICAgZGVmIGhhbmRsZV9leGNlcHRpb24oc2VsZiwgc3JjLCBleGNfaW5mbyk6CisgICAg
ICAgIHNlbGYuX2V4Y2VwdGlvbiA9IGV4Y19pbmZvCisgICAgICAgIHNlbGYuX2RvbmUgPSBUcnVl
CisKKyAgICAjCisgICAgIyBUZXN0aW5nIGhlbHBlciBtZXRob2RzCisgICAgIworICAgIGRlZiBz
ZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5fYW5faW50ID0gTm9uZQorICAgICAgICBzZWxmLl9h
X3N0ciA9IE5vbmUKKyAgICAgICAgc2VsZi5fYnJva2VyID0gTm9uZQorICAgICAgICBzZWxmLl9k
b25lID0gRmFsc2UKKyAgICAgICAgc2VsZi5fZXhjZXB0aW9uID0gTm9uZQorICAgICAgICBzZWxm
Ll93b3JrZXJfbW9kZWwgPSBOb25lCisKKyAgICBkZWYgbWFrZV9icm9rZXIoc2VsZik6CisgICAg
ICAgIHNlbGYuX2Jyb2tlciA9IG1ha2VfYnJva2VyKHNlbGYsIHNlbGYuX3dvcmtlcl9tb2RlbCkK
KworICAgICMKKyAgICAjIEFjdHVhbCB1bml0IHRlc3RzCisgICAgIworICAgIGRlZiB0ZXN0X2Nh
bmNlbChzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuX3dvcmtlcl9tb2RlbDoKKyAgICAgICAg
ICAgIHJldHVybgorICAgICAgICBzZWxmLm1ha2VfYnJva2VyKCkKKyAgICAgICAgd29ya2VyID0g
c2VsZi5fYnJva2VyLnN0YXJ0X3dvcmtlcigwKQorICAgICAgICB3b3JrZXIuY2FuY2VsKCkKKyAg
ICAgICAgc2VsZi5fYnJva2VyLnBvc3RfbWVzc2FnZSgndGVzdCcsIDEsICdoZWxsbywgd29ybGQn
KQorICAgICAgICB3b3JrZXIuam9pbigwLjUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uod29y
a2VyLmlzX2FsaXZlKCkpCisKKyAgICBkZWYgdGVzdF9kb25lKHNlbGYpOgorICAgICAgICBpZiBu
b3Qgc2VsZi5fd29ya2VyX21vZGVsOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYu
bWFrZV9icm9rZXIoKQorICAgICAgICB3b3JrZXIgPSBzZWxmLl9icm9rZXIuc3RhcnRfd29ya2Vy
KDApCisgICAgICAgIHNlbGYuX2Jyb2tlci5wb3N0X21lc3NhZ2UoJ3Rlc3QnLCAxLCAnaGVsbG8s
IHdvcmxkJykKKyAgICAgICAgc2VsZi5fYnJva2VyLnBvc3RfbWVzc2FnZSgnc3RvcCcpCisgICAg
ICAgIHNlbGYuX2Jyb2tlci5ydW5fbWVzc2FnZV9sb29wKCkKKyAgICAgICAgd29ya2VyLmpvaW4o
MC41KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHdvcmtlci5pc19hbGl2ZSgpKQorICAgICAg
ICBzZWxmLmFzc2VydFRydWUoc2VsZi5pc19kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoc2VsZi5fYW5faW50LCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2Ffc3Ry
LCAnaGksIGV2ZXJ5Ym9keScpCisKKyAgICBkZWYgdGVzdF9sb2dfd2VkZ2VkX3dvcmtlcihzZWxm
KToKKyAgICAgICAgaWYgbm90IHNlbGYuX3dvcmtlcl9tb2RlbDoKKyAgICAgICAgICAgIHJldHVy
bgorICAgICAgICBzdGFydGluZ19xdWV1ZSA9IHNlbGYucXVldWUoKQorICAgICAgICBzdG9wcGlu
Z19xdWV1ZSA9IHNlbGYucXVldWUoKQorICAgICAgICBzZWxmLm1ha2VfYnJva2VyKCkKKyAgICAg
ICAgb2MgPSBvdXRwdXRjYXB0dXJlLk91dHB1dENhcHR1cmUoKQorICAgICAgICBvYy5jYXB0dXJl
X291dHB1dCgpCisgICAgICAgIHdvcmtlciA9IHNlbGYuX2Jyb2tlci5zdGFydF93b3JrZXIoMCwK
KyAgICAgICAgICAgIHN0YXJ0aW5nX3F1ZXVlPXN0YXJ0aW5nX3F1ZXVlLCBzdG9wcGluZ19xdWV1
ZT1zdG9wcGluZ19xdWV1ZSkKKyAgICAgICAgc3RhcnRpbmdfcXVldWUuZ2V0KCkKKyAgICAgICAg
d29ya2VyLmxvZ193ZWRnZWRfd29ya2VyKCd0ZXN0X25hbWUnKQorICAgICAgICBzdG9wcGluZ19x
dWV1ZS5wdXQoJycpCisgICAgICAgIHNlbGYuX2Jyb2tlci5wb3N0X21lc3NhZ2UoJ3N0b3AnKQor
ICAgICAgICBzZWxmLl9icm9rZXIucnVuX21lc3NhZ2VfbG9vcCgpCisgICAgICAgIHdvcmtlci5q
b2luKDAuNSkKKyAgICAgICAgb2MucmVzdG9yZV9vdXRwdXQoKQorICAgICAgICBzZWxmLmFzc2Vy
dEZhbHNlKHdvcmtlci5pc19hbGl2ZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5p
c19kb25lKCkpCisKKyAgICBkZWYgdGVzdF91bmtub3duX21lc3NhZ2Uoc2VsZik6CisgICAgICAg
IGlmIG5vdCBzZWxmLl93b3JrZXJfbW9kZWw6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAg
c2VsZi5tYWtlX2Jyb2tlcigpCisgICAgICAgIHdvcmtlciA9IHNlbGYuX2Jyb2tlci5zdGFydF93
b3JrZXIoMCkKKyAgICAgICAgc2VsZi5fYnJva2VyLnBvc3RfbWVzc2FnZSgndW5rbm93bicpCisg
ICAgICAgIHNlbGYuX2Jyb2tlci5ydW5fbWVzc2FnZV9sb29wKCkKKyAgICAgICAgd29ya2VyLmpv
aW4oMC41KQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmlzX2RvbmUoKSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRGYWxzZSh3b3JrZXIuaXNfYWxpdmUoKSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbHMoc2VsZi5fZXhjZXB0aW9uWzBdLCBWYWx1ZUVycm9yKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFscyhzZWxmLl9leGNlcHRpb25bMV0sCisgICAgICAgICAgICAiVGVzdFdvcmtlci8w
OiByZWNlaXZlZCBtZXNzYWdlICd1bmtub3duJyBpdCBjb3VsZG4ndCBoYW5kbGUiKQorCisKK2Ns
YXNzIElubGluZUJyb2tlclRlc3RzKF9UZXN0c01peGluLCB1bml0dGVzdC5UZXN0Q2FzZSk6Cisg
ICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBfVGVzdHNNaXhpbi5zZXRVcChzZWxmKQorICAg
ICAgICBzZWxmLl93b3JrZXJfbW9kZWwgPSAnaW5saW5lJworCisgICAgZGVmIHRlc3RfbG9nX3dl
ZGdlZF93b3JrZXIoc2VsZik6CisgICAgICAgIHNlbGYubWFrZV9icm9rZXIoKQorICAgICAgICB3
b3JrZXIgPSBzZWxmLl9icm9rZXIuc3RhcnRfd29ya2VyKDApCisgICAgICAgIHNlbGYuYXNzZXJ0
UmFpc2VzKEFzc2VydGlvbkVycm9yLCB3b3JrZXIubG9nX3dlZGdlZF93b3JrZXIsIE5vbmUpCisK
KworY2xhc3MgTXVsdGlQcm9jZXNzQnJva2VyVGVzdHMoX1Rlc3RzTWl4aW4sIHVuaXR0ZXN0LlRl
c3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIF9UZXN0c01peGluLnNldFVw
KHNlbGYpCisgICAgICAgIGlmIG11bHRpcHJvY2Vzc2luZzoKKyAgICAgICAgICAgIHNlbGYuX3dv
cmtlcl9tb2RlbCA9ICdwcm9jZXNzZXMnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxm
Ll93b3JrZXJfbW9kZWwgPSBOb25lCisKKyAgICBkZWYgcXVldWUoc2VsZik6CisgICAgICAgIHJl
dHVybiBtdWx0aXByb2Nlc3NpbmcuUXVldWUoKQorCisKK2NsYXNzIFRocmVhZGVkQnJva2VyVGVz
dHMoX1Rlc3RzTWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgcXVldWUoc2VsZik6
CisgICAgICAgIHJldHVybiBRdWV1ZS5RdWV1ZSgpCisKKyAgICBkZWYgc2V0VXAoc2VsZik6Cisg
ICAgICAgIF9UZXN0c01peGluLnNldFVwKHNlbGYpCisgICAgICAgIHNlbGYuX3dvcmtlcl9tb2Rl
bCA9ICd0aHJlYWRzJworCisKK2NsYXNzIEZ1bmN0aW9uc1Rlc3QodW5pdHRlc3QuVGVzdENhc2Up
OgogICAgIGRlZiB0ZXN0X3J1bnRpbWVfb3B0aW9ucyhzZWxmKToKICAgICAgICAgb3B0aW9uX2xp
c3QgPSBtYW5hZ2VyX3dvcmtlcl9icm9rZXIucnVudGltZV9vcHRpb25zKCkKICAgICAgICAgcGFy
c2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKG9wdGlvbl9saXN0PW9wdGlvbl9saXN0KQpAQCAt
ODMsNSArMjYyLDMwIEBAIGNsYXNzIEZ1bmN0aW9uVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgog
ICAgICAgICBzZWxmLmFzc2VydFRydWUob3B0aW9ucykKIAogCitjbGFzcyBJbnRlcmZhY2VUZXN0
KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFRoZXNlIHRlc3RzIG1vc3RseSBleGlzdCB0byBw
YWNpZnkgY292ZXJhZ2UuCisKKyAgICAjIEZJWE1FOiBUaGVyZSBtdXN0IGJlIGEgYmV0dGVyIHdh
eSB0byBkbyB0aGlzIGFuZCBhbHNvIHZlcmlmeQorICAgICMgdGhhdCBjbGFzc2VzIGRvIGltcGxl
bWVudCBldmVyeSBhYnN0cmFjdCBtZXRob2QgaW4gYW4gaW50ZXJmYWNlLgorICAgIGRlZiB0ZXN0
X21hbmFnZXJjb25uZWN0aW9uX2lzX2Fic3RyYWN0KHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhh
dCBhbGwgdGhlIGJhc2UgY2xhc3MgbWV0aG9kcyBhcmUgYWJzdHJhY3QgYW5kIGhhdmUgdGhlCisg
ICAgICAgICMgc2lnbmF0dXJlIHdlIGV4cGVjdC4KKyAgICAgICAgYnJva2VyID0gbWFrZV9icm9r
ZXIoc2VsZiwgJ2lubGluZScpCisgICAgICAgIG9iaiA9IG1hbmFnZXJfd29ya2VyX2Jyb2tlci5f
TWFuYWdlckNvbm5lY3Rpb24oYnJva2VyLl9icm9rZXIsIE5vbmUsIHNlbGYsIE5vbmUpCisgICAg
ICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIG9iai5fbWFrZV93b3Jr
ZXJfY29ubmVjdGlvbikKKworICAgIGRlZiB0ZXN0X3dvcmtlcmNvbm5lY3Rpb25faXNfYWJzdHJh
Y3Qoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGFsbCB0aGUgYmFzZSBjbGFzcyBtZXRob2Rz
IGFyZSBhYnN0cmFjdCBhbmQgaGF2ZSB0aGUKKyAgICAgICAgIyBzaWduYXR1cmUgd2UgZXhwZWN0
LgorICAgICAgICBicm9rZXIgPSBtYWtlX2Jyb2tlcihzZWxmLCAnaW5saW5lJykKKyAgICAgICAg
b2JqID0gbWFuYWdlcl93b3JrZXJfYnJva2VyLl9Xb3JrZXJDb25uZWN0aW9uKGJyb2tlci5fYnJv
a2VyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBvYmou
c3RhcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIG9i
ai5ydW4pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIG9i
ai5jYW5jZWwpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3Is
IG9iai5pc19hbGl2ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRF
cnJvciwgb2JqLmpvaW4sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxl
bWVudGVkRXJyb3IsIG9iai5sb2dfd2VkZ2VkX3dvcmtlciwgTm9uZSkKKworCiBpZiBfX25hbWVf
XyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWVzc2FnZV9icm9r
ZXIyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2th
Z2UvbWVzc2FnZV9icm9rZXIyLnB5CmluZGV4IDhlMTU5MjNmNjIxMmQ5NTUxNTM2OGIyZjdmYjJh
NTc4ZGVhYzc4MzcuLmVjM2M5NzAxYjk5OGVmZDJjNzNlNzI5YzBhYzdhYzIwYjBjMmI5NGIgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNr
YWdlL21lc3NhZ2VfYnJva2VyMi5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tlcjIucHkKQEAgLTEzMiw3ICsxMzIs
NyBAQCBjbGFzcyBCcm9rZXIob2JqZWN0KToKICAgICAgICAgc2VsZi5fcnVuX2xvb3AodG9waWNf
bmFtZSwgY2xpZW50LCBibG9jaz1GYWxzZSwgZGVsYXlfc2Vjcz1Ob25lKQogCiAgICAgZGVmIF9y
dW5fbG9vcChzZWxmLCB0b3BpY19uYW1lLCBjbGllbnQsIGJsb2NrLCBkZWxheV9zZWNzKToKLSAg
ICAgICAgcXVldWUgPSBzZWxmLl9maW5kX3RvcGljKHRvcGljX25hbWUpCisgICAgICAgIHF1ZXVl
ID0gc2VsZi5fZ2V0X3F1ZXVlX2Zvcl90b3BpYyh0b3BpY19uYW1lKQogICAgICAgICB3aGlsZSBu
b3QgY2xpZW50LmlzX2RvbmUoKToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBz
ID0gcXVldWUuZ2V0KGJsb2NrLCBkZWxheV9zZWNzKQpAQCAtMTQ2LDcgKzE0Niw3IEBAIGNsYXNz
IEJyb2tlcihvYmplY3QpOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAg
ICAgICAgICIlczogcmVjZWl2ZWQgbWVzc2FnZSAnJXMnIGl0IGNvdWxkbid0IGhhbmRsZSIgJQog
ICAgICAgICAgICAgICAgKGNsaWVudC5uYW1lKCksIG1lc3NhZ2UubmFtZSkpCi0gICAgICAgIG9w
dGFyZ3MgPSBtZXNzYWdlLmJvZHkKKyAgICAgICAgb3B0YXJncyA9IG1lc3NhZ2UuYXJncwogICAg
ICAgICBtZXNzYWdlX2hhbmRsZXIgPSBnZXRhdHRyKGNsaWVudCwgJ2hhbmRsZV8nICsgbWVzc2Fn
ZS5uYW1lKQogICAgICAgICBtZXNzYWdlX2hhbmRsZXIobWVzc2FnZS5zcmMsICpvcHRhcmdzKQog
CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRf
cGFja2FnZS90ZXN0X3J1bm5lcjIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X3J1bm5lcjIucHkKaW5kZXggZWI3ODc1MjU1YzNjM2Mx
MGNjNjgxZTViZDFmZTgwMWUzODE4Y2JmNy4uYzlmNWFlZTZiMmUxMDY5ZDJmOTY2NDA1ZjE0NTY4
M2E4OGVlYWM4OSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9ydW5uZXIyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfcnVubmVyMi5weQpAQCAtMjks
MjUgKzI5LDE5MCBAQAogCiAiIiIKIFRoZSBUZXN0UnVubmVyMiBwYWNrYWdlIGlzIGFuIGFsdGVy
bmF0ZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVGVzdFJ1bm5lcgotY2xhc3MuIEZvciBub3cgaXQg
aXMganVzdCBhIHN0dWIsIGJ1dCBldmVudHVhbGx5IGl0IHdpbGwgdXNlIHRoZQotbWVzc2FnZSBi
cm9rZXIgYWJzdHJhY3Rpb24gdG8gcGFzcyBtZXNzYWdlcyB0byB3b3JrZXJzIHRvIHJ1biBzZXRz
IG9mCi10ZXN0cyBhbmQgdGhlbiBwcm9jZXNzIHRoZSBjb21wbGV0aW9uIG1lc3NhZ2VzIGFjY29y
ZGluZ2x5LgorY2xhc3MuIEl0IHVzZXMgdGhlIG1lc3NhZ2UgYnJva2VyIGFic3RyYWN0aW9uIHRv
IHBhc3MgbWVzc2FnZXMgdG8gd29ya2VycyB0bworcnVuIHNldHMgb2YgdGVzdHMgYW5kIHRoZW4g
cHJvY2Vzc2VzIHRoZSBjb21wbGV0aW9uIG1lc3NhZ2VzIGFjY29yZGluZ2x5LgogIiIiCiAKIGlt
cG9ydCBsb2dnaW5nCitpbXBvcnQgdGltZQogCitmcm9tIHdlYmtpdHB5LnRvb2wgaW1wb3J0IGdy
YW1tYXIKKworaW1wb3J0IG1hbmFnZXJfd29ya2VyX2Jyb2tlcgogaW1wb3J0IHRlc3RfcnVubmVy
CitpbXBvcnQgd29ya2VyCisKIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQog
CiAKK2NsYXNzIF9Xb3JrZXJTdGF0ZShvYmplY3QpOgorICAgICIiIkEgY2xhc3MgZm9yIHRoZSBU
ZXN0UnVubmVyL21hbmFnZXIgdG8gdXNlIHRvIHRyYWNrIHRoZSBjdXJyZW50IHN0YXRlCisgICAg
b2YgdGhlIHdvcmtlcnMuIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG51bWJlciwgd29ya2Vy
KToKKyAgICAgICAgc2VsZi53b3JrZXIgPSB3b3JrZXIKKyAgICAgICAgc2VsZi5udW1iZXIgPSBu
dW1iZXIKKyAgICAgICAgc2VsZi5kb25lID0gRmFsc2UKKyAgICAgICAgc2VsZi5uZXh0X3RpbWVv
dXQgPSBOb25lCisgICAgICAgIHNlbGYud2VkZ2VkID0gRmFsc2UKKyAgICAgICAgc2VsZi5zdGF0
cyA9IHt9CisgICAgICAgIHNlbGYuc3RhdHNbJ25hbWUnXSA9IHdvcmtlci5uYW1lCisgICAgICAg
IHNlbGYuc3RhdHNbJ251bV90ZXN0cyddID0gMAorICAgICAgICBzZWxmLnN0YXRzWyd0b3RhbF90
aW1lJ10gPSAwCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiX1dv
cmtlclN0YXRlKCIgKyBzdHIoc2VsZi5fX2RpY3RfXykgKyAiKSIKKworCiBjbGFzcyBUZXN0UnVu
bmVyMih0ZXN0X3J1bm5lci5UZXN0UnVubmVyKToKICAgICBkZWYgX19pbml0X18oc2VsZiwgcG9y
dCwgb3B0aW9ucywgcHJpbnRlcik6CisgICAgICAgIHRlc3RfcnVubmVyLlRlc3RSdW5uZXIuX19p
bml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucywgcHJpbnRlcikKKyAgICAgICAgc2VsZi5fbWVzc2Fn
ZV9icm9rZXIgPSBOb25lCiAKLSAgICAgICAgIyBGSVhNRTogVGhpcydsbCBnZXQgcmVwbGFjZWQg
d2l0aCBhIHJlYWwgaW1wbGVtZW50YXRpb24gc29vbiBlbm91Z2guCi0gICAgICAgIGlmIG9wdGlv
bnMud29ya2VyX21vZGVsIGluICgnaW5saW5lJywgJ3RocmVhZHMnKToKLSAgICAgICAgICAgIG9w
dGlvbnMud29ya2VyX21vZGVsID0gJ29sZC0nICsgb3B0aW9ucy53b3JrZXJfbW9kZWwKLSAgICAg
ICAgaWYgb3B0aW9ucy53b3JrZXJfbW9kZWwgPT0gJ3Byb2Nlc3Nlcyc6Ci0gICAgICAgICAgICBy
YWlzZSBWYWx1ZUVycm9yKCItLXdvcmtlci1tb2RlbD1wcm9jZXNzZXMgbm90IHN1cHBvcnRlZCB5
ZXQiKQorICAgICAgICAjIFRoaXMgbWFwcyB3b3JrZXIgbmFtZXMgdG8gdGhlIHN0YXRlIHdlIGFy
ZSB0cmFja2luZyBmb3IgZWFjaCBvZiB0aGVtLgorICAgICAgICBzZWxmLl93b3JrZXJzID0ge30K
IAotICAgICAgICB0ZXN0X3J1bm5lci5UZXN0UnVubmVyLl9faW5pdF9fKHNlbGYsIHBvcnQsIG9w
dGlvbnMsIHByaW50ZXIpCisgICAgZGVmIGlzX2RvbmUoc2VsZik6CisgICAgICAgIHJldHVybiBG
YWxzZQorCisgICAgZGVmIG5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiAnVGVzdFJ1bm5lcjIn
CisKKyAgICBkZWYgX3J1bl90ZXN0cyhzZWxmLCBmaWxlX2xpc3QsIHJlc3VsdF9zdW1tYXJ5KToK
KyAgICAgICAgIiIiUnVucyB0aGUgdGVzdHMgaW4gdGhlIGZpbGVfbGlzdC4KKworICAgICAgICBS
ZXR1cm46IEEgdHVwbGUgKGtleWJvYXJkX2ludGVycnVwdGVkLCB0aHJlYWRfdGltaW5ncywgdGVz
dF90aW1pbmdzLAorICAgICAgICAgICAgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MpCisgICAgICAg
ICAgICBrZXlib2FyZF9pbnRlcnJ1cHRlZCBpcyB3aGV0aGVyIHNvbWVvbmUgdHlwZWQgQ3RybF5D
CisgICAgICAgICAgICB0aHJlYWRfdGltaW5ncyBpcyBhIGxpc3Qgb2YgZGljdHMgd2l0aCB0aGUg
dG90YWwgcnVudGltZQorICAgICAgICAgICAgICBvZiBlYWNoIHRocmVhZCB3aXRoICduYW1lJywg
J251bV90ZXN0cycsICd0b3RhbF90aW1lJyBwcm9wZXJ0aWVzCisgICAgICAgICAgICB0ZXN0X3Rp
bWluZ3MgaXMgYSBsaXN0IG9mIHRpbWluZ3MgZm9yIGVhY2ggc2hhcmRlZCBzdWJkaXJlY3RvcnkK
KyAgICAgICAgICAgICAgb2YgdGhlIGZvcm0gW3RpbWUsIGRpcmVjdG9yeV9uYW1lLCBudW1fdGVz
dHNdCisgICAgICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncyBpcyBhIGxpc3Qgb2YgcnVu
IHRpbWVzIGZvciBlYWNoIHRlc3QKKyAgICAgICAgICAgICAgaW4gdGhlIGZvcm0ge2ZpbGVuYW1l
OmZpbGVuYW1lLCB0ZXN0X3J1bl90aW1lOnRlc3RfcnVuX3RpbWV9CisgICAgICAgICAgICByZXN1
bHRfc3VtbWFyeTogc3VtbWFyeSBvYmplY3QgdG8gcG9wdWxhdGUgd2l0aCB0aGUgcmVzdWx0cwor
ICAgICAgICAiIiIKKyAgICAgICAgbnVtX3dvcmtlcnMgPSBzZWxmLl9udW1fd29ya2VycygpCisK
KyAgICAgICAgc2VsZi5fY3VycmVudF9maWxlX2xpc3QgPSBmaWxlX2xpc3QKKyAgICAgICAgc2Vs
Zi5fY3VycmVudF9yZXN1bHRfc3VtbWFyeSA9IHJlc3VsdF9zdW1tYXJ5CisKKyAgICAgICAgc2Vs
Zi5fYWxsX3Jlc3VsdHMgPSBbXQorICAgICAgICBzZWxmLl9ncm91cF9zdGF0cyA9IHt9CisgICAg
ICAgIHNlbGYuX3dvcmtlcnMgPSB7fQorCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBk
YXRlKCdTaGFyZGluZyB0ZXN0cyAuLi4nKQorICAgICAgICB0ZXN0X2xpc3RzID0gc2VsZi5fc2hh
cmRfdGVzdHMoZmlsZV9saXN0LAorICAgICAgICAgICAgbnVtX3dvcmtlcnMgPiAxIGFuZCBub3Qg
c2VsZi5fb3B0aW9ucy5leHBlcmltZW50YWxfZnVsbHlfcGFyYWxsZWwpCisgICAgICAgIF9sb2cu
ZGVidWcoIlVzaW5nICVkIHNoYXJkcyIgJSBsZW4odGVzdF9saXN0cykpCisKKyAgICAgICAgYnJv
a2VyID0gbWFuYWdlcl93b3JrZXJfYnJva2VyLmdldChzZWxmLl9wb3J0LCBzZWxmLl9vcHRpb25z
LCBzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtl
ci5Xb3JrZXIpCisKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF91cGRhdGUoJ1N0YXJ0aW5n
ICVzIC4uLicgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFtbWFyLnBs
dXJhbGl6ZSgnd29ya2VyJywgbnVtX3dvcmtlcnMpKQorICAgICAgICBmb3Igd29ya2VyX251bWJl
ciBpbiB4cmFuZ2UobnVtX3dvcmtlcnMpOgorICAgICAgICAgICAgdyA9IGJyb2tlci5zdGFydF93
b3JrZXIod29ya2VyX251bWJlcikKKyAgICAgICAgICAgIHdzID0gX1dvcmtlclN0YXRlKHdvcmtl
cl9udW1iZXIsIHcpCisgICAgICAgICAgICBzZWxmLl93b3JrZXJzW3cubmFtZV0gPSB3cworICAg
ICAgICAgICAgdGltZS5zbGVlcCgwLjEpCisKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF91
cGRhdGUoIlN0YXJ0aW5nIHRlc3RpbmcgLi4uIikKKyAgICAgICAgZm9yIHRlc3RfbGlzdCBpbiB0
ZXN0X2xpc3RzOgorICAgICAgICAgICAgYnJva2VyLnBvc3RfbWVzc2FnZSgndGVzdF9saXN0Jywg
dGVzdF9saXN0WzBdLCB0ZXN0X2xpc3RbMV0pCisKKyAgICAgICAgIyBUZWxsIHRoZSB3b3JrZXJz
IHRvIHNodXQgZG93biBhZnRlciB0aGV5J3JlIGRvbmUgcnVubmluZyBhbGwgdGhlCisgICAgICAg
ICMgdGVzdHMuCisgICAgICAgIGZvciBpIGluIHhyYW5nZShudW1fd29ya2Vycyk6CisgICAgICAg
ICAgICBicm9rZXIucG9zdF9tZXNzYWdlKCdzdG9wJykKKworICAgICAgICBpbnRlcnJ1cHRlZCA9
IEZhbHNlCisgICAgICAgIGtleWJvYXJkX2ludGVycnVwdGVkID0gRmFsc2UKKyAgICAgICAgdHJ5
OgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX29wdGlvbnMuZHJ5X3J1bjoKKyAgICAgICAgICAg
ICAgICB3aGlsZSBub3Qgc2VsZi5fY2hlY2tfaWZfZG9uZSgpOgorICAgICAgICAgICAgICAgICAg
ICBicm9rZXIucnVuX21lc3NhZ2VfbG9vcChkZWxheV9zZWNzPTEuMCkKKworICAgICAgICAgICAg
ICAgIGZvciB3IGluIHNlbGYuX3dvcmtlcnMudmFsdWVzKCk6CisgICAgICAgICAgICAgICAgICAg
IGlmIG5vdCB3LndlZGdlZCBhbmQgdy53b3JrZXIuaXNfYWxpdmUoKToKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHcud29ya2VyLmpvaW4oMC41KQorICAgICAgICAgICAgICAgICAgICAgICAgYXNz
ZXJ0IG5vdCB3Lndvcmtlci5pc19hbGl2ZSgpCisKKyAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50
ZXJydXB0OgorICAgICAgICAgICAgX2xvZy5pbmZvKCJJbnRlcnJ1cHRlZCwgZXhpdGluZyIpCisg
ICAgICAgICAgICBmb3IgdyBpbiBzZWxmLl93b3JrZXJzLnZhbHVlcygpOgorICAgICAgICAgICAg
ICAgIHcud29ya2VyLmNhbmNlbCgpCisgICAgICAgICAgICBrZXlib2FyZF9pbnRlcnJ1cHRlZCA9
IFRydWUKKyAgICAgICAgZXhjZXB0IHRlc3RfcnVubmVyLlRlc3RSdW5JbnRlcnJ1cHRlZEV4Y2Vw
dGlvbiwgZToKKyAgICAgICAgICAgIF9sb2cuaW5mbyhlLnJlYXNvbikKKyAgICAgICAgICAgIGJy
b2tlci5jYW5jZWxfd29ya2VycygpCisgICAgICAgICAgICBpbnRlcnJ1cHRlZCA9IFRydWUKKyAg
ICAgICAgZXhjZXB0OgorICAgICAgICAgICAgIyBVbmV4cGVjdGVkIGV4Y2VwdGlvbjsgZG9uJ3Qg
dHJ5IHRvIGNsZWFuIHVwIHdvcmtlcnMuCisgICAgICAgICAgICBfbG9nLmluZm8oIkV4Y2VwdGlv
biByYWlzZWQsIGV4aXRpbmciKQorICAgICAgICAgICAgcmFpc2UKKworICAgICAgICB0aHJlYWRf
dGltaW5ncyA9IFt3LnN0YXRzIGZvciB3IGluIHNlbGYuX3dvcmtlcnMudmFsdWVzKCldCisgICAg
ICAgIHJldHVybiAoaW50ZXJydXB0ZWQsIGtleWJvYXJkX2ludGVycnVwdGVkLCB0aHJlYWRfdGlt
aW5ncywKKyAgICAgICAgICAgICAgICBzZWxmLl9ncm91cF9zdGF0cywgc2VsZi5fYWxsX3Jlc3Vs
dHMpCisKKyAgICBkZWYgX2NoZWNrX2lmX2RvbmUoc2VsZik6CisgICAgICAgICIiIlJldHVybnMg
dHJ1ZSBpZmYgYWxsIHRoZSB3b3JrZXJzIGhhdmUgZWl0aGVyIGNvbXBsZXRlZCBvciB3ZWRnZWQu
IiIiCisgICAgICAgIGRvbmUgPSBUcnVlCisgICAgICAgIHQgPSB0aW1lLnRpbWUoKQorICAgICAg
ICBmb3IgdyBpbiBzZWxmLl93b3JrZXJzLnZhbHVlcygpOgorICAgICAgICAgICAgaWYgbm90IHcu
ZG9uZSBhbmQgbm90IHcud2VkZ2VkOgorICAgICAgICAgICAgICAgIG5leHRfdGltZW91dCA9IHcu
bmV4dF90aW1lb3V0CisgICAgICAgICAgICAgICAgV0VER0VfUEFERElORyA9IDQwLjAKKyAgICAg
ICAgICAgICAgICBpZiBuZXh0X3RpbWVvdXQgYW5kIHQgPiBuZXh0X3RpbWVvdXQgKyBXRURHRV9Q
QURESU5HOgorICAgICAgICAgICAgICAgICAgICBfbG9nLmVycm9yKCcnKQorICAgICAgICAgICAg
ICAgICAgICB3Lndvcmtlci5sb2dfd2VkZ2VkX3dvcmtlcih3LmN1cnJlbnRfdGVzdF9uYW1lKQor
ICAgICAgICAgICAgICAgICAgICBfbG9nLmVycm9yKCcnKQorICAgICAgICAgICAgICAgICAgICB3
LndlZGdlZCA9IFRydWUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAg
ICBkb25lID0gRmFsc2UKKworICAgICAgICBpZiBkb25lOgorICAgICAgICAgICAgaWYgYW55KFt3
LndlZGdlZCBmb3IgdyBpbiBzZWxmLl93b3JrZXJzLnZhbHVlcygpXSk6CisgICAgICAgICAgICAg
ICAgX2xvZy5lcnJvcignJykKKyAgICAgICAgICAgICAgICBfbG9nLmVycm9yKCdSZW1haW5pbmcg
d29ya2VycyBhcmUgd2VkZ2VkLCBiYWlsaW5nIG91dC4nKQorICAgICAgICAgICAgICAgIF9sb2cu
ZXJyb3IoJycpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIF9sb2cuZGVidWco
J05vIHdlZGdlZCB0aHJlYWRzJykKKyAgICAgICAgcmV0dXJuIGRvbmUKKworICAgIGRlZiBoYW5k
bGVfc3RhcnRlZF90ZXN0KHNlbGYsIHNyYywgdGVzdF9pbmZvLCBoYW5nX3RpbWVvdXQpOgorICAg
ICAgICB3ID0gc2VsZi5fd29ya2Vyc1tzcmNdCisgICAgICAgIHcuY3VycmVudF90ZXN0X25hbWUg
PSBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoCisgICAgICAgICAgICB0ZXN0X2lu
Zm8uZmlsZW5hbWUpCisgICAgICAgIHcubmV4dF90aW1lb3V0ID0gdGltZS50aW1lKCkgKyBoYW5n
X3RpbWVvdXQKKworICAgIGRlZiBoYW5kbGVfZG9uZShzZWxmLCBzcmMpOgorICAgICAgICB3ID0g
c2VsZi5fd29ya2Vyc1tzcmNdCisgICAgICAgIHcuZG9uZSA9IFRydWUKKworICAgIGRlZiBoYW5k
bGVfZmluaXNoZWRfdGVzdChzZWxmLCBzcmMsIHJlc3VsdCwgZWxhcHNlZF90aW1lKToKKyAgICAg
ICAgIiIiVXBkYXRlIHRoZSBzdW1tYXJ5IGFuZCBwcmludCByZXN1bHRzIHdpdGggYW55IGNvbXBs
ZXRlZCB0ZXN0cy4iIiIKKyAgICAgICAgdyA9IHNlbGYuX3dvcmtlcnNbc3JjXQorICAgICAgICB3
Lm5leHRfdGltZW91dCA9IE5vbmUKKyAgICAgICAgdy5jdXJyZW50X3Rlc3QgPSBOb25lCisKKyAg
ICAgICAgaWYgdy53ZWRnZWQ6CisgICAgICAgICAgICAjIEhtbS4gVGhpcyBzaG91bGRuJ3QgaGFw
cGVuIGlmIHdlIGhhdmUgb3VyIHRpbWVvdXRzCisgICAgICAgICAgICAjIHR1bmVkIHByb3Blcmx5
LgorICAgICAgICAgICAgX2xvZy5lcnJvcigiJXMgdW53ZWRnZWQiLCB3Lm5hbWUpCisKKyAgICAg
ICAgc2VsZi5fdXBkYXRlX3dvcmtlcl9zdGF0cyhzcmMsIHJlc3VsdCwgZWxhcHNlZF90aW1lKQor
CisgICAgICAgIHNlbGYuX3VwZGF0ZV9zdW1tYXJ5X3dpdGhfcmVzdWx0KHNlbGYuX2N1cnJlbnRf
cmVzdWx0X3N1bW1hcnksIHJlc3VsdCkKKworICAgIGRlZiBoYW5kbGVfZmluaXNoZWRfbGlzdChz
ZWxmLCBzcmMsIGxpc3RfbmFtZSwgbnVtX3Rlc3RzLCBlbGFwc2VkX3RpbWUpOgorICAgICAgICBz
ZWxmLl9ncm91cF9zdGF0c1tsaXN0X25hbWVdID0gKG51bV90ZXN0cywgZWxhcHNlZF90aW1lKQor
CisgICAgZGVmIGhhbmRsZV9leGNlcHRpb24oc2VsZiwgc3JjLCBleGNlcHRpb25faW5mbyk6Cisg
ICAgICAgIHJhaXNlIGV4Y2VwdGlvbl9pbmZvCisKKyAgICBkZWYgX3VwZGF0ZV93b3JrZXJfc3Rh
dHMoc2VsZiwgc3JjLCByZXN1bHQsIGVsYXBzZWRfdGltZSk6CisgICAgICAgIHNlbGYuX3dvcmtl
cnNbc3JjXS5zdGF0c1sndG90YWxfdGltZSddICs9IGVsYXBzZWRfdGltZQorICAgICAgICBzZWxm
Ll93b3JrZXJzW3NyY10uc3RhdHNbJ251bV90ZXN0cyddICs9IDEKKyAgICAgICAgc2VsZi5fYWxs
X3Jlc3VsdHMuYXBwZW5kKHJlc3VsdCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3dvcmtlci5weSBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3dvcmtlci5weQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li42N2ViMGI1OTZhMDJlNjMyZGU1MmVmZmUyMGI5YWFkMDk2YTQ5ZDZiCi0tLSAvZGV2L251bGwK
KysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uv
d29ya2VyLnB5CkBAIC0wLDAgKzEsMTgyIEBACisjIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR2Fib3IgUmFw
Y3NhbnlpIChyZ2Fib3JAaW5mLnUtc3plZ2VkLmh1KSwgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyMK
KyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
IyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4K
KyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisKKyIiIkEgVGhyZWFkIG9iamVjdCBmb3IgcnVubmluZyBEdW1wUmVu
ZGVyVHJlZSBhbmQgcHJvY2Vzc2luZyBVUkxzIGZyb20gYQorc2hhcmVkIHF1ZXVlLgorCitFYWNo
IHRocmVhZCBydW5zIGEgc2VwYXJhdGUgaW5zdGFuY2Ugb2YgdGhlIER1bXBSZW5kZXJUcmVlIGJp
bmFyeSBhbmQgdmFsaWRhdGVzCit0aGUgb3V0cHV0LiAgV2hlbiB0aGVyZSBhcmUgbm8gbW9yZSBV
UkxzIHRvIHByb2Nlc3MgaW4gdGhlIHNoYXJlZCBxdWV1ZSwgdGhlCit0aHJlYWQgZXhpdHMuCisi
IiIKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aW1lCisKK2Zyb20gd2Vi
a2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgc3RhY2tfdXRpbHMKKworZnJvbSB3ZWJraXRweS5s
YXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IG1hbmFnZXJfd29ya2VyX2Jyb2tlcgor
ZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IHNpbmdsZV90
ZXN0X3J1bm5lcgorCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisKKworY2xh
c3MgV29ya2VyKG1hbmFnZXJfd29ya2VyX2Jyb2tlci5BYnN0cmFjdFdvcmtlcik6CisgICAgZGVm
IF9faW5pdF9fKHNlbGYsIHdvcmtlcl9jb25uZWN0aW9uLCB3b3JrZXJfbnVtYmVyLCBvcHRpb25z
KToKKyAgICAgICAgc2VsZi5fd29ya2VyX2Nvbm5lY3Rpb24gPSB3b3JrZXJfY29ubmVjdGlvbgor
ICAgICAgICBzZWxmLl93b3JrZXJfbnVtYmVyID0gd29ya2VyX251bWJlcgorICAgICAgICBzZWxm
Ll9vcHRpb25zID0gb3B0aW9ucworICAgICAgICBzZWxmLl9uYW1lID0gJ3dvcmtlci8lZCcgJSB3
b3JrZXJfbnVtYmVyCisgICAgICAgIHNlbGYuX2NhbmNlbGVkID0gRmFsc2UKKyAgICAgICAgc2Vs
Zi5fZG9uZSA9IEZhbHNlCisKKyAgICAgICAgc2VsZi5fcG9ydCA9IE5vbmUKKyAgICAgICAgc2Vs
Zi5fYmF0Y2hfY291bnQgPSAwCisgICAgICAgIHNlbGYuX2JhdGNoX3NpemUgPSAwCisgICAgICAg
IHNlbGYuX3NpbmdsZV90ZXN0X3J1bm5lciA9IE5vbmUKKyAgICAgICAgc2VsZi5fdGVzdHNfcnVu
X2ZpbGUgPSBOb25lCisKKyAgICBkZWYgX2RlZmVycmVkX2luaXQoc2VsZiwgcG9ydCk6CisgICAg
ICAgIHNlbGYuX3BvcnQgPSBwb3J0CisgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0gPSBwb3J0Ll9m
aWxlc3lzdGVtCisgICAgICAgIHNlbGYuX2JhdGNoX3NpemUgPSBzZWxmLl9vcHRpb25zLmJhdGNo
X3NpemUKKyAgICAgICAgc2VsZi5fc2luZ2xlX3Rlc3RfcnVubmVyID0gc2luZ2xlX3Rlc3RfcnVu
bmVyLlNpbmdsZVRlc3RSdW5uZXIoCisgICAgICAgICAgIHNlbGYuX29wdGlvbnMsIHNlbGYuX3Bv
cnQsIHNlbGYuX25hbWUsIHNlbGYuX3dvcmtlcl9udW1iZXIpCisKKyAgICAgICAgIyBBcHBlbmQg
dGVzdHMgd2UncmUgcnVubmluZyB0byB0aGUgZXhpc3RpbmcgdGVzdHNfcnVuLnR4dCBmaWxlLgor
ICAgICAgICAjIFRoaXMgaXMgY3JlYXRlZCBpbiBydW5fd2Via2l0X3Rlc3RzLnB5Ol9QcmVwYXJl
TGlzdHNBbmRQcmludE91dHB1dC4KKyAgICAgICAgdGVzdHNfcnVuX2ZpbGVuYW1lID0gc2VsZi5f
ZmlsZXN5c3RlbS5qb2luKHNlbGYuX29wdGlvbnMucmVzdWx0c19kaXJlY3RvcnksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdHNfcnVuLnR4
dCVkIiAlIHNlbGYuX3dvcmtlcl9udW1iZXIpCisgICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9maWxl
ID0gc2VsZi5fZmlsZXN5c3RlbS5vcGVuX3RleHRfZmlsZV9mb3Jfd3JpdGluZyh0ZXN0c19ydW5f
ZmlsZW5hbWUpCisKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fY2xlYW51
cCgpCisKKyAgICBkZWYgY2FuY2VsKHNlbGYpOgorICAgICAgICAiIiJBdHRlbXB0IHRvIGFib3J0
IHByb2Nlc3NpbmcgKGJlc3QgZWZmb3J0KS4iIiIKKyAgICAgICAgc2VsZi5fY2FuY2VsZWQgPSBU
cnVlCisKKyAgICBkZWYgaXNfZG9uZShzZWxmKToKKyAgICAgICAgIyBUaGlzIGlzIHVzZWQgZm9y
IGFzc2VydGlvbiBjaGVja2luZyBpbiB0aGUgbWFuYWdlci4KKyAgICAgICAgcmV0dXJuIHNlbGYu
X2RvbmUgb3Igc2VsZi5fY2FuY2VsZWQKKworICAgIGRlZiBuYW1lKHNlbGYpOgorICAgICAgICBy
ZXR1cm4gc2VsZi5fbmFtZQorCisgICAgZGVmIHJ1bihzZWxmLCBwb3J0KToKKyAgICAgICAgc2Vs
Zi5fZGVmZXJyZWRfaW5pdChwb3J0KQorCisgICAgICAgIGV4Y2VwdGlvbl9tc2cgPSAiIgorICAg
ICAgICBfbG9nLmRlYnVnKCIlcyBzdGFydGluZyIgJSBzZWxmLl9uYW1lKQorCisgICAgICAgIHRy
eToKKyAgICAgICAgICAgIHNlbGYuX3dvcmtlcl9jb25uZWN0aW9uLnJ1bl9tZXNzYWdlX2xvb3Ao
KQorICAgICAgICAgICAgaWYgbm90IHNlbGYuaXNfZG9uZSgpOgorICAgICAgICAgICAgICAgIHJh
aXNlIEFzc2VydGlvbkVycm9yKCIlczogcmFuIG91dCBvZiBtZXNzYWdlcyBpbiB3b3JrZXIgcXVl
dWUuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgc2VsZi5fbmFtZSkK
KyAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgZXhjZXB0aW9u
X21zZyA9ICIsIGludGVycnVwdGVkIgorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBleGNl
cHRpb25fbXNnID0gIiwgZXhjZXB0aW9uIHJhaXNlZCIKKyAgICAgICAgZmluYWxseToKKyAgICAg
ICAgICAgIF9sb2cuZGVidWcoIiVzIGRvbmUlcyIgJSAoc2VsZi5fbmFtZSwgZXhjZXB0aW9uX21z
ZykpCisgICAgICAgICAgICBpZiBleGNlcHRpb25fbXNnOgorICAgICAgICAgICAgICAgIGV4Y19p
bmZvID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgICAgICAgICBzdGFja191dGlscy5sb2dfdHJh
Y2ViYWNrKF9sb2cuZXJyb3IsIGV4Y19pbmZvWzJdKQorICAgICAgICAgICAgICAgICMgRklYTUU6
IEZpZ3VyZSBvdXQgaG93IHRvIHNlbmQgYSBtZXNzYWdlIHdpdGggYSB0cmFjZWJhY2suCisgICAg
ICAgICAgICAgICAgc2VsZi5fd29ya2VyX2Nvbm5lY3Rpb24ucG9zdF9tZXNzYWdlKCdleGNlcHRp
b24nLAorICAgICAgICAgICAgICAgICAgICAoZXhjX2luZm9bMF0sIGV4Y19pbmZvWzFdLCBOb25l
KSkKKyAgICAgICAgICAgIHNlbGYuX3dvcmtlcl9jb25uZWN0aW9uLnBvc3RfbWVzc2FnZSgnZG9u
ZScpCisgICAgICAgICAgICBzZWxmLl9jbGVhbnVwKCkKKworICAgIGRlZiBfY2xlYW51cChzZWxm
KToKKyAgICAgICAgaWYgc2VsZi5fc2luZ2xlX3Rlc3RfcnVubmVyOgorICAgICAgICAgICAgaWYg
c2VsZi5fc2luZ2xlX3Rlc3RfcnVubmVyLmhhc19odHRwX2xvY2s6CisgICAgICAgICAgICAgICAg
c2VsZi5fc2luZ2xlX3Rlc3RfcnVubmVyLnN0b3Bfc2VydmVyc193aXRoX2xvY2soKQorICAgICAg
ICAgICAgc2VsZi5fc2luZ2xlX3Rlc3RfcnVubmVyLmNsZWFudXAoKQorICAgICAgICBpZiBzZWxm
Ll90ZXN0c19ydW5fZmlsZToKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9maWxlLmNsb3Nl
KCkKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9maWxlID0gTm9uZQorCisgICAgZGVmIGhh
bmRsZV90ZXN0X2xpc3Qoc2VsZiwgc3JjLCBsaXN0X25hbWUsIHRlc3RfbGlzdCk6CisgICAgICAg
IGlmIGxpc3RfbmFtZSA9PSAidGVzdHNfdG9faHR0cF9sb2NrIjoKKyAgICAgICAgICAgIHNlbGYu
X3NpbmdsZV90ZXN0X3J1bm5lci5zdGFydF9zZXJ2ZXJzX3dpdGhfbG9jaygpCisKKyAgICAgICAg
c3RhcnRfdGltZSA9IHRpbWUudGltZSgpCisgICAgICAgIG51bV90ZXN0cyA9IDAKKyAgICAgICAg
Zm9yIHRlc3RfaW5wdXQgaW4gdGVzdF9saXN0OgorICAgICAgICAgICAgc2VsZi5fcnVuX3Rlc3Qo
dGVzdF9pbnB1dCkKKyAgICAgICAgICAgIHNlbGYuX3dvcmtlcl9jb25uZWN0aW9uLnlpZWxkX3Rv
X2Jyb2tlcigpCisgICAgICAgICAgICBpZiBzZWxmLl9jYW5jZWxlZDoKKyAgICAgICAgICAgICAg
ICBicmVhaworICAgICAgICAgICAgbnVtX3Rlc3RzICs9IDEKKworICAgICAgICBlbGFwc2VkX3Rp
bWUgPSB0aW1lLnRpbWUoKSAtIHN0YXJ0X3RpbWUKKworICAgICAgICBzZWxmLl93b3JrZXJfY29u
bmVjdGlvbi5wb3N0X21lc3NhZ2UoJ2ZpbmlzaGVkX2xpc3QnLCBsaXN0X25hbWUsIG51bV90ZXN0
cywgZWxhcHNlZF90aW1lKQorCisgICAgICAgIGlmIHNlbGYuX3NpbmdsZV90ZXN0X3J1bm5lci5o
YXNfaHR0cF9sb2NrOgorICAgICAgICAgICAgc2VsZi5fc2luZ2xlX3Rlc3RfcnVubmVyLnN0b3Bf
c2VydmVyc193aXRoX2xvY2soKQorCisgICAgZGVmIGhhbmRsZV9zdG9wKHNlbGYsIHNyYyk6Cisg
ICAgICAgICIiIlN0b3AgcmVjZWl2ZWQgLSBubyBtb3JlIHRlc3RzIHRvIHJ1bi4iIiIKKyAgICAg
ICAgc2VsZi5fZG9uZSA9IFRydWUKKworICAgIGRlZiBfcnVuX3Rlc3Qoc2VsZiwgdGVzdF9pbnB1
dCk6CisgICAgICAgIHRlc3RfdGltZW91dF9zZWMgPSBzZWxmLl9zaW5nbGVfdGVzdF9ydW5uZXIu
dGltZW91dCh0ZXN0X2lucHV0KQorICAgICAgICBzdGFydCA9IHRpbWUudGltZSgpCisgICAgICAg
IHNlbGYuX3dvcmtlcl9jb25uZWN0aW9uLnBvc3RfbWVzc2FnZSgnc3RhcnRlZF90ZXN0JywgdGVz
dF9pbnB1dCwgdGVzdF90aW1lb3V0X3NlYykKKworICAgICAgICByZXN1bHQgPSBzZWxmLl9zaW5n
bGVfdGVzdF9ydW5uZXIucnVuX3Rlc3QodGVzdF9pbnB1dCwgdGVzdF90aW1lb3V0X3NlYykKKyAg
ICAgICAgZWxhcHNlZF90aW1lID0gdGltZS50aW1lKCkgLSBzdGFydAorCisgICAgICAgIHNlbGYu
X2JhdGNoX2NvdW50ICs9IDEKKyAgICAgICAgc2VsZi5fdGVzdHNfcnVuX2ZpbGUud3JpdGUodGVz
dF9pbnB1dC5maWxlbmFtZSArICJcbiIpCisgICAgICAgIHRlc3RfbmFtZSA9IHNlbGYuX3BvcnQu
cmVsYXRpdmVfdGVzdF9maWxlbmFtZSh0ZXN0X2lucHV0LmZpbGVuYW1lKQorCisgICAgICAgIGlm
IHJlc3VsdC5mYWlsdXJlczoKKyAgICAgICAgICAgICMgQ2hlY2sgYW5kIGtpbGwgRHVtcFJlbmRl
clRyZWUgaWYgd2UgbmVlZCB0by4KKyAgICAgICAgICAgIGlmIGFueShbZi5zaG91bGRfa2lsbF9k
dW1wX3JlbmRlcl90cmVlKCkgZm9yIGYgaW4gcmVzdWx0LmZhaWx1cmVzXSk6CisgICAgICAgICAg
ICAgICAgc2VsZi5fc2luZ2xlX3Rlc3RfcnVubmVyLmtpbGxfZHVtcF9yZW5kZXJfdHJlZSgpCisg
ICAgICAgICAgICAgICAgIyBSZXNldCB0aGUgYmF0Y2ggY291bnQgc2luY2UgdGhlIHNoZWxsIGp1
c3QgYm91bmNlZC4KKyAgICAgICAgICAgICAgICBzZWxmLl9iYXRjaF9jb3VudCA9IDAKKworICAg
ICAgICAgICAgIyBQcmludCB0aGUgZXJyb3IgbWVzc2FnZShzKS4KKyAgICAgICAgICAgIF9sb2cu
ZGVidWcoIiVzICVzIGZhaWxlZDoiICUgKHNlbGYuX25hbWUsIHRlc3RfbmFtZSkpCisgICAgICAg
ICAgICBmb3IgZiBpbiByZXN1bHQuZmFpbHVyZXM6CisgICAgICAgICAgICAgICAgX2xvZy5kZWJ1
ZygiJXMgICVzIiAlIChzZWxmLl9uYW1lLCBmLm1lc3NhZ2UoKSkpCisgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyAlcyBwYXNzZWQiICUgKHNlbGYuX25hbWUsIHRlc3Rf
bmFtZSkpCisKKyAgICAgICAgc2VsZi5fd29ya2VyX2Nvbm5lY3Rpb24ucG9zdF9tZXNzYWdlKCdm
aW5pc2hlZF90ZXN0JywgcmVzdWx0LCBlbGFwc2VkX3RpbWUpCisKKyAgICAgICAgaWYgc2VsZi5f
YmF0Y2hfc2l6ZSA+IDAgYW5kIHNlbGYuX2JhdGNoX2NvdW50ID49IHNlbGYuX2JhdGNoX3NpemU6
CisgICAgICAgICAgICAjIEJvdW5jZSB0aGUgc2hlbGwgYW5kIHJlc2V0IGNvdW50LgorICAgICAg
ICAgICAgc2VsZi5fc2luZ2xlX3Rlc3RfcnVuZXIua2lsbF9kdW1wX3JlbmRlcl90cmVlKCkKKyAg
ICAgICAgICAgIHNlbGYuX2JhdGNoX2NvdW50ID0gMApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CmluZGV4IGUzZDVmOGU5YTQ1OGYxOWQxOTMw
NjY4MTEzNzEwOWM4ZGNlNzRmZmUuLjk3Nzk5MWNkY2VhNzU5MDQ4NjE3OGJhOGQwNjA4NWY5NTkx
MzVhZjUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvYmFzZS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2Jhc2UucHkKQEAgLTQ3Myw2ICs0NzMsMTAgQEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAgICAg
ICAoJ2NwdScpLiIiIgogICAgICAgICByZXR1cm4gJ2NwdScKIAorICAgIGRlZiByZWFsX25hbWUo
c2VsZik6CisgICAgICAgICIiIlJldHVybnMgdGhlIGFjdHVhbCBuYW1lIG9mIHRoZSBwb3J0LCBu
b3QgdGhlIGRlbGVnYXRlJ3MuIiIiCisgICAgICAgIHJldHVybiBzZWxmLm5hbWUoKQorCiAgICAg
ZGVmIGdldF9vcHRpb24oc2VsZiwgbmFtZSwgZGVmYXVsdF92YWx1ZT1Ob25lKToKICAgICAgICAg
IyBGSVhNRTogRXZlbnR1YWxseSB3ZSBzaG91bGQgbm90IGhhdmUgdG8gZG8gYSB0ZXN0IGZvcgog
ICAgICAgICAjIGhhc2F0dHIoKSwgYW5kIHdlIHNob3VsZCBiZSBhYmxlIHRvIGp1c3QgZG8KZGlm
ZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbW9ja19k
cnQucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21vY2tfZHJ0
LnB5CmluZGV4IDM3MDMyN2ZiMDFiNTgzYzBkZDAyNTg3ZTY0M2Q5NzhiMTg0ZWIwMWUuLjExNDc4
NDZkNjA5NTA4NDRiNTUzYzBlZjAzNzAxMmNkYWM2MWY0OGQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbW9ja19kcnQucHkKKysrIGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tb2NrX2RydC5weQpAQCAtNTMsNiAr
NTMsMTAgQEAgY2xhc3MgTW9ja0RSVFBvcnQob2JqZWN0KToKICAgICAgICAgaWYgJ3BvcnRfbmFt
ZScgaW4ga3dhcmdzOgogICAgICAgICAgICAga3dhcmdzWydwb3J0X25hbWUnXSA9IGt3YXJnc1sn
cG9ydF9uYW1lJ11bbGVuKHByZWZpeCk6XQogICAgICAgICBzZWxmLl9fZGVsZWdhdGUgPSBmYWN0
b3J5LmdldCgqKmt3YXJncykKKyAgICAgICAgc2VsZi5fX3JlYWxfbmFtZSA9IHByZWZpeCArIHNl
bGYuX19kZWxlZ2F0ZS5uYW1lKCkKKworICAgIGRlZiByZWFsX25hbWUoc2VsZik6CisgICAgICAg
IHJldHVybiBzZWxmLl9fcmVhbF9uYW1lCiAKICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFt
ZSk6CiAgICAgICAgIHJldHVybiBnZXRhdHRyKHNlbGYuX19kZWxlZ2F0ZSwgbmFtZSkKQEAgLTI3
MSw3ICsyNzUsNiBAQCBjbGFzcyBNb2NrQ2hyb21pdW1EUlQoTW9ja0RSVCk6CiAgICAgICAgIHNl
bGYuX3N0ZG91dC5mbHVzaCgpCiAKIAotCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAg
IGZzID0gZmlsZXN5c3RlbS5GaWxlU3lzdGVtKCkKICAgICBzeXMuZXhpdChtYWluKHN5cy5hcmd2
WzE6XSwgZnMsIHN5cy5zdGRpbiwgc3lzLnN0ZG91dCwgc3lzLnN0ZGVycikpCmRpZmYgLS1naXQg
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3Vu
aXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtp
dF90ZXN0c191bml0dGVzdC5weQppbmRleCBmNGU1MzUwZTZmODUzM2JmMzg5M2M0MTU4MjllMjlh
YmQzNjhlNDU1Li44NGY1NzE4MjU2MGRkMTJiYTk5Mjk4ZGFlYWJiYTc4MTA5NDk1ZGU4IDEwMDY0
NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rl
c3RzX3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkKQEAgLTQ2Nyw3ICs0NjcsOCBAQCBjbGFzcyBN
YWluVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNz
aW5nX3J1bihbJy0td29ya2VyLW1vZGVsJywgJ29sZC10aHJlYWRzJ10pKQogCiAgICAgZGVmIHRl
c3Rfd29ya2VyX21vZGVsX19wcm9jZXNzZXMoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFp
c2VzKFZhbHVlRXJyb3IsIGxvZ2dpbmdfcnVuLCBbJy0td29ya2VyLW1vZGVsJywgJ3Byb2Nlc3Nl
cyddKQorICAgICAgICBpZiBjb21wYXJlX3ZlcnNpb24oc3lzLCAnMi42JylbMF0gPj0gMDoKKyAg
ICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bihbJy0td29ya2VyLW1vZGVsJywg
J3Byb2Nlc3NlcyddKSkKIAogICAgIGRlZiB0ZXN0X3dvcmtlcl9tb2RlbF9fdGhyZWFkcyhzZWxm
KToKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3NpbmdfcnVuKFsnLS13b3JrZXItbW9kZWwn
LCAndGhyZWFkcyddKSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81773</attachid>
            <date>2011-02-09 01:47:20 -0800</date>
            <delta_ts>2011-02-09 17:17:20 -0800</delta_ts>
            <desc>final patch??</desc>
            <filename>bug-49566-20110209014718.patch</filename>
            <type>text/plain</type>
            <size>63955</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBjMDMy
NTIwODdkNDhlYThiYmUzZmY3MTEzY2NiNTFiNjU0ODJmMGVlLi42MTBkMDI0ZWM3NGFlNTJmZWZh
ZDhlMTA4MWU5NTY3ZWI0ZjRmMjhlIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMwIEBACisyMDExLTAyLTA5ICBEaXJrIFByYW5r
ZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggbW9kaWZpZXMgTlJXVCdzIFdvcmtlciBjbGFz
IHRvIHVzZSB0aGUgbmV3CisgICAgICAgIFdvcmtlck1peGluIGNsYXNzIHRvIGFjdHVhbGx5IHJ1
biB0ZXN0cy4gV2l0aCB0aGlzIHBhdGNoLCB0aGUKKyAgICAgICAgbXVsdGlwcm9jZXNzIHZlcnNp
b24gb2YgTlJXVCBpcyBmdWxseSBmdW5jdGlvbmFsIGFuZCBqdXN0IG5lZWRzCisgICAgICAgIHRo
ZSB2YWx1ZXMgZm9yIC0td29ya2VyLW1vZGVsIGFuZCAtLWNoaWxkLXByb2Nlc3NlcyB0byBiZSBj
b3JyZWN0ZWQKKyAgICAgICAgaW4gdGhlIHBvcnQvKiBjbGFzc2VzIHRvIHN0YXJ0IHVzaW5nIHRo
ZSBuZXcgY29kZSBieSBkZWZhdWx0LgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD01NDA4MgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvd29ya2VyLnB5OgorCisyMDExLTAyLTA5ICBEaXJrIFBy
YW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggc2h1ZmZsZXMgY29kZSBvdXQgb2YgZHVt
cF9yZW5kZXJfdHJlZV90aHJlYWQgYW5kCisgICAgICAgIHNpbmdsZV90ZXN0X3J1bm5lciBhbmQg
aW50byBhIG5ldyB3b3JrZXJfbWl4aW4gY2xhc3MgdGhhdCB3aWxsCisgICAgICAgIGJlIHNoYXJl
ZCBieSBib3RoIFRlc3RTaGVsbFRocmVhZCBhbmQgV29ya2VyLiBUaGlzIGNoYW5nZQorICAgICAg
ICByZXN0b3JlcyBzaW5nbGVfdGVzdF9ydW5uZXIgdG8gaXRzIHN0YXRlIGFzIG9mIHI3NzYwNiAt
IGl0IGlzCisgICAgICAgIHN0YXRlbGVzcyBhZ2Fpbi4gSXQgYWxzbyBwcnVuZXMgVGVzdFNoZWxs
VGhyZWFkIHRvIHByZXR0eSBtdWNoCisgICAgICAgIGp1c3QgdGhlIGxvZ2ljIHVzZWQgZm9yIHRo
ZSBvcmlnaW5hbCBzaGFyZWQtbWVtb3J5IGFjY2Vzcy4KKworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQwNzkKKworICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFk
LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNr
YWdlL3NpbmdsZV90ZXN0X3J1bm5lci5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS93b3JrZXJfbWl4aW4ucHk6IEFkZGVkLgorCisyMDEx
LTAyLTA5ICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggdXBkYXRlcyBO
UldUIHRvIGFkZCBwZXItd29ya2VyIGFuZCBwZXItc2hhcmQgdGVzdCBzdGF0cworICAgICAgICBp
bnRvIFRlc3RSdW5uZXIyLCBicmluZ2luZyBpdCB0byBwYXJpdHkgd2l0aCBUZXN0UnVubmVyLgor
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDA3NAor
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uv
dGVzdF9ydW5uZXIyLnB5OgorCisyMDExLTAyLTA4ICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIG5yd3QgbXVsdGlwcm9jZXNzaW5nOiBhZGQgY29kZSB0byBoYW5kbGUgaW50ZXJydXB0cyBh
bmQgd2VkZ2VkCisgICAgICAgIHRocmVhZHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01NDA3MgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlcl93b3JrZXJfYnJva2VyLnB5OgorICAg
ICAgICBBZGRzIHRoZSBjYW5jZWwoKSwgaXNfYWxpdmUoKSwgam9pbigpLCBhbmQgbG9nX3dlZGdl
ZF93b3JrZXIoKQorICAgICAgICBtZXRob2RzIHRvIHRoZSBXb3JrZXJDb25uZWN0aW9uIGNsYXNz
CisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2Fn
ZS9tYW5hZ2VyX3dvcmtlcl9icm9rZXJfdW5pdHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9ydW5uZXIyLnB5OgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3dvcmtl
ci5weToKKyAgICAgICAgQWRkcyB0aGUgY2FuY2VsKCkgbWV0aG9kIHRvIHRoZSBXb3JrZXIgY2xh
c3MKKworMjAxMS0wMi0wOCAgRGlyayBQcmFua2UgIDxkcHJhbmtlQGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICB1cGRhdGUgdGhl
IE5SV1QgbXVsdGlwcm9jZXNzaW5nIGNvZGUgdG8gc3Bhd24gbXVsdGlwbGUgd29ya2VycworICAg
ICAgICBpbnN0ZWFkIG9mIGp1c3QgdXNpbmcgb25lLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDA3MQorCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9ydW5uZXIyLnB5OgorCisyMDEx
LTAyLTA4ICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyB0byBO
UldUIG1vc3Qgb2YgdGhlIHN1cHBvcnQgbmVlZGVkIHRvIHJ1biB0aGUgbmV3CisgICAgICAgIG1l
c3NhZ2UtYmFzZWQgd29ya2VycyBpbiBzZXBhcmF0ZSB0aHJlYWRzIG9yIHByb2Nlc3Nlcy4gVGhl
IGNvZGUKKyAgICAgICAgaXNuJ3QgZnVsbHkgY29tcGxldGUgeWV0IGJlY2F1c2Ugd2UgZG9uJ3Qg
c3VwcG9ydCBjYW5jZWwoKSBvcgorICAgICAgICBpc19hbGl2ZSgpLgorCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDA3MAorCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlcl93b3JrZXJf
YnJva2VyLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL21hbmFnZXJfd29ya2VyX2Jyb2tlcl91bml0dGVzdC5weToKKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X3J1bm5lcjIu
cHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5
OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbW9ja19kcnQu
cHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90
ZXN0c191bml0dGVzdC5weToKKworMjAxMS0wMi0wOCAgRGlyayBQcmFua2UgIDxkcHJhbmtlQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUaGlzIHBhdGNoIGFkZHMgdGhlIGJ1bGsgb2YgdGhlIHJlbWFpbmluZyBmdW5jdGlvbmFs
aXR5IGZvcgorICAgICAgICB0aGUgTlJXVCBtZXNzYWdlLXBhc3NpbmcgaW1wbGVtZW50YXRpb24u
IFRoZSBwYXRjaCBhZGRzIGEgbmV3CisgICAgICAgIFdvcmtlciBjbGFzcyB0aGF0IHdpbGwgZXZl
bnR1YWxseSByZXBsYWNlIHRoZSBUZXN0U2hlbGxUaHJlYWQKKyAgICAgICAgY2xhc3MgaW4gZHVt
cF9yZW5kZXJfdHJlZV90aHJlYWQucHksIGFuZCBpbXBsZW1lbnRzIGVub3VnaCBvZgorICAgICAg
ICBUZXN0UnVubmVyMiBhbmQgdGhlIGlubGluZSB2ZXJzaW9uIG9mIHRoZSBtYW5hZ2VyX3dvcmtl
cl9icm9rZXIKKyAgICAgICAgdG8gYWN0dWFsbHkgYmUgYWJsZSB0byBzZW5kIGEgZnVsbCBzZXQg
b2YgbWVzc2FnZXMgYmFjayBhbmQKKyAgICAgICAgZm9ydGguIFRoZSBXb3JrZXIgc3R1YnMgZG8g
bm90IGFjdHVhbGx5IHJ1biB0ZXN0cywgYW5kIHRoZXJlJ3MKKyAgICAgICAgbG90cyBvZiBlcnJv
ciBoYW5kbGluZyBhbmQgc3RhdHMgbmVlZGVkLCBidXQgdGhpcyBpcyB0aGUgY29yZQorICAgICAg
ICBsb2dpYy4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTQwNjgKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL21hbmFnZXJfd29ya2VyX2Jyb2tlci5weToKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyX3dvcmtlcl9icm9rZXJf
dW5pdHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5
b3V0X3BhY2thZ2UvdGVzdF9ydW5uZXIyLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3dvcmtlci5weTogQWRkZWQuCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5w
eToKKworMjAxMS0wMi0wOCAgRGlyayBQcmFua2UgIDxkcHJhbmtlQGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBucnd0IG11bHRp
cHJvY2Vzc2luZzogbWlub3IgY2xlYW51cCBwcmlvciB0byBpbXBsZW1lbnRpbmcgdGhlIG5ldyB3
b3JrZXIKKworICAgICAgICBUaGlzIHBhdGNoIHJlbmFtZXMgQWJzdHJhY3RNYW5hZ2VyIHRvIE1h
bmFnZXJDb25uZWN0aW9uIGFuZAorICAgICAgICBjaGFuZ2VzIHNvbWUgYXJndW1lbnQgbmFtZXMg
dG8gYmUgbW9yZSBjb25zaXN0ZW50IGJldHdlZW4KKyAgICAgICAgbWFuYWdlcl93b3JrZXJfYnJv
a2VyIGFuZCBtZXNzYWdlX2Jyb2tlci4gSXQgYWxzbyBmaXhlcyBhIGNvdXBsZQorICAgICAgICBv
ZiB0eXBvcyBpbiBtZXNzYWdlX2Jyb2tlci4gVGhlc2UgY2hhbmdlcyB3aWxsIGJlIHRlc3RlZCBi
eSBjb2RlCisgICAgICAgIGludHJvZHVjZWQgaW4gdGhlIG5leHQgcGF0Y2guCisgICAgICAgCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDA2NworCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFu
YWdlcl93b3JrZXJfYnJva2VyLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2VfYnJva2VyMi5weToKKwogMjAxMS0wMi0wOCAg
U2FpbGVzaCBBZ3Jhd2FsICA8c2FpbEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgS2VubmV0aCBSdXNzZWxsLgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQucHkgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9kdW1wX3Jl
bmRlcl90cmVlX3RocmVhZC5weQppbmRleCA3ZGRkN2IwZjlhYzE4YmE0ODA1YzhkNDA5MThlZGFh
NzgzYmQ4ODE1Li4wNGRkMTE4MTIxNzAxMDMzMDIwMjhiMGM4YjhjMGViODY1ZWQyZWY3IDEwMDY0
NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2Fn
ZS9kdW1wX3JlbmRlcl90cmVlX3RocmVhZC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9kdW1wX3JlbmRlcl90cmVlX3RocmVhZC5weQpA
QCAtNDAsMTMgKzQwLDEzIEBAIGltcG9ydCB0aHJlYWQKIGltcG9ydCB0aHJlYWRpbmcKIGltcG9y
dCB0aW1lCiAKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlLnNpbmds
ZV90ZXN0X3J1bm5lciBpbXBvcnQgU2luZ2xlVGVzdFJ1bm5lcgorZnJvbSB3ZWJraXRweS5sYXlv
dXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IHdvcmtlcl9taXhpbgogCiBfbG9nID0gbG9n
Z2luZy5nZXRMb2dnZXIoIndlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZS4iCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgImR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkIikKIAogCi1j
bGFzcyBUZXN0U2hlbGxUaHJlYWQodGhyZWFkaW5nLlRocmVhZCk6CitjbGFzcyBUZXN0U2hlbGxU
aHJlYWQodGhyZWFkaW5nLlRocmVhZCwgd29ya2VyX21peGluLldvcmtlck1peGluKToKICAgICBk
ZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucywgd29ya2VyX251bWJlciwgd29ya2VyX25h
bWUsCiAgICAgICAgICAgICAgICAgIGZpbGVuYW1lX2xpc3RfcXVldWUsIHJlc3VsdF9xdWV1ZSk6
CiAgICAgICAgICIiIkluaXRpYWxpemUgYWxsIHRoZSBsb2NhbCBzdGF0ZSBmb3IgdGhpcyBEdW1w
UmVuZGVyVHJlZSB0aHJlYWQuCkBAIC04MSw2ICs4MSw3IEBAIGNsYXNzIFRlc3RTaGVsbFRocmVh
ZCh0aHJlYWRpbmcuVGhyZWFkKToKICAgICAgICAgc2VsZi5fc3RvcF90aW1lID0gMAogICAgICAg
ICBzZWxmLl9odHRwX2xvY2tfd2FpdF9iZWdpbiA9IDAKICAgICAgICAgc2VsZi5faHR0cF9sb2Nr
X3dhaXRfZW5kID0gMAorICAgICAgICBzZWxmLmRlZmVycmVkX2luaXQocG9ydCkKIAogICAgIGRl
ZiBjYW5jZWwoc2VsZik6CiAgICAgICAgICIiIlNldCBhIGZsYWcgdGVsbGluZyB0aGlzIHRocmVh
ZCB0byBxdWl0LiIiIgpAQCAtMTc1LDIzICsxNzYsMTAgQEAgY2xhc3MgVGVzdFNoZWxsVGhyZWFk
KHRocmVhZGluZy5UaHJlYWQpOgogCiAgICAgICAgIElmIHRlc3RfcnVubmVyIGlzIG5vdCBOb25l
LCB0aGVuIHdlIGNhbGwgdGVzdF9ydW5uZXIuVXBkYXRlU3VtbWFyeSgpCiAgICAgICAgIHdpdGgg
dGhlIHJlc3VsdHMgb2YgZWFjaCB0ZXN0LiIiIgotICAgICAgICBzaW5nbGVfdGVzdF9ydW5uZXIg
PSBTaW5nbGVUZXN0UnVubmVyKHNlbGYuX29wdGlvbnMsIHNlbGYuX3BvcnQsCi0gICAgICAgICAg
ICBzZWxmLl9uYW1lLCBzZWxmLl93b3JrZXJfbnVtYmVyKQotCi0gICAgICAgIGJhdGNoX3NpemUg
PSBzZWxmLl9vcHRpb25zLmJhdGNoX3NpemUKLSAgICAgICAgYmF0Y2hfY291bnQgPSAwCi0KLSAg
ICAgICAgIyBBcHBlbmQgdGVzdHMgd2UncmUgcnVubmluZyB0byB0aGUgZXhpc3RpbmcgdGVzdHNf
cnVuLnR4dCBmaWxlLgotICAgICAgICAjIFRoaXMgaXMgY3JlYXRlZCBpbiBydW5fd2Via2l0X3Rl
c3RzLnB5Ol9QcmVwYXJlTGlzdHNBbmRQcmludE91dHB1dC4KLSAgICAgICAgdGVzdHNfcnVuX2Zp
bGVuYW1lID0gc2VsZi5fcG9ydC5fZmlsZXN5c3RlbS5qb2luKHNlbGYuX29wdGlvbnMucmVzdWx0
c19kaXJlY3RvcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAidGVzdHNfcnVuJWQudHh0IiAlIHNlbGYuX3dvcmtlcl9udW1iZXIpCi0g
ICAgICAgIHRlc3RzX3J1bl9maWxlID0gc2VsZi5fcG9ydC5fZmlsZXN5c3RlbS5vcGVuX3RleHRf
ZmlsZV9mb3Jfd3JpdGluZyh0ZXN0c19ydW5fZmlsZW5hbWUsIGFwcGVuZD1GYWxzZSkKLQogICAg
ICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgaWYgc2VsZi5fY2FuY2VsZWQ6CiAgICAgICAg
ICAgICAgICAgX2xvZy5kZWJ1ZygnVGVzdGluZyBjYW5jZWxsZWQnKQotICAgICAgICAgICAgICAg
IHRlc3RzX3J1bl9maWxlLmNsb3NlKCkKLSAgICAgICAgICAgICAgICBzaW5nbGVfdGVzdF9ydW5u
ZXIuY2xlYW51cCgpCisgICAgICAgICAgICAgICAgc2VsZi5jbGVhbnVwKCkKICAgICAgICAgICAg
ICAgICByZXR1cm4KIAogICAgICAgICAgICAgaWYgbGVuKHNlbGYuX2ZpbGVuYW1lX2xpc3QpIGlz
IDA6CkBAIC0yMDQsMTYgKzE5MiwxNSBAQCBjbGFzcyBUZXN0U2hlbGxUaHJlYWQodGhyZWFkaW5n
LlRocmVhZCk6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfZ3JvdXAsIHNlbGYu
X2ZpbGVuYW1lX2xpc3QgPSBcCiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxlbmFt
ZV9saXN0X3F1ZXVlLmdldF9ub3dhaXQoKQogICAgICAgICAgICAgICAgIGV4Y2VwdCBRdWV1ZS5F
bXB0eToKLSAgICAgICAgICAgICAgICAgICAgdGVzdHNfcnVuX2ZpbGUuY2xvc2UoKQotICAgICAg
ICAgICAgICAgICAgICBzaW5nbGVfdGVzdF9ydW5uZXIuY2xlYW51cCgpCisgICAgICAgICAgICAg
ICAgICAgIHNlbGYuY2xlYW51cCgpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybgogCiAgICAg
ICAgICAgICAgICAgaWYgc2VsZi5fY3VycmVudF9ncm91cCA9PSAidGVzdHNfdG9faHR0cF9sb2Nr
IjoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5faHR0cF9sb2NrX3dhaXRfYmVnaW4gPSB0aW1l
LnRpbWUoKQotICAgICAgICAgICAgICAgICAgICBzaW5nbGVfdGVzdF9ydW5uZXIuc3RhcnRfc2Vy
dmVyc193aXRoX2xvY2soKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnN0YXJ0X3NlcnZlcnNf
d2l0aF9sb2NrKCkKICAgICAgICAgICAgICAgICAgICAgc2VsZi5faHR0cF9sb2NrX3dhaXRfZW5k
ID0gdGltZS50aW1lKCkKLSAgICAgICAgICAgICAgICBlbGlmIHNpbmdsZV90ZXN0X3J1bm5lci5o
YXNfaHR0cF9sb2NrOgotICAgICAgICAgICAgICAgICAgICBzaW5nbGVfdGVzdF9ydW5uZXIuc3Rv
cF9zZXJ2ZXJzX3dpdGhfbG9jaygpCisgICAgICAgICAgICAgICAgZWxpZiBzZWxmLl9oYXNfaHR0
cF9sb2NrOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnN0b3Bfc2VydmVyc193aXRoX2xvY2so
KQogCiAgICAgICAgICAgICAgICAgc2VsZi5fbnVtX3Rlc3RzX2luX2N1cnJlbnRfZ3JvdXAgPSBs
ZW4oc2VsZi5fZmlsZW5hbWVfbGlzdCkKICAgICAgICAgICAgICAgICBzZWxmLl9jdXJyZW50X2dy
b3VwX3N0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQpAQCAtMjIxLDMzICsyMDgsMTMgQEAgY2xhc3Mg
VGVzdFNoZWxsVGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgogICAgICAgICAgICAgdGVzdF9pbnB1
dCA9IHNlbGYuX2ZpbGVuYW1lX2xpc3QucG9wKCkKIAogICAgICAgICAgICAgIyBXZSBoYXZlIGEg
dXJsLCBydW4gdGVzdHMuCi0gICAgICAgICAgICBiYXRjaF9jb3VudCArPSAxCiAgICAgICAgICAg
ICBzZWxmLl9udW1fdGVzdHMgKz0gMQogCi0gICAgICAgICAgICB0aW1lb3V0ID0gc2luZ2xlX3Rl
c3RfcnVubmVyLnRpbWVvdXQodGVzdF9pbnB1dCkKLSAgICAgICAgICAgIHJlc3VsdCA9IHNpbmds
ZV90ZXN0X3J1bm5lci5ydW5fdGVzdCh0ZXN0X2lucHV0LCB0aW1lb3V0KQotCi0gICAgICAgICAg
ICB0ZXN0c19ydW5fZmlsZS53cml0ZSh0ZXN0X2lucHV0LmZpbGVuYW1lICsgIlxuIikKLSAgICAg
ICAgICAgIHRlc3RfbmFtZSA9IHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZSh0ZXN0
X2lucHV0LmZpbGVuYW1lKQotICAgICAgICAgICAgaWYgcmVzdWx0LmZhaWx1cmVzOgotICAgICAg
ICAgICAgICAgICMgQ2hlY2sgYW5kIGtpbGwgRHVtcFJlbmRlclRyZWUgaWYgd2UgbmVlZCB0by4K
LSAgICAgICAgICAgICAgICBpZiBhbnkoW2Yuc2hvdWxkX2tpbGxfZHVtcF9yZW5kZXJfdHJlZSgp
IGZvciBmIGluIHJlc3VsdC5mYWlsdXJlc10pOgotICAgICAgICAgICAgICAgICAgICBzaW5nbGVf
dGVzdF9ydW5uZXIua2lsbF9kdW1wX3JlbmRlcl90cmVlKCkKLSAgICAgICAgICAgICAgICAgICAg
IyBSZXNldCB0aGUgYmF0Y2ggY291bnQgc2luY2UgdGhlIHNoZWxsIGp1c3QgYm91bmNlZC4KLSAg
ICAgICAgICAgICAgICAgICAgYmF0Y2hfY291bnQgPSAwCi0KLSAgICAgICAgICAgICAgICAjIFBy
aW50IHRoZSBlcnJvciBtZXNzYWdlKHMpLgotICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoIiVz
ICVzIGZhaWxlZDoiICUgKHNlbGYuX25hbWUsIHRlc3RfbmFtZSkpCi0gICAgICAgICAgICAgICAg
Zm9yIGYgaW4gcmVzdWx0LmZhaWx1cmVzOgotICAgICAgICAgICAgICAgICAgICBfbG9nLmRlYnVn
KCIlcyAgJXMiICUgKHNlbGYuX25hbWUsIGYubWVzc2FnZSgpKSkKLSAgICAgICAgICAgIGVsc2U6
Ci0gICAgICAgICAgICAgICAgX2xvZy5kZWJ1ZygiJXMgJXMgcGFzc2VkIiAlIChzZWxmLl9uYW1l
LCB0ZXN0X25hbWUpKQotICAgICAgICAgICAgc2VsZi5fcmVzdWx0X3F1ZXVlLnB1dChyZXN1bHQu
ZHVtcHMoKSkKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYucnVuX3Rlc3Rfd2l0aF90aW1lb3V0
KHRlc3RfaW5wdXQsIHNlbGYudGltZW91dCh0ZXN0X2lucHV0KSkKIAotICAgICAgICAgICAgaWYg
YmF0Y2hfc2l6ZSA+IDAgYW5kIGJhdGNoX2NvdW50ID49IGJhdGNoX3NpemU6Ci0gICAgICAgICAg
ICAgICAgIyBCb3VuY2UgdGhlIHNoZWxsIGFuZCByZXNldCBjb3VudC4KLSAgICAgICAgICAgICAg
ICBzaW5nbGVfdGVzdF9ydW5uZXIua2lsbF9kdW1wX3JlbmRlcl90cmVlKCkKLSAgICAgICAgICAg
ICAgICBiYXRjaF9jb3VudCA9IDAKKyAgICAgICAgICAgIHNlbGYuY2xlYW5fdXBfYWZ0ZXJfdGVz
dCh0ZXN0X2lucHV0LCByZXN1bHQpCisgICAgICAgICAgICBzZWxmLl90ZXN0X3Jlc3VsdHMuYXBw
ZW5kKHJlc3VsdCkKKyAgICAgICAgICAgIHNlbGYuX3Jlc3VsdF9xdWV1ZS5wdXQocmVzdWx0LmR1
bXBzKCkpCiAKICAgICAgICAgICAgIGlmIHRlc3RfcnVubmVyOgogICAgICAgICAgICAgICAgIHRl
c3RfcnVubmVyLnVwZGF0ZV9zdW1tYXJ5KHJlc3VsdF9zdW1tYXJ5KQpkaWZmIC0tZ2l0IGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlcl93
b3JrZXJfYnJva2VyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5
b3V0X3BhY2thZ2UvbWFuYWdlcl93b3JrZXJfYnJva2VyLnB5CmluZGV4IDQwNTI2Nzc3OWFmMWEw
MzQyMzQ2ZGU1ODY4ODA1ZjAxMzRlMjM2YTcuLmJiOGM3NWM3NTBjNzg3Y2MyMWIxMTczZDQ2YjY1
ZThhNzMxNTMzYzAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2xheW91dF9wYWNrYWdlL21hbmFnZXJfd29ya2VyX2Jyb2tlci5weQorKysgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyX3dvcmtl
cl9icm9rZXIucHkKQEAgLTI4LDMyICsyOCwzNSBAQAogCiAiIiJNb2R1bGUgZm9yIGhhbmRsaW5n
IG1lc3NhZ2VzIGFuZCBjb25jdXJyZW5jeSBmb3IgcnVuLXdlYmtpdC10ZXN0cy4KIAotVGhpcyBt
b2R1bGUgYnVpbGRzIG9uIHRoZSBmdW5jdGlvbmFsaXR5IG9mIG1lc3NhZ2VfYnJva2VyMiB0byBw
cm92aWRlCi1hIHNpbXBsZSBtZXNzYWdlIGJyb2tlciBmb3IgYSBtYW5hZ2VyIHNlbmRpbmcgbWVz
c2FnZXMgdG8gKGFuZCBnZXR0aW5nCi1yZXBsaWVzIGZyb20pIGEgcG9vbCBvZiB3b3JrZXJzLiBJ
biBhZGRpdGlvbiBpdCBwcm92aWRlcyBhIGNob2ljZSBvZgotY29uY3VycmVuY3kgbW9kZWxzIGZv
ciBjYWxsZXJzIHRvIGNob29zZSBmcm9tIChzaW5nbGUtdGhyZWFkZWQgaW5saW5lCi1tb2RlbCwg
dGhyZWFkcywgb3IgcHJvY2Vzc2VzKS4KLQotRklYTUU6IEF0IHRoZSBtb21lbnQsIHRoaXMgbW9k
dWxlIGlzIGp1c3QgYSBidW5jaCBvZiBzdHVicywgYnV0IGV2ZW50dWFsbHkKLWl0IHdpbGwgcHJv
dmlkZSB0aHJlZSBzZXRzIG9mIG1hbmFnZXIgY2xhc3NlcyBhbmQgd29ya2VyIGNsYXNzZXMgZm9y
Ci10aGUgdGhyZWUgY29uY3VycmVuY3kgbW9kZWxzLiBUaGUgZ2V0KCkgZmFjdG9yeSBtZXRob2Qg
c2VsZWN0cyBiZXR3ZWVuCi10aGVtLgorVGhpcyBtb2R1bGUgaW1wbGVtZW50cyBhIG1lc3NhZ2Ug
YnJva2VyIHRoYXQgY29ubmVjdHMgdGhlIG1hbmFnZXIKKyhUZXN0UnVubmVyMikgdG8gdGhlIHdv
cmtlcnM6IGl0IHByb3ZpZGVzIGEgbWVzc2FnaW5nIGFic3RyYWN0aW9uIGFuZAorbWVzc2FnZSBs
b29wcyAoYnVpbGRpbmcgb24gdG9wIG9mIG1lc3NhZ2VfYnJva2VyMiksIGFuZCBoYW5kbGVzIHN0
YXJ0aW5nCit3b3JrZXJzIGJ5IGxhdW5jaGluZyB0aHJlYWRzIGFuZC9vciBwcm9jZXNzZXMgZGVw
ZW5kaW5nIG9uIHRoZQorcmVxdWVzdGVkIGNvbmZpZ3VyYXRpb24uCiAiIiIKIAogaW1wb3J0IGxv
Z2dpbmcKIGltcG9ydCBvcHRwYXJzZQogaW1wb3J0IFF1ZXVlCitpbXBvcnQgdGhyZWFkCiBpbXBv
cnQgdGhyZWFkaW5nCitpbXBvcnQgdGltZQorCiAKLSMKICMgSGFuZGxlIFB5dGhvbiA8IDIuNiB3
aGVyZSBtdWx0aXByb2Nlc3NpbmcgaXNuJ3QgYXZhaWxhYmxlLgogIworIyBfTXVsdGlwcm9jZXNz
aW5nX1Byb2Nlc3MgaXMgbmVlZGVkIHNvIHRoYXQgX011bHRpUHJvY2Vzc1dvcmtlcgorIyBjYW4g
YmUgZGVmaW5lZCB3aXRoIG9yIHdpdGhvdXQgbXVsdGlwcm9jZXNzaW5nLgogdHJ5OgogICAgIGlt
cG9ydCBtdWx0aXByb2Nlc3NpbmcKKyAgICBfTXVsdGlwcm9jZXNzaW5nX1Byb2Nlc3MgPSBtdWx0
aXByb2Nlc3NpbmcuUHJvY2VzcwogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIG11bHRpcHJvY2Vz
c2luZyA9IE5vbmUKKyAgICBfTXVsdGlwcm9jZXNzaW5nX1Byb2Nlc3MgPSB0aHJlYWRpbmcuVGhy
ZWFkCiAKIAorZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBzdGFja191dGlscwor
ZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMgaW1wb3J0IHBvcnQKIGZyb20gd2Via2l0cHkubGF5
b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCBtZXNzYWdlX2Jyb2tlcjIKIAogCkBAIC03
NywxMyArODAsMTQgQEAgZGVmIHJ1bnRpbWVfb3B0aW9ucygpOgogICAgIHJldHVybiBvcHRpb25z
CiAKIAotZGVmIGdldChwb3J0LCBvcHRpb25zLCBtYW5hZ2VyLCB3b3JrZXJfY2xhc3MpOgorZGVm
IGdldChwb3J0LCBvcHRpb25zLCBjbGllbnQsIHdvcmtlcl9jbGFzcyk6CiAgICAgIiIiUmV0dXJu
IGEgY29ubmVjdGlvbiB0byBhIG1hbmFnZXIvd29ya2VyIG1lc3NhZ2VfYnJva2VyCiAKICAgICBB
cmdzOgogICAgICAgICBwb3J0IC0gaGFuZGxlIHRvIGxheW91dF90ZXN0cy9wb3J0IG9iamVjdCBm
b3IgcG9ydC1zcGVjaWZpYyBzdHVmZgogICAgICAgICBvcHRpb25zIC0gb3B0cGFyc2UgYXJndW1l
bnQgZm9yIGNvbW1hbmQtbGluZSBvcHRpb25zCi0gICAgICAgIG1hbmFnZXIgLSBvYmplY3QgdG8g
ZGlzcGF0Y2ggcmVwbGllcyB0bworICAgICAgICBjbGllbnQgLSBvYmplY3QgdG8gZGlzcGF0Y2gg
cmVwbGllcyB0by4gVGhpcyBvYmplY3QgbXVzdCBpbXBsZW1lbnQKKyAgICAgICAgICAgIHRoZSBt
ZXRob2RzIGluIG1lc3NhZ2VfYnJva2VyMi5Ccm9rZXJDbGllbnQuCiAgICAgICAgIHdvcmtlcl9j
bGFzcyAtIHR5cGUgb2Ygd29ya2VycyB0byBjcmVhdGUuIFRoaXMgY2xhc3MgbXVzdCBpbXBsZW1l
bnQKICAgICAgICAgICAgIHRoZSBtZXRob2RzIGluIEFic3RyYWN0V29ya2VyLgogICAgIFJldHVy
bnM6CkBAIC0xMDUsNyArMTA5LDcgQEAgZGVmIGdldChwb3J0LCBvcHRpb25zLCBtYW5hZ2VyLCB3
b3JrZXJfY2xhc3MpOgogICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcl9tb2RlbCkKIAog
ICAgIGJyb2tlciA9IG1lc3NhZ2VfYnJva2VyMi5Ccm9rZXIob3B0aW9ucywgcXVldWVfY2xhc3Mp
Ci0gICAgcmV0dXJuIG1hbmFnZXJfY2xhc3MoYnJva2VyLCBwb3J0LCBvcHRpb25zLCBtYW5hZ2Vy
LCB3b3JrZXJfY2xhc3MpCisgICAgcmV0dXJuIG1hbmFnZXJfY2xhc3MoYnJva2VyLCBwb3J0LCBv
cHRpb25zLCBjbGllbnQsIHdvcmtlcl9jbGFzcykKIAogCiBjbGFzcyBBYnN0cmFjdFdvcmtlciht
ZXNzYWdlX2Jyb2tlcjIuQnJva2VyQ2xpZW50KToKQEAgLTEzNiwzMCArMTQwLDE4MCBAQCBjbGFz
cyBBYnN0cmFjdFdvcmtlcihtZXNzYWdlX2Jyb2tlcjIuQnJva2VyQ2xpZW50KToKICAgICAgICAg
cmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgogCiAKLWNsYXNzIF9BYnN0cmFjdE1hbmFnZXIob2Jq
ZWN0KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCBwb3J0LCBvcHRpb25zLCBtYW5h
Z2VyLCB3b3JrZXJfY2xhc3MpOgorY2xhc3MgX01hbmFnZXJDb25uZWN0aW9uKG1lc3NhZ2VfYnJv
a2VyMi5Ccm9rZXJDb25uZWN0aW9uKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCBv
cHRpb25zLCBjbGllbnQsIHdvcmtlcl9jbGFzcyk6CiAgICAgICAgICIiIkJhc2UgaW5pdGlhbGl6
YXRpb24gZm9yIGFsbCBNYW5hZ2VyIG9iamVjdHMuCiAKICAgICAgICAgQXJnczoKICAgICAgICAg
ICAgIGJyb2tlcjogaGFuZGxlIHRvIHRoZSBtZXNzYWdlX2Jyb2tlcjIgb2JqZWN0Ci0gICAgICAg
ICAgICBwb3J0OiBoYW5kbGUgdG8gcG9ydC1zcGVjaWZpYyBmdW5jdGlvbmFsaXR5CiAgICAgICAg
ICAgICBvcHRpb25zOiBjb21tYW5kIGxpbmUgb3B0aW9ucyBvYmplY3QKLSAgICAgICAgICAgIG1h
bmFnZXI6IE1hbmFnZXIgY2FsbGJhY2sgb2JqZWN0ICh0aGUgY2FsbGVyKQorICAgICAgICAgICAg
Y2xpZW50OiBjYWxsYmFjayBvYmplY3QgKHRoZSBjYWxsZXIpCiAgICAgICAgICAgICB3b3JrZXJf
Y2xhc3M6IGNsYXNzIG9iamVjdCB0byB1c2UgdG8gY3JlYXRlIHdvcmtlcnMuCiAgICAgICAgICIi
IgotICAgICAgICBzZWxmLl9icm9rZXIgPSBicm9rZXIKKyAgICAgICAgbWVzc2FnZV9icm9rZXIy
LkJyb2tlckNvbm5lY3Rpb24uX19pbml0X18oc2VsZiwgYnJva2VyLCBjbGllbnQsCisgICAgICAg
ICAgICBNQU5BR0VSX1RPUElDLCBBTllfV09SS0VSX1RPUElDKQogICAgICAgICBzZWxmLl9vcHRp
b25zID0gb3B0aW9ucwotICAgICAgICBzZWxmLl9tYW5hZ2VyID0gbWFuYWdlcgogICAgICAgICBz
ZWxmLl93b3JrZXJfY2xhc3MgPSB3b3JrZXJfY2xhc3MKIAorICAgIGRlZiBfbWFrZV93b3JrZXJf
Y29ubmVjdGlvbihzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisg
ICAgZGVmIF9tYWtlX3dvcmtlcihzZWxmLCB3b3JrZXJfY29ubmVjdGlvbiwgd29ya2VyX251bWJl
ciwgKiprd2FyZ3MpOgorICAgICAgICByZXR1cm4gc2VsZi5fd29ya2VyX2NsYXNzKHdvcmtlcl9j
b25uZWN0aW9uLCB3b3JrZXJfbnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGYuX29wdGlvbnMsICoqa3dhcmdzKQorCisgICAgZGVmIHN0YXJ0X3dvcmtlcihzZWxm
LCB3b3JrZXJfbnVtYmVyLCAqKmt3YXJncyk6CisgICAgICAgIHdvcmtlcl9jb25uZWN0aW9uID0g
c2VsZi5fbWFrZV93b3JrZXJfY29ubmVjdGlvbigpCisgICAgICAgIHdvcmtlciA9IHNlbGYuX21h
a2Vfd29ya2VyKHdvcmtlcl9jb25uZWN0aW9uLCB3b3JrZXJfbnVtYmVyLCAqKmt3YXJncykKKyAg
ICAgICAgd29ya2VyX2Nvbm5lY3Rpb24uc2V0X2NsaWVudCh3b3JrZXIpCisgICAgICAgIHdvcmtl
cl9jb25uZWN0aW9uLnN0YXJ0KCkKKyAgICAgICAgcmV0dXJuIHdvcmtlcl9jb25uZWN0aW9uCisK
KworY2xhc3MgX0lubGluZU1hbmFnZXIoX01hbmFnZXJDb25uZWN0aW9uKToKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgYnJva2VyLCBwb3J0LCBvcHRpb25zLCBjbGllbnQsIHdvcmtlcl9jbGFzcyk6
CisgICAgICAgIF9NYW5hZ2VyQ29ubmVjdGlvbi5fX2luaXRfXyhzZWxmLCBicm9rZXIsIG9wdGlv
bnMsIGNsaWVudCwgd29ya2VyX2NsYXNzKQorICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAorICAg
ICAgICBzZWxmLl9pbmxpbmVfd29ya2VyID0gTm9uZQorCisgICAgZGVmIF9tYWtlX3dvcmtlcl9j
b25uZWN0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLl9pbmxpbmVfd29ya2VyID0gX0lubGluZVdv
cmtlcihzZWxmLl9icm9rZXIsIHNlbGYuX3BvcnQsIHNlbGYuX2NsaWVudCkKKyAgICAgICAgcmV0
dXJuIHNlbGYuX2lubGluZV93b3JrZXIKKworICAgIGRlZiBydW5fbWVzc2FnZV9sb29wKHNlbGYs
IGRlbGF5X3NlY3M9Tm9uZSk6CisgICAgICAgICMgTm90ZSB0aGF0IGRlbGF5X3NlY3MgaXMgaWdu
b3JlZCBpbiB0aGlzIGNhc2Ugc2luY2Ugd2UgY2FuJ3QgZWFzaWx5CisgICAgICAgICMgaW1wbGVt
ZW50IGl0LgorICAgICAgICBzZWxmLl9pbmxpbmVfd29ya2VyLnJ1bigpCisgICAgICAgIHNlbGYu
X2Jyb2tlci5ydW5fYWxsX3BlbmRpbmcoTUFOQUdFUl9UT1BJQywgc2VsZi5fY2xpZW50KQorCisK
K2NsYXNzIF9UaHJlYWRlZE1hbmFnZXIoX01hbmFnZXJDb25uZWN0aW9uKToKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgYnJva2VyLCBwb3J0LCBvcHRpb25zLCBjbGllbnQsIHdvcmtlcl9jbGFzcyk6
CisgICAgICAgIF9NYW5hZ2VyQ29ubmVjdGlvbi5fX2luaXRfXyhzZWxmLCBicm9rZXIsIG9wdGlv
bnMsIGNsaWVudCwgd29ya2VyX2NsYXNzKQorICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAorCisg
ICAgZGVmIF9tYWtlX3dvcmtlcl9jb25uZWN0aW9uKHNlbGYpOgorICAgICAgICByZXR1cm4gX1Ro
cmVhZGVkV29ya2VyKHNlbGYuX2Jyb2tlciwgc2VsZi5fcG9ydCkKKwogCi1jbGFzcyBfSW5saW5l
TWFuYWdlcihfQWJzdHJhY3RNYW5hZ2VyKToKLSAgICBwYXNzCitjbGFzcyBfTXVsdGlQcm9jZXNz
TWFuYWdlcihfTWFuYWdlckNvbm5lY3Rpb24pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9r
ZXIsIHBvcnQsIG9wdGlvbnMsIGNsaWVudCwgd29ya2VyX2NsYXNzKToKKyAgICAgICAgIyBOb3Rl
IHRoYXQgdGhpcyBjbGFzcyBkb2VzIG5vdCBrZWVwIGEgaGFuZGxlIHRvIHRoZSBhY3R1YWwgcG9y
dAorICAgICAgICAjIG9iamVjdCwgYmVjYXVzZSBpdCBpc24ndCBQaWNrbGFibGUuIEluc3RlYWQg
aXQga2VlcHMgdGhlIHBvcnQKKyAgICAgICAgIyBuYW1lIGFuZCByZWNyZWF0ZXMgdGhlIHBvcnQg
aW4gdGhlIGNoaWxkIHByb2Nlc3MgZnJvbSB0aGUgbmFtZQorICAgICAgICAjIGFuZCBvcHRpb25z
LgorICAgICAgICBfTWFuYWdlckNvbm5lY3Rpb24uX19pbml0X18oc2VsZiwgYnJva2VyLCBvcHRp
b25zLCBjbGllbnQsIHdvcmtlcl9jbGFzcykKKyAgICAgICAgc2VsZi5fcGxhdGZvcm1fbmFtZSA9
IHBvcnQucmVhbF9uYW1lKCkKIAorICAgIGRlZiBfbWFrZV93b3JrZXJfY29ubmVjdGlvbihzZWxm
KToKKyAgICAgICAgcmV0dXJuIF9NdWx0aVByb2Nlc3NXb3JrZXIoc2VsZi5fYnJva2VyLCBzZWxm
Ll9wbGF0Zm9ybV9uYW1lLCBzZWxmLl9vcHRpb25zKQogCi1jbGFzcyBfVGhyZWFkZWRNYW5hZ2Vy
KF9BYnN0cmFjdE1hbmFnZXIpOgotICAgIHBhc3MKIAorY2xhc3MgX1dvcmtlckNvbm5lY3Rpb24o
bWVzc2FnZV9icm9rZXIyLkJyb2tlckNvbm5lY3Rpb24pOgorICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBicm9rZXIpOgorICAgICAgICAjIFRoZSBjbGllbnQgZ2V0cyBmaWxsZWQgaW4gYWZ0ZXIgdGhp
cyBvYmplY3QgaXMgY29uc3RydWN0ZWQsIHVzaW5nIHNldF9jbGllbnQoKS4KKyAgICAgICAgc2Vs
Zi5fY2xpZW50ID0gTm9uZQorICAgICAgICBtZXNzYWdlX2Jyb2tlcjIuQnJva2VyQ29ubmVjdGlv
bi5fX2luaXRfXyhzZWxmLCBicm9rZXIsIHNlbGYuX2NsaWVudCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU5ZX1dPUktFUl9UT1BJQywgTUFOQUdF
Ul9UT1BJQykKKworICAgIGRlZiBzZXRfY2xpZW50KHNlbGYsIGNsaWVudCk6CisgICAgICAgIHNl
bGYuX2NsaWVudCA9IGNsaWVudAorICAgICAgICBzZWxmLm5hbWUgPSBjbGllbnQubmFtZSgpCisK
KyAgICBkZWYgc3RhcnQoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IK
KworICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IK
KworICAgIGRlZiB5aWVsZF90b19icm9rZXIoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRl
ZiBjYW5jZWwoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAg
IGRlZiBpc19hbGl2ZShzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgor
CisgICAgZGVmIGpvaW4oc2VsZiwgdGltZW91dCk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVu
dGVkRXJyb3IKKworICAgIGRlZiBsb2dfd2VkZ2VkX3dvcmtlcihzZWxmLCB0ZXN0X25hbWUpOgor
ICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKworY2xhc3MgX0lubGluZVdvcmtl
cihfV29ya2VyQ29ubmVjdGlvbik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb2tlciwgcG9y
dCwgbWFuYWdlcl9jbGllbnQpOgorICAgICAgICBfV29ya2VyQ29ubmVjdGlvbi5fX2luaXRfXyhz
ZWxmLCBicm9rZXIpCisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CisgICAgICAgIHNlbGYuX21h
bmFnZXJfY2xpZW50ID0gbWFuYWdlcl9jbGllbnQKKyAgICAgICAgc2VsZi5fYWxpdmUgPSBGYWxz
ZQorCisgICAgZGVmIHN0YXJ0KHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgcnVuKHNl
bGYpOgorICAgICAgICBzZWxmLl9hbGl2ZSA9IFRydWUKKyAgICAgICAgc2VsZi5fY2xpZW50LnJ1
bihzZWxmLl9wb3J0KQorICAgICAgICBzZWxmLl9hbGl2ZSA9IEZhbHNlCisKKyAgICBkZWYgeWll
bGRfdG9fYnJva2VyKHNlbGYpOgorICAgICAgICBzZWxmLl9icm9rZXIucnVuX2FsbF9wZW5kaW5n
KE1BTkFHRVJfVE9QSUMsIHNlbGYuX21hbmFnZXJfY2xpZW50KQorCisgICAgZGVmIGNhbmNlbChz
ZWxmKToKKyAgICAgICAgc2VsZi5fY2xpZW50LmNhbmNlbCgpCisKKyAgICBkZWYgaXNfYWxpdmUo
c2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9hbGl2ZQorCisgICAgZGVmIGpvaW4oc2VsZiwg
dGltZW91dCk6CisgICAgICAgIGFzc2VydCBub3Qgc2VsZi5pc19hbGl2ZSgpCisKKyAgICBkZWYg
bG9nX3dlZGdlZF93b3JrZXIoc2VsZiwgdGVzdF9uYW1lKToKKyAgICAgICAgcmFpc2UgQXNzZXJ0
aW9uRXJyb3IoIl9JbmxpbmVXb3JrZXIubG9nX3dlZGdlZF93b3JrZXIoKSBjYWxsZWQiKQorCisK
K2NsYXNzIF9UaHJlYWRlZFdvcmtlcih0aHJlYWRpbmcuVGhyZWFkLCBfV29ya2VyQ29ubmVjdGlv
bik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb2tlciwgcG9ydCk6CisgICAgICAgIHRocmVh
ZGluZy5UaHJlYWQuX19pbml0X18oc2VsZikKKyAgICAgICAgX1dvcmtlckNvbm5lY3Rpb24uX19p
bml0X18oc2VsZiwgYnJva2VyKQorICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAorCisgICAgZGVm
IHJ1bihzZWxmKToKKyAgICAgICAgIyBGSVhNRTogV2UgY2FuIHJlbW92ZSB0aGlzIG9uY2UgZXZl
cnlvbmUgaXMgb24gMi42LgorICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLCAnaWRlbnQnKToK
KyAgICAgICAgICAgIHNlbGYuaWRlbnQgPSB0aHJlYWQuZ2V0X2lkZW50KCkKKyAgICAgICAgc2Vs
Zi5fY2xpZW50LnJ1bihzZWxmLl9wb3J0KQorCisgICAgZGVmIGNhbmNlbChzZWxmKToKKyAgICAg
ICAgc2VsZi5fY2xpZW50LmNhbmNlbCgpCisKKyAgICBkZWYgaXNfYWxpdmUoc2VsZik6CisgICAg
ICAgICMgRklYTUU6IFdlIGNhbiByZW1vdmUgdGhpcyBvbmNlIGV2ZXJ5b25lIGlzIG9uIDIuNi4K
KyAgICAgICAgc2VsZi5pc0FsaXZlKCkKKworICAgIGRlZiBsb2dfd2VkZ2VkX3dvcmtlcihzZWxm
LCB0ZXN0X25hbWUpOgorICAgICAgICBzdGFja191dGlscy5sb2dfdGhyZWFkX3N0YXRlKF9sb2cu
ZXJyb3IsIHNlbGYubmFtZSwgc2VsZi5pZGVudCwKKyAgICAgICAgICAgICIgaXMgd2VkZ2VkIG9u
IHRlc3QgJXMiICUgdGVzdF9uYW1lKQorCisKK2NsYXNzIF9NdWx0aVByb2Nlc3NXb3JrZXIoX011
bHRpcHJvY2Vzc2luZ19Qcm9jZXNzLCBfV29ya2VyQ29ubmVjdGlvbik6CisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIGJyb2tlciwgcGxhdGZvcm1fbmFtZSwgb3B0aW9ucyk6CisgICAgICAgIF9NdWx0
aXByb2Nlc3NpbmdfUHJvY2Vzcy5fX2luaXRfXyhzZWxmKQorICAgICAgICBfV29ya2VyQ29ubmVj
dGlvbi5fX2luaXRfXyhzZWxmLCBicm9rZXIpCisgICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRp
b25zCisgICAgICAgIHNlbGYuX3BsYXRmb3JtX25hbWUgPSBwbGF0Zm9ybV9uYW1lCisKKyAgICBk
ZWYgcnVuKHNlbGYpOgorICAgICAgICAjIFJlLWNvbmZpZ3VyZSB0aGUgbG9nZ2VyLgorICAgICAg
ICAjIEZJWE1FOiBmaWd1cmUgb3V0IGhvdyB0byBnZXQgYSBoYW5kbGUgdG8gdGhlIHJpZ2h0IHN0
cmVhbS4KKyAgICAgICAgbG9nZ2luZy5iYXNpY0NvbmZpZygpCisgICAgICAgIHBvcnRfb2JqID0g
cG9ydC5nZXQoc2VsZi5fcGxhdGZvcm1fbmFtZSwgc2VsZi5fb3B0aW9ucykKKyAgICAgICAgc2Vs
Zi5fY2xpZW50LnJ1bihwb3J0X29iaikKKworICAgIGRlZiBjYW5jZWwoc2VsZik6CisgICAgICAg
IHNlbGYudGVybWluYXRlKCkKIAotY2xhc3MgX011bHRpUHJvY2Vzc01hbmFnZXIoX0Fic3RyYWN0
TWFuYWdlcik6Ci0gICAgcGFzcworICAgIGRlZiBsb2dfd2VkZ2VkX3dvcmtlcihzZWxmLCB0ZXN0
X25hbWUpOgorICAgICAgICBfbG9nLmVycm9yKCIlcyAocGlkICVkKSBpcyB3ZWRnZWQgb24gdGVz
dCAlcyIgJQorICAgICAgICAgICAgICAgICAgIChzZWxmLm5hbWUsIHNlbGYucGlkLCB0ZXN0X25h
bWUpKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5
b3V0X3BhY2thZ2UvbWFuYWdlcl93b3JrZXJfYnJva2VyX3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlcl93b3JrZXJf
YnJva2VyX3VuaXR0ZXN0LnB5CmluZGV4IDBhMzBiZGQ0NWZiNDFmOTlhZTk0M2FiNGNlYzA3M2Nj
ODkyMDI1ZmEuLmI0NjhkZDFkMWYwZWVlNjdjYTU3NDg3ZGZjNDVkZDgyMjRlOTRkOTIgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdl
L21hbmFnZXJfd29ya2VyX2Jyb2tlcl91bml0dGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyX3dvcmtlcl9icm9rZXJf
dW5pdHRlc3QucHkKQEAgLTI3LDYgKzI3LDcgQEAKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAogaW1wb3J0IG9w
dHBhcnNlCitpbXBvcnQgUXVldWUKIGltcG9ydCBzeXMKIGltcG9ydCB1bml0dGVzdAogCkBAIC00
Myw4ICs0NCw0OCBAQCBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBp
bXBvcnQgbWFuYWdlcl93b3JrZXJfYnJva2VyCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5s
YXlvdXRfcGFja2FnZSBpbXBvcnQgbWVzc2FnZV9icm9rZXIyCiAKIAotY2xhc3MgVGVzdFdvcmtl
cihvYmplY3QpOgotICAgIHBhc3MKK2NsYXNzIFRlc3RXb3JrZXIobWFuYWdlcl93b3JrZXJfYnJv
a2VyLkFic3RyYWN0V29ya2VyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCB3b3Jr
ZXJfbnVtYmVyLCBvcHRpb25zLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYuX2Jyb2tlciA9IGJy
b2tlcgorICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucworICAgICAgICBzZWxmLl93b3Jr
ZXJfbnVtYmVyID0gd29ya2VyX251bWJlcgorICAgICAgICBzZWxmLl9uYW1lID0gJ1Rlc3RXb3Jr
ZXIvJWQnICUgd29ya2VyX251bWJlcgorICAgICAgICBzZWxmLl9jYW5jZWxlZCA9IEZhbHNlCisg
ICAgICAgIHNlbGYuX3N0b3BwZWQgPSBGYWxzZQorICAgICAgICBzZWxmLl9zdGFydGluZ19xdWV1
ZSA9IGt3YXJncy5nZXQoJ3N0YXJ0aW5nX3F1ZXVlJykKKyAgICAgICAgc2VsZi5fc3RvcHBpbmdf
cXVldWUgPSBrd2FyZ3MuZ2V0KCdzdG9wcGluZ19xdWV1ZScpCisKKyAgICBkZWYgY2FuY2VsKHNl
bGYpOgorICAgICAgICBzZWxmLl9jYW5jZWxlZCA9IFRydWUKKworICAgIGRlZiBoYW5kbGVfc3Rv
cChzZWxmLCBzcmMpOgorICAgICAgICBzZWxmLl9zdG9wcGVkID0gVHJ1ZQorCisgICAgZGVmIGhh
bmRsZV90ZXN0KHNlbGYsIHNyYywgYW5faW50LCBhX3N0cik6CisgICAgICAgIGFzc2VydCBhbl9p
bnQgPT0gMQorICAgICAgICBhc3NlcnQgYV9zdHIgPT0gImhlbGxvLCB3b3JsZCIKKyAgICAgICAg
c2VsZi5fYnJva2VyLnBvc3RfbWVzc2FnZSgndGVzdCcsIDIsICdoaSwgZXZlcnlib2R5JykKKwor
ICAgIGRlZiBpc19kb25lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fc3RvcHBlZCBvciBz
ZWxmLl9jYW5jZWxlZAorCisgICAgZGVmIG5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxm
Ll9uYW1lCisKKyAgICBkZWYgc3RhcnQoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBy
dW4oc2VsZiwgcG9ydCk6CisgICAgICAgIGlmIHNlbGYuX3N0YXJ0aW5nX3F1ZXVlOgorICAgICAg
ICAgICAgc2VsZi5fc3RhcnRpbmdfcXVldWUucHV0KCcnKQorICAgICAgICBpZiBzZWxmLl9zdG9w
cGluZ19xdWV1ZToKKyAgICAgICAgICAgIHNlbGYuX3N0b3BwaW5nX3F1ZXVlLmdldCgpCisgICAg
ICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX2Jyb2tlci5ydW5fbWVzc2FnZV9sb29wKCkKKyAg
ICAgICAgICAgIHNlbGYuX2Jyb2tlci55aWVsZF90b19icm9rZXIoKQorICAgICAgICAgICAgc2Vs
Zi5fYnJva2VyLnBvc3RfbWVzc2FnZSgnZG9uZScpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24s
IGU6CisgICAgICAgICAgICBzZWxmLl9icm9rZXIucG9zdF9tZXNzYWdlKCdleGNlcHRpb24nLCAo
dHlwZShlKSwgc3RyKGUpLCBOb25lKSkKIAogCiBkZWYgZ2V0X29wdGlvbnMod29ya2VyX21vZGVs
KToKQEAgLTc2LDYgKzExNywxNDQgQEAgY2xhc3MgRnVuY3Rpb25UZXN0cyh1bml0dGVzdC5UZXN0
Q2FzZSk6CiAgICAgZGVmIHRlc3RfZ2V0X191bmtub3duKHNlbGYpOgogICAgICAgICBzZWxmLmFz
c2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYWtlX2Jyb2tlciwgc2VsZiwgJ3Vua25vd24nKQogCisK
K2NsYXNzIF9UZXN0c01peGluKG9iamVjdCk6CisgICAgIiIiTWl4aW4gY2xhc3MgdGhhdCBpbXBs
ZW1lbnRzIGEgc2VyaWVzIG9mIHRlc3RzIHRvIGVuZm9yY2UgdGhlCisgICAgY29udHJhY3QgYWxs
IGltcGxlbWVudGF0aW9ucyBtdXN0IGZvbGxvdy4iIiIKKworICAgICMKKyAgICAjIE1ldGhvZHMg
dG8gaW1wbGVtZW50IHRoZSBNYW5hZ2VyIHNpZGUgb2YgdGhlIENsaWVudEludGVyZmFjZQorICAg
ICMKKyAgICBkZWYgbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuICdUZXN0ZXInCisKKyAgICBk
ZWYgaXNfZG9uZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2RvbmUKKworICAgICMKKyAg
ICAjIEhhbmRsZXJzIGZvciB0aGUgbWVzc2FnZXMgdGhlIFRlc3RXb3JrZXIgbWF5IHNlbmQuCisg
ICAgIworICAgIGRlZiBoYW5kbGVfZG9uZShzZWxmLCBzcmMpOgorICAgICAgICBzZWxmLl9kb25l
ID0gVHJ1ZQorCisgICAgZGVmIGhhbmRsZV90ZXN0KHNlbGYsIHNyYywgYW5faW50LCBhX3N0cik6
CisgICAgICAgIHNlbGYuX2FuX2ludCA9IGFuX2ludAorICAgICAgICBzZWxmLl9hX3N0ciA9IGFf
c3RyCisKKyAgICBkZWYgaGFuZGxlX2V4Y2VwdGlvbihzZWxmLCBzcmMsIGV4Y19pbmZvKToKKyAg
ICAgICAgc2VsZi5fZXhjZXB0aW9uID0gZXhjX2luZm8KKyAgICAgICAgc2VsZi5fZG9uZSA9IFRy
dWUKKworICAgICMKKyAgICAjIFRlc3RpbmcgaGVscGVyIG1ldGhvZHMKKyAgICAjCisgICAgZGVm
IHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLl9hbl9pbnQgPSBOb25lCisgICAgICAgIHNlbGYu
X2Ffc3RyID0gTm9uZQorICAgICAgICBzZWxmLl9icm9rZXIgPSBOb25lCisgICAgICAgIHNlbGYu
X2RvbmUgPSBGYWxzZQorICAgICAgICBzZWxmLl9leGNlcHRpb24gPSBOb25lCisgICAgICAgIHNl
bGYuX3dvcmtlcl9tb2RlbCA9IE5vbmUKKworICAgIGRlZiBtYWtlX2Jyb2tlcihzZWxmKToKKyAg
ICAgICAgc2VsZi5fYnJva2VyID0gbWFrZV9icm9rZXIoc2VsZiwgc2VsZi5fd29ya2VyX21vZGVs
KQorCisgICAgIworICAgICMgQWN0dWFsIHVuaXQgdGVzdHMKKyAgICAjCisgICAgZGVmIHRlc3Rf
Y2FuY2VsKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5fd29ya2VyX21vZGVsOgorICAgICAg
ICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYubWFrZV9icm9rZXIoKQorICAgICAgICB3b3JrZXIg
PSBzZWxmLl9icm9rZXIuc3RhcnRfd29ya2VyKDApCisgICAgICAgIHdvcmtlci5jYW5jZWwoKQor
ICAgICAgICBzZWxmLl9icm9rZXIucG9zdF9tZXNzYWdlKCd0ZXN0JywgMSwgJ2hlbGxvLCB3b3Js
ZCcpCisgICAgICAgIHdvcmtlci5qb2luKDAuNSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh3
b3JrZXIuaXNfYWxpdmUoKSkKKworICAgIGRlZiB0ZXN0X2RvbmUoc2VsZik6CisgICAgICAgIGlm
IG5vdCBzZWxmLl93b3JrZXJfbW9kZWw6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2Vs
Zi5tYWtlX2Jyb2tlcigpCisgICAgICAgIHdvcmtlciA9IHNlbGYuX2Jyb2tlci5zdGFydF93b3Jr
ZXIoMCkKKyAgICAgICAgc2VsZi5fYnJva2VyLnBvc3RfbWVzc2FnZSgndGVzdCcsIDEsICdoZWxs
bywgd29ybGQnKQorICAgICAgICBzZWxmLl9icm9rZXIucG9zdF9tZXNzYWdlKCdzdG9wJykKKyAg
ICAgICAgc2VsZi5fYnJva2VyLnJ1bl9tZXNzYWdlX2xvb3AoKQorICAgICAgICB3b3JrZXIuam9p
bigwLjUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uod29ya2VyLmlzX2FsaXZlKCkpCisgICAg
ICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmlzX2RvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChzZWxmLl9hbl9pbnQsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYV9z
dHIsICdoaSwgZXZlcnlib2R5JykKKworICAgIGRlZiB0ZXN0X2xvZ193ZWRnZWRfd29ya2VyKHNl
bGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5fd29ya2VyX21vZGVsOgorICAgICAgICAgICAgcmV0
dXJuCisgICAgICAgIHN0YXJ0aW5nX3F1ZXVlID0gc2VsZi5xdWV1ZSgpCisgICAgICAgIHN0b3Bw
aW5nX3F1ZXVlID0gc2VsZi5xdWV1ZSgpCisgICAgICAgIHNlbGYubWFrZV9icm9rZXIoKQorICAg
ICAgICBvYyA9IG91dHB1dGNhcHR1cmUuT3V0cHV0Q2FwdHVyZSgpCisgICAgICAgIG9jLmNhcHR1
cmVfb3V0cHV0KCkKKyAgICAgICAgd29ya2VyID0gc2VsZi5fYnJva2VyLnN0YXJ0X3dvcmtlcigw
LAorICAgICAgICAgICAgc3RhcnRpbmdfcXVldWU9c3RhcnRpbmdfcXVldWUsIHN0b3BwaW5nX3F1
ZXVlPXN0b3BwaW5nX3F1ZXVlKQorICAgICAgICBzdGFydGluZ19xdWV1ZS5nZXQoKQorICAgICAg
ICB3b3JrZXIubG9nX3dlZGdlZF93b3JrZXIoJ3Rlc3RfbmFtZScpCisgICAgICAgIHN0b3BwaW5n
X3F1ZXVlLnB1dCgnJykKKyAgICAgICAgc2VsZi5fYnJva2VyLnBvc3RfbWVzc2FnZSgnc3RvcCcp
CisgICAgICAgIHNlbGYuX2Jyb2tlci5ydW5fbWVzc2FnZV9sb29wKCkKKyAgICAgICAgd29ya2Vy
LmpvaW4oMC41KQorICAgICAgICBvYy5yZXN0b3JlX291dHB1dCgpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RmFsc2Uod29ya2VyLmlzX2FsaXZlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxm
LmlzX2RvbmUoKSkKKworICAgIGRlZiB0ZXN0X3Vua25vd25fbWVzc2FnZShzZWxmKToKKyAgICAg
ICAgaWYgbm90IHNlbGYuX3dvcmtlcl9tb2RlbDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAg
ICBzZWxmLm1ha2VfYnJva2VyKCkKKyAgICAgICAgd29ya2VyID0gc2VsZi5fYnJva2VyLnN0YXJ0
X3dvcmtlcigwKQorICAgICAgICBzZWxmLl9icm9rZXIucG9zdF9tZXNzYWdlKCd1bmtub3duJykK
KyAgICAgICAgc2VsZi5fYnJva2VyLnJ1bl9tZXNzYWdlX2xvb3AoKQorICAgICAgICB3b3JrZXIu
am9pbigwLjUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuaXNfZG9uZSgpKQorICAg
ICAgICBzZWxmLmFzc2VydEZhbHNlKHdvcmtlci5pc19hbGl2ZSgpKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFscyhzZWxmLl9leGNlcHRpb25bMF0sIFZhbHVlRXJyb3IpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWxzKHNlbGYuX2V4Y2VwdGlvblsxXSwKKyAgICAgICAgICAgICJUZXN0V29ya2Vy
LzA6IHJlY2VpdmVkIG1lc3NhZ2UgJ3Vua25vd24nIGl0IGNvdWxkbid0IGhhbmRsZSIpCisKKwor
Y2xhc3MgSW5saW5lQnJva2VyVGVzdHMoX1Rlc3RzTWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToK
KyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIF9UZXN0c01peGluLnNldFVwKHNlbGYpCisg
ICAgICAgIHNlbGYuX3dvcmtlcl9tb2RlbCA9ICdpbmxpbmUnCisKKyAgICBkZWYgdGVzdF9sb2df
d2VkZ2VkX3dvcmtlcihzZWxmKToKKyAgICAgICAgc2VsZi5tYWtlX2Jyb2tlcigpCisgICAgICAg
IHdvcmtlciA9IHNlbGYuX2Jyb2tlci5zdGFydF93b3JrZXIoMCkKKyAgICAgICAgc2VsZi5hc3Nl
cnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIHdvcmtlci5sb2dfd2VkZ2VkX3dvcmtlciwgTm9uZSkK
KworCitjbGFzcyBNdWx0aVByb2Nlc3NCcm9rZXJUZXN0cyhfVGVzdHNNaXhpbiwgdW5pdHRlc3Qu
VGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgX1Rlc3RzTWl4aW4uc2V0
VXAoc2VsZikKKyAgICAgICAgaWYgbXVsdGlwcm9jZXNzaW5nOgorICAgICAgICAgICAgc2VsZi5f
d29ya2VyX21vZGVsID0gJ3Byb2Nlc3NlcycKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNl
bGYuX3dvcmtlcl9tb2RlbCA9IE5vbmUKKworICAgIGRlZiBxdWV1ZShzZWxmKToKKyAgICAgICAg
cmV0dXJuIG11bHRpcHJvY2Vzc2luZy5RdWV1ZSgpCisKKworY2xhc3MgVGhyZWFkZWRCcm9rZXJU
ZXN0cyhfVGVzdHNNaXhpbiwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBxdWV1ZShzZWxm
KToKKyAgICAgICAgcmV0dXJuIFF1ZXVlLlF1ZXVlKCkKKworICAgIGRlZiBzZXRVcChzZWxmKToK
KyAgICAgICAgX1Rlc3RzTWl4aW4uc2V0VXAoc2VsZikKKyAgICAgICAgc2VsZi5fd29ya2VyX21v
ZGVsID0gJ3RocmVhZHMnCisKKworY2xhc3MgRnVuY3Rpb25zVGVzdCh1bml0dGVzdC5UZXN0Q2Fz
ZSk6CiAgICAgZGVmIHRlc3RfcnVudGltZV9vcHRpb25zKHNlbGYpOgogICAgICAgICBvcHRpb25f
bGlzdCA9IG1hbmFnZXJfd29ya2VyX2Jyb2tlci5ydW50aW1lX29wdGlvbnMoKQogICAgICAgICBw
YXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIob3B0aW9uX2xpc3Q9b3B0aW9uX2xpc3QpCkBA
IC04Myw1ICsyNjIsMzAgQEAgY2xhc3MgRnVuY3Rpb25UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6
CiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcHRpb25zKQogCiAKK2NsYXNzIEludGVyZmFjZVRl
c3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVGhlc2UgdGVzdHMgbW9zdGx5IGV4aXN0IHRv
IHBhY2lmeSBjb3ZlcmFnZS4KKworICAgICMgRklYTUU6IFRoZXJlIG11c3QgYmUgYSBiZXR0ZXIg
d2F5IHRvIGRvIHRoaXMgYW5kIGFsc28gdmVyaWZ5CisgICAgIyB0aGF0IGNsYXNzZXMgZG8gaW1w
bGVtZW50IGV2ZXJ5IGFic3RyYWN0IG1ldGhvZCBpbiBhbiBpbnRlcmZhY2UuCisgICAgZGVmIHRl
c3RfbWFuYWdlcmNvbm5lY3Rpb25faXNfYWJzdHJhY3Qoc2VsZik6CisgICAgICAgICMgVGVzdCB0
aGF0IGFsbCB0aGUgYmFzZSBjbGFzcyBtZXRob2RzIGFyZSBhYnN0cmFjdCBhbmQgaGF2ZSB0aGUK
KyAgICAgICAgIyBzaWduYXR1cmUgd2UgZXhwZWN0LgorICAgICAgICBicm9rZXIgPSBtYWtlX2Jy
b2tlcihzZWxmLCAnaW5saW5lJykKKyAgICAgICAgb2JqID0gbWFuYWdlcl93b3JrZXJfYnJva2Vy
Ll9NYW5hZ2VyQ29ubmVjdGlvbihicm9rZXIuX2Jyb2tlciwgTm9uZSwgc2VsZiwgTm9uZSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgb2JqLl9tYWtlX3dv
cmtlcl9jb25uZWN0aW9uKQorCisgICAgZGVmIHRlc3Rfd29ya2VyY29ubmVjdGlvbl9pc19hYnN0
cmFjdChzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgYWxsIHRoZSBiYXNlIGNsYXNzIG1ldGhv
ZHMgYXJlIGFic3RyYWN0IGFuZCBoYXZlIHRoZQorICAgICAgICAjIHNpZ25hdHVyZSB3ZSBleHBl
Y3QuCisgICAgICAgIGJyb2tlciA9IG1ha2VfYnJva2VyKHNlbGYsICdpbmxpbmUnKQorICAgICAg
ICBvYmogPSBtYW5hZ2VyX3dvcmtlcl9icm9rZXIuX1dvcmtlckNvbm5lY3Rpb24oYnJva2VyLl9i
cm9rZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIG9i
ai5zdGFydCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwg
b2JqLnJ1bikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwg
b2JqLmNhbmNlbCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJv
ciwgb2JqLmlzX2FsaXZlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRl
ZEVycm9yLCBvYmouam9pbiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1w
bGVtZW50ZWRFcnJvciwgb2JqLmxvZ193ZWRnZWRfd29ya2VyLCBOb25lKQorCisKIGlmIF9fbmFt
ZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jy
b2tlcjIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFj
a2FnZS9tZXNzYWdlX2Jyb2tlcjIucHkKaW5kZXggOGUxNTkyM2Y2MjEyZDk1NTE1MzY4YjJmN2Zi
MmE1NzhkZWFjNzgzNy4uZWMzYzk3MDFiOTk4ZWZkMmM3M2U3MjljMGFjN2FjMjBiMGMyYjk0YiAx
MDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3Bh
Y2thZ2UvbWVzc2FnZV9icm9rZXIyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2VfYnJva2VyMi5weQpAQCAtMTMyLDcgKzEz
Miw3IEBAIGNsYXNzIEJyb2tlcihvYmplY3QpOgogICAgICAgICBzZWxmLl9ydW5fbG9vcCh0b3Bp
Y19uYW1lLCBjbGllbnQsIGJsb2NrPUZhbHNlLCBkZWxheV9zZWNzPU5vbmUpCiAKICAgICBkZWYg
X3J1bl9sb29wKHNlbGYsIHRvcGljX25hbWUsIGNsaWVudCwgYmxvY2ssIGRlbGF5X3NlY3MpOgot
ICAgICAgICBxdWV1ZSA9IHNlbGYuX2ZpbmRfdG9waWModG9waWNfbmFtZSkKKyAgICAgICAgcXVl
dWUgPSBzZWxmLl9nZXRfcXVldWVfZm9yX3RvcGljKHRvcGljX25hbWUpCiAgICAgICAgIHdoaWxl
IG5vdCBjbGllbnQuaXNfZG9uZSgpOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAg
IHMgPSBxdWV1ZS5nZXQoYmxvY2ssIGRlbGF5X3NlY3MpCkBAIC0xNDYsNyArMTQ2LDcgQEAgY2xh
c3MgQnJva2VyKG9iamVjdCk6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAg
ICAgICAgICAgIiVzOiByZWNlaXZlZCBtZXNzYWdlICclcycgaXQgY291bGRuJ3QgaGFuZGxlIiAl
CiAgICAgICAgICAgICAgICAoY2xpZW50Lm5hbWUoKSwgbWVzc2FnZS5uYW1lKSkKLSAgICAgICAg
b3B0YXJncyA9IG1lc3NhZ2UuYm9keQorICAgICAgICBvcHRhcmdzID0gbWVzc2FnZS5hcmdzCiAg
ICAgICAgIG1lc3NhZ2VfaGFuZGxlciA9IGdldGF0dHIoY2xpZW50LCAnaGFuZGxlXycgKyBtZXNz
YWdlLm5hbWUpCiAgICAgICAgIG1lc3NhZ2VfaGFuZGxlcihtZXNzYWdlLnNyYywgKm9wdGFyZ3Mp
CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL3NpbmdsZV90ZXN0X3J1bm5lci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3NpbmdsZV90ZXN0X3J1bm5lci5weQppbmRleCA4
ZjE1MWU4YzNhMmFiODlhOWMyMDAzYjYzOWI5YzY0YjliODgyYWQ5Li5kODQ2M2Q5YTRlODMyYWRj
ZTlhNTdlMjMwMDVkOGFhYTg2NDJjMmNkIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9zaW5nbGVfdGVzdF9ydW5uZXIucHkKKysr
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvc2lu
Z2xlX3Rlc3RfcnVubmVyLnB5CkBAIC0yOCwxNCArMjgsMTAgQEAKIAogCiBpbXBvcnQgbG9nZ2lu
ZwotaW1wb3J0IHRocmVhZGluZworaW1wb3J0IG9zCiBpbXBvcnQgdGltZQogCiBmcm9tIHdlYmtp
dHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBiYXNlCi0KLWZyb20gd2Via2l0cHkubGF5b3V0
X3Rlc3RzLnRlc3RfdHlwZXMgaW1wb3J0IHRleHRfZGlmZgotZnJvbSB3ZWJraXRweS5sYXlvdXRf
dGVzdHMudGVzdF90eXBlcyBpbXBvcnQgaW1hZ2VfZGlmZgotCiBmcm9tIHdlYmtpdHB5LmxheW91
dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9mYWlsdXJlcwogZnJvbSB3ZWJraXRw
eS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UudGVzdF9yZXN1bHRzIGltcG9ydCBUZXN0UmVz
dWx0CiAKQEAgLTQzLDYgKzM5LDEyIEBAIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91
dF9wYWNrYWdlLnRlc3RfcmVzdWx0cyBpbXBvcnQgVGVzdFJlc3VsdAogX2xvZyA9IGxvZ2dpbmcu
Z2V0TG9nZ2VyKF9fbmFtZV9fKQogCiAKK2RlZiBydW5fc2luZ2xlX3Rlc3QocG9ydCwgb3B0aW9u
cywgdGVzdF9pbnB1dCwgZHJpdmVyLCB3b3JrZXJfbmFtZSwgdGVzdF90eXBlcyk6CisgICAgIyBG
SVhNRTogUHVsbCB0aGlzIGludG8gVGVzdFNoZWxsVGhyZWFkLl9ydW4oKS4KKyAgICBydW5uZXIg
PSBTaW5nbGVUZXN0UnVubmVyKG9wdGlvbnMsIHBvcnQsIGRyaXZlciwgdGVzdF9pbnB1dCwgd29y
a2VyX25hbWUsIHRlc3RfdHlwZXMpCisgICAgcmV0dXJuIHJ1bm5lci5ydW4oKQorCisKIGNsYXNz
IEV4cGVjdGVkRHJpdmVyT3V0cHV0OgogICAgICIiIkdyb3VwcyBpbmZvcm1hdGlvbiBhYm91dCBh
biBleHBlY3RlZCBkcml2ZXIgb3V0cHV0LiIiIgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXh0
LCBpbWFnZSwgaW1hZ2VfaGFzaCk6CkBAIC01MywxMTEgKzU1LDE1IEBAIGNsYXNzIEV4cGVjdGVk
RHJpdmVyT3V0cHV0OgogCiBjbGFzcyBTaW5nbGVUZXN0UnVubmVyOgogCi0gICAgZGVmIF9faW5p
dF9fKHNlbGYsIG9wdGlvbnMsIHBvcnQsIHdvcmtlcl9uYW1lLCB3b3JrZXJfbnVtYmVyKToKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgb3B0aW9ucywgcG9ydCwgZHJpdmVyLCB0ZXN0X2lucHV0LCB3
b3JrZXJfbmFtZSwgdGVzdF90eXBlcyk6CiAgICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25z
CiAgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CisgICAgICAgIHNlbGYuX2RyaXZlciA9IGRyaXZl
cgorICAgICAgICBzZWxmLl9maWxlbmFtZSA9IHRlc3RfaW5wdXQuZmlsZW5hbWUKKyAgICAgICAg
c2VsZi5fdGltZW91dCA9IHRlc3RfaW5wdXQudGltZW91dAogICAgICAgICBzZWxmLl93b3JrZXJf
bmFtZSA9IHdvcmtlcl9uYW1lCi0gICAgICAgIHNlbGYuX3dvcmtlcl9udW1iZXIgPSB3b3JrZXJf
bnVtYmVyCi0gICAgICAgIHNlbGYuX2RyaXZlciA9IE5vbmUKLSAgICAgICAgc2VsZi5fdGVzdF90
eXBlcyA9IFtdCi0gICAgICAgIHNlbGYuaGFzX2h0dHBfbG9jayA9IEZhbHNlCi0gICAgICAgIGZv
ciBjbHMgaW4gc2VsZi5fZ2V0X3Rlc3RfdHlwZV9jbGFzc2VzKCk6Ci0gICAgICAgICAgICBzZWxm
Ll90ZXN0X3R5cGVzLmFwcGVuZChjbHMoc2VsZi5fcG9ydCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KSkKLQot
ICAgIGRlZiBjbGVhbnVwKHNlbGYpOgotICAgICAgICBzZWxmLmtpbGxfZHVtcF9yZW5kZXJfdHJl
ZSgpCi0gICAgICAgIGlmIHNlbGYuaGFzX2h0dHBfbG9jazoKLSAgICAgICAgICAgIHNlbGYuc3Rv
cF9zZXJ2ZXJzX3dpdGhfbG9jaygpCi0KLSAgICBkZWYgX2dldF90ZXN0X3R5cGVfY2xhc3Nlcyhz
ZWxmKToKLSAgICAgICAgY2xhc3NlcyA9IFt0ZXh0X2RpZmYuVGVzdFRleHREaWZmXQotICAgICAg
ICBpZiBzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RzOgotICAgICAgICAgICAgY2xhc3Nlcy5hcHBl
bmQoaW1hZ2VfZGlmZi5JbWFnZURpZmYpCi0gICAgICAgIHJldHVybiBjbGFzc2VzCi0KLSAgICBk
ZWYgdGltZW91dChzZWxmLCB0ZXN0X2lucHV0KToKLSAgICAgICAgIyBXZSBjYWxjdWxhdGUgaG93
IGxvbmcgd2UgZXhwZWN0IHRoZSB0ZXN0IHRvIHRha2UuCi0gICAgICAgICMKLSAgICAgICAgIyBU
aGUgRHVtcFJlbmRlclRyZWUgd2F0Y2hkb2cgdXNlcyAyLjV4IHRoZSB0aW1lb3V0OyB3ZSB3YW50
IHRvIGJlCi0gICAgICAgICMgbGFyZ2VyIHRoYW4gdGhhdC4gV2UgYWxzbyBhZGQgYSBsaXR0bGUg
bW9yZSBwYWRkaW5nIGlmIHdlJ3JlCi0gICAgICAgICMgcnVubmluZyB0ZXN0cyBpbiBhIHNlcGFy
YXRlIHRocmVhZC4KLSAgICAgICAgIwotICAgICAgICAjIE5vdGUgdGhhdCB3ZSBuZWVkIHRvIGNv
bnZlcnQgdGhlIHRlc3QgdGltZW91dCBmcm9tIGEKLSAgICAgICAgIyBzdHJpbmcgdmFsdWUgaW4g
bWlsbGlzZWNvbmRzIHRvIGEgZmxvYXQgZm9yIFB5dGhvbi4KLSAgICAgICAgZHJpdmVyX3RpbWVv
dXRfc2VjID0gMy4wICogZmxvYXQodGVzdF9pbnB1dC50aW1lb3V0KSAvIDEwMDAuMAotICAgICAg
ICBpZiBub3Qgc2VsZi5fb3B0aW9ucy5ydW5fc2luZ2x5OgotICAgICAgICAgICAgcmV0dXJuIGRy
aXZlcl90aW1lb3V0X3NlYwotCi0gICAgICAgIHRocmVhZF9wYWRkaW5nX3NlYyA9IDEuMAotICAg
ICAgICB0aHJlYWRfdGltZW91dF9zZWMgPSBkcml2ZXJfdGltZW91dF9zZWMgKyB0aHJlYWRfcGFk
ZGluZ19zZWMKLSAgICAgICAgcmV0dXJuIHRocmVhZF90aW1lb3V0X3NlYwotCi0gICAgZGVmIHJ1
bl90ZXN0KHNlbGYsIHRlc3RfaW5wdXQsIHRpbWVvdXQpOgotICAgICAgICBpZiBzZWxmLl9vcHRp
b25zLnJ1bl9zaW5nbHk6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fcnVuX3Rlc3RfaW5fYW5v
dGhlcl90aHJlYWQodGVzdF9pbnB1dCwgdGltZW91dCkKLSAgICAgICAgZWxzZToKLSAgICAgICAg
ICAgIHJldHVybiBzZWxmLl9ydW5fdGVzdF9pbl90aGlzX3RocmVhZCh0ZXN0X2lucHV0KQotICAg
ICAgICByZXR1cm4gcmVzdWx0Ci0KLSAgICBkZWYgX3J1bl90ZXN0X2luX2Fub3RoZXJfdGhyZWFk
KHNlbGYsIHRlc3RfaW5wdXQsIHRocmVhZF90aW1lb3V0X3NlYyk6Ci0gICAgICAgICIiIlJ1biBh
IHRlc3QgaW4gYSBzZXBhcmF0ZSB0aHJlYWQsIGVuZm9yY2luZyBhIGhhcmQgdGltZSBsaW1pdC4K
LQotICAgICAgICBTaW5jZSB3ZSBjYW4gb25seSBkZXRlY3QgdGhlIHRlcm1pbmF0aW9uIG9mIGEg
dGhyZWFkLCBub3QgYW55IGludGVybmFsCi0gICAgICAgIHN0YXRlIG9yIHByb2dyZXNzLCB3ZSBj
YW4gb25seSBydW4gcGVyLXRlc3QgdGltZW91dHMgd2hlbiBydW5uaW5nIHRlc3QKLSAgICAgICAg
ZmlsZXMgc2luZ2x5LgotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgdGVzdF9pbnB1dDogT2Jq
ZWN0IGNvbnRhaW5pbmcgdGhlIHRlc3QgZmlsZW5hbWUgYW5kIHRpbWVvdXQKLSAgICAgICAgICB0
aHJlYWRfdGltZW91dF9zZWM6IHRpbWUgdG8gd2FpdCBiZWZvcmUga2lsbGluZyB0aGUgZHJpdmVy
IHByb2Nlc3MuCi0gICAgICAgIFJldHVybnM6Ci0gICAgICAgICAgQSBUZXN0UmVzdWx0Ci0gICAg
ICAgICIiIgotICAgICAgICB3b3JrZXIgPSBzZWxmCi0gICAgICAgIHJlc3VsdCA9IE5vbmUKLQot
ICAgICAgICBkcml2ZXIgPSB3b3JrZXIuX3BvcnQuY3JlYXRlX2RyaXZlcih3b3JrZXIuX3dvcmtl
cl9udW1iZXIpCi0gICAgICAgIGRyaXZlci5zdGFydCgpCi0KLSAgICAgICAgY2xhc3MgU2luZ2xl
VGVzdFRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKLSAgICAgICAgICAgIGRlZiBydW4oc2VsZik6
Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gd29ya2VyLnJ1bih0ZXN0X2lucHV0LCBkcml2ZXIp
Ci0KLSAgICAgICAgdGhyZWFkID0gU2luZ2xlVGVzdFRocmVhZCgpCi0gICAgICAgIHRocmVhZC5z
dGFydCgpCi0gICAgICAgIHRocmVhZC5qb2luKHRocmVhZF90aW1lb3V0X3NlYykKLSAgICAgICAg
aWYgdGhyZWFkLmlzQWxpdmUoKToKLSAgICAgICAgICAgICMgSWYgam9pbigpIHJldHVybmVkIHdp
dGggdGhlIHRocmVhZCBzdGlsbCBydW5uaW5nLCB0aGUKLSAgICAgICAgICAgICMgRHVtcFJlbmRl
clRyZWUgaXMgY29tcGxldGVseSBodW5nIGFuZCB0aGVyZSdzIG5vdGhpbmcKLSAgICAgICAgICAg
ICMgbW9yZSB3ZSBjYW4gZG8gd2l0aCBpdC4gIFdlIGhhdmUgdG8ga2lsbCBhbGwgdGhlCi0gICAg
ICAgICAgICAjIER1bXBSZW5kZXJUcmVlcyB0byBmcmVlIGl0IHVwLiBJZiB3ZSdyZSBydW5uaW5n
IG1vcmUgdGhhbgotICAgICAgICAgICAgIyBvbmUgRHVtcFJlbmRlclRyZWUgdGhyZWFkLCB3ZSds
bCBlbmQgdXAga2lsbGluZyB0aGUgb3RoZXIKLSAgICAgICAgICAgICMgRHVtcFJlbmRlclRyZWVz
IHRvbywgaW50cm9kdWNpbmcgc3B1cmlvdXMgY3Jhc2hlcy4gV2UgYWNjZXB0Ci0gICAgICAgICAg
ICAjIHRoYXQgdHJhZGVvZmYgaW4gb3JkZXIgdG8gYXZvaWQgbG9zaW5nIHRoZSByZXN0IG9mIHRo
aXMKLSAgICAgICAgICAgICMgdGhyZWFkJ3MgcmVzdWx0cy4KLSAgICAgICAgICAgIF9sb2cuZXJy
b3IoJ1Rlc3QgdGhyZWFkIGh1bmc6IGtpbGxpbmcgYWxsIER1bXBSZW5kZXJUcmVlcycpCi0KLSAg
ICAgICAgZHJpdmVyLnN0b3AoKQotCi0gICAgICAgIGlmIG5vdCByZXN1bHQ6Ci0gICAgICAgICAg
ICByZXN1bHQgPSBUZXN0UmVzdWx0KHRlc3RfaW5wdXQuZmlsZW5hbWUsIGZhaWx1cmVzPVtdLAot
ICAgICAgICAgICAgICAgIHRlc3RfcnVuX3RpbWU9MCwgdG90YWxfdGltZV9mb3JfYWxsX2RpZmZz
PTAsIHRpbWVfZm9yX2RpZmZzPXt9KQotICAgICAgICByZXR1cm4gcmVzdWx0Ci0KLSAgICBkZWYg
X3J1bl90ZXN0X2luX3RoaXNfdGhyZWFkKHNlbGYsIHRlc3RfaW5wdXQpOgotICAgICAgICAiIiJS
dW4gYSBzaW5nbGUgdGVzdCBmaWxlIHVzaW5nIGEgc2hhcmVkIER1bXBSZW5kZXJUcmVlIHByb2Nl
c3MuCi0KLSAgICAgICAgQXJnczoKLSAgICAgICAgICB0ZXN0X2lucHV0OiBPYmplY3QgY29udGFp
bmluZyB0aGUgdGVzdCBmaWxlbmFtZSwgdXJpIGFuZCB0aW1lb3V0Ci0KLSAgICAgICAgUmV0dXJu
czogYSBUZXN0UmVzdWx0IG9iamVjdC4KLSAgICAgICAgIiIiCi0gICAgICAgICMgcG9sbCgpIGlz
IG5vdCB0aHJlYWRzYWZlIGFuZCBjYW4gdGhyb3cgT1NFcnJvciBkdWUgdG86Ci0gICAgICAgICMg
aHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE3MzE3MTcKLSAgICAgICAgaWYgbm90IHNlbGYu
X2RyaXZlciBvciBzZWxmLl9kcml2ZXIucG9sbCgpIGlzIG5vdCBOb25lOgotICAgICAgICAgICAg
c2VsZi5fZHJpdmVyID0gc2VsZi5fcG9ydC5jcmVhdGVfZHJpdmVyKHNlbGYuX3dvcmtlcl9udW1i
ZXIpCi0gICAgICAgICAgICBzZWxmLl9kcml2ZXIuc3RhcnQoKQotICAgICAgICByZXR1cm4gc2Vs
Zi5fcnVuKHNlbGYuX2RyaXZlciwgdGVzdF9pbnB1dCkKKyAgICAgICAgc2VsZi5fdGVzdF90eXBl
cyA9IHRlc3RfdHlwZXMKKyAgICAgICAgc2VsZi5fdGVzdG5hbWUgPSBwb3J0LnJlbGF0aXZlX3Rl
c3RfZmlsZW5hbWUodGVzdF9pbnB1dC5maWxlbmFtZSkKIAogICAgIGRlZiBfZXhwZWN0ZWRfZHJp
dmVyX291dHB1dChzZWxmKToKICAgICAgICAgcmV0dXJuIEV4cGVjdGVkRHJpdmVyT3V0cHV0KHNl
bGYuX3BvcnQuZXhwZWN0ZWRfdGV4dChzZWxmLl9maWxlbmFtZSksCkBAIC0xNjgsMTEgKzc0LDcg
QEAgY2xhc3MgU2luZ2xlVGVzdFJ1bm5lcjoKICAgICAgICAgcmV0dXJuIChzZWxmLl9vcHRpb25z
LnBpeGVsX3Rlc3RzIGFuZAogICAgICAgICAgICAgICAgIG5vdCAoc2VsZi5fb3B0aW9ucy5uZXdf
YmFzZWxpbmUgb3Igc2VsZi5fb3B0aW9ucy5yZXNldF9yZXN1bHRzKSkKIAotICAgIGRlZiBfZHJp
dmVyX2lucHV0KHNlbGYsIHRlc3RfaW5wdXQpOgotICAgICAgICBzZWxmLl9maWxlbmFtZSA9IHRl
c3RfaW5wdXQuZmlsZW5hbWUKLSAgICAgICAgc2VsZi5fdGltZW91dCA9IHRlc3RfaW5wdXQudGlt
ZW91dAotICAgICAgICBzZWxmLl90ZXN0bmFtZSA9IHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9m
aWxlbmFtZSh0ZXN0X2lucHV0LmZpbGVuYW1lKQotCisgICAgZGVmIF9kcml2ZXJfaW5wdXQoc2Vs
Zik6CiAgICAgICAgICMgVGhlIGltYWdlIGhhc2ggaXMgdXNlZCB0byBhdm9pZCBkb2luZyBhbiBp
bWFnZSBkdW1wIGlmIHRoZQogICAgICAgICAjIGNoZWNrc3VtcyBtYXRjaCwgc28gaXQgc2hvdWxk
IGJlIHNldCB0byBhIGJsYW5rIHZhbHVlIGlmIHdlCiAgICAgICAgICMgYXJlIGdlbmVyYXRpbmcg
YSBuZXcgYmFzZWxpbmUuICAoT3RoZXJ3aXNlLCBhbiBpbWFnZSBmcm9tIGEKQEAgLTE4Miw4ICs4
NCw4IEBAIGNsYXNzIFNpbmdsZVRlc3RSdW5uZXI6CiAgICAgICAgICAgICBpbWFnZV9oYXNoID0g
c2VsZi5fcG9ydC5leHBlY3RlZF9jaGVja3N1bShzZWxmLl9maWxlbmFtZSkKICAgICAgICAgcmV0
dXJuIGJhc2UuRHJpdmVySW5wdXQoc2VsZi5fZmlsZW5hbWUsIHNlbGYuX3RpbWVvdXQsIGltYWdl
X2hhc2gpCiAKLSAgICBkZWYgX3J1bihzZWxmLCBkcml2ZXIsIHRlc3RfaW5wdXQpOgotICAgICAg
ICBkcml2ZXJfb3V0cHV0ID0gc2VsZi5fZHJpdmVyLnJ1bl90ZXN0KHNlbGYuX2RyaXZlcl9pbnB1
dCh0ZXN0X2lucHV0KSkKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICBkcml2ZXJfb3V0cHV0
ID0gc2VsZi5fZHJpdmVyLnJ1bl90ZXN0KHNlbGYuX2RyaXZlcl9pbnB1dCgpKQogICAgICAgICBy
ZXR1cm4gc2VsZi5fcHJvY2Vzc19vdXRwdXQoZHJpdmVyX291dHB1dCkKIAogICAgIGRlZiBfcHJv
Y2Vzc19vdXRwdXQoc2VsZiwgZHJpdmVyX291dHB1dCk6CkBAIC0yMzQsMjkgKzEzNiwzIEBAIGNs
YXNzIFNpbmdsZVRlc3RSdW5uZXI6CiAgICAgICAgIHRvdGFsX3RpbWVfZm9yX2FsbF9kaWZmcyA9
IHRpbWUudGltZSgpIC0gc3RhcnRfZGlmZl90aW1lCiAgICAgICAgIHJldHVybiBUZXN0UmVzdWx0
KHNlbGYuX2ZpbGVuYW1lLCBmYWlsdXJlcywgZHJpdmVyX291dHB1dC50ZXN0X3RpbWUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRvdGFsX3RpbWVfZm9yX2FsbF9kaWZmcywgdGltZV9mb3Jf
ZGlmZnMpCi0KLSAgICBkZWYgc3RhcnRfc2VydmVyc193aXRoX2xvY2soc2VsZik6Ci0gICAgICAg
IF9sb2cuZGVidWcoJ0FjcXVpcmluZyBodHRwIGxvY2sgLi4uJykKLSAgICAgICAgc2VsZi5fcG9y
dC5hY3F1aXJlX2h0dHBfbG9jaygpCi0gICAgICAgIF9sb2cuZGVidWcoJ1N0YXJ0aW5nIEhUVFAg
c2VydmVyIC4uLicpCi0gICAgICAgIHNlbGYuX3BvcnQuc3RhcnRfaHR0cF9zZXJ2ZXIoKQotICAg
ICAgICBfbG9nLmRlYnVnKCdTdGFydGluZyBXZWJTb2NrZXQgc2VydmVyIC4uLicpCi0gICAgICAg
IHNlbGYuX3BvcnQuc3RhcnRfd2Vic29ja2V0X3NlcnZlcigpCi0gICAgICAgIHNlbGYuaGFzX2h0
dHBfbG9jayA9IFRydWUKLQotICAgIGRlZiBzdG9wX3NlcnZlcnNfd2l0aF9sb2NrKHNlbGYpOgot
ICAgICAgICAiIiJTdG9wIHRoZSBzZXJ2ZXJzIGFuZCByZWxlYXNlIGh0dHAgbG9jay4iIiIKLSAg
ICAgICAgaWYgc2VsZi5oYXNfaHR0cF9sb2NrOgotICAgICAgICAgICAgX2xvZy5kZWJ1ZygnU3Rv
cHBpbmcgSFRUUCBzZXJ2ZXIgLi4uJykKLSAgICAgICAgICAgIHNlbGYuX3BvcnQuc3RvcF9odHRw
X3NlcnZlcigpCi0gICAgICAgICAgICBfbG9nLmRlYnVnKCdTdG9wcGluZyBXZWJTb2NrZXQgc2Vy
dmVyIC4uLicpCi0gICAgICAgICAgICBzZWxmLl9wb3J0LnN0b3Bfd2Vic29ja2V0X3NlcnZlcigp
Ci0gICAgICAgICAgICBfbG9nLmRlYnVnKCdSZWxlYXNpbmcgc2VydmVyIGxvY2sgLi4uJykKLSAg
ICAgICAgICAgIHNlbGYuX3BvcnQucmVsZWFzZV9odHRwX2xvY2soKQotICAgICAgICAgICAgc2Vs
Zi5oYXNfaHR0cF9sb2NrID0gRmFsc2UKLQotICAgIGRlZiBraWxsX2R1bXBfcmVuZGVyX3RyZWUo
c2VsZik6Ci0gICAgICAgICIiIktpbGwgdGhlIER1bXBSZW5kZXJUcmVlIHByb2Nlc3MgaWYgaXQn
cyBydW5uaW5nLiIiIgotICAgICAgICBpZiBzZWxmLl9kcml2ZXI6Ci0gICAgICAgICAgICBzZWxm
Ll9kcml2ZXIuc3RvcCgpCi0gICAgICAgICAgICBzZWxmLl9kcml2ZXIgPSBOb25lCmRpZmYgLS1n
aXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90
ZXN0X3J1bm5lcjIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlv
dXRfcGFja2FnZS90ZXN0X3J1bm5lcjIucHkKaW5kZXggZWI3ODc1MjU1YzNjM2MxMGNjNjgxZTVi
ZDFmZTgwMWUzODE4Y2JmNy4uNTcwNDYyOWU0NWRkOTY0NGQ4ZjQyYTQ1ZjU4NjZkMzZmZDU3MTU1
MSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0
X3BhY2thZ2UvdGVzdF9ydW5uZXIyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfcnVubmVyMi5weQpAQCAtMjksMjUgKzI5LDE5
MiBAQAogCiAiIiIKIFRoZSBUZXN0UnVubmVyMiBwYWNrYWdlIGlzIGFuIGFsdGVybmF0ZSBpbXBs
ZW1lbnRhdGlvbiBvZiB0aGUgVGVzdFJ1bm5lcgotY2xhc3MuIEZvciBub3cgaXQgaXMganVzdCBh
IHN0dWIsIGJ1dCBldmVudHVhbGx5IGl0IHdpbGwgdXNlIHRoZQotbWVzc2FnZSBicm9rZXIgYWJz
dHJhY3Rpb24gdG8gcGFzcyBtZXNzYWdlcyB0byB3b3JrZXJzIHRvIHJ1biBzZXRzIG9mCi10ZXN0
cyBhbmQgdGhlbiBwcm9jZXNzIHRoZSBjb21wbGV0aW9uIG1lc3NhZ2VzIGFjY29yZGluZ2x5Lgor
Y2xhc3MgdGhhdCB1c2VzIHRoZSBtYW5hZ2VyX3dvcmtlcl9icm9rZXIgbW9kdWxlIHRvIHNlbmQg
c2V0cyBvZiB0ZXN0cyB0bword29ya2VycyBhbmQgcmVjZWl2ZSB0aGVpciBjb21wbGV0aW9uIG1l
c3NhZ2VzIGFjY29yZGluZ2x5LgogIiIiCiAKIGltcG9ydCBsb2dnaW5nCitpbXBvcnQgdGltZQor
Citmcm9tIHdlYmtpdHB5LnRvb2wgaW1wb3J0IGdyYW1tYXIKKworZnJvbSB3ZWJraXRweS5sYXlv
dXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IG1hbmFnZXJfd29ya2VyX2Jyb2tlcgorZnJv
bSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IHdvcmtlcgorZnJv
bSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfcnVubmVy
CiAKLWltcG9ydCB0ZXN0X3J1bm5lcgogCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1l
X18pCiAKIAorY2xhc3MgX1dvcmtlclN0YXRlKG9iamVjdCk6CisgICAgIiIiQSBjbGFzcyBmb3Ig
dGhlIFRlc3RSdW5uZXIvbWFuYWdlciB0byB1c2UgdG8gdHJhY2sgdGhlIGN1cnJlbnQgc3RhdGUK
KyAgICBvZiB0aGUgd29ya2Vycy4iIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbnVtYmVyLCB3
b3JrZXIpOgorICAgICAgICBzZWxmLndvcmtlciA9IHdvcmtlcgorICAgICAgICBzZWxmLm51bWJl
ciA9IG51bWJlcgorICAgICAgICBzZWxmLmRvbmUgPSBGYWxzZQorICAgICAgICBzZWxmLmN1cnJl
bnRfdGVzdF9uYW1lID0gTm9uZQorICAgICAgICBzZWxmLm5leHRfdGltZW91dCA9IE5vbmUKKyAg
ICAgICAgc2VsZi53ZWRnZWQgPSBGYWxzZQorICAgICAgICBzZWxmLnN0YXRzID0ge30KKyAgICAg
ICAgc2VsZi5zdGF0c1snbmFtZSddID0gd29ya2VyLm5hbWUKKyAgICAgICAgc2VsZi5zdGF0c1sn
bnVtX3Rlc3RzJ10gPSAwCisgICAgICAgIHNlbGYuc3RhdHNbJ3RvdGFsX3RpbWUnXSA9IDAKKwor
ICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJfV29ya2VyU3RhdGUoIiAr
IHN0cihzZWxmLl9fZGljdF9fKSArICIpIgorCisKIGNsYXNzIFRlc3RSdW5uZXIyKHRlc3RfcnVu
bmVyLlRlc3RSdW5uZXIpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zLCBw
cmludGVyKToKKyAgICAgICAgdGVzdF9ydW5uZXIuVGVzdFJ1bm5lci5fX2luaXRfXyhzZWxmLCBw
b3J0LCBvcHRpb25zLCBwcmludGVyKQorICAgICAgICBzZWxmLl9hbGxfcmVzdWx0cyA9IFtdCisg
ICAgICAgIHNlbGYuX2dyb3VwX3N0YXRzID0ge30KKyAgICAgICAgc2VsZi5fY3VycmVudF9yZXN1
bHRfc3VtbWFyeSA9IE5vbmUKKyAgICAgICAgc2VsZi5fZG9uZSA9IEZhbHNlCiAKLSAgICAgICAg
IyBGSVhNRTogVGhpcydsbCBnZXQgcmVwbGFjZWQgd2l0aCBhIHJlYWwgaW1wbGVtZW50YXRpb24g
c29vbiBlbm91Z2guCi0gICAgICAgIGlmIG9wdGlvbnMud29ya2VyX21vZGVsIGluICgnaW5saW5l
JywgJ3RocmVhZHMnKToKLSAgICAgICAgICAgIG9wdGlvbnMud29ya2VyX21vZGVsID0gJ29sZC0n
ICsgb3B0aW9ucy53b3JrZXJfbW9kZWwKLSAgICAgICAgaWYgb3B0aW9ucy53b3JrZXJfbW9kZWwg
PT0gJ3Byb2Nlc3Nlcyc6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCItLXdvcmtlci1t
b2RlbD1wcm9jZXNzZXMgbm90IHN1cHBvcnRlZCB5ZXQiKQorICAgICAgICAjIFRoaXMgbWFwcyB3
b3JrZXIgbmFtZXMgdG8gdGhlIHN0YXRlIHdlIGFyZSB0cmFja2luZyBmb3IgZWFjaCBvZiB0aGVt
LgorICAgICAgICBzZWxmLl93b3JrZXJzID0ge30KIAotICAgICAgICB0ZXN0X3J1bm5lci5UZXN0
UnVubmVyLl9faW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMsIHByaW50ZXIpCisgICAgZGVmIGlz
X2RvbmUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9kb25lCisKKyAgICBkZWYgbmFtZShz
ZWxmKToKKyAgICAgICAgcmV0dXJuICdUZXN0UnVubmVyMicKKworICAgIGRlZiBfcnVuX3Rlc3Rz
KHNlbGYsIGZpbGVfbGlzdCwgcmVzdWx0X3N1bW1hcnkpOgorICAgICAgICAiIiJSdW5zIHRoZSB0
ZXN0cyBpbiB0aGUgZmlsZV9saXN0LgorCisgICAgICAgIFJldHVybjogQSB0dXBsZSAoa2V5Ym9h
cmRfaW50ZXJydXB0ZWQsIHRocmVhZF90aW1pbmdzLCB0ZXN0X3RpbWluZ3MsCisgICAgICAgICAg
ICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncykKKyAgICAgICAgICAgIGtleWJvYXJkX2ludGVycnVw
dGVkIGlzIHdoZXRoZXIgc29tZW9uZSB0eXBlZCBDdHJsXkMKKyAgICAgICAgICAgIHRocmVhZF90
aW1pbmdzIGlzIGEgbGlzdCBvZiBkaWN0cyB3aXRoIHRoZSB0b3RhbCBydW50aW1lCisgICAgICAg
ICAgICAgIG9mIGVhY2ggdGhyZWFkIHdpdGggJ25hbWUnLCAnbnVtX3Rlc3RzJywgJ3RvdGFsX3Rp
bWUnIHByb3BlcnRpZXMKKyAgICAgICAgICAgIHRlc3RfdGltaW5ncyBpcyBhIGxpc3Qgb2YgdGlt
aW5ncyBmb3IgZWFjaCBzaGFyZGVkIHN1YmRpcmVjdG9yeQorICAgICAgICAgICAgICBvZiB0aGUg
Zm9ybSBbdGltZSwgZGlyZWN0b3J5X25hbWUsIG51bV90ZXN0c10KKyAgICAgICAgICAgIGluZGl2
aWR1YWxfdGVzdF90aW1pbmdzIGlzIGEgbGlzdCBvZiBydW4gdGltZXMgZm9yIGVhY2ggdGVzdAor
ICAgICAgICAgICAgICBpbiB0aGUgZm9ybSB7ZmlsZW5hbWU6ZmlsZW5hbWUsIHRlc3RfcnVuX3Rp
bWU6dGVzdF9ydW5fdGltZX0KKyAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5OiBzdW1tYXJ5IG9i
amVjdCB0byBwb3B1bGF0ZSB3aXRoIHRoZSByZXN1bHRzCisgICAgICAgICIiIgorICAgICAgICBz
ZWxmLl9jdXJyZW50X3Jlc3VsdF9zdW1tYXJ5ID0gcmVzdWx0X3N1bW1hcnkKKyAgICAgICAgc2Vs
Zi5fYWxsX3Jlc3VsdHMgPSBbXQorICAgICAgICBzZWxmLl9ncm91cF9zdGF0cyA9IHt9CisgICAg
ICAgIHNlbGYuX3dvcmtlcnMgPSB7fQorCisgICAgICAgIG51bV93b3JrZXJzID0gc2VsZi5fbnVt
X3dvcmtlcnMoKQorCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCdTaGFyZGlu
ZyB0ZXN0cyAuLi4nKQorICAgICAgICB0ZXN0X2xpc3RzID0gc2VsZi5fc2hhcmRfdGVzdHMoZmls
ZV9saXN0LAorICAgICAgICAgICAgbnVtX3dvcmtlcnMgPiAxIGFuZCBub3Qgc2VsZi5fb3B0aW9u
cy5leHBlcmltZW50YWxfZnVsbHlfcGFyYWxsZWwpCisgICAgICAgIF9sb2cuZGVidWcoIlVzaW5n
ICVkIHNoYXJkcyIgJSBsZW4odGVzdF9saXN0cykpCisKKyAgICAgICAgbWFuYWdlcl9jb25uZWN0
aW9uID0gbWFuYWdlcl93b3JrZXJfYnJva2VyLmdldChzZWxmLl9wb3J0LCBzZWxmLl9vcHRpb25z
LCBzZWxmLCB3b3JrZXIuV29ya2VyKQorCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBk
YXRlKCdTdGFydGluZyAlcyAuLi4nICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ3JhbW1hci5wbHVyYWxpemUoJ3dvcmtlcicsIG51bV93b3JrZXJzKSkKKyAgICAgICAgZm9y
IHdvcmtlcl9udW1iZXIgaW4geHJhbmdlKG51bV93b3JrZXJzKToKKyAgICAgICAgICAgIHcgPSBt
YW5hZ2VyX2Nvbm5lY3Rpb24uc3RhcnRfd29ya2VyKHdvcmtlcl9udW1iZXIpCisgICAgICAgICAg
ICB3cyA9IF9Xb3JrZXJTdGF0ZSh3b3JrZXJfbnVtYmVyLCB3KQorICAgICAgICAgICAgc2VsZi5f
d29ya2Vyc1t3Lm5hbWVdID0gd3MKKworICAgICAgICAgICAgIyBXZSBzbGVlcCBhIGJpdCBpbiBi
ZXR3ZWVuIHdvcmtlcnMgdG8gZ2l2ZSB0aGUgcHJvY2Vzc2VzIGEgY2hhbmNlCisgICAgICAgICAg
ICAjIHRvIHN0YXJ0IHVwIHdpdGhvdXQgdGhyYXNoaW5nLgorICAgICAgICAgICAgdGltZS5zbGVl
cCgwLjEpCisKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF91cGRhdGUoIlN0YXJ0aW5nIHRl
c3RpbmcgLi4uIikKKyAgICAgICAgZm9yIHRlc3RfbGlzdCBpbiB0ZXN0X2xpc3RzOgorICAgICAg
ICAgICAgbWFuYWdlcl9jb25uZWN0aW9uLnBvc3RfbWVzc2FnZSgndGVzdF9saXN0JywgdGVzdF9s
aXN0WzBdLCB0ZXN0X2xpc3RbMV0pCisKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKG51bV93b3Jr
ZXJzKToKKyAgICAgICAgICAgIG1hbmFnZXJfY29ubmVjdGlvbi5wb3N0X21lc3NhZ2UoJ3N0b3An
KQorCisgICAgICAgIGtleWJvYXJkX2ludGVycnVwdGVkID0gRmFsc2UKKyAgICAgICAgaW50ZXJy
dXB0ZWQgPSBGYWxzZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fb3B0
aW9ucy5kcnlfcnVuOgorICAgICAgICAgICAgICAgIHdoaWxlIG5vdCBzZWxmLl9jaGVja19pZl9k
b25lKCk6CisgICAgICAgICAgICAgICAgICAgIG1hbmFnZXJfY29ubmVjdGlvbi5ydW5fbWVzc2Fn
ZV9sb29wKGRlbGF5X3NlY3M9MS4wKQorCisgICAgICAgICAgICAgICAgIyBNYWtlIHN1cmUgYWxs
IG9mIHRoZSB3b3JrZXJzIGhhdmUgc2h1dCBkb3duIChpZiBwb3NzaWJsZSkuCisgICAgICAgICAg
ICAgICAgZm9yIHcgaW4gc2VsZi5fd29ya2Vycy52YWx1ZXMoKToKKyAgICAgICAgICAgICAgICAg
ICAgaWYgbm90IHcud2VkZ2VkIGFuZCB3Lndvcmtlci5pc19hbGl2ZSgpOgorICAgICAgICAgICAg
ICAgICAgICAgICAgdy53b3JrZXIuam9pbigwLjUpCisgICAgICAgICAgICAgICAgICAgICAgICBh
c3NlcnQgbm90IHcud29ya2VyLmlzX2FsaXZlKCkKKyAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50
ZXJydXB0OgorICAgICAgICAgICAgX2xvZy5pbmZvKCJJbnRlcnJ1cHRlZCwgZXhpdGluZyIpCisg
ICAgICAgICAgICBmb3IgdyBpbiBzZWxmLl93b3JrZXJzLnZhbHVlcygpOgorICAgICAgICAgICAg
ICAgIHcud29ya2VyLmNhbmNlbCgpCisgICAgICAgICAgICBrZXlib2FyZF9pbnRlcnJ1cHRlZCA9
IFRydWUKKyAgICAgICAgZXhjZXB0IHRlc3RfcnVubmVyLlRlc3RSdW5JbnRlcnJ1cHRlZEV4Y2Vw
dGlvbiwgZToKKyAgICAgICAgICAgIF9sb2cuaW5mbyhlLnJlYXNvbikKKyAgICAgICAgICAgIG1h
bmFnZXJfY29ubmVjdGlvbi5jYW5jZWxfd29ya2VycygpCisgICAgICAgICAgICBpbnRlcnJ1cHRl
ZCA9IFRydWUKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgIyBVbmV4cGVjdGVkIGV4Y2Vw
dGlvbjsgZG9uJ3QgdHJ5IHRvIGNsZWFuIHVwIHdvcmtlcnMuCisgICAgICAgICAgICBfbG9nLmlu
Zm8oIkV4Y2VwdGlvbiByYWlzZWQsIGV4aXRpbmciKQorICAgICAgICAgICAgcmFpc2UKKworICAg
ICAgICB0aHJlYWRfdGltaW5ncyA9IFt3LnN0YXRzIGZvciB3IGluIHNlbGYuX3dvcmtlcnMudmFs
dWVzKCldCisgICAgICAgIHJldHVybiAoaW50ZXJydXB0ZWQsIGtleWJvYXJkX2ludGVycnVwdGVk
LCB0aHJlYWRfdGltaW5ncywKKyAgICAgICAgICAgICAgICBzZWxmLl9ncm91cF9zdGF0cywgc2Vs
Zi5fYWxsX3Jlc3VsdHMpCisKKyAgICBkZWYgX2NoZWNrX2lmX2RvbmUoc2VsZik6CisgICAgICAg
ICIiIlJldHVybnMgdHJ1ZSBpZmYgYWxsIHRoZSB3b3JrZXJzIGhhdmUgZWl0aGVyIGNvbXBsZXRl
ZCBvciB3ZWRnZWQuIiIiCisgICAgICAgIGRvbmUgPSBUcnVlCisgICAgICAgIHQgPSB0aW1lLnRp
bWUoKQorICAgICAgICBmb3IgdyBpbiBzZWxmLl93b3JrZXJzLnZhbHVlcygpOgorICAgICAgICAg
ICAgaWYgbm90IHcuZG9uZSBhbmQgbm90IHcud2VkZ2VkOgorICAgICAgICAgICAgICAgIG5leHRf
dGltZW91dCA9IHcubmV4dF90aW1lb3V0CisgICAgICAgICAgICAgICAgV0VER0VfUEFERElORyA9
IDQwLjAKKyAgICAgICAgICAgICAgICBpZiBuZXh0X3RpbWVvdXQgYW5kIHQgPiBuZXh0X3RpbWVv
dXQgKyBXRURHRV9QQURESU5HOgorICAgICAgICAgICAgICAgICAgICBfbG9nLmVycm9yKCcnKQor
ICAgICAgICAgICAgICAgICAgICB3Lndvcmtlci5sb2dfd2VkZ2VkX3dvcmtlcih3LmN1cnJlbnRf
dGVzdF9uYW1lKQorICAgICAgICAgICAgICAgICAgICBfbG9nLmVycm9yKCcnKQorICAgICAgICAg
ICAgICAgICAgICB3LndlZGdlZCA9IFRydWUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgICAgICAgICBkb25lID0gRmFsc2UKKworICAgICAgICBpZiBkb25lOgorICAgICAgICAg
ICAgaWYgYW55KFt3LndlZGdlZCBmb3IgdyBpbiBzZWxmLl93b3JrZXJzLnZhbHVlcygpXSk6Cisg
ICAgICAgICAgICAgICAgX2xvZy5lcnJvcignJykKKyAgICAgICAgICAgICAgICBfbG9nLmVycm9y
KCdSZW1haW5pbmcgd29ya2VycyBhcmUgd2VkZ2VkLCBiYWlsaW5nIG91dC4nKQorICAgICAgICAg
ICAgICAgIF9sb2cuZXJyb3IoJycpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg
IF9sb2cuZGVidWcoJ05vIHdlZGdlZCB0aHJlYWRzJykKKworICAgICAgICAjIEZJWE1FOiBpcyB0
aGUgZm9sbG93aW5nIGxpbmUgc2FmZT8KKyAgICAgICAgIyBzZWxmLl9kb25lID0gZG9uZQorICAg
ICAgICByZXR1cm4gZG9uZQorCisgICAgZGVmIGhhbmRsZV9zdGFydGVkX3Rlc3Qoc2VsZiwgc3Jj
LCB0ZXN0X2luZm8sIGhhbmdfdGltZW91dCk6CisgICAgICAgIHcgPSBzZWxmLl93b3JrZXJzW3Ny
Y10KKyAgICAgICAgdy5jdXJyZW50X3Rlc3RfbmFtZSA9IHNlbGYuX3BvcnQucmVsYXRpdmVfdGVz
dF9maWxlbmFtZSh0ZXN0X2luZm8uZmlsZW5hbWUpCisgICAgICAgIHcubmV4dF90aW1lb3V0ID0g
dGltZS50aW1lKCkgKyBoYW5nX3RpbWVvdXQKKworICAgIGRlZiBoYW5kbGVfZG9uZShzZWxmLCBz
cmMpOgorICAgICAgICB3ID0gc2VsZi5fd29ya2Vyc1tzcmNdCisgICAgICAgIHcuZG9uZSA9IFRy
dWUKKworICAgIGRlZiBoYW5kbGVfZXhjZXB0aW9uKHNlbGYsIHNyYywgZXhjZXB0aW9uX2luZm8p
OgorICAgICAgICByYWlzZSBleGNlcHRpb25faW5mbworCisgICAgZGVmIGhhbmRsZV9maW5pc2hl
ZF9saXN0KHNlbGYsIHNyYywgbGlzdF9uYW1lLCBudW1fdGVzdHMsIGVsYXBzZWRfdGltZSk6Cisg
ICAgICAgIHNlbGYuX2dyb3VwX3N0YXRzW2xpc3RfbmFtZV0gPSAobnVtX3Rlc3RzLCBlbGFwc2Vk
X3RpbWUpCisKKyAgICBkZWYgaGFuZGxlX2ZpbmlzaGVkX3Rlc3Qoc2VsZiwgc3JjLCByZXN1bHQs
IGVsYXBzZWRfdGltZSk6CisgICAgICAgIHcgPSBzZWxmLl93b3JrZXJzW3NyY10KKyAgICAgICAg
dy5uZXh0X3RpbWVvdXQgPSBOb25lCisgICAgICAgIHcuY3VycmVudF90ZXN0X25hbWUgPSBOb25l
CisKKyAgICAgICAgaWYgdy53ZWRnZWQ6CisgICAgICAgICAgICAjIEhtbS4gVGhpcyBzaG91bGRu
J3QgaGFwcGVuIGlmIHdlIGhhdmUgb3VyIHRpbWVvdXRzCisgICAgICAgICAgICAjIHR1bmVkIHBy
b3Blcmx5LgorICAgICAgICAgICAgX2xvZy5lcnJvcigiJXMgdW53ZWRnZWQiLCB3Lm5hbWUpCisK
KyAgICAgICAgc2VsZi5fYWxsX3Jlc3VsdHMuYXBwZW5kKHJlc3VsdCkKKyAgICAgICAgc2VsZi5f
dXBkYXRlX3dvcmtlcl9zdGF0cyhzcmMsIHJlc3VsdCwgZWxhcHNlZF90aW1lKQorICAgICAgICBz
ZWxmLl91cGRhdGVfc3VtbWFyeV93aXRoX3Jlc3VsdChzZWxmLl9jdXJyZW50X3Jlc3VsdF9zdW1t
YXJ5LCByZXN1bHQpCisKKyAgICBkZWYgX3VwZGF0ZV93b3JrZXJfc3RhdHMoc2VsZiwgc3JjLCBy
ZXN1bHQsIGVsYXBzZWRfdGltZSk6CisgICAgICAgIHNlbGYuX3dvcmtlcnNbc3JjXS5zdGF0c1sn
dG90YWxfdGltZSddICs9IGVsYXBzZWRfdGltZQorICAgICAgICBzZWxmLl93b3JrZXJzW3NyY10u
c3RhdHNbJ251bV90ZXN0cyddICs9IDEKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3dvcmtlci5weSBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3dvcmtlci5weQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5kZWFhZmZlYTY5OWQ1YmQ3MWY3NzJjMDZmYjA3YTdkODFjODQ4OTgzCi0tLSAvZGV2L251bGwK
KysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uv
d29ya2VyLnB5CkBAIC0wLDAgKzEsMTIyIEBACisjIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisj
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisj
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiSGFuZGxl
IG1lc3NhZ2VzIGZyb20gdGhlIFRlc3RSdW5uZXIgYW5kIGV4ZWN1dGUgYWN0dWFsIHRlc3RzLiIi
IgorCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHN5cworaW1wb3J0IHRpbWUKKworZnJvbSB3ZWJr
aXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBzdGFja191dGlscworCitmcm9tIHdlYmtpdHB5Lmxh
eW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQgbWFuYWdlcl93b3JrZXJfYnJva2VyCitm
cm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQgd29ya2VyX21p
eGluCisKKworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCisKK2NsYXNzIFdv
cmtlcihtYW5hZ2VyX3dvcmtlcl9icm9rZXIuQWJzdHJhY3RXb3JrZXIsIHdvcmtlcl9taXhpbi5X
b3JrZXJNaXhpbik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdvcmtlcl9jb25uZWN0aW9uLCB3
b3JrZXJfbnVtYmVyLCBvcHRpb25zKToKKyAgICAgICAgc2VsZi5fd29ya2VyX2Nvbm5lY3Rpb24g
PSB3b3JrZXJfY29ubmVjdGlvbgorICAgICAgICBzZWxmLl93b3JrZXJfbnVtYmVyID0gd29ya2Vy
X251bWJlcgorICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucworICAgICAgICBzZWxmLl9u
YW1lID0gJ3dvcmtlci8lZCcgJSB3b3JrZXJfbnVtYmVyCisgICAgICAgIHNlbGYuX2RvbmUgPSBG
YWxzZQorICAgICAgICBzZWxmLl9jYW5jZWxlZCA9IEZhbHNlCisgICAgICAgIHNlbGYuX3BvcnQg
PSBOb25lCisKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgc2VsZi5jbGVhbnVwKCkK
KworICAgIGRlZiBjYW5jZWwoc2VsZik6CisgICAgICAgICIiIkF0dGVtcHQgdG8gYWJvcnQgcHJv
Y2Vzc2luZyAoYmVzdCBlZmZvcnQpLiIiIgorICAgICAgICBzZWxmLl9jYW5jZWxlZCA9IFRydWUK
KworICAgIGRlZiBpc19kb25lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZG9uZSBvciBz
ZWxmLl9jYW5jZWxlZAorCisgICAgZGVmIG5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxm
Ll9uYW1lCisKKyAgICBkZWYgcnVuKHNlbGYsIHBvcnQpOgorICAgICAgICBzZWxmLmRlZmVycmVk
X2luaXQocG9ydCkKKworICAgICAgICBleGNlcHRpb25fbXNnID0gIiIKKyAgICAgICAgX2xvZy5k
ZWJ1ZygiJXMgc3RhcnRpbmciICUgc2VsZi5fbmFtZSkKKworICAgICAgICB0cnk6CisgICAgICAg
ICAgICBzZWxmLl93b3JrZXJfY29ubmVjdGlvbi5ydW5fbWVzc2FnZV9sb29wKCkKKyAgICAgICAg
ICAgIGlmIG5vdCBzZWxmLmlzX2RvbmUoKToKKyAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRp
b25FcnJvcigiJXM6IHJhbiBvdXQgb2YgbWVzc2FnZXMgaW4gd29ya2VyIHF1ZXVlLiIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIHNlbGYuX25hbWUpCisgICAgICAgIGV4
Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgIGV4Y2VwdGlvbl9tc2cgPSAiLCBp
bnRlcnJ1cHRlZCIKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgZXhjZXB0aW9uX21zZyA9
ICIsIGV4Y2VwdGlvbiByYWlzZWQiCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBfbG9n
LmRlYnVnKCIlcyBkb25lJXMiICUgKHNlbGYuX25hbWUsIGV4Y2VwdGlvbl9tc2cpKQorICAgICAg
ICAgICAgaWYgZXhjZXB0aW9uX21zZzoKKyAgICAgICAgICAgICAgICBleGNfaW5mbyA9IHN5cy5l
eGNfaW5mbygpCisgICAgICAgICAgICAgICAgc3RhY2tfdXRpbHMubG9nX3RyYWNlYmFjayhfbG9n
LmVycm9yLCBleGNfaW5mb1syXSkKKyAgICAgICAgICAgICAgICAjIEZJWE1FOiBGaWd1cmUgb3V0
IGhvdyB0byBzZW5kIGEgbWVzc2FnZSB3aXRoIGEgdHJhY2ViYWNrLgorICAgICAgICAgICAgICAg
IHNlbGYuX3dvcmtlcl9jb25uZWN0aW9uLnBvc3RfbWVzc2FnZSgnZXhjZXB0aW9uJywKKyAgICAg
ICAgICAgICAgICAgICAgKGV4Y19pbmZvWzBdLCBleGNfaW5mb1sxXSwgTm9uZSkpCisgICAgICAg
ICAgICBzZWxmLl93b3JrZXJfY29ubmVjdGlvbi5wb3N0X21lc3NhZ2UoJ2RvbmUnKQorCisgICAg
ZGVmIGhhbmRsZV90ZXN0X2xpc3Qoc2VsZiwgc3JjLCBsaXN0X25hbWUsIHRlc3RfbGlzdCk6Cisg
ICAgICAgIGlmIGxpc3RfbmFtZSA9PSAidGVzdHNfdG9faHR0cF9sb2NrIjoKKyAgICAgICAgICAg
IHNlbGYuc3RhcnRfc2VydmVyc193aXRoX2xvY2soKQorCisgICAgICAgIHN0YXJ0X3RpbWUgPSB0
aW1lLnRpbWUoKQorICAgICAgICBudW1fdGVzdHMgPSAwCisgICAgICAgIGZvciB0ZXN0X2lucHV0
IGluIHRlc3RfbGlzdDoKKyAgICAgICAgICAgIHNlbGYuX3J1bl90ZXN0KHRlc3RfaW5wdXQpCisg
ICAgICAgICAgICBudW1fdGVzdHMgKz0gMQorICAgICAgICAgICAgc2VsZi5fd29ya2VyX2Nvbm5l
Y3Rpb24ueWllbGRfdG9fYnJva2VyKCkKKworICAgICAgICBlbGFwc2VkX3RpbWUgPSB0aW1lLnRp
bWUoKSAtIHN0YXJ0X3RpbWUKKyAgICAgICAgc2VsZi5fd29ya2VyX2Nvbm5lY3Rpb24ucG9zdF9t
ZXNzYWdlKCdmaW5pc2hlZF9saXN0JywgbGlzdF9uYW1lLCBudW1fdGVzdHMsIGVsYXBzZWRfdGlt
ZSkKKworICAgICAgICBpZiBzZWxmLl9oYXNfaHR0cF9sb2NrOgorICAgICAgICAgICAgc2VsZi5z
dG9wX3NlcnZlcnNfd2l0aF9sb2NrKCkKKworICAgIGRlZiBoYW5kbGVfc3RvcChzZWxmLCBzcmMp
OgorICAgICAgICBzZWxmLl9kb25lID0gVHJ1ZQorCisgICAgZGVmIF9ydW5fdGVzdChzZWxmLCB0
ZXN0X2lucHV0KToKKyAgICAgICAgdGltZW91dCA9IHNlbGYudGltZW91dCh0ZXN0X2lucHV0KQor
ICAgICAgICBzdGFydCA9IHRpbWUudGltZSgpCisgICAgICAgIHNlbGYuX3dvcmtlcl9jb25uZWN0
aW9uLnBvc3RfbWVzc2FnZSgnc3RhcnRlZF90ZXN0JywgdGVzdF9pbnB1dCwgdGltZW91dCkKKwor
ICAgICAgICByZXN1bHQgPSBzZWxmLnJ1bl90ZXN0X3dpdGhfdGltZW91dCh0ZXN0X2lucHV0LCB0
aW1lb3V0KQorCisgICAgICAgIGVsYXBzZWRfdGltZSA9IHRpbWUudGltZSgpIC0gc3RhcnQKKyAg
ICAgICAgc2VsZi5fd29ya2VyX2Nvbm5lY3Rpb24ucG9zdF9tZXNzYWdlKCdmaW5pc2hlZF90ZXN0
JywgcmVzdWx0LCBlbGFwc2VkX3RpbWUpCisKKyAgICAgICAgc2VsZi5jbGVhbl91cF9hZnRlcl90
ZXN0KHRlc3RfaW5wdXQsIHJlc3VsdCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3dvcmtlcl9taXhpbi5weSBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3dvcmtlcl9taXhpbi5w
eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi44NmIyMGM2ODNjNzFhYjYwNmQ5YjZlZTBhOTMwNWI2ZTRiYzk0ZGEzCi0t
LSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5
b3V0X3BhY2thZ2Uvd29ya2VyX21peGluLnB5CkBAIC0wLDAgKzEsMjEyIEBACisjIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aHJlYWRpbmcKK2lt
cG9ydCB0aW1lCisKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnRlc3RfdHlwZXMgaW1wb3J0
IHRleHRfZGlmZgorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMudGVzdF90eXBlcyBpbXBvcnQg
aW1hZ2VfZGlmZgorCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBp
bXBvcnQgc2luZ2xlX3Rlc3RfcnVubmVyCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlv
dXRfcGFja2FnZSBpbXBvcnQgdGVzdF9yZXN1bHRzCisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dl
cihfX25hbWVfXykKKworCitjbGFzcyBXb3JrZXJNaXhpbihvYmplY3QpOgorICAgICIiIlRoaXMg
Y2xhc3MgaG9sZHMgbG9naWMgY29tbW9uIHRvIFdvcmtlciBhbmQgVGVzdFNoZWxsVGhyZWFkIHRo
YXQKKyAgICBkb2Vzbid0IGRpcmVjdGx5IGhhdmUgdG8gZG8gd2l0aCBydW5uaW5nIHRoZSB0ZXN0
cyAod2hpY2ggaXMKKyAgICBTaW5nbGVUZXN0UnVubmVyJ3MgcmVzcG9uc2liaWxpdHkuIFRoaXMg
Y2xhc3MgY2Fubm90IHN0YW5kIG9uIGl0cyBvd24uIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYp
OgorICAgICAgICBhc3NlcnQgRmFsc2UsICJXb3JrZXJNaXhpbiBjYW4ndCBiZSBkaXJlY3RseSBp
bnN0YW50aWF0ZWQiCisKKyAgICBkZWYgZGVmZXJyZWRfaW5pdChzZWxmLCBwb3J0KToKKyAgICAg
ICAgc2VsZi5fcG9ydCA9IHBvcnQKKyAgICAgICAgc2VsZi5fZmlsZXN5c3RlbSA9IHBvcnQuX2Zp
bGVzeXN0ZW0KKyAgICAgICAgc2VsZi5fYmF0Y2hfY291bnQgPSAwCisgICAgICAgIHNlbGYuX2Jh
dGNoX3NpemUgPSBzZWxmLl9vcHRpb25zLmJhdGNoX3NpemUKKyAgICAgICAgc2VsZi5fdGVzdF90
eXBlcyA9IFtdCisgICAgICAgIHNlbGYuX2RyaXZlciA9IE5vbmUKKyAgICAgICAgc2VsZi5faGFz
X2h0dHBfbG9jayA9IEZhbHNlCisgICAgICAgIGZvciBjbHMgaW4gc2VsZi5fZ2V0X3Rlc3RfdHlw
ZV9jbGFzc2VzKCk6CisgICAgICAgICAgICBzZWxmLl90ZXN0X3R5cGVzLmFwcGVuZChjbHMoc2Vs
Zi5fcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9v
cHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KSkKKyAgICAgICAgdGVzdHNfcnVuX2ZpbGVuYW1lID0g
c2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYuX29wdGlvbnMucmVzdWx0c19kaXJlY3RvcnksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdHNf
cnVuJWQudHh0IiAlIHNlbGYuX3dvcmtlcl9udW1iZXIpCisgICAgICAgIHNlbGYuX3Rlc3RzX3J1
bl9maWxlID0gc2VsZi5fZmlsZXN5c3RlbS5vcGVuX3RleHRfZmlsZV9mb3Jfd3JpdGluZyh0ZXN0
c19ydW5fZmlsZW5hbWUpCisKKyAgICBkZWYgX2dldF90ZXN0X3R5cGVfY2xhc3NlcyhzZWxmKToK
KyAgICAgICAgY2xhc3NlcyA9IFt0ZXh0X2RpZmYuVGVzdFRleHREaWZmXQorICAgICAgICBpZiBz
ZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RzOgorICAgICAgICAgICAgY2xhc3Nlcy5hcHBlbmQoaW1h
Z2VfZGlmZi5JbWFnZURpZmYpCisgICAgICAgIHJldHVybiBjbGFzc2VzCisKKyAgICBkZWYgY2xl
YW51cChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fZHJpdmVyOgorICAgICAgICAgICAgc2VsZi5r
aWxsX2RyaXZlcigpCisgICAgICAgIGlmIHNlbGYuX2hhc19odHRwX2xvY2s6CisgICAgICAgICAg
ICBzZWxmLnN0b3Bfc2VydmVyc193aXRoX2xvY2soKQorICAgICAgICBpZiBzZWxmLl90ZXN0c19y
dW5fZmlsZToKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9maWxlLmNsb3NlKCkKKyAgICAg
ICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9maWxlID0gTm9uZQorCisgICAgZGVmIHRpbWVvdXQoc2Vs
ZiwgdGVzdF9pbnB1dCk6CisgICAgICAgICIiIkNvbXB1dGUgdGhlIGFwcHJvcHJpYXRlIHRpbWVv
dXQgdmFsdWUgZm9yIGEgdGVzdC4iIiIKKyAgICAgICAgIyBUaGUgRHVtcFJlbmRlclRyZWUgd2F0
Y2hkb2cgdXNlcyAyLjV4IHRoZSB0aW1lb3V0OyB3ZSB3YW50IHRvIGJlCisgICAgICAgICMgbGFy
Z2VyIHRoYW4gdGhhdC4gV2UgYWxzbyBhZGQgYSBsaXR0bGUgbW9yZSBwYWRkaW5nIGlmIHdlJ3Jl
CisgICAgICAgICMgcnVubmluZyB0ZXN0cyBpbiBhIHNlcGFyYXRlIHRocmVhZC4KKyAgICAgICAg
IworICAgICAgICAjIE5vdGUgdGhhdCB3ZSBuZWVkIHRvIGNvbnZlcnQgdGhlIHRlc3QgdGltZW91
dCBmcm9tIGEKKyAgICAgICAgIyBzdHJpbmcgdmFsdWUgaW4gbWlsbGlzZWNvbmRzIHRvIGEgZmxv
YXQgZm9yIFB5dGhvbi4KKyAgICAgICAgZHJpdmVyX3RpbWVvdXRfc2VjID0gMy4wICogZmxvYXQo
dGVzdF9pbnB1dC50aW1lb3V0KSAvIDEwMDAuMAorICAgICAgICBpZiBub3Qgc2VsZi5fb3B0aW9u
cy5ydW5fc2luZ2x5OgorICAgICAgICAgICAgcmV0dXJuIGRyaXZlcl90aW1lb3V0X3NlYworCisg
ICAgICAgIHRocmVhZF9wYWRkaW5nX3NlYyA9IDEuMAorICAgICAgICB0aHJlYWRfdGltZW91dF9z
ZWMgPSBkcml2ZXJfdGltZW91dF9zZWMgKyB0aHJlYWRfcGFkZGluZ19zZWMKKyAgICAgICAgcmV0
dXJuIHRocmVhZF90aW1lb3V0X3NlYworCisgICAgZGVmIHN0YXJ0X3NlcnZlcnNfd2l0aF9sb2Nr
KHNlbGYpOgorICAgICAgICBfbG9nLmRlYnVnKCdBY3F1aXJpbmcgaHR0cCBsb2NrIC4uLicpCisg
ICAgICAgIHNlbGYuX3BvcnQuYWNxdWlyZV9odHRwX2xvY2soKQorICAgICAgICBfbG9nLmRlYnVn
KCdTdGFydGluZyBIVFRQIHNlcnZlciAuLi4nKQorICAgICAgICBzZWxmLl9wb3J0LnN0YXJ0X2h0
dHBfc2VydmVyKCkKKyAgICAgICAgX2xvZy5kZWJ1ZygnU3RhcnRpbmcgV2ViU29ja2V0IHNlcnZl
ciAuLi4nKQorICAgICAgICBzZWxmLl9wb3J0LnN0YXJ0X3dlYnNvY2tldF9zZXJ2ZXIoKQorICAg
ICAgICBzZWxmLl9oYXNfaHR0cF9sb2NrID0gVHJ1ZQorCisgICAgZGVmIHN0b3Bfc2VydmVyc193
aXRoX2xvY2soc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2hhc19odHRwX2xvY2s6CisgICAgICAg
ICAgICBfbG9nLmRlYnVnKCdTdG9wcGluZyBIVFRQIHNlcnZlciAuLi4nKQorICAgICAgICAgICAg
c2VsZi5fcG9ydC5zdG9wX2h0dHBfc2VydmVyKCkKKyAgICAgICAgICAgIF9sb2cuZGVidWcoJ1N0
b3BwaW5nIFdlYlNvY2tldCBzZXJ2ZXIgLi4uJykKKyAgICAgICAgICAgIHNlbGYuX3BvcnQuc3Rv
cF93ZWJzb2NrZXRfc2VydmVyKCkKKyAgICAgICAgICAgIF9sb2cuZGVidWcoJ1JlbGVhc2luZyBz
ZXJ2ZXIgbG9jayAuLi4nKQorICAgICAgICAgICAgc2VsZi5fcG9ydC5yZWxlYXNlX2h0dHBfbG9j
aygpCisgICAgICAgICAgICBzZWxmLmhhc19odHRwX2xvY2sgPSBGYWxzZQorCisgICAgZGVmIGtp
bGxfZHJpdmVyKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9kcml2ZXI6CisgICAgICAgICAgICBz
ZWxmLl9kcml2ZXIuc3RvcCgpCisgICAgICAgICAgICBzZWxmLl9kcml2ZXIgPSBOb25lCisKKyAg
ICBkZWYgcnVuX3Rlc3Rfd2l0aF90aW1lb3V0KHNlbGYsIHRlc3RfaW5wdXQsIHRpbWVvdXQpOgor
ICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnJ1bl9zaW5nbHk6CisgICAgICAgICAgICByZXR1cm4g
c2VsZi5fcnVuX3Rlc3RfaW5fYW5vdGhlcl90aHJlYWQodGVzdF9pbnB1dCwgdGltZW91dCkKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9ydW5fdGVzdF9pbl90aGlzX3Ro
cmVhZCh0ZXN0X2lucHV0KQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgY2xlYW5f
dXBfYWZ0ZXJfdGVzdChzZWxmLCB0ZXN0X2lucHV0LCByZXN1bHQpOgorICAgICAgICBzZWxmLl9i
YXRjaF9jb3VudCArPSAxCisgICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9maWxlLndyaXRlKHRlc3Rf
aW5wdXQuZmlsZW5hbWUgKyAiXG4iKQorICAgICAgICB0ZXN0X25hbWUgPSBzZWxmLl9wb3J0LnJl
bGF0aXZlX3Rlc3RfZmlsZW5hbWUodGVzdF9pbnB1dC5maWxlbmFtZSkKKworICAgICAgICBpZiBy
ZXN1bHQuZmFpbHVyZXM6CisgICAgICAgICAgICAjIENoZWNrIGFuZCBraWxsIER1bXBSZW5kZXJU
cmVlIGlmIHdlIG5lZWQgdG8uCisgICAgICAgICAgICBpZiBhbnkoW2Yuc2hvdWxkX2tpbGxfZHVt
cF9yZW5kZXJfdHJlZSgpIGZvciBmIGluIHJlc3VsdC5mYWlsdXJlc10pOgorICAgICAgICAgICAg
ICAgIHNlbGYua2lsbF9kcml2ZXIoKQorICAgICAgICAgICAgICAgICMgUmVzZXQgdGhlIGJhdGNo
IGNvdW50IHNpbmNlIHRoZSBzaGVsbCBqdXN0IGJvdW5jZWQuCisgICAgICAgICAgICAgICAgc2Vs
Zi5fYmF0Y2hfY291bnQgPSAwCisKKyAgICAgICAgICAgICMgUHJpbnQgdGhlIGVycm9yIG1lc3Nh
Z2UocykuCisgICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyAlcyBmYWlsZWQ6IiAlIChzZWxmLl9u
YW1lLCB0ZXN0X25hbWUpKQorICAgICAgICAgICAgZm9yIGYgaW4gcmVzdWx0LmZhaWx1cmVzOgor
ICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoIiVzICAlcyIgJSAoc2VsZi5fbmFtZSwgZi5tZXNz
YWdlKCkpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgX2xvZy5kZWJ1ZygiJXMgJXMgcGFz
c2VkIiAlIChzZWxmLl9uYW1lLCB0ZXN0X25hbWUpKQorCisgICAgICAgIGlmIHNlbGYuX2JhdGNo
X3NpemUgPiAwIGFuZCBzZWxmLl9iYXRjaF9jb3VudCA+PSBzZWxmLl9iYXRjaF9zaXplOgorICAg
ICAgICAgICAgIyBCb3VuY2UgdGhlIHNoZWxsIGFuZCByZXNldCBjb3VudC4KKyAgICAgICAgICAg
IHNlbGYua2lsbF9kcml2ZXIoKQorICAgICAgICAgICAgc2VsZi5fYmF0Y2hfY291bnQgPSAwCisK
KyAgICBkZWYgX3J1bl90ZXN0X2luX2Fub3RoZXJfdGhyZWFkKHNlbGYsIHRlc3RfaW5wdXQsIHRo
cmVhZF90aW1lb3V0X3NlYyk6CisgICAgICAgICIiIlJ1biBhIHRlc3QgaW4gYSBzZXBhcmF0ZSB0
aHJlYWQsIGVuZm9yY2luZyBhIGhhcmQgdGltZSBsaW1pdC4KKworICAgICAgICBTaW5jZSB3ZSBj
YW4gb25seSBkZXRlY3QgdGhlIHRlcm1pbmF0aW9uIG9mIGEgdGhyZWFkLCBub3QgYW55IGludGVy
bmFsCisgICAgICAgIHN0YXRlIG9yIHByb2dyZXNzLCB3ZSBjYW4gb25seSBydW4gcGVyLXRlc3Qg
dGltZW91dHMgd2hlbiBydW5uaW5nIHRlc3QKKyAgICAgICAgZmlsZXMgc2luZ2x5LgorCisgICAg
ICAgIEFyZ3M6CisgICAgICAgICAgdGVzdF9pbnB1dDogT2JqZWN0IGNvbnRhaW5pbmcgdGhlIHRl
c3QgZmlsZW5hbWUgYW5kIHRpbWVvdXQKKyAgICAgICAgICB0aHJlYWRfdGltZW91dF9zZWM6IHRp
bWUgdG8gd2FpdCBiZWZvcmUga2lsbGluZyB0aGUgZHJpdmVyIHByb2Nlc3MuCisgICAgICAgIFJl
dHVybnM6CisgICAgICAgICAgQSBUZXN0UmVzdWx0CisgICAgICAgICIiIgorICAgICAgICB3b3Jr
ZXIgPSBzZWxmCisgICAgICAgIHJlc3VsdCA9IE5vbmUKKworICAgICAgICBkcml2ZXIgPSB3b3Jr
ZXIuX3BvcnQuY3JlYXRlX2RyaXZlcih3b3JrZXIuX3dvcmtlcl9udW1iZXIpCisgICAgICAgIGRy
aXZlci5zdGFydCgpCisKKyAgICAgICAgY2xhc3MgU2luZ2xlVGVzdFRocmVhZCh0aHJlYWRpbmcu
VGhyZWFkKToKKyAgICAgICAgICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgICAgICAgICAgcmVz
dWx0ID0gd29ya2VyLl9ydW5fc2luZ2xlX3Rlc3QoZHJpdmVyLCB0ZXN0X2lucHV0KQorCisgICAg
ICAgIHRocmVhZCA9IFNpbmdsZVRlc3RUaHJlYWQoKQorICAgICAgICB0aHJlYWQuc3RhcnQoKQor
ICAgICAgICB0aHJlYWQuam9pbih0aHJlYWRfdGltZW91dF9zZWMpCisgICAgICAgIGlmIHRocmVh
ZC5pc0FsaXZlKCk6CisgICAgICAgICAgICAjIElmIGpvaW4oKSByZXR1cm5lZCB3aXRoIHRoZSB0
aHJlYWQgc3RpbGwgcnVubmluZywgdGhlCisgICAgICAgICAgICAjIER1bXBSZW5kZXJUcmVlIGlz
IGNvbXBsZXRlbHkgaHVuZyBhbmQgdGhlcmUncyBub3RoaW5nCisgICAgICAgICAgICAjIG1vcmUg
d2UgY2FuIGRvIHdpdGggaXQuICBXZSBoYXZlIHRvIGtpbGwgYWxsIHRoZQorICAgICAgICAgICAg
IyBEdW1wUmVuZGVyVHJlZXMgdG8gZnJlZSBpdCB1cC4gSWYgd2UncmUgcnVubmluZyBtb3JlIHRo
YW4KKyAgICAgICAgICAgICMgb25lIER1bXBSZW5kZXJUcmVlIHRocmVhZCwgd2UnbGwgZW5kIHVw
IGtpbGxpbmcgdGhlIG90aGVyCisgICAgICAgICAgICAjIER1bXBSZW5kZXJUcmVlcyB0b28sIGlu
dHJvZHVjaW5nIHNwdXJpb3VzIGNyYXNoZXMuIFdlIGFjY2VwdAorICAgICAgICAgICAgIyB0aGF0
IHRyYWRlb2ZmIGluIG9yZGVyIHRvIGF2b2lkIGxvc2luZyB0aGUgcmVzdCBvZiB0aGlzCisgICAg
ICAgICAgICAjIHRocmVhZCdzIHJlc3VsdHMuCisgICAgICAgICAgICBfbG9nLmVycm9yKCdUZXN0
IHRocmVhZCBodW5nOiBraWxsaW5nIGFsbCBEdW1wUmVuZGVyVHJlZXMnKQorCisgICAgICAgIGRy
aXZlci5zdG9wKCkKKworICAgICAgICBpZiBub3QgcmVzdWx0OgorICAgICAgICAgICAgcmVzdWx0
ID0gdGVzdF9yZXN1bHRzLlRlc3RSZXN1bHQodGVzdF9pbnB1dC5maWxlbmFtZSwgZmFpbHVyZXM9
W10sCisgICAgICAgICAgICAgICAgdGVzdF9ydW5fdGltZT0wLCB0b3RhbF90aW1lX2Zvcl9hbGxf
ZGlmZnM9MCwgdGltZV9mb3JfZGlmZnM9e30pCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAg
IGRlZiBfcnVuX3Rlc3RfaW5fdGhpc190aHJlYWQoc2VsZiwgdGVzdF9pbnB1dCk6CisgICAgICAg
ICIiIlJ1biBhIHNpbmdsZSB0ZXN0IGZpbGUgdXNpbmcgYSBzaGFyZWQgRHVtcFJlbmRlclRyZWUg
cHJvY2Vzcy4KKworICAgICAgICBBcmdzOgorICAgICAgICAgIHRlc3RfaW5wdXQ6IE9iamVjdCBj
b250YWluaW5nIHRoZSB0ZXN0IGZpbGVuYW1lLCB1cmkgYW5kIHRpbWVvdXQKKworICAgICAgICBS
ZXR1cm5zOiBhIFRlc3RSZXN1bHQgb2JqZWN0LgorICAgICAgICAiIiIKKyAgICAgICAgIyBwb2xs
KCkgaXMgbm90IHRocmVhZHNhZmUgYW5kIGNhbiB0aHJvdyBPU0Vycm9yIGR1ZSB0bzoKKyAgICAg
ICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTczMTcxNworICAgICAgICBpZiBub3Qg
c2VsZi5fZHJpdmVyIG9yIHNlbGYuX2RyaXZlci5wb2xsKCkgaXMgbm90IE5vbmU6CisgICAgICAg
ICAgICBzZWxmLl9kcml2ZXIgPSBzZWxmLl9wb3J0LmNyZWF0ZV9kcml2ZXIoc2VsZi5fd29ya2Vy
X251bWJlcikKKyAgICAgICAgICAgIHNlbGYuX2RyaXZlci5zdGFydCgpCisgICAgICAgIHJldHVy
biBzZWxmLl9ydW5fc2luZ2xlX3Rlc3Qoc2VsZi5fZHJpdmVyLCB0ZXN0X2lucHV0KQorCisgICAg
ZGVmIF9ydW5fc2luZ2xlX3Rlc3Qoc2VsZiwgZHJpdmVyLCB0ZXN0X2lucHV0KToKKyAgICAgICAg
cmV0dXJuIHNpbmdsZV90ZXN0X3J1bm5lci5ydW5fc2luZ2xlX3Rlc3Qoc2VsZi5fcG9ydCwgc2Vs
Zi5fb3B0aW9ucywKKyAgICAgICAgICAgIHRlc3RfaW5wdXQsIGRyaXZlciwgc2VsZi5fbmFtZSwg
c2VsZi5fdGVzdF90eXBlcykKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3BvcnQvYmFzZS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvYmFzZS5weQppbmRleCBlM2Q1ZjhlOWE0NThmMTlkMTkzMDY2ODExMzcxMDljOGRj
ZTc0ZmZlLi45Nzc5OTFjZGNlYTc1OTA0ODYxNzhiYThkMDYwODVmOTU5MTM1YWY1IDEwMDY0NAot
LS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkKKysr
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CkBAIC00
NzMsNiArNDczLDEwIEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAgICAgICAgKCdjcHUnKS4iIiIK
ICAgICAgICAgcmV0dXJuICdjcHUnCiAKKyAgICBkZWYgcmVhbF9uYW1lKHNlbGYpOgorICAgICAg
ICAiIiJSZXR1cm5zIHRoZSBhY3R1YWwgbmFtZSBvZiB0aGUgcG9ydCwgbm90IHRoZSBkZWxlZ2F0
ZSdzLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5uYW1lKCkKKwogICAgIGRlZiBnZXRfb3B0aW9u
KHNlbGYsIG5hbWUsIGRlZmF1bHRfdmFsdWU9Tm9uZSk6CiAgICAgICAgICMgRklYTUU6IEV2ZW50
dWFsbHkgd2Ugc2hvdWxkIG5vdCBoYXZlIHRvIGRvIGEgdGVzdCBmb3IKICAgICAgICAgIyBoYXNh
dHRyKCksIGFuZCB3ZSBzaG91bGQgYmUgYWJsZSB0byBqdXN0IGRvCmRpZmYgLS1naXQgYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21vY2tfZHJ0LnB5IGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tb2NrX2RydC5weQppbmRleCAzNzAz
MjdmYjAxYjU4M2MwZGQwMjU4N2U2NDNkOTc4YjE4NGViMDFlLi4xMTQ3ODQ2ZDYwOTUwODQ0YjU1
M2MwZWYwMzcwMTJjZGFjNjFmNDhkIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L21vY2tfZHJ0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbW9ja19kcnQucHkKQEAgLTUzLDYgKzUzLDEwIEBAIGNsYXNz
IE1vY2tEUlRQb3J0KG9iamVjdCk6CiAgICAgICAgIGlmICdwb3J0X25hbWUnIGluIGt3YXJnczoK
ICAgICAgICAgICAgIGt3YXJnc1sncG9ydF9uYW1lJ10gPSBrd2FyZ3NbJ3BvcnRfbmFtZSddW2xl
bihwcmVmaXgpOl0KICAgICAgICAgc2VsZi5fX2RlbGVnYXRlID0gZmFjdG9yeS5nZXQoKiprd2Fy
Z3MpCisgICAgICAgIHNlbGYuX19yZWFsX25hbWUgPSBwcmVmaXggKyBzZWxmLl9fZGVsZWdhdGUu
bmFtZSgpCisKKyAgICBkZWYgcmVhbF9uYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5f
X3JlYWxfbmFtZQogCiAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgogICAgICAgICBy
ZXR1cm4gZ2V0YXR0cihzZWxmLl9fZGVsZWdhdGUsIG5hbWUpCkBAIC0yNzEsNyArMjc1LDYgQEAg
Y2xhc3MgTW9ja0Nocm9taXVtRFJUKE1vY2tEUlQpOgogICAgICAgICBzZWxmLl9zdGRvdXQuZmx1
c2goKQogCiAKLQogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICBmcyA9IGZpbGVzeXN0
ZW0uRmlsZVN5c3RlbSgpCiAgICAgc3lzLmV4aXQobWFpbihzeXMuYXJndlsxOl0sIGZzLCBzeXMu
c3RkaW4sIHN5cy5zdGRvdXQsIHN5cy5zdGRlcnIpKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weSBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRl
c3QucHkKaW5kZXggZjRlNTM1MGU2Zjg1MzNiZjM4OTNjNDE1ODI5ZTI5YWJkMzY4ZTQ1NS4uODRm
NTcxODI1NjBkZDEyYmE5OTI5OGRhZWFiYmE3ODEwOTQ5NWRlOCAxMDA2NDQKLS0tIGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5w
eQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rl
c3RzX3VuaXR0ZXN0LnB5CkBAIC00NjcsNyArNDY3LDggQEAgY2xhc3MgTWFpblRlc3QodW5pdHRl
c3QuVGVzdENhc2UpOgogICAgICAgICBzZWxmLmFzc2VydFRydWUocGFzc2luZ19ydW4oWyctLXdv
cmtlci1tb2RlbCcsICdvbGQtdGhyZWFkcyddKSkKIAogICAgIGRlZiB0ZXN0X3dvcmtlcl9tb2Rl
bF9fcHJvY2Vzc2VzKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9y
LCBsb2dnaW5nX3J1biwgWyctLXdvcmtlci1tb2RlbCcsICdwcm9jZXNzZXMnXSkKKyAgICAgICAg
aWYgY29tcGFyZV92ZXJzaW9uKHN5cywgJzIuNicpWzBdID49IDA6CisgICAgICAgICAgICBzZWxm
LmFzc2VydFRydWUocGFzc2luZ19ydW4oWyctLXdvcmtlci1tb2RlbCcsICdwcm9jZXNzZXMnXSkp
CiAKICAgICBkZWYgdGVzdF93b3JrZXJfbW9kZWxfX3RocmVhZHMoc2VsZik6CiAgICAgICAgIHNl
bGYuYXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bihbJy0td29ya2VyLW1vZGVsJywgJ3RocmVhZHMnXSkp
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81898</attachid>
            <date>2011-02-09 17:17:23 -0800</date>
            <delta_ts>2011-02-11 18:55:31 -0800</delta_ts>
            <desc>attachment 81733 rebased to r78159</desc>
            <filename>bug-49566-20110209171722.patch</filename>
            <type>text/plain</type>
            <size>58193</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzgxNTkKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCAyNTYxNjE1Y2VjN2Y5NmZjNDI1MThkYTg0NTY5ZWJiZjg3
MDRhNTVmLi41ZDg5Y2M1MzA2ZDgzOTliMWE3NGI3NzQyMzE3NmRmOTQxNWEyMmU4IDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMjMg
QEAKIDIwMTEtMDItMDkgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CiAKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgdHJhY2tpbmcgYnVn
IGZvciBhbGwgb2YgdGhlIG11bHRpcHJvY2VzcyBOUldUIGlzc3VlcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDk1NjYKKworICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVf
dGhyZWFkLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL21hbmFnZXJfd29ya2VyX2Jyb2tlci5weToKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyX3dvcmtlcl9icm9rZXJf
dW5pdHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5
b3V0X3BhY2thZ2Uvc2luZ2xlX3Rlc3RfcnVubmVyLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfcnVubmVyMi5weToKKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS93b3JrZXIu
cHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL3dvcmtlcl9taXhpbi5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbW9ja19kcnQucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weToKKworMjAxMS0w
Mi0wOSAgRGlyayBQcmFua2UgIDxkcHJhbmtlQGNocm9taXVtLm9yZz4KKwogICAgICAgICBSZXZp
ZXdlZCBieSBUb255IENoYW5nLgogCiAgICAgICAgIG5yd3QgbXVsdGlwcm9jZXNzaW5nOiBtaW5v
ciBjbGVhbnVwIHByaW9yIHRvIGltcGxlbWVudGluZyB0aGUgbmV3IHdvcmtlcgpkaWZmIC0tZ2l0
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVt
cF9yZW5kZXJfdHJlZV90aHJlYWQucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9sYXlvdXRfcGFja2FnZS9kdW1wX3JlbmRlcl90cmVlX3RocmVhZC5weQppbmRleCA3ZGRk
N2IwZjlhYzE4YmE0ODA1YzhkNDA5MThlZGFhNzgzYmQ4ODE1Li4wNGRkMTE4MTIxNzAxMDMzMDIw
MjhiMGM4YjhjMGViODY1ZWQyZWY3IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9kdW1wX3JlbmRlcl90cmVlX3RocmVhZC5weQor
KysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9k
dW1wX3JlbmRlcl90cmVlX3RocmVhZC5weQpAQCAtNDAsMTMgKzQwLDEzIEBAIGltcG9ydCB0aHJl
YWQKIGltcG9ydCB0aHJlYWRpbmcKIGltcG9ydCB0aW1lCiAKLWZyb20gd2Via2l0cHkubGF5b3V0
X3Rlc3RzLmxheW91dF9wYWNrYWdlLnNpbmdsZV90ZXN0X3J1bm5lciBpbXBvcnQgU2luZ2xlVGVz
dFJ1bm5lcgorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0
IHdvcmtlcl9taXhpbgogCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoIndlYmtpdHB5LmxheW91
dF90ZXN0cy5sYXlvdXRfcGFja2FnZS4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgImR1bXBf
cmVuZGVyX3RyZWVfdGhyZWFkIikKIAogCi1jbGFzcyBUZXN0U2hlbGxUaHJlYWQodGhyZWFkaW5n
LlRocmVhZCk6CitjbGFzcyBUZXN0U2hlbGxUaHJlYWQodGhyZWFkaW5nLlRocmVhZCwgd29ya2Vy
X21peGluLldvcmtlck1peGluKToKICAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9u
cywgd29ya2VyX251bWJlciwgd29ya2VyX25hbWUsCiAgICAgICAgICAgICAgICAgIGZpbGVuYW1l
X2xpc3RfcXVldWUsIHJlc3VsdF9xdWV1ZSk6CiAgICAgICAgICIiIkluaXRpYWxpemUgYWxsIHRo
ZSBsb2NhbCBzdGF0ZSBmb3IgdGhpcyBEdW1wUmVuZGVyVHJlZSB0aHJlYWQuCkBAIC04MSw2ICs4
MSw3IEBAIGNsYXNzIFRlc3RTaGVsbFRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKICAgICAgICAg
c2VsZi5fc3RvcF90aW1lID0gMAogICAgICAgICBzZWxmLl9odHRwX2xvY2tfd2FpdF9iZWdpbiA9
IDAKICAgICAgICAgc2VsZi5faHR0cF9sb2NrX3dhaXRfZW5kID0gMAorICAgICAgICBzZWxmLmRl
ZmVycmVkX2luaXQocG9ydCkKIAogICAgIGRlZiBjYW5jZWwoc2VsZik6CiAgICAgICAgICIiIlNl
dCBhIGZsYWcgdGVsbGluZyB0aGlzIHRocmVhZCB0byBxdWl0LiIiIgpAQCAtMTc1LDIzICsxNzYs
MTAgQEAgY2xhc3MgVGVzdFNoZWxsVGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgogCiAgICAgICAg
IElmIHRlc3RfcnVubmVyIGlzIG5vdCBOb25lLCB0aGVuIHdlIGNhbGwgdGVzdF9ydW5uZXIuVXBk
YXRlU3VtbWFyeSgpCiAgICAgICAgIHdpdGggdGhlIHJlc3VsdHMgb2YgZWFjaCB0ZXN0LiIiIgot
ICAgICAgICBzaW5nbGVfdGVzdF9ydW5uZXIgPSBTaW5nbGVUZXN0UnVubmVyKHNlbGYuX29wdGlv
bnMsIHNlbGYuX3BvcnQsCi0gICAgICAgICAgICBzZWxmLl9uYW1lLCBzZWxmLl93b3JrZXJfbnVt
YmVyKQotCi0gICAgICAgIGJhdGNoX3NpemUgPSBzZWxmLl9vcHRpb25zLmJhdGNoX3NpemUKLSAg
ICAgICAgYmF0Y2hfY291bnQgPSAwCi0KLSAgICAgICAgIyBBcHBlbmQgdGVzdHMgd2UncmUgcnVu
bmluZyB0byB0aGUgZXhpc3RpbmcgdGVzdHNfcnVuLnR4dCBmaWxlLgotICAgICAgICAjIFRoaXMg
aXMgY3JlYXRlZCBpbiBydW5fd2Via2l0X3Rlc3RzLnB5Ol9QcmVwYXJlTGlzdHNBbmRQcmludE91
dHB1dC4KLSAgICAgICAgdGVzdHNfcnVuX2ZpbGVuYW1lID0gc2VsZi5fcG9ydC5fZmlsZXN5c3Rl
bS5qb2luKHNlbGYuX29wdGlvbnMucmVzdWx0c19kaXJlY3RvcnksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdHNfcnVuJWQudHh0
IiAlIHNlbGYuX3dvcmtlcl9udW1iZXIpCi0gICAgICAgIHRlc3RzX3J1bl9maWxlID0gc2VsZi5f
cG9ydC5fZmlsZXN5c3RlbS5vcGVuX3RleHRfZmlsZV9mb3Jfd3JpdGluZyh0ZXN0c19ydW5fZmls
ZW5hbWUsIGFwcGVuZD1GYWxzZSkKLQogICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAg
aWYgc2VsZi5fY2FuY2VsZWQ6CiAgICAgICAgICAgICAgICAgX2xvZy5kZWJ1ZygnVGVzdGluZyBj
YW5jZWxsZWQnKQotICAgICAgICAgICAgICAgIHRlc3RzX3J1bl9maWxlLmNsb3NlKCkKLSAgICAg
ICAgICAgICAgICBzaW5nbGVfdGVzdF9ydW5uZXIuY2xlYW51cCgpCisgICAgICAgICAgICAgICAg
c2VsZi5jbGVhbnVwKCkKICAgICAgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICAgICAgaWYg
bGVuKHNlbGYuX2ZpbGVuYW1lX2xpc3QpIGlzIDA6CkBAIC0yMDQsMTYgKzE5MiwxNSBAQCBjbGFz
cyBUZXN0U2hlbGxUaHJlYWQodGhyZWFkaW5nLlRocmVhZCk6CiAgICAgICAgICAgICAgICAgICAg
IHNlbGYuX2N1cnJlbnRfZ3JvdXAsIHNlbGYuX2ZpbGVuYW1lX2xpc3QgPSBcCiAgICAgICAgICAg
ICAgICAgICAgICAgICBzZWxmLl9maWxlbmFtZV9saXN0X3F1ZXVlLmdldF9ub3dhaXQoKQogICAg
ICAgICAgICAgICAgIGV4Y2VwdCBRdWV1ZS5FbXB0eToKLSAgICAgICAgICAgICAgICAgICAgdGVz
dHNfcnVuX2ZpbGUuY2xvc2UoKQotICAgICAgICAgICAgICAgICAgICBzaW5nbGVfdGVzdF9ydW5u
ZXIuY2xlYW51cCgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuY2xlYW51cCgpCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybgogCiAgICAgICAgICAgICAgICAgaWYgc2VsZi5fY3VycmVudF9n
cm91cCA9PSAidGVzdHNfdG9faHR0cF9sb2NrIjoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5f
aHR0cF9sb2NrX3dhaXRfYmVnaW4gPSB0aW1lLnRpbWUoKQotICAgICAgICAgICAgICAgICAgICBz
aW5nbGVfdGVzdF9ydW5uZXIuc3RhcnRfc2VydmVyc193aXRoX2xvY2soKQorICAgICAgICAgICAg
ICAgICAgICBzZWxmLnN0YXJ0X3NlcnZlcnNfd2l0aF9sb2NrKCkKICAgICAgICAgICAgICAgICAg
ICAgc2VsZi5faHR0cF9sb2NrX3dhaXRfZW5kID0gdGltZS50aW1lKCkKLSAgICAgICAgICAgICAg
ICBlbGlmIHNpbmdsZV90ZXN0X3J1bm5lci5oYXNfaHR0cF9sb2NrOgotICAgICAgICAgICAgICAg
ICAgICBzaW5nbGVfdGVzdF9ydW5uZXIuc3RvcF9zZXJ2ZXJzX3dpdGhfbG9jaygpCisgICAgICAg
ICAgICAgICAgZWxpZiBzZWxmLl9oYXNfaHR0cF9sb2NrOgorICAgICAgICAgICAgICAgICAgICBz
ZWxmLnN0b3Bfc2VydmVyc193aXRoX2xvY2soKQogCiAgICAgICAgICAgICAgICAgc2VsZi5fbnVt
X3Rlc3RzX2luX2N1cnJlbnRfZ3JvdXAgPSBsZW4oc2VsZi5fZmlsZW5hbWVfbGlzdCkKICAgICAg
ICAgICAgICAgICBzZWxmLl9jdXJyZW50X2dyb3VwX3N0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQpA
QCAtMjIxLDMzICsyMDgsMTMgQEAgY2xhc3MgVGVzdFNoZWxsVGhyZWFkKHRocmVhZGluZy5UaHJl
YWQpOgogICAgICAgICAgICAgdGVzdF9pbnB1dCA9IHNlbGYuX2ZpbGVuYW1lX2xpc3QucG9wKCkK
IAogICAgICAgICAgICAgIyBXZSBoYXZlIGEgdXJsLCBydW4gdGVzdHMuCi0gICAgICAgICAgICBi
YXRjaF9jb3VudCArPSAxCiAgICAgICAgICAgICBzZWxmLl9udW1fdGVzdHMgKz0gMQogCi0gICAg
ICAgICAgICB0aW1lb3V0ID0gc2luZ2xlX3Rlc3RfcnVubmVyLnRpbWVvdXQodGVzdF9pbnB1dCkK
LSAgICAgICAgICAgIHJlc3VsdCA9IHNpbmdsZV90ZXN0X3J1bm5lci5ydW5fdGVzdCh0ZXN0X2lu
cHV0LCB0aW1lb3V0KQotCi0gICAgICAgICAgICB0ZXN0c19ydW5fZmlsZS53cml0ZSh0ZXN0X2lu
cHV0LmZpbGVuYW1lICsgIlxuIikKLSAgICAgICAgICAgIHRlc3RfbmFtZSA9IHNlbGYuX3BvcnQu
cmVsYXRpdmVfdGVzdF9maWxlbmFtZSh0ZXN0X2lucHV0LmZpbGVuYW1lKQotICAgICAgICAgICAg
aWYgcmVzdWx0LmZhaWx1cmVzOgotICAgICAgICAgICAgICAgICMgQ2hlY2sgYW5kIGtpbGwgRHVt
cFJlbmRlclRyZWUgaWYgd2UgbmVlZCB0by4KLSAgICAgICAgICAgICAgICBpZiBhbnkoW2Yuc2hv
dWxkX2tpbGxfZHVtcF9yZW5kZXJfdHJlZSgpIGZvciBmIGluIHJlc3VsdC5mYWlsdXJlc10pOgot
ICAgICAgICAgICAgICAgICAgICBzaW5nbGVfdGVzdF9ydW5uZXIua2lsbF9kdW1wX3JlbmRlcl90
cmVlKCkKLSAgICAgICAgICAgICAgICAgICAgIyBSZXNldCB0aGUgYmF0Y2ggY291bnQgc2luY2Ug
dGhlIHNoZWxsIGp1c3QgYm91bmNlZC4KLSAgICAgICAgICAgICAgICAgICAgYmF0Y2hfY291bnQg
PSAwCi0KLSAgICAgICAgICAgICAgICAjIFByaW50IHRoZSBlcnJvciBtZXNzYWdlKHMpLgotICAg
ICAgICAgICAgICAgIF9sb2cuZGVidWcoIiVzICVzIGZhaWxlZDoiICUgKHNlbGYuX25hbWUsIHRl
c3RfbmFtZSkpCi0gICAgICAgICAgICAgICAgZm9yIGYgaW4gcmVzdWx0LmZhaWx1cmVzOgotICAg
ICAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyAgJXMiICUgKHNlbGYuX25hbWUsIGYubWVz
c2FnZSgpKSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgX2xvZy5kZWJ1Zygi
JXMgJXMgcGFzc2VkIiAlIChzZWxmLl9uYW1lLCB0ZXN0X25hbWUpKQotICAgICAgICAgICAgc2Vs
Zi5fcmVzdWx0X3F1ZXVlLnB1dChyZXN1bHQuZHVtcHMoKSkKKyAgICAgICAgICAgIHJlc3VsdCA9
IHNlbGYucnVuX3Rlc3Rfd2l0aF90aW1lb3V0KHRlc3RfaW5wdXQsIHNlbGYudGltZW91dCh0ZXN0
X2lucHV0KSkKIAotICAgICAgICAgICAgaWYgYmF0Y2hfc2l6ZSA+IDAgYW5kIGJhdGNoX2NvdW50
ID49IGJhdGNoX3NpemU6Ci0gICAgICAgICAgICAgICAgIyBCb3VuY2UgdGhlIHNoZWxsIGFuZCBy
ZXNldCBjb3VudC4KLSAgICAgICAgICAgICAgICBzaW5nbGVfdGVzdF9ydW5uZXIua2lsbF9kdW1w
X3JlbmRlcl90cmVlKCkKLSAgICAgICAgICAgICAgICBiYXRjaF9jb3VudCA9IDAKKyAgICAgICAg
ICAgIHNlbGYuY2xlYW5fdXBfYWZ0ZXJfdGVzdCh0ZXN0X2lucHV0LCByZXN1bHQpCisgICAgICAg
ICAgICBzZWxmLl90ZXN0X3Jlc3VsdHMuYXBwZW5kKHJlc3VsdCkKKyAgICAgICAgICAgIHNlbGYu
X3Jlc3VsdF9xdWV1ZS5wdXQocmVzdWx0LmR1bXBzKCkpCiAKICAgICAgICAgICAgIGlmIHRlc3Rf
cnVubmVyOgogICAgICAgICAgICAgICAgIHRlc3RfcnVubmVyLnVwZGF0ZV9zdW1tYXJ5KHJlc3Vs
dF9zdW1tYXJ5KQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlcl93b3JrZXJfYnJva2VyLnB5IGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlcl93b3JrZXJfYnJv
a2VyLnB5CmluZGV4IDlmYWVjNmU2NTE0NTYxMmZmMWVlOWRkOTJkYzMyOWRmMjc2YWM0MTQuLmJi
OGM3NWM3NTBjNzg3Y2MyMWIxMTczZDQ2YjY1ZThhNzMxNTMzYzAgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21hbmFnZXJfd29y
a2VyX2Jyb2tlci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9s
YXlvdXRfcGFja2FnZS9tYW5hZ2VyX3dvcmtlcl9icm9rZXIucHkKQEAgLTI4LDMyICsyOCwzNSBA
QAogCiAiIiJNb2R1bGUgZm9yIGhhbmRsaW5nIG1lc3NhZ2VzIGFuZCBjb25jdXJyZW5jeSBmb3Ig
cnVuLXdlYmtpdC10ZXN0cy4KIAotVGhpcyBtb2R1bGUgYnVpbGRzIG9uIHRoZSBmdW5jdGlvbmFs
aXR5IG9mIG1lc3NhZ2VfYnJva2VyMiB0byBwcm92aWRlCi1hIHNpbXBsZSBtZXNzYWdlIGJyb2tl
ciBmb3IgYSBtYW5hZ2VyIHNlbmRpbmcgbWVzc2FnZXMgdG8gKGFuZCBnZXR0aW5nCi1yZXBsaWVz
IGZyb20pIGEgcG9vbCBvZiB3b3JrZXJzLiBJbiBhZGRpdGlvbiBpdCBwcm92aWRlcyBhIGNob2lj
ZSBvZgotY29uY3VycmVuY3kgbW9kZWxzIGZvciBjYWxsZXJzIHRvIGNob29zZSBmcm9tIChzaW5n
bGUtdGhyZWFkZWQgaW5saW5lCi1tb2RlbCwgdGhyZWFkcywgb3IgcHJvY2Vzc2VzKS4KLQotRklY
TUU6IEF0IHRoZSBtb21lbnQsIHRoaXMgbW9kdWxlIGlzIGp1c3QgYSBidW5jaCBvZiBzdHVicywg
YnV0IGV2ZW50dWFsbHkKLWl0IHdpbGwgcHJvdmlkZSB0aHJlZSBzZXRzIG9mIG1hbmFnZXIgY2xh
c3NlcyBhbmQgd29ya2VyIGNsYXNzZXMgZm9yCi10aGUgdGhyZWUgY29uY3VycmVuY3kgbW9kZWxz
LiBUaGUgZ2V0KCkgZmFjdG9yeSBtZXRob2Qgc2VsZWN0cyBiZXR3ZWVuCi10aGVtLgorVGhpcyBt
b2R1bGUgaW1wbGVtZW50cyBhIG1lc3NhZ2UgYnJva2VyIHRoYXQgY29ubmVjdHMgdGhlIG1hbmFn
ZXIKKyhUZXN0UnVubmVyMikgdG8gdGhlIHdvcmtlcnM6IGl0IHByb3ZpZGVzIGEgbWVzc2FnaW5n
IGFic3RyYWN0aW9uIGFuZAorbWVzc2FnZSBsb29wcyAoYnVpbGRpbmcgb24gdG9wIG9mIG1lc3Nh
Z2VfYnJva2VyMiksIGFuZCBoYW5kbGVzIHN0YXJ0aW5nCit3b3JrZXJzIGJ5IGxhdW5jaGluZyB0
aHJlYWRzIGFuZC9vciBwcm9jZXNzZXMgZGVwZW5kaW5nIG9uIHRoZQorcmVxdWVzdGVkIGNvbmZp
Z3VyYXRpb24uCiAiIiIKIAogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBvcHRwYXJzZQogaW1wb3J0
IFF1ZXVlCitpbXBvcnQgdGhyZWFkCiBpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgdGltZQorCiAK
LSMKICMgSGFuZGxlIFB5dGhvbiA8IDIuNiB3aGVyZSBtdWx0aXByb2Nlc3NpbmcgaXNuJ3QgYXZh
aWxhYmxlLgogIworIyBfTXVsdGlwcm9jZXNzaW5nX1Byb2Nlc3MgaXMgbmVlZGVkIHNvIHRoYXQg
X011bHRpUHJvY2Vzc1dvcmtlcgorIyBjYW4gYmUgZGVmaW5lZCB3aXRoIG9yIHdpdGhvdXQgbXVs
dGlwcm9jZXNzaW5nLgogdHJ5OgogICAgIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcKKyAgICBfTXVs
dGlwcm9jZXNzaW5nX1Byb2Nlc3MgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2VzcwogZXhjZXB0IElt
cG9ydEVycm9yOgogICAgIG11bHRpcHJvY2Vzc2luZyA9IE5vbmUKKyAgICBfTXVsdGlwcm9jZXNz
aW5nX1Byb2Nlc3MgPSB0aHJlYWRpbmcuVGhyZWFkCiAKIAorZnJvbSB3ZWJraXRweS5jb21tb24u
c3lzdGVtIGltcG9ydCBzdGFja191dGlscworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMgaW1w
b3J0IHBvcnQKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9y
dCBtZXNzYWdlX2Jyb2tlcjIKIAogCkBAIC04Myw3ICs4Niw4IEBAIGRlZiBnZXQocG9ydCwgb3B0
aW9ucywgY2xpZW50LCB3b3JrZXJfY2xhc3MpOgogICAgIEFyZ3M6CiAgICAgICAgIHBvcnQgLSBo
YW5kbGUgdG8gbGF5b3V0X3Rlc3RzL3BvcnQgb2JqZWN0IGZvciBwb3J0LXNwZWNpZmljIHN0dWZm
CiAgICAgICAgIG9wdGlvbnMgLSBvcHRwYXJzZSBhcmd1bWVudCBmb3IgY29tbWFuZC1saW5lIG9w
dGlvbnMKLSAgICAgICAgY2xpZW50IC0gb2JqZWN0IHRvIGRpc3BhdGNoIHJlcGxpZXMgdG8KKyAg
ICAgICAgY2xpZW50IC0gb2JqZWN0IHRvIGRpc3BhdGNoIHJlcGxpZXMgdG8uIFRoaXMgb2JqZWN0
IG11c3QgaW1wbGVtZW50CisgICAgICAgICAgICB0aGUgbWV0aG9kcyBpbiBtZXNzYWdlX2Jyb2tl
cjIuQnJva2VyQ2xpZW50LgogICAgICAgICB3b3JrZXJfY2xhc3MgLSB0eXBlIG9mIHdvcmtlcnMg
dG8gY3JlYXRlLiBUaGlzIGNsYXNzIG11c3QgaW1wbGVtZW50CiAgICAgICAgICAgICB0aGUgbWV0
aG9kcyBpbiBBYnN0cmFjdFdvcmtlci4KICAgICBSZXR1cm5zOgpAQCAtMTM3LDEyICsxNDEsMTEg
QEAgY2xhc3MgQWJzdHJhY3RXb3JrZXIobWVzc2FnZV9icm9rZXIyLkJyb2tlckNsaWVudCk6CiAK
IAogY2xhc3MgX01hbmFnZXJDb25uZWN0aW9uKG1lc3NhZ2VfYnJva2VyMi5Ccm9rZXJDb25uZWN0
aW9uKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCBwb3J0LCBvcHRpb25zLCBjbGll
bnQsIHdvcmtlcl9jbGFzcyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb2tlciwgb3B0aW9u
cywgY2xpZW50LCB3b3JrZXJfY2xhc3MpOgogICAgICAgICAiIiJCYXNlIGluaXRpYWxpemF0aW9u
IGZvciBhbGwgTWFuYWdlciBvYmplY3RzLgogCiAgICAgICAgIEFyZ3M6CiAgICAgICAgICAgICBi
cm9rZXI6IGhhbmRsZSB0byB0aGUgbWVzc2FnZV9icm9rZXIyIG9iamVjdAotICAgICAgICAgICAg
cG9ydDogaGFuZGxlIHRvIHBvcnQtc3BlY2lmaWMgZnVuY3Rpb25hbGl0eQogICAgICAgICAgICAg
b3B0aW9uczogY29tbWFuZCBsaW5lIG9wdGlvbnMgb2JqZWN0CiAgICAgICAgICAgICBjbGllbnQ6
IGNhbGxiYWNrIG9iamVjdCAodGhlIGNhbGxlcikKICAgICAgICAgICAgIHdvcmtlcl9jbGFzczog
Y2xhc3Mgb2JqZWN0IHRvIHVzZSB0byBjcmVhdGUgd29ya2Vycy4KQEAgLTE1MiwxNCArMTU1LDE2
NSBAQCBjbGFzcyBfTWFuYWdlckNvbm5lY3Rpb24obWVzc2FnZV9icm9rZXIyLkJyb2tlckNvbm5l
Y3Rpb24pOgogICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucwogICAgICAgICBzZWxmLl93
b3JrZXJfY2xhc3MgPSB3b3JrZXJfY2xhc3MKIAorICAgIGRlZiBfbWFrZV93b3JrZXJfY29ubmVj
dGlvbihzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVm
IF9tYWtlX3dvcmtlcihzZWxmLCB3b3JrZXJfY29ubmVjdGlvbiwgd29ya2VyX251bWJlciwgKipr
d2FyZ3MpOgorICAgICAgICByZXR1cm4gc2VsZi5fd29ya2VyX2NsYXNzKHdvcmtlcl9jb25uZWN0
aW9uLCB3b3JrZXJfbnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNl
bGYuX29wdGlvbnMsICoqa3dhcmdzKQorCisgICAgZGVmIHN0YXJ0X3dvcmtlcihzZWxmLCB3b3Jr
ZXJfbnVtYmVyLCAqKmt3YXJncyk6CisgICAgICAgIHdvcmtlcl9jb25uZWN0aW9uID0gc2VsZi5f
bWFrZV93b3JrZXJfY29ubmVjdGlvbigpCisgICAgICAgIHdvcmtlciA9IHNlbGYuX21ha2Vfd29y
a2VyKHdvcmtlcl9jb25uZWN0aW9uLCB3b3JrZXJfbnVtYmVyLCAqKmt3YXJncykKKyAgICAgICAg
d29ya2VyX2Nvbm5lY3Rpb24uc2V0X2NsaWVudCh3b3JrZXIpCisgICAgICAgIHdvcmtlcl9jb25u
ZWN0aW9uLnN0YXJ0KCkKKyAgICAgICAgcmV0dXJuIHdvcmtlcl9jb25uZWN0aW9uCisKIAogY2xh
c3MgX0lubGluZU1hbmFnZXIoX01hbmFnZXJDb25uZWN0aW9uKToKLSAgICBwYXNzCisgICAgZGVm
IF9faW5pdF9fKHNlbGYsIGJyb2tlciwgcG9ydCwgb3B0aW9ucywgY2xpZW50LCB3b3JrZXJfY2xh
c3MpOgorICAgICAgICBfTWFuYWdlckNvbm5lY3Rpb24uX19pbml0X18oc2VsZiwgYnJva2VyLCBv
cHRpb25zLCBjbGllbnQsIHdvcmtlcl9jbGFzcykKKyAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQK
KyAgICAgICAgc2VsZi5faW5saW5lX3dvcmtlciA9IE5vbmUKKworICAgIGRlZiBfbWFrZV93b3Jr
ZXJfY29ubmVjdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5faW5saW5lX3dvcmtlciA9IF9Jbmxp
bmVXb3JrZXIoc2VsZi5fYnJva2VyLCBzZWxmLl9wb3J0LCBzZWxmLl9jbGllbnQpCisgICAgICAg
IHJldHVybiBzZWxmLl9pbmxpbmVfd29ya2VyCisKKyAgICBkZWYgcnVuX21lc3NhZ2VfbG9vcChz
ZWxmLCBkZWxheV9zZWNzPU5vbmUpOgorICAgICAgICAjIE5vdGUgdGhhdCBkZWxheV9zZWNzIGlz
IGlnbm9yZWQgaW4gdGhpcyBjYXNlIHNpbmNlIHdlIGNhbid0IGVhc2lseQorICAgICAgICAjIGlt
cGxlbWVudCBpdC4KKyAgICAgICAgc2VsZi5faW5saW5lX3dvcmtlci5ydW4oKQorICAgICAgICBz
ZWxmLl9icm9rZXIucnVuX2FsbF9wZW5kaW5nKE1BTkFHRVJfVE9QSUMsIHNlbGYuX2NsaWVudCkK
IAogCiBjbGFzcyBfVGhyZWFkZWRNYW5hZ2VyKF9NYW5hZ2VyQ29ubmVjdGlvbik6Ci0gICAgcGFz
cworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXIsIHBvcnQsIG9wdGlvbnMsIGNsaWVudCwg
d29ya2VyX2NsYXNzKToKKyAgICAgICAgX01hbmFnZXJDb25uZWN0aW9uLl9faW5pdF9fKHNlbGYs
IGJyb2tlciwgb3B0aW9ucywgY2xpZW50LCB3b3JrZXJfY2xhc3MpCisgICAgICAgIHNlbGYuX3Bv
cnQgPSBwb3J0CisKKyAgICBkZWYgX21ha2Vfd29ya2VyX2Nvbm5lY3Rpb24oc2VsZik6CisgICAg
ICAgIHJldHVybiBfVGhyZWFkZWRXb3JrZXIoc2VsZi5fYnJva2VyLCBzZWxmLl9wb3J0KQogCiAK
IGNsYXNzIF9NdWx0aVByb2Nlc3NNYW5hZ2VyKF9NYW5hZ2VyQ29ubmVjdGlvbik6Ci0gICAgcGFz
cworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXIsIHBvcnQsIG9wdGlvbnMsIGNsaWVudCwg
d29ya2VyX2NsYXNzKToKKyAgICAgICAgIyBOb3RlIHRoYXQgdGhpcyBjbGFzcyBkb2VzIG5vdCBr
ZWVwIGEgaGFuZGxlIHRvIHRoZSBhY3R1YWwgcG9ydAorICAgICAgICAjIG9iamVjdCwgYmVjYXVz
ZSBpdCBpc24ndCBQaWNrbGFibGUuIEluc3RlYWQgaXQga2VlcHMgdGhlIHBvcnQKKyAgICAgICAg
IyBuYW1lIGFuZCByZWNyZWF0ZXMgdGhlIHBvcnQgaW4gdGhlIGNoaWxkIHByb2Nlc3MgZnJvbSB0
aGUgbmFtZQorICAgICAgICAjIGFuZCBvcHRpb25zLgorICAgICAgICBfTWFuYWdlckNvbm5lY3Rp
b24uX19pbml0X18oc2VsZiwgYnJva2VyLCBvcHRpb25zLCBjbGllbnQsIHdvcmtlcl9jbGFzcykK
KyAgICAgICAgc2VsZi5fcGxhdGZvcm1fbmFtZSA9IHBvcnQucmVhbF9uYW1lKCkKKworICAgIGRl
ZiBfbWFrZV93b3JrZXJfY29ubmVjdGlvbihzZWxmKToKKyAgICAgICAgcmV0dXJuIF9NdWx0aVBy
b2Nlc3NXb3JrZXIoc2VsZi5fYnJva2VyLCBzZWxmLl9wbGF0Zm9ybV9uYW1lLCBzZWxmLl9vcHRp
b25zKQorCisKK2NsYXNzIF9Xb3JrZXJDb25uZWN0aW9uKG1lc3NhZ2VfYnJva2VyMi5Ccm9rZXJD
b25uZWN0aW9uKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyKToKKyAgICAgICAgIyBU
aGUgY2xpZW50IGdldHMgZmlsbGVkIGluIGFmdGVyIHRoaXMgb2JqZWN0IGlzIGNvbnN0cnVjdGVk
LCB1c2luZyBzZXRfY2xpZW50KCkuCisgICAgICAgIHNlbGYuX2NsaWVudCA9IE5vbmUKKyAgICAg
ICAgbWVzc2FnZV9icm9rZXIyLkJyb2tlckNvbm5lY3Rpb24uX19pbml0X18oc2VsZiwgYnJva2Vy
LCBzZWxmLl9jbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFOWV9XT1JLRVJfVE9QSUMsIE1BTkFHRVJfVE9QSUMpCisKKyAgICBkZWYgc2V0
X2NsaWVudChzZWxmLCBjbGllbnQpOgorICAgICAgICBzZWxmLl9jbGllbnQgPSBjbGllbnQKKyAg
ICAgICAgc2VsZi5uYW1lID0gY2xpZW50Lm5hbWUoKQorCisgICAgZGVmIHN0YXJ0KHNlbGYpOgor
ICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgcnVuKHNlbGYpOgor
ICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgeWllbGRfdG9fYnJv
a2VyKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgY2FuY2VsKHNlbGYpOgorICAgICAg
ICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgaXNfYWxpdmUoc2VsZik6Cisg
ICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBqb2luKHNlbGYsIHRp
bWVvdXQpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgbG9n
X3dlZGdlZF93b3JrZXIoc2VsZiwgdGVzdF9uYW1lKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVt
ZW50ZWRFcnJvcgorCisKK2NsYXNzIF9JbmxpbmVXb3JrZXIoX1dvcmtlckNvbm5lY3Rpb24pOgor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXIsIHBvcnQsIG1hbmFnZXJfY2xpZW50KToKKyAg
ICAgICAgX1dvcmtlckNvbm5lY3Rpb24uX19pbml0X18oc2VsZiwgYnJva2VyKQorICAgICAgICBz
ZWxmLl9wb3J0ID0gcG9ydAorICAgICAgICBzZWxmLl9tYW5hZ2VyX2NsaWVudCA9IG1hbmFnZXJf
Y2xpZW50CisgICAgICAgIHNlbGYuX2FsaXZlID0gRmFsc2UKKworICAgIGRlZiBzdGFydChzZWxm
KToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgc2VsZi5fYWxp
dmUgPSBUcnVlCisgICAgICAgIHNlbGYuX2NsaWVudC5ydW4oc2VsZi5fcG9ydCkKKyAgICAgICAg
c2VsZi5fYWxpdmUgPSBGYWxzZQorCisgICAgZGVmIHlpZWxkX3RvX2Jyb2tlcihzZWxmKToKKyAg
ICAgICAgc2VsZi5fYnJva2VyLnJ1bl9hbGxfcGVuZGluZyhNQU5BR0VSX1RPUElDLCBzZWxmLl9t
YW5hZ2VyX2NsaWVudCkKKworICAgIGRlZiBjYW5jZWwoc2VsZik6CisgICAgICAgIHNlbGYuX2Ns
aWVudC5jYW5jZWwoKQorCisgICAgZGVmIGlzX2FsaXZlKHNlbGYpOgorICAgICAgICByZXR1cm4g
c2VsZi5fYWxpdmUKKworICAgIGRlZiBqb2luKHNlbGYsIHRpbWVvdXQpOgorICAgICAgICBhc3Nl
cnQgbm90IHNlbGYuaXNfYWxpdmUoKQorCisgICAgZGVmIGxvZ193ZWRnZWRfd29ya2VyKHNlbGYs
IHRlc3RfbmFtZSk6CisgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJfSW5saW5lV29ya2Vy
LmxvZ193ZWRnZWRfd29ya2VyKCkgY2FsbGVkIikKKworCitjbGFzcyBfVGhyZWFkZWRXb3JrZXIo
dGhyZWFkaW5nLlRocmVhZCwgX1dvcmtlckNvbm5lY3Rpb24pOgorICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBicm9rZXIsIHBvcnQpOgorICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLl9faW5pdF9fKHNl
bGYpCisgICAgICAgIF9Xb3JrZXJDb25uZWN0aW9uLl9faW5pdF9fKHNlbGYsIGJyb2tlcikKKyAg
ICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKKworICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgICMg
RklYTUU6IFdlIGNhbiByZW1vdmUgdGhpcyBvbmNlIGV2ZXJ5b25lIGlzIG9uIDIuNi4KKyAgICAg
ICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgJ2lkZW50Jyk6CisgICAgICAgICAgICBzZWxmLmlkZW50
ID0gdGhyZWFkLmdldF9pZGVudCgpCisgICAgICAgIHNlbGYuX2NsaWVudC5ydW4oc2VsZi5fcG9y
dCkKKworICAgIGRlZiBjYW5jZWwoc2VsZik6CisgICAgICAgIHNlbGYuX2NsaWVudC5jYW5jZWwo
KQorCisgICAgZGVmIGlzX2FsaXZlKHNlbGYpOgorICAgICAgICAjIEZJWE1FOiBXZSBjYW4gcmVt
b3ZlIHRoaXMgb25jZSBldmVyeW9uZSBpcyBvbiAyLjYuCisgICAgICAgIHNlbGYuaXNBbGl2ZSgp
CisKKyAgICBkZWYgbG9nX3dlZGdlZF93b3JrZXIoc2VsZiwgdGVzdF9uYW1lKToKKyAgICAgICAg
c3RhY2tfdXRpbHMubG9nX3RocmVhZF9zdGF0ZShfbG9nLmVycm9yLCBzZWxmLm5hbWUsIHNlbGYu
aWRlbnQsCisgICAgICAgICAgICAiIGlzIHdlZGdlZCBvbiB0ZXN0ICVzIiAlIHRlc3RfbmFtZSkK
KworCitjbGFzcyBfTXVsdGlQcm9jZXNzV29ya2VyKF9NdWx0aXByb2Nlc3NpbmdfUHJvY2Vzcywg
X1dvcmtlckNvbm5lY3Rpb24pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXIsIHBsYXRm
b3JtX25hbWUsIG9wdGlvbnMpOgorICAgICAgICBfTXVsdGlwcm9jZXNzaW5nX1Byb2Nlc3MuX19p
bml0X18oc2VsZikKKyAgICAgICAgX1dvcmtlckNvbm5lY3Rpb24uX19pbml0X18oc2VsZiwgYnJv
a2VyKQorICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucworICAgICAgICBzZWxmLl9wbGF0
Zm9ybV9uYW1lID0gcGxhdGZvcm1fbmFtZQorCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAg
IyBSZS1jb25maWd1cmUgdGhlIGxvZ2dlci4KKyAgICAgICAgIyBGSVhNRTogZmlndXJlIG91dCBo
b3cgdG8gZ2V0IGEgaGFuZGxlIHRvIHRoZSByaWdodCBzdHJlYW0uCisgICAgICAgIGxvZ2dpbmcu
YmFzaWNDb25maWcoKQorICAgICAgICBwb3J0X29iaiA9IHBvcnQuZ2V0KHNlbGYuX3BsYXRmb3Jt
X25hbWUsIHNlbGYuX29wdGlvbnMpCisgICAgICAgIHNlbGYuX2NsaWVudC5ydW4ocG9ydF9vYmop
CisKKyAgICBkZWYgY2FuY2VsKHNlbGYpOgorICAgICAgICBzZWxmLnRlcm1pbmF0ZSgpCisKKyAg
ICBkZWYgbG9nX3dlZGdlZF93b3JrZXIoc2VsZiwgdGVzdF9uYW1lKToKKyAgICAgICAgX2xvZy5l
cnJvcigiJXMgKHBpZCAlZCkgaXMgd2VkZ2VkIG9uIHRlc3QgJXMiICUKKyAgICAgICAgICAgICAg
ICAgICAoc2VsZi5uYW1lLCBzZWxmLnBpZCwgdGVzdF9uYW1lKSkKZGlmZiAtLWdpdCBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21hbmFnZXJfd29y
a2VyX2Jyb2tlcl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2xheW91dF9wYWNrYWdlL21hbmFnZXJfd29ya2VyX2Jyb2tlcl91bml0dGVzdC5weQppbmRl
eCAwYTMwYmRkNDVmYjQxZjk5YWU5NDNhYjRjZWMwNzNjYzg5MjAyNWZhLi5iNDY4ZGQxZDFmMGVl
ZTY3Y2E1NzQ4N2RmYzQ1ZGQ4MjI0ZTk0ZDkyIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyX3dvcmtlcl9icm9rZXJf
dW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5
b3V0X3BhY2thZ2UvbWFuYWdlcl93b3JrZXJfYnJva2VyX3VuaXR0ZXN0LnB5CkBAIC0yNyw2ICsy
Nyw3IEBACiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKIGltcG9ydCBvcHRwYXJzZQoraW1wb3J0IFF1ZXVlCiBp
bXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QKIApAQCAtNDMsOCArNDQsNDggQEAgZnJvbSB3ZWJr
aXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IG1hbmFnZXJfd29ya2VyX2Jy
b2tlcgogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IG1l
c3NhZ2VfYnJva2VyMgogCiAKLWNsYXNzIFRlc3RXb3JrZXIob2JqZWN0KToKLSAgICBwYXNzCitj
bGFzcyBUZXN0V29ya2VyKG1hbmFnZXJfd29ya2VyX2Jyb2tlci5BYnN0cmFjdFdvcmtlcik6Cisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb2tlciwgd29ya2VyX251bWJlciwgb3B0aW9ucywgKipr
d2FyZ3MpOgorICAgICAgICBzZWxmLl9icm9rZXIgPSBicm9rZXIKKyAgICAgICAgc2VsZi5fb3B0
aW9ucyA9IG9wdGlvbnMKKyAgICAgICAgc2VsZi5fd29ya2VyX251bWJlciA9IHdvcmtlcl9udW1i
ZXIKKyAgICAgICAgc2VsZi5fbmFtZSA9ICdUZXN0V29ya2VyLyVkJyAlIHdvcmtlcl9udW1iZXIK
KyAgICAgICAgc2VsZi5fY2FuY2VsZWQgPSBGYWxzZQorICAgICAgICBzZWxmLl9zdG9wcGVkID0g
RmFsc2UKKyAgICAgICAgc2VsZi5fc3RhcnRpbmdfcXVldWUgPSBrd2FyZ3MuZ2V0KCdzdGFydGlu
Z19xdWV1ZScpCisgICAgICAgIHNlbGYuX3N0b3BwaW5nX3F1ZXVlID0ga3dhcmdzLmdldCgnc3Rv
cHBpbmdfcXVldWUnKQorCisgICAgZGVmIGNhbmNlbChzZWxmKToKKyAgICAgICAgc2VsZi5fY2Fu
Y2VsZWQgPSBUcnVlCisKKyAgICBkZWYgaGFuZGxlX3N0b3Aoc2VsZiwgc3JjKToKKyAgICAgICAg
c2VsZi5fc3RvcHBlZCA9IFRydWUKKworICAgIGRlZiBoYW5kbGVfdGVzdChzZWxmLCBzcmMsIGFu
X2ludCwgYV9zdHIpOgorICAgICAgICBhc3NlcnQgYW5faW50ID09IDEKKyAgICAgICAgYXNzZXJ0
IGFfc3RyID09ICJoZWxsbywgd29ybGQiCisgICAgICAgIHNlbGYuX2Jyb2tlci5wb3N0X21lc3Nh
Z2UoJ3Rlc3QnLCAyLCAnaGksIGV2ZXJ5Ym9keScpCisKKyAgICBkZWYgaXNfZG9uZShzZWxmKToK
KyAgICAgICAgcmV0dXJuIHNlbGYuX3N0b3BwZWQgb3Igc2VsZi5fY2FuY2VsZWQKKworICAgIGRl
ZiBuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQorCisgICAgZGVmIHN0YXJ0
KHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgcnVuKHNlbGYsIHBvcnQpOgorICAgICAg
ICBpZiBzZWxmLl9zdGFydGluZ19xdWV1ZToKKyAgICAgICAgICAgIHNlbGYuX3N0YXJ0aW5nX3F1
ZXVlLnB1dCgnJykKKyAgICAgICAgaWYgc2VsZi5fc3RvcHBpbmdfcXVldWU6CisgICAgICAgICAg
ICBzZWxmLl9zdG9wcGluZ19xdWV1ZS5nZXQoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBz
ZWxmLl9icm9rZXIucnVuX21lc3NhZ2VfbG9vcCgpCisgICAgICAgICAgICBzZWxmLl9icm9rZXIu
eWllbGRfdG9fYnJva2VyKCkKKyAgICAgICAgICAgIHNlbGYuX2Jyb2tlci5wb3N0X21lc3NhZ2Uo
J2RvbmUnKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgc2VsZi5f
YnJva2VyLnBvc3RfbWVzc2FnZSgnZXhjZXB0aW9uJywgKHR5cGUoZSksIHN0cihlKSwgTm9uZSkp
CiAKIAogZGVmIGdldF9vcHRpb25zKHdvcmtlcl9tb2RlbCk6CkBAIC03Niw2ICsxMTcsMTQ0IEBA
IGNsYXNzIEZ1bmN0aW9uVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X2dl
dF9fdW5rbm93bihzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwg
bWFrZV9icm9rZXIsIHNlbGYsICd1bmtub3duJykKIAorCitjbGFzcyBfVGVzdHNNaXhpbihvYmpl
Y3QpOgorICAgICIiIk1peGluIGNsYXNzIHRoYXQgaW1wbGVtZW50cyBhIHNlcmllcyBvZiB0ZXN0
cyB0byBlbmZvcmNlIHRoZQorICAgIGNvbnRyYWN0IGFsbCBpbXBsZW1lbnRhdGlvbnMgbXVzdCBm
b2xsb3cuIiIiCisKKyAgICAjCisgICAgIyBNZXRob2RzIHRvIGltcGxlbWVudCB0aGUgTWFuYWdl
ciBzaWRlIG9mIHRoZSBDbGllbnRJbnRlcmZhY2UKKyAgICAjCisgICAgZGVmIG5hbWUoc2VsZik6
CisgICAgICAgIHJldHVybiAnVGVzdGVyJworCisgICAgZGVmIGlzX2RvbmUoc2VsZik6CisgICAg
ICAgIHJldHVybiBzZWxmLl9kb25lCisKKyAgICAjCisgICAgIyBIYW5kbGVycyBmb3IgdGhlIG1l
c3NhZ2VzIHRoZSBUZXN0V29ya2VyIG1heSBzZW5kLgorICAgICMKKyAgICBkZWYgaGFuZGxlX2Rv
bmUoc2VsZiwgc3JjKToKKyAgICAgICAgc2VsZi5fZG9uZSA9IFRydWUKKworICAgIGRlZiBoYW5k
bGVfdGVzdChzZWxmLCBzcmMsIGFuX2ludCwgYV9zdHIpOgorICAgICAgICBzZWxmLl9hbl9pbnQg
PSBhbl9pbnQKKyAgICAgICAgc2VsZi5fYV9zdHIgPSBhX3N0cgorCisgICAgZGVmIGhhbmRsZV9l
eGNlcHRpb24oc2VsZiwgc3JjLCBleGNfaW5mbyk6CisgICAgICAgIHNlbGYuX2V4Y2VwdGlvbiA9
IGV4Y19pbmZvCisgICAgICAgIHNlbGYuX2RvbmUgPSBUcnVlCisKKyAgICAjCisgICAgIyBUZXN0
aW5nIGhlbHBlciBtZXRob2RzCisgICAgIworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAg
c2VsZi5fYW5faW50ID0gTm9uZQorICAgICAgICBzZWxmLl9hX3N0ciA9IE5vbmUKKyAgICAgICAg
c2VsZi5fYnJva2VyID0gTm9uZQorICAgICAgICBzZWxmLl9kb25lID0gRmFsc2UKKyAgICAgICAg
c2VsZi5fZXhjZXB0aW9uID0gTm9uZQorICAgICAgICBzZWxmLl93b3JrZXJfbW9kZWwgPSBOb25l
CisKKyAgICBkZWYgbWFrZV9icm9rZXIoc2VsZik6CisgICAgICAgIHNlbGYuX2Jyb2tlciA9IG1h
a2VfYnJva2VyKHNlbGYsIHNlbGYuX3dvcmtlcl9tb2RlbCkKKworICAgICMKKyAgICAjIEFjdHVh
bCB1bml0IHRlc3RzCisgICAgIworICAgIGRlZiB0ZXN0X2NhbmNlbChzZWxmKToKKyAgICAgICAg
aWYgbm90IHNlbGYuX3dvcmtlcl9tb2RlbDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBz
ZWxmLm1ha2VfYnJva2VyKCkKKyAgICAgICAgd29ya2VyID0gc2VsZi5fYnJva2VyLnN0YXJ0X3dv
cmtlcigwKQorICAgICAgICB3b3JrZXIuY2FuY2VsKCkKKyAgICAgICAgc2VsZi5fYnJva2VyLnBv
c3RfbWVzc2FnZSgndGVzdCcsIDEsICdoZWxsbywgd29ybGQnKQorICAgICAgICB3b3JrZXIuam9p
bigwLjUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uod29ya2VyLmlzX2FsaXZlKCkpCisKKyAg
ICBkZWYgdGVzdF9kb25lKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5fd29ya2VyX21vZGVs
OgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYubWFrZV9icm9rZXIoKQorICAgICAg
ICB3b3JrZXIgPSBzZWxmLl9icm9rZXIuc3RhcnRfd29ya2VyKDApCisgICAgICAgIHNlbGYuX2Jy
b2tlci5wb3N0X21lc3NhZ2UoJ3Rlc3QnLCAxLCAnaGVsbG8sIHdvcmxkJykKKyAgICAgICAgc2Vs
Zi5fYnJva2VyLnBvc3RfbWVzc2FnZSgnc3RvcCcpCisgICAgICAgIHNlbGYuX2Jyb2tlci5ydW5f
bWVzc2FnZV9sb29wKCkKKyAgICAgICAgd29ya2VyLmpvaW4oMC41KQorICAgICAgICBzZWxmLmFz
c2VydEZhbHNlKHdvcmtlci5pc19hbGl2ZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2Vs
Zi5pc19kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYW5faW50LCAyKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2Ffc3RyLCAnaGksIGV2ZXJ5Ym9keScpCisK
KyAgICBkZWYgdGVzdF9sb2dfd2VkZ2VkX3dvcmtlcihzZWxmKToKKyAgICAgICAgaWYgbm90IHNl
bGYuX3dvcmtlcl9tb2RlbDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzdGFydGluZ19x
dWV1ZSA9IHNlbGYucXVldWUoKQorICAgICAgICBzdG9wcGluZ19xdWV1ZSA9IHNlbGYucXVldWUo
KQorICAgICAgICBzZWxmLm1ha2VfYnJva2VyKCkKKyAgICAgICAgb2MgPSBvdXRwdXRjYXB0dXJl
Lk91dHB1dENhcHR1cmUoKQorICAgICAgICBvYy5jYXB0dXJlX291dHB1dCgpCisgICAgICAgIHdv
cmtlciA9IHNlbGYuX2Jyb2tlci5zdGFydF93b3JrZXIoMCwKKyAgICAgICAgICAgIHN0YXJ0aW5n
X3F1ZXVlPXN0YXJ0aW5nX3F1ZXVlLCBzdG9wcGluZ19xdWV1ZT1zdG9wcGluZ19xdWV1ZSkKKyAg
ICAgICAgc3RhcnRpbmdfcXVldWUuZ2V0KCkKKyAgICAgICAgd29ya2VyLmxvZ193ZWRnZWRfd29y
a2VyKCd0ZXN0X25hbWUnKQorICAgICAgICBzdG9wcGluZ19xdWV1ZS5wdXQoJycpCisgICAgICAg
IHNlbGYuX2Jyb2tlci5wb3N0X21lc3NhZ2UoJ3N0b3AnKQorICAgICAgICBzZWxmLl9icm9rZXIu
cnVuX21lc3NhZ2VfbG9vcCgpCisgICAgICAgIHdvcmtlci5qb2luKDAuNSkKKyAgICAgICAgb2Mu
cmVzdG9yZV9vdXRwdXQoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHdvcmtlci5pc19hbGl2
ZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5pc19kb25lKCkpCisKKyAgICBkZWYg
dGVzdF91bmtub3duX21lc3NhZ2Uoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLl93b3JrZXJf
bW9kZWw6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5tYWtlX2Jyb2tlcigpCisg
ICAgICAgIHdvcmtlciA9IHNlbGYuX2Jyb2tlci5zdGFydF93b3JrZXIoMCkKKyAgICAgICAgc2Vs
Zi5fYnJva2VyLnBvc3RfbWVzc2FnZSgndW5rbm93bicpCisgICAgICAgIHNlbGYuX2Jyb2tlci5y
dW5fbWVzc2FnZV9sb29wKCkKKyAgICAgICAgd29ya2VyLmpvaW4oMC41KQorCisgICAgICAgIHNl
bGYuYXNzZXJ0VHJ1ZShzZWxmLmlzX2RvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh3
b3JrZXIuaXNfYWxpdmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5fZXhjZXB0
aW9uWzBdLCBWYWx1ZUVycm9yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLl9leGNl
cHRpb25bMV0sCisgICAgICAgICAgICAiVGVzdFdvcmtlci8wOiByZWNlaXZlZCBtZXNzYWdlICd1
bmtub3duJyBpdCBjb3VsZG4ndCBoYW5kbGUiKQorCisKK2NsYXNzIElubGluZUJyb2tlclRlc3Rz
KF9UZXN0c01peGluLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgor
ICAgICAgICBfVGVzdHNNaXhpbi5zZXRVcChzZWxmKQorICAgICAgICBzZWxmLl93b3JrZXJfbW9k
ZWwgPSAnaW5saW5lJworCisgICAgZGVmIHRlc3RfbG9nX3dlZGdlZF93b3JrZXIoc2VsZik6Cisg
ICAgICAgIHNlbGYubWFrZV9icm9rZXIoKQorICAgICAgICB3b3JrZXIgPSBzZWxmLl9icm9rZXIu
c3RhcnRfd29ya2VyKDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9y
LCB3b3JrZXIubG9nX3dlZGdlZF93b3JrZXIsIE5vbmUpCisKKworY2xhc3MgTXVsdGlQcm9jZXNz
QnJva2VyVGVzdHMoX1Rlc3RzTWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0
VXAoc2VsZik6CisgICAgICAgIF9UZXN0c01peGluLnNldFVwKHNlbGYpCisgICAgICAgIGlmIG11
bHRpcHJvY2Vzc2luZzoKKyAgICAgICAgICAgIHNlbGYuX3dvcmtlcl9tb2RlbCA9ICdwcm9jZXNz
ZXMnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl93b3JrZXJfbW9kZWwgPSBOb25l
CisKKyAgICBkZWYgcXVldWUoc2VsZik6CisgICAgICAgIHJldHVybiBtdWx0aXByb2Nlc3Npbmcu
UXVldWUoKQorCisKK2NsYXNzIFRocmVhZGVkQnJva2VyVGVzdHMoX1Rlc3RzTWl4aW4sIHVuaXR0
ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgcXVldWUoc2VsZik6CisgICAgICAgIHJldHVybiBRdWV1
ZS5RdWV1ZSgpCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIF9UZXN0c01peGluLnNl
dFVwKHNlbGYpCisgICAgICAgIHNlbGYuX3dvcmtlcl9tb2RlbCA9ICd0aHJlYWRzJworCisKK2Ns
YXNzIEZ1bmN0aW9uc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X3J1bnRp
bWVfb3B0aW9ucyhzZWxmKToKICAgICAgICAgb3B0aW9uX2xpc3QgPSBtYW5hZ2VyX3dvcmtlcl9i
cm9rZXIucnVudGltZV9vcHRpb25zKCkKICAgICAgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9u
UGFyc2VyKG9wdGlvbl9saXN0PW9wdGlvbl9saXN0KQpAQCAtODMsNSArMjYyLDMwIEBAIGNsYXNz
IEZ1bmN0aW9uVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBzZWxmLmFzc2VydFRy
dWUob3B0aW9ucykKIAogCitjbGFzcyBJbnRlcmZhY2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToK
KyAgICAjIFRoZXNlIHRlc3RzIG1vc3RseSBleGlzdCB0byBwYWNpZnkgY292ZXJhZ2UuCisKKyAg
ICAjIEZJWE1FOiBUaGVyZSBtdXN0IGJlIGEgYmV0dGVyIHdheSB0byBkbyB0aGlzIGFuZCBhbHNv
IHZlcmlmeQorICAgICMgdGhhdCBjbGFzc2VzIGRvIGltcGxlbWVudCBldmVyeSBhYnN0cmFjdCBt
ZXRob2QgaW4gYW4gaW50ZXJmYWNlLgorICAgIGRlZiB0ZXN0X21hbmFnZXJjb25uZWN0aW9uX2lz
X2Fic3RyYWN0KHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBhbGwgdGhlIGJhc2UgY2xhc3Mg
bWV0aG9kcyBhcmUgYWJzdHJhY3QgYW5kIGhhdmUgdGhlCisgICAgICAgICMgc2lnbmF0dXJlIHdl
IGV4cGVjdC4KKyAgICAgICAgYnJva2VyID0gbWFrZV9icm9rZXIoc2VsZiwgJ2lubGluZScpCisg
ICAgICAgIG9iaiA9IG1hbmFnZXJfd29ya2VyX2Jyb2tlci5fTWFuYWdlckNvbm5lY3Rpb24oYnJv
a2VyLl9icm9rZXIsIE5vbmUsIHNlbGYsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2Vz
KE5vdEltcGxlbWVudGVkRXJyb3IsIG9iai5fbWFrZV93b3JrZXJfY29ubmVjdGlvbikKKworICAg
IGRlZiB0ZXN0X3dvcmtlcmNvbm5lY3Rpb25faXNfYWJzdHJhY3Qoc2VsZik6CisgICAgICAgICMg
VGVzdCB0aGF0IGFsbCB0aGUgYmFzZSBjbGFzcyBtZXRob2RzIGFyZSBhYnN0cmFjdCBhbmQgaGF2
ZSB0aGUKKyAgICAgICAgIyBzaWduYXR1cmUgd2UgZXhwZWN0LgorICAgICAgICBicm9rZXIgPSBt
YWtlX2Jyb2tlcihzZWxmLCAnaW5saW5lJykKKyAgICAgICAgb2JqID0gbWFuYWdlcl93b3JrZXJf
YnJva2VyLl9Xb3JrZXJDb25uZWN0aW9uKGJyb2tlci5fYnJva2VyKQorICAgICAgICBzZWxmLmFz
c2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBvYmouc3RhcnQpCisgICAgICAgIHNlbGYu
YXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIG9iai5ydW4pCisgICAgICAgIHNlbGYu
YXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIG9iai5jYW5jZWwpCisgICAgICAgIHNl
bGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIG9iai5pc19hbGl2ZSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgb2JqLmpvaW4sIE5vbmUp
CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIG9iai5sb2df
d2VkZ2VkX3dvcmtlciwgTm9uZSkKKworCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAg
IHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvc2luZ2xlX3Rlc3RfcnVubmVyLnB5IGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvc2luZ2xlX3Rlc3RfcnVu
bmVyLnB5CmluZGV4IDE3ODc0M2Y4ZWY1YjFmMGQ1YTU3Yjk5YmRhYmU2Y2NlYjllMzM0YjEuLjUy
NGMwNzI0MmM3OThhNGJiMDM1NjcwMWVmNzYxZmJkZjNjZjE3NTggMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3NpbmdsZV90ZXN0
X3J1bm5lci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlv
dXRfcGFja2FnZS9zaW5nbGVfdGVzdF9ydW5uZXIucHkKQEAgLTI4LDE0ICsyOCwxMCBAQAogCiAK
IGltcG9ydCBsb2dnaW5nCi1pbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgb3MKIGltcG9ydCB0aW1l
CiAKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IGJhc2UKLQotZnJvbSB3
ZWJraXRweS5sYXlvdXRfdGVzdHMudGVzdF90eXBlcyBpbXBvcnQgdGV4dF9kaWZmCi1mcm9tIHdl
YmtpdHB5LmxheW91dF90ZXN0cy50ZXN0X3R5cGVzIGltcG9ydCBpbWFnZV9kaWZmCi0KIGZyb20g
d2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X2ZhaWx1cmVz
CiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZS50ZXN0X3Jlc3VsdHMg
aW1wb3J0IFRlc3RSZXN1bHQKIApAQCAtNDMsNiArMzksMTIgQEAgZnJvbSB3ZWJraXRweS5sYXlv
dXRfdGVzdHMubGF5b3V0X3BhY2thZ2UudGVzdF9yZXN1bHRzIGltcG9ydCBUZXN0UmVzdWx0CiBf
bG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCiAKIAorZGVmIHJ1bl9zaW5nbGVfdGVz
dChwb3J0LCBvcHRpb25zLCB0ZXN0X2lucHV0LCBkcml2ZXIsIHdvcmtlcl9uYW1lLCB0ZXN0X3R5
cGVzKToKKyAgICAjIEZJWE1FOiBQdWxsIHRoaXMgaW50byBUZXN0U2hlbGxUaHJlYWQuX3J1bigp
LgorICAgIHJ1bm5lciA9IFNpbmdsZVRlc3RSdW5uZXIob3B0aW9ucywgcG9ydCwgZHJpdmVyLCB0
ZXN0X2lucHV0LCB3b3JrZXJfbmFtZSwgdGVzdF90eXBlcykKKyAgICByZXR1cm4gcnVubmVyLnJ1
bigpCisKKwogY2xhc3MgRXhwZWN0ZWREcml2ZXJPdXRwdXQ6CiAgICAgIiIiR3JvdXBzIGluZm9y
bWF0aW9uIGFib3V0IGFuIGV4cGVjdGVkIGRyaXZlciBvdXRwdXQuIiIiCiAgICAgZGVmIF9faW5p
dF9fKHNlbGYsIHRleHQsIGltYWdlLCBpbWFnZV9oYXNoKToKQEAgLTUzLDExMSArNTUsMTUgQEAg
Y2xhc3MgRXhwZWN0ZWREcml2ZXJPdXRwdXQ6CiAKIGNsYXNzIFNpbmdsZVRlc3RSdW5uZXI6CiAK
LSAgICBkZWYgX19pbml0X18oc2VsZiwgb3B0aW9ucywgcG9ydCwgd29ya2VyX25hbWUsIHdvcmtl
cl9udW1iZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvcHRpb25zLCBwb3J0LCBkcml2ZXIs
IHRlc3RfaW5wdXQsIHdvcmtlcl9uYW1lLCB0ZXN0X3R5cGVzKToKICAgICAgICAgc2VsZi5fb3B0
aW9ucyA9IG9wdGlvbnMKICAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKKyAgICAgICAgc2VsZi5f
ZHJpdmVyID0gZHJpdmVyCisgICAgICAgIHNlbGYuX2ZpbGVuYW1lID0gdGVzdF9pbnB1dC5maWxl
bmFtZQorICAgICAgICBzZWxmLl90aW1lb3V0ID0gdGVzdF9pbnB1dC50aW1lb3V0CiAgICAgICAg
IHNlbGYuX3dvcmtlcl9uYW1lID0gd29ya2VyX25hbWUKLSAgICAgICAgc2VsZi5fd29ya2VyX251
bWJlciA9IHdvcmtlcl9udW1iZXIKLSAgICAgICAgc2VsZi5fZHJpdmVyID0gTm9uZQotICAgICAg
ICBzZWxmLl90ZXN0X3R5cGVzID0gW10KLSAgICAgICAgc2VsZi5oYXNfaHR0cF9sb2NrID0gRmFs
c2UKLSAgICAgICAgZm9yIGNscyBpbiBzZWxmLl9nZXRfdGVzdF90eXBlX2NsYXNzZXMoKToKLSAg
ICAgICAgICAgIHNlbGYuX3Rlc3RfdHlwZXMuYXBwZW5kKGNscyhzZWxmLl9wb3J0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMucmVzdWx0c19k
aXJlY3RvcnkpKQotCi0gICAgZGVmIGNsZWFudXAoc2VsZik6Ci0gICAgICAgIHNlbGYua2lsbF9k
dW1wX3JlbmRlcl90cmVlKCkKLSAgICAgICAgaWYgc2VsZi5oYXNfaHR0cF9sb2NrOgotICAgICAg
ICAgICAgc2VsZi5zdG9wX3NlcnZlcnNfd2l0aF9sb2NrKCkKLQotICAgIGRlZiBfZ2V0X3Rlc3Rf
dHlwZV9jbGFzc2VzKHNlbGYpOgotICAgICAgICBjbGFzc2VzID0gW3RleHRfZGlmZi5UZXN0VGV4
dERpZmZdCi0gICAgICAgIGlmIHNlbGYuX29wdGlvbnMucGl4ZWxfdGVzdHM6Ci0gICAgICAgICAg
ICBjbGFzc2VzLmFwcGVuZChpbWFnZV9kaWZmLkltYWdlRGlmZikKLSAgICAgICAgcmV0dXJuIGNs
YXNzZXMKLQotICAgIGRlZiB0aW1lb3V0KHNlbGYsIHRlc3RfaW5wdXQpOgotICAgICAgICAjIFdl
IGNhbGN1bGF0ZSBob3cgbG9uZyB3ZSBleHBlY3QgdGhlIHRlc3QgdG8gdGFrZS4KLSAgICAgICAg
IwotICAgICAgICAjIFRoZSBEdW1wUmVuZGVyVHJlZSB3YXRjaGRvZyB1c2VzIDIuNXggdGhlIHRp
bWVvdXQ7IHdlIHdhbnQgdG8gYmUKLSAgICAgICAgIyBsYXJnZXIgdGhhbiB0aGF0LiBXZSBhbHNv
IGFkZCBhIGxpdHRsZSBtb3JlIHBhZGRpbmcgaWYgd2UncmUKLSAgICAgICAgIyBydW5uaW5nIHRl
c3RzIGluIGEgc2VwYXJhdGUgdGhyZWFkLgotICAgICAgICAjCi0gICAgICAgICMgTm90ZSB0aGF0
IHdlIG5lZWQgdG8gY29udmVydCB0aGUgdGVzdCB0aW1lb3V0IGZyb20gYQotICAgICAgICAjIHN0
cmluZyB2YWx1ZSBpbiBtaWxsaXNlY29uZHMgdG8gYSBmbG9hdCBmb3IgUHl0aG9uLgotICAgICAg
ICBkcml2ZXJfdGltZW91dF9zZWMgPSAzLjAgKiBmbG9hdCh0ZXN0X2lucHV0LnRpbWVvdXQpIC8g
MTAwMC4wCi0gICAgICAgIGlmIG5vdCBzZWxmLl9vcHRpb25zLnJ1bl9zaW5nbHk6Ci0gICAgICAg
ICAgICByZXR1cm4gZHJpdmVyX3RpbWVvdXRfc2VjCi0KLSAgICAgICAgdGhyZWFkX3BhZGRpbmdf
c2VjID0gMS4wCi0gICAgICAgIHRocmVhZF90aW1lb3V0X3NlYyA9IGRyaXZlcl90aW1lb3V0X3Nl
YyArIHRocmVhZF9wYWRkaW5nX3NlYwotICAgICAgICByZXR1cm4gdGhyZWFkX3RpbWVvdXRfc2Vj
Ci0KLSAgICBkZWYgcnVuX3Rlc3Qoc2VsZiwgdGVzdF9pbnB1dCwgdGltZW91dCk6Ci0gICAgICAg
IGlmIHNlbGYuX29wdGlvbnMucnVuX3NpbmdseToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9y
dW5fdGVzdF9pbl9hbm90aGVyX3RocmVhZCh0ZXN0X2lucHV0LCB0aW1lb3V0KQotICAgICAgICBl
bHNlOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl90ZXN0X2luX3RoaXNfdGhyZWFkKHRl
c3RfaW5wdXQpCi0gICAgICAgIHJldHVybiByZXN1bHQKLQotICAgIGRlZiBfcnVuX3Rlc3RfaW5f
YW5vdGhlcl90aHJlYWQoc2VsZiwgdGVzdF9pbnB1dCwgdGhyZWFkX3RpbWVvdXRfc2VjKToKLSAg
ICAgICAgIiIiUnVuIGEgdGVzdCBpbiBhIHNlcGFyYXRlIHRocmVhZCwgZW5mb3JjaW5nIGEgaGFy
ZCB0aW1lIGxpbWl0LgotCi0gICAgICAgIFNpbmNlIHdlIGNhbiBvbmx5IGRldGVjdCB0aGUgdGVy
bWluYXRpb24gb2YgYSB0aHJlYWQsIG5vdCBhbnkgaW50ZXJuYWwKLSAgICAgICAgc3RhdGUgb3Ig
cHJvZ3Jlc3MsIHdlIGNhbiBvbmx5IHJ1biBwZXItdGVzdCB0aW1lb3V0cyB3aGVuIHJ1bm5pbmcg
dGVzdAotICAgICAgICBmaWxlcyBzaW5nbHkuCi0KLSAgICAgICAgQXJnczoKLSAgICAgICAgICB0
ZXN0X2lucHV0OiBPYmplY3QgY29udGFpbmluZyB0aGUgdGVzdCBmaWxlbmFtZSBhbmQgdGltZW91
dAotICAgICAgICAgIHRocmVhZF90aW1lb3V0X3NlYzogdGltZSB0byB3YWl0IGJlZm9yZSBraWxs
aW5nIHRoZSBkcml2ZXIgcHJvY2Vzcy4KLSAgICAgICAgUmV0dXJuczoKLSAgICAgICAgICBBIFRl
c3RSZXN1bHQKLSAgICAgICAgIiIiCi0gICAgICAgIHdvcmtlciA9IHNlbGYKLSAgICAgICAgcmVz
dWx0ID0gTm9uZQotCi0gICAgICAgIGRyaXZlciA9IHdvcmtlci5fcG9ydC5jcmVhdGVfZHJpdmVy
KHdvcmtlci5fd29ya2VyX251bWJlcikKLSAgICAgICAgZHJpdmVyLnN0YXJ0KCkKLQotICAgICAg
ICBjbGFzcyBTaW5nbGVUZXN0VGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgotICAgICAgICAgICAg
ZGVmIHJ1bihzZWxmKToKLSAgICAgICAgICAgICAgICByZXN1bHQgPSB3b3JrZXIucnVuKHRlc3Rf
aW5wdXQsIGRyaXZlcikKLQotICAgICAgICB0aHJlYWQgPSBTaW5nbGVUZXN0VGhyZWFkKCkKLSAg
ICAgICAgdGhyZWFkLnN0YXJ0KCkKLSAgICAgICAgdGhyZWFkLmpvaW4odGhyZWFkX3RpbWVvdXRf
c2VjKQotICAgICAgICBpZiB0aHJlYWQuaXNBbGl2ZSgpOgotICAgICAgICAgICAgIyBJZiBqb2lu
KCkgcmV0dXJuZWQgd2l0aCB0aGUgdGhyZWFkIHN0aWxsIHJ1bm5pbmcsIHRoZQotICAgICAgICAg
ICAgIyBEdW1wUmVuZGVyVHJlZSBpcyBjb21wbGV0ZWx5IGh1bmcgYW5kIHRoZXJlJ3Mgbm90aGlu
ZwotICAgICAgICAgICAgIyBtb3JlIHdlIGNhbiBkbyB3aXRoIGl0LiAgV2UgaGF2ZSB0byBraWxs
IGFsbCB0aGUKLSAgICAgICAgICAgICMgRHVtcFJlbmRlclRyZWVzIHRvIGZyZWUgaXQgdXAuIElm
IHdlJ3JlIHJ1bm5pbmcgbW9yZSB0aGFuCi0gICAgICAgICAgICAjIG9uZSBEdW1wUmVuZGVyVHJl
ZSB0aHJlYWQsIHdlJ2xsIGVuZCB1cCBraWxsaW5nIHRoZSBvdGhlcgotICAgICAgICAgICAgIyBE
dW1wUmVuZGVyVHJlZXMgdG9vLCBpbnRyb2R1Y2luZyBzcHVyaW91cyBjcmFzaGVzLiBXZSBhY2Nl
cHQKLSAgICAgICAgICAgICMgdGhhdCB0cmFkZW9mZiBpbiBvcmRlciB0byBhdm9pZCBsb3Npbmcg
dGhlIHJlc3Qgb2YgdGhpcwotICAgICAgICAgICAgIyB0aHJlYWQncyByZXN1bHRzLgotICAgICAg
ICAgICAgX2xvZy5lcnJvcignVGVzdCB0aHJlYWQgaHVuZzoga2lsbGluZyBhbGwgRHVtcFJlbmRl
clRyZWVzJykKLQotICAgICAgICBkcml2ZXIuc3RvcCgpCi0KLSAgICAgICAgaWYgbm90IHJlc3Vs
dDoKLSAgICAgICAgICAgIHJlc3VsdCA9IFRlc3RSZXN1bHQodGVzdF9pbnB1dC5maWxlbmFtZSwg
ZmFpbHVyZXM9W10sCi0gICAgICAgICAgICAgICAgdGVzdF9ydW5fdGltZT0wLCB0b3RhbF90aW1l
X2Zvcl9hbGxfZGlmZnM9MCwgdGltZV9mb3JfZGlmZnM9e30pCi0gICAgICAgIHJldHVybiByZXN1
bHQKLQotICAgIGRlZiBfcnVuX3Rlc3RfaW5fdGhpc190aHJlYWQoc2VsZiwgdGVzdF9pbnB1dCk6
Ci0gICAgICAgICIiIlJ1biBhIHNpbmdsZSB0ZXN0IGZpbGUgdXNpbmcgYSBzaGFyZWQgRHVtcFJl
bmRlclRyZWUgcHJvY2Vzcy4KLQotICAgICAgICBBcmdzOgotICAgICAgICAgIHRlc3RfaW5wdXQ6
IE9iamVjdCBjb250YWluaW5nIHRoZSB0ZXN0IGZpbGVuYW1lLCB1cmkgYW5kIHRpbWVvdXQKLQot
ICAgICAgICBSZXR1cm5zOiBhIFRlc3RSZXN1bHQgb2JqZWN0LgotICAgICAgICAiIiIKLSAgICAg
ICAgIyBwb2xsKCkgaXMgbm90IHRocmVhZHNhZmUgYW5kIGNhbiB0aHJvdyBPU0Vycm9yIGR1ZSB0
bzoKLSAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTczMTcxNwotICAgICAg
ICBpZiBub3Qgc2VsZi5fZHJpdmVyIG9yIHNlbGYuX2RyaXZlci5wb2xsKCkgaXMgbm90IE5vbmU6
Ci0gICAgICAgICAgICBzZWxmLl9kcml2ZXIgPSBzZWxmLl9wb3J0LmNyZWF0ZV9kcml2ZXIoc2Vs
Zi5fd29ya2VyX251bWJlcikKLSAgICAgICAgICAgIHNlbGYuX2RyaXZlci5zdGFydCgpCi0gICAg
ICAgIHJldHVybiBzZWxmLl9ydW4oc2VsZi5fZHJpdmVyLCB0ZXN0X2lucHV0KQorICAgICAgICBz
ZWxmLl90ZXN0X3R5cGVzID0gdGVzdF90eXBlcworICAgICAgICBzZWxmLl90ZXN0bmFtZSA9IHBv
cnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZSh0ZXN0X2lucHV0LmZpbGVuYW1lKQogCiAgICAgZGVm
IF9leHBlY3RlZF9kcml2ZXJfb3V0cHV0KHNlbGYpOgogICAgICAgICByZXR1cm4gRXhwZWN0ZWRE
cml2ZXJPdXRwdXQoc2VsZi5fcG9ydC5leHBlY3RlZF90ZXh0KHNlbGYuX2ZpbGVuYW1lKSwKQEAg
LTE2OCwxMSArNzQsNyBAQCBjbGFzcyBTaW5nbGVUZXN0UnVubmVyOgogICAgICAgICByZXR1cm4g
KHNlbGYuX29wdGlvbnMucGl4ZWxfdGVzdHMgYW5kCiAgICAgICAgICAgICAgICAgbm90IChzZWxm
Ll9vcHRpb25zLm5ld19iYXNlbGluZSBvciBzZWxmLl9vcHRpb25zLnJlc2V0X3Jlc3VsdHMpKQog
Ci0gICAgZGVmIF9kcml2ZXJfaW5wdXQoc2VsZiwgdGVzdF9pbnB1dCk6Ci0gICAgICAgIHNlbGYu
X2ZpbGVuYW1lID0gdGVzdF9pbnB1dC5maWxlbmFtZQotICAgICAgICBzZWxmLl90aW1lb3V0ID0g
dGVzdF9pbnB1dC50aW1lb3V0Ci0gICAgICAgIHNlbGYuX3Rlc3RuYW1lID0gc2VsZi5fcG9ydC5y
ZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKHRlc3RfaW5wdXQuZmlsZW5hbWUpCi0KKyAgICBkZWYgX2Ry
aXZlcl9pbnB1dChzZWxmKToKICAgICAgICAgIyBUaGUgaW1hZ2UgaGFzaCBpcyB1c2VkIHRvIGF2
b2lkIGRvaW5nIGFuIGltYWdlIGR1bXAgaWYgdGhlCiAgICAgICAgICMgY2hlY2tzdW1zIG1hdGNo
LCBzbyBpdCBzaG91bGQgYmUgc2V0IHRvIGEgYmxhbmsgdmFsdWUgaWYgd2UKICAgICAgICAgIyBh
cmUgZ2VuZXJhdGluZyBhIG5ldyBiYXNlbGluZS4gIChPdGhlcndpc2UsIGFuIGltYWdlIGZyb20g
YQpAQCAtMTgyLDE3ICs4NCwxNyBAQCBjbGFzcyBTaW5nbGVUZXN0UnVubmVyOgogICAgICAgICAg
ICAgaW1hZ2VfaGFzaCA9IHNlbGYuX3BvcnQuZXhwZWN0ZWRfY2hlY2tzdW0oc2VsZi5fZmlsZW5h
bWUpCiAgICAgICAgIHJldHVybiBiYXNlLkRyaXZlcklucHV0KHNlbGYuX2ZpbGVuYW1lLCBzZWxm
Ll90aW1lb3V0LCBpbWFnZV9oYXNoKQogCi0gICAgZGVmIF9ydW4oc2VsZiwgZHJpdmVyLCB0ZXN0
X2lucHV0KToKKyAgICBkZWYgcnVuKHNlbGYpOgogICAgICAgICBpZiBzZWxmLl9vcHRpb25zLm5l
d19iYXNlbGluZSBvciBzZWxmLl9vcHRpb25zLnJlc2V0X3Jlc3VsdHM6Ci0gICAgICAgICAgICBy
ZXR1cm4gc2VsZi5fcnVuX3JlYmFzZWxpbmUoZHJpdmVyLCB0ZXN0X2lucHV0KQotICAgICAgICBy
ZXR1cm4gc2VsZi5fcnVuX2NvbXBhcmVfdGVzdChkcml2ZXIsIHRlc3RfaW5wdXQpCisgICAgICAg
ICAgICByZXR1cm4gc2VsZi5fcnVuX3JlYmFzZWxpbmUoKQorICAgICAgICByZXR1cm4gc2VsZi5f
cnVuX2NvbXBhcmVfdGVzdCgpCiAKLSAgICBkZWYgX3J1bl9jb21wYXJlX3Rlc3Qoc2VsZiwgZHJp
dmVyLCB0ZXN0X2lucHV0KToKLSAgICAgICAgZHJpdmVyX291dHB1dCA9IHNlbGYuX2RyaXZlci5y
dW5fdGVzdChzZWxmLl9kcml2ZXJfaW5wdXQodGVzdF9pbnB1dCkpCisgICAgZGVmIF9ydW5fY29t
cGFyZV90ZXN0KHNlbGYpOgorICAgICAgICBkcml2ZXJfb3V0cHV0ID0gc2VsZi5fZHJpdmVyLnJ1
bl90ZXN0KHNlbGYuX2RyaXZlcl9pbnB1dCgpKQogICAgICAgICByZXR1cm4gc2VsZi5fcHJvY2Vz
c19vdXRwdXQoZHJpdmVyX291dHB1dCkKIAotICAgIGRlZiBfcnVuX3JlYmFzZWxpbmUoc2VsZiwg
ZHJpdmVyLCB0ZXN0X2lucHV0KToKLSAgICAgICAgZHJpdmVyX291dHB1dCA9IHNlbGYuX2RyaXZl
ci5ydW5fdGVzdChzZWxmLl9kcml2ZXJfaW5wdXQodGVzdF9pbnB1dCkpCisgICAgZGVmIF9ydW5f
cmViYXNlbGluZShzZWxmKToKKyAgICAgICAgZHJpdmVyX291dHB1dCA9IHNlbGYuX2RyaXZlci5y
dW5fdGVzdChzZWxmLl9kcml2ZXJfaW5wdXQoKSkKICAgICAgICAgZmFpbHVyZXMgPSBzZWxmLl9o
YW5kbGVfZXJyb3IoZHJpdmVyX291dHB1dCkKICAgICAgICAgIyBGSVhNRTogSXQgdGhlIHRlc3Qg
Y3Jhc2hlZCBvciB0aW1lZCBvdXQsIGl0IG1pZ2h0IGJlIGJldHR0ZXIgdG8gYXZvaWQKICAgICAg
ICAgIyB0byB3cml0ZSBuZXcgYmFzZWxpbmVzLgpAQCAtMjk3LDI5ICsxOTksMyBAQCBjbGFzcyBT
aW5nbGVUZXN0UnVubmVyOgogICAgICAgICB0b3RhbF90aW1lX2Zvcl9hbGxfZGlmZnMgPSB0aW1l
LnRpbWUoKSAtIHN0YXJ0X2RpZmZfdGltZQogICAgICAgICByZXR1cm4gVGVzdFJlc3VsdChzZWxm
Ll9maWxlbmFtZSwgZmFpbHVyZXMsIGRyaXZlcl9vdXRwdXQudGVzdF90aW1lLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICB0b3RhbF90aW1lX2Zvcl9hbGxfZGlmZnMsIHRpbWVfZm9yX2RpZmZz
KQotCi0gICAgZGVmIHN0YXJ0X3NlcnZlcnNfd2l0aF9sb2NrKHNlbGYpOgotICAgICAgICBfbG9n
LmRlYnVnKCdBY3F1aXJpbmcgaHR0cCBsb2NrIC4uLicpCi0gICAgICAgIHNlbGYuX3BvcnQuYWNx
dWlyZV9odHRwX2xvY2soKQotICAgICAgICBfbG9nLmRlYnVnKCdTdGFydGluZyBIVFRQIHNlcnZl
ciAuLi4nKQotICAgICAgICBzZWxmLl9wb3J0LnN0YXJ0X2h0dHBfc2VydmVyKCkKLSAgICAgICAg
X2xvZy5kZWJ1ZygnU3RhcnRpbmcgV2ViU29ja2V0IHNlcnZlciAuLi4nKQotICAgICAgICBzZWxm
Ll9wb3J0LnN0YXJ0X3dlYnNvY2tldF9zZXJ2ZXIoKQotICAgICAgICBzZWxmLmhhc19odHRwX2xv
Y2sgPSBUcnVlCi0KLSAgICBkZWYgc3RvcF9zZXJ2ZXJzX3dpdGhfbG9jayhzZWxmKToKLSAgICAg
ICAgIiIiU3RvcCB0aGUgc2VydmVycyBhbmQgcmVsZWFzZSBodHRwIGxvY2suIiIiCi0gICAgICAg
IGlmIHNlbGYuaGFzX2h0dHBfbG9jazoKLSAgICAgICAgICAgIF9sb2cuZGVidWcoJ1N0b3BwaW5n
IEhUVFAgc2VydmVyIC4uLicpCi0gICAgICAgICAgICBzZWxmLl9wb3J0LnN0b3BfaHR0cF9zZXJ2
ZXIoKQotICAgICAgICAgICAgX2xvZy5kZWJ1ZygnU3RvcHBpbmcgV2ViU29ja2V0IHNlcnZlciAu
Li4nKQotICAgICAgICAgICAgc2VsZi5fcG9ydC5zdG9wX3dlYnNvY2tldF9zZXJ2ZXIoKQotICAg
ICAgICAgICAgX2xvZy5kZWJ1ZygnUmVsZWFzaW5nIHNlcnZlciBsb2NrIC4uLicpCi0gICAgICAg
ICAgICBzZWxmLl9wb3J0LnJlbGVhc2VfaHR0cF9sb2NrKCkKLSAgICAgICAgICAgIHNlbGYuaGFz
X2h0dHBfbG9jayA9IEZhbHNlCi0KLSAgICBkZWYga2lsbF9kdW1wX3JlbmRlcl90cmVlKHNlbGYp
OgotICAgICAgICAiIiJLaWxsIHRoZSBEdW1wUmVuZGVyVHJlZSBwcm9jZXNzIGlmIGl0J3MgcnVu
bmluZy4iIiIKLSAgICAgICAgaWYgc2VsZi5fZHJpdmVyOgotICAgICAgICAgICAgc2VsZi5fZHJp
dmVyLnN0b3AoKQotICAgICAgICAgICAgc2VsZi5fZHJpdmVyID0gTm9uZQpkaWZmIC0tZ2l0IGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9y
dW5uZXIyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3Bh
Y2thZ2UvdGVzdF9ydW5uZXIyLnB5CmluZGV4IGViNzg3NTI1NWMzYzNjMTBjYzY4MWU1YmQxZmU4
MDFlMzgxOGNiZjcuLjU3MDQ2MjllNDVkZDk2NDRkOGY0MmE0NWY1ODY2ZDM2ZmQ1NzE1NTEgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNr
YWdlL3Rlc3RfcnVubmVyMi5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X3J1bm5lcjIucHkKQEAgLTI5LDI1ICsyOSwxOTIgQEAK
IAogIiIiCiBUaGUgVGVzdFJ1bm5lcjIgcGFja2FnZSBpcyBhbiBhbHRlcm5hdGUgaW1wbGVtZW50
YXRpb24gb2YgdGhlIFRlc3RSdW5uZXIKLWNsYXNzLiBGb3Igbm93IGl0IGlzIGp1c3QgYSBzdHVi
LCBidXQgZXZlbnR1YWxseSBpdCB3aWxsIHVzZSB0aGUKLW1lc3NhZ2UgYnJva2VyIGFic3RyYWN0
aW9uIHRvIHBhc3MgbWVzc2FnZXMgdG8gd29ya2VycyB0byBydW4gc2V0cyBvZgotdGVzdHMgYW5k
IHRoZW4gcHJvY2VzcyB0aGUgY29tcGxldGlvbiBtZXNzYWdlcyBhY2NvcmRpbmdseS4KK2NsYXNz
IHRoYXQgdXNlcyB0aGUgbWFuYWdlcl93b3JrZXJfYnJva2VyIG1vZHVsZSB0byBzZW5kIHNldHMg
b2YgdGVzdHMgdG8KK3dvcmtlcnMgYW5kIHJlY2VpdmUgdGhlaXIgY29tcGxldGlvbiBtZXNzYWdl
cyBhY2NvcmRpbmdseS4KICIiIgogCiBpbXBvcnQgbG9nZ2luZworaW1wb3J0IHRpbWUKKworZnJv
bSB3ZWJraXRweS50b29sIGltcG9ydCBncmFtbWFyCisKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rl
c3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCBtYW5hZ2VyX3dvcmtlcl9icm9rZXIKK2Zyb20gd2Vi
a2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCB3b3JrZXIKK2Zyb20gd2Vi
a2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X3J1bm5lcgogCi1p
bXBvcnQgdGVzdF9ydW5uZXIKIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQog
CiAKK2NsYXNzIF9Xb3JrZXJTdGF0ZShvYmplY3QpOgorICAgICIiIkEgY2xhc3MgZm9yIHRoZSBU
ZXN0UnVubmVyL21hbmFnZXIgdG8gdXNlIHRvIHRyYWNrIHRoZSBjdXJyZW50IHN0YXRlCisgICAg
b2YgdGhlIHdvcmtlcnMuIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG51bWJlciwgd29ya2Vy
KToKKyAgICAgICAgc2VsZi53b3JrZXIgPSB3b3JrZXIKKyAgICAgICAgc2VsZi5udW1iZXIgPSBu
dW1iZXIKKyAgICAgICAgc2VsZi5kb25lID0gRmFsc2UKKyAgICAgICAgc2VsZi5jdXJyZW50X3Rl
c3RfbmFtZSA9IE5vbmUKKyAgICAgICAgc2VsZi5uZXh0X3RpbWVvdXQgPSBOb25lCisgICAgICAg
IHNlbGYud2VkZ2VkID0gRmFsc2UKKyAgICAgICAgc2VsZi5zdGF0cyA9IHt9CisgICAgICAgIHNl
bGYuc3RhdHNbJ25hbWUnXSA9IHdvcmtlci5uYW1lCisgICAgICAgIHNlbGYuc3RhdHNbJ251bV90
ZXN0cyddID0gMAorICAgICAgICBzZWxmLnN0YXRzWyd0b3RhbF90aW1lJ10gPSAwCisKKyAgICBk
ZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiX1dvcmtlclN0YXRlKCIgKyBzdHIo
c2VsZi5fX2RpY3RfXykgKyAiKSIKKworCiBjbGFzcyBUZXN0UnVubmVyMih0ZXN0X3J1bm5lci5U
ZXN0UnVubmVyKToKICAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucywgcHJpbnRl
cik6CisgICAgICAgIHRlc3RfcnVubmVyLlRlc3RSdW5uZXIuX19pbml0X18oc2VsZiwgcG9ydCwg
b3B0aW9ucywgcHJpbnRlcikKKyAgICAgICAgc2VsZi5fYWxsX3Jlc3VsdHMgPSBbXQorICAgICAg
ICBzZWxmLl9ncm91cF9zdGF0cyA9IHt9CisgICAgICAgIHNlbGYuX2N1cnJlbnRfcmVzdWx0X3N1
bW1hcnkgPSBOb25lCisgICAgICAgIHNlbGYuX2RvbmUgPSBGYWxzZQogCi0gICAgICAgICMgRklY
TUU6IFRoaXMnbGwgZ2V0IHJlcGxhY2VkIHdpdGggYSByZWFsIGltcGxlbWVudGF0aW9uIHNvb24g
ZW5vdWdoLgotICAgICAgICBpZiBvcHRpb25zLndvcmtlcl9tb2RlbCBpbiAoJ2lubGluZScsICd0
aHJlYWRzJyk6Ci0gICAgICAgICAgICBvcHRpb25zLndvcmtlcl9tb2RlbCA9ICdvbGQtJyArIG9w
dGlvbnMud29ya2VyX21vZGVsCi0gICAgICAgIGlmIG9wdGlvbnMud29ya2VyX21vZGVsID09ICdw
cm9jZXNzZXMnOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiLS13b3JrZXItbW9kZWw9
cHJvY2Vzc2VzIG5vdCBzdXBwb3J0ZWQgeWV0IikKKyAgICAgICAgIyBUaGlzIG1hcHMgd29ya2Vy
IG5hbWVzIHRvIHRoZSBzdGF0ZSB3ZSBhcmUgdHJhY2tpbmcgZm9yIGVhY2ggb2YgdGhlbS4KKyAg
ICAgICAgc2VsZi5fd29ya2VycyA9IHt9CiAKLSAgICAgICAgdGVzdF9ydW5uZXIuVGVzdFJ1bm5l
ci5fX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zLCBwcmludGVyKQorICAgIGRlZiBpc19kb25l
KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZG9uZQorCisgICAgZGVmIG5hbWUoc2VsZik6
CisgICAgICAgIHJldHVybiAnVGVzdFJ1bm5lcjInCisKKyAgICBkZWYgX3J1bl90ZXN0cyhzZWxm
LCBmaWxlX2xpc3QsIHJlc3VsdF9zdW1tYXJ5KToKKyAgICAgICAgIiIiUnVucyB0aGUgdGVzdHMg
aW4gdGhlIGZpbGVfbGlzdC4KKworICAgICAgICBSZXR1cm46IEEgdHVwbGUgKGtleWJvYXJkX2lu
dGVycnVwdGVkLCB0aHJlYWRfdGltaW5ncywgdGVzdF90aW1pbmdzLAorICAgICAgICAgICAgaW5k
aXZpZHVhbF90ZXN0X3RpbWluZ3MpCisgICAgICAgICAgICBrZXlib2FyZF9pbnRlcnJ1cHRlZCBp
cyB3aGV0aGVyIHNvbWVvbmUgdHlwZWQgQ3RybF5DCisgICAgICAgICAgICB0aHJlYWRfdGltaW5n
cyBpcyBhIGxpc3Qgb2YgZGljdHMgd2l0aCB0aGUgdG90YWwgcnVudGltZQorICAgICAgICAgICAg
ICBvZiBlYWNoIHRocmVhZCB3aXRoICduYW1lJywgJ251bV90ZXN0cycsICd0b3RhbF90aW1lJyBw
cm9wZXJ0aWVzCisgICAgICAgICAgICB0ZXN0X3RpbWluZ3MgaXMgYSBsaXN0IG9mIHRpbWluZ3Mg
Zm9yIGVhY2ggc2hhcmRlZCBzdWJkaXJlY3RvcnkKKyAgICAgICAgICAgICAgb2YgdGhlIGZvcm0g
W3RpbWUsIGRpcmVjdG9yeV9uYW1lLCBudW1fdGVzdHNdCisgICAgICAgICAgICBpbmRpdmlkdWFs
X3Rlc3RfdGltaW5ncyBpcyBhIGxpc3Qgb2YgcnVuIHRpbWVzIGZvciBlYWNoIHRlc3QKKyAgICAg
ICAgICAgICAgaW4gdGhlIGZvcm0ge2ZpbGVuYW1lOmZpbGVuYW1lLCB0ZXN0X3J1bl90aW1lOnRl
c3RfcnVuX3RpbWV9CisgICAgICAgICAgICByZXN1bHRfc3VtbWFyeTogc3VtbWFyeSBvYmplY3Qg
dG8gcG9wdWxhdGUgd2l0aCB0aGUgcmVzdWx0cworICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5f
Y3VycmVudF9yZXN1bHRfc3VtbWFyeSA9IHJlc3VsdF9zdW1tYXJ5CisgICAgICAgIHNlbGYuX2Fs
bF9yZXN1bHRzID0gW10KKyAgICAgICAgc2VsZi5fZ3JvdXBfc3RhdHMgPSB7fQorICAgICAgICBz
ZWxmLl93b3JrZXJzID0ge30KKworICAgICAgICBudW1fd29ya2VycyA9IHNlbGYuX251bV93b3Jr
ZXJzKCkKKworICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgnU2hhcmRpbmcgdGVz
dHMgLi4uJykKKyAgICAgICAgdGVzdF9saXN0cyA9IHNlbGYuX3NoYXJkX3Rlc3RzKGZpbGVfbGlz
dCwKKyAgICAgICAgICAgIG51bV93b3JrZXJzID4gMSBhbmQgbm90IHNlbGYuX29wdGlvbnMuZXhw
ZXJpbWVudGFsX2Z1bGx5X3BhcmFsbGVsKQorICAgICAgICBfbG9nLmRlYnVnKCJVc2luZyAlZCBz
aGFyZHMiICUgbGVuKHRlc3RfbGlzdHMpKQorCisgICAgICAgIG1hbmFnZXJfY29ubmVjdGlvbiA9
IG1hbmFnZXJfd29ya2VyX2Jyb2tlci5nZXQoc2VsZi5fcG9ydCwgc2VsZi5fb3B0aW9ucywgc2Vs
Ziwgd29ya2VyLldvcmtlcikKKworICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgn
U3RhcnRpbmcgJXMgLi4uJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdy
YW1tYXIucGx1cmFsaXplKCd3b3JrZXInLCBudW1fd29ya2VycykpCisgICAgICAgIGZvciB3b3Jr
ZXJfbnVtYmVyIGluIHhyYW5nZShudW1fd29ya2Vycyk6CisgICAgICAgICAgICB3ID0gbWFuYWdl
cl9jb25uZWN0aW9uLnN0YXJ0X3dvcmtlcih3b3JrZXJfbnVtYmVyKQorICAgICAgICAgICAgd3Mg
PSBfV29ya2VyU3RhdGUod29ya2VyX251bWJlciwgdykKKyAgICAgICAgICAgIHNlbGYuX3dvcmtl
cnNbdy5uYW1lXSA9IHdzCisKKyAgICAgICAgICAgICMgV2Ugc2xlZXAgYSBiaXQgaW4gYmV0d2Vl
biB3b3JrZXJzIHRvIGdpdmUgdGhlIHByb2Nlc3NlcyBhIGNoYW5jZQorICAgICAgICAgICAgIyB0
byBzdGFydCB1cCB3aXRob3V0IHRocmFzaGluZy4KKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4x
KQorCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCJTdGFydGluZyB0ZXN0aW5n
IC4uLiIpCisgICAgICAgIGZvciB0ZXN0X2xpc3QgaW4gdGVzdF9saXN0czoKKyAgICAgICAgICAg
IG1hbmFnZXJfY29ubmVjdGlvbi5wb3N0X21lc3NhZ2UoJ3Rlc3RfbGlzdCcsIHRlc3RfbGlzdFsw
XSwgdGVzdF9saXN0WzFdKQorCisgICAgICAgIGZvciBpIGluIHhyYW5nZShudW1fd29ya2Vycyk6
CisgICAgICAgICAgICBtYW5hZ2VyX2Nvbm5lY3Rpb24ucG9zdF9tZXNzYWdlKCdzdG9wJykKKwor
ICAgICAgICBrZXlib2FyZF9pbnRlcnJ1cHRlZCA9IEZhbHNlCisgICAgICAgIGludGVycnVwdGVk
ID0gRmFsc2UKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX29wdGlvbnMu
ZHJ5X3J1bjoKKyAgICAgICAgICAgICAgICB3aGlsZSBub3Qgc2VsZi5fY2hlY2tfaWZfZG9uZSgp
OgorICAgICAgICAgICAgICAgICAgICBtYW5hZ2VyX2Nvbm5lY3Rpb24ucnVuX21lc3NhZ2VfbG9v
cChkZWxheV9zZWNzPTEuMCkKKworICAgICAgICAgICAgICAgICMgTWFrZSBzdXJlIGFsbCBvZiB0
aGUgd29ya2VycyBoYXZlIHNodXQgZG93biAoaWYgcG9zc2libGUpLgorICAgICAgICAgICAgICAg
IGZvciB3IGluIHNlbGYuX3dvcmtlcnMudmFsdWVzKCk6CisgICAgICAgICAgICAgICAgICAgIGlm
IG5vdCB3LndlZGdlZCBhbmQgdy53b3JrZXIuaXNfYWxpdmUoKToKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHcud29ya2VyLmpvaW4oMC41KQorICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0
IG5vdCB3Lndvcmtlci5pc19hbGl2ZSgpCisgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVw
dDoKKyAgICAgICAgICAgIF9sb2cuaW5mbygiSW50ZXJydXB0ZWQsIGV4aXRpbmciKQorICAgICAg
ICAgICAgZm9yIHcgaW4gc2VsZi5fd29ya2Vycy52YWx1ZXMoKToKKyAgICAgICAgICAgICAgICB3
Lndvcmtlci5jYW5jZWwoKQorICAgICAgICAgICAga2V5Ym9hcmRfaW50ZXJydXB0ZWQgPSBUcnVl
CisgICAgICAgIGV4Y2VwdCB0ZXN0X3J1bm5lci5UZXN0UnVuSW50ZXJydXB0ZWRFeGNlcHRpb24s
IGU6CisgICAgICAgICAgICBfbG9nLmluZm8oZS5yZWFzb24pCisgICAgICAgICAgICBtYW5hZ2Vy
X2Nvbm5lY3Rpb24uY2FuY2VsX3dvcmtlcnMoKQorICAgICAgICAgICAgaW50ZXJydXB0ZWQgPSBU
cnVlCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICMgVW5leHBlY3RlZCBleGNlcHRpb247
IGRvbid0IHRyeSB0byBjbGVhbiB1cCB3b3JrZXJzLgorICAgICAgICAgICAgX2xvZy5pbmZvKCJF
eGNlcHRpb24gcmFpc2VkLCBleGl0aW5nIikKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAg
dGhyZWFkX3RpbWluZ3MgPSBbdy5zdGF0cyBmb3IgdyBpbiBzZWxmLl93b3JrZXJzLnZhbHVlcygp
XQorICAgICAgICByZXR1cm4gKGludGVycnVwdGVkLCBrZXlib2FyZF9pbnRlcnJ1cHRlZCwgdGhy
ZWFkX3RpbWluZ3MsCisgICAgICAgICAgICAgICAgc2VsZi5fZ3JvdXBfc3RhdHMsIHNlbGYuX2Fs
bF9yZXN1bHRzKQorCisgICAgZGVmIF9jaGVja19pZl9kb25lKHNlbGYpOgorICAgICAgICAiIiJS
ZXR1cm5zIHRydWUgaWZmIGFsbCB0aGUgd29ya2VycyBoYXZlIGVpdGhlciBjb21wbGV0ZWQgb3Ig
d2VkZ2VkLiIiIgorICAgICAgICBkb25lID0gVHJ1ZQorICAgICAgICB0ID0gdGltZS50aW1lKCkK
KyAgICAgICAgZm9yIHcgaW4gc2VsZi5fd29ya2Vycy52YWx1ZXMoKToKKyAgICAgICAgICAgIGlm
IG5vdCB3LmRvbmUgYW5kIG5vdCB3LndlZGdlZDoKKyAgICAgICAgICAgICAgICBuZXh0X3RpbWVv
dXQgPSB3Lm5leHRfdGltZW91dAorICAgICAgICAgICAgICAgIFdFREdFX1BBRERJTkcgPSA0MC4w
CisgICAgICAgICAgICAgICAgaWYgbmV4dF90aW1lb3V0IGFuZCB0ID4gbmV4dF90aW1lb3V0ICsg
V0VER0VfUEFERElORzoKKyAgICAgICAgICAgICAgICAgICAgX2xvZy5lcnJvcignJykKKyAgICAg
ICAgICAgICAgICAgICAgdy53b3JrZXIubG9nX3dlZGdlZF93b3JrZXIody5jdXJyZW50X3Rlc3Rf
bmFtZSkKKyAgICAgICAgICAgICAgICAgICAgX2xvZy5lcnJvcignJykKKyAgICAgICAgICAgICAg
ICAgICAgdy53ZWRnZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAg
ICAgICAgICAgZG9uZSA9IEZhbHNlCisKKyAgICAgICAgaWYgZG9uZToKKyAgICAgICAgICAgIGlm
IGFueShbdy53ZWRnZWQgZm9yIHcgaW4gc2VsZi5fd29ya2Vycy52YWx1ZXMoKV0pOgorICAgICAg
ICAgICAgICAgIF9sb2cuZXJyb3IoJycpCisgICAgICAgICAgICAgICAgX2xvZy5lcnJvcignUmVt
YWluaW5nIHdvcmtlcnMgYXJlIHdlZGdlZCwgYmFpbGluZyBvdXQuJykKKyAgICAgICAgICAgICAg
ICBfbG9nLmVycm9yKCcnKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBfbG9n
LmRlYnVnKCdObyB3ZWRnZWQgdGhyZWFkcycpCisKKyAgICAgICAgIyBGSVhNRTogaXMgdGhlIGZv
bGxvd2luZyBsaW5lIHNhZmU/CisgICAgICAgICMgc2VsZi5fZG9uZSA9IGRvbmUKKyAgICAgICAg
cmV0dXJuIGRvbmUKKworICAgIGRlZiBoYW5kbGVfc3RhcnRlZF90ZXN0KHNlbGYsIHNyYywgdGVz
dF9pbmZvLCBoYW5nX3RpbWVvdXQpOgorICAgICAgICB3ID0gc2VsZi5fd29ya2Vyc1tzcmNdCisg
ICAgICAgIHcuY3VycmVudF90ZXN0X25hbWUgPSBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmls
ZW5hbWUodGVzdF9pbmZvLmZpbGVuYW1lKQorICAgICAgICB3Lm5leHRfdGltZW91dCA9IHRpbWUu
dGltZSgpICsgaGFuZ190aW1lb3V0CisKKyAgICBkZWYgaGFuZGxlX2RvbmUoc2VsZiwgc3JjKToK
KyAgICAgICAgdyA9IHNlbGYuX3dvcmtlcnNbc3JjXQorICAgICAgICB3LmRvbmUgPSBUcnVlCisK
KyAgICBkZWYgaGFuZGxlX2V4Y2VwdGlvbihzZWxmLCBzcmMsIGV4Y2VwdGlvbl9pbmZvKToKKyAg
ICAgICAgcmFpc2UgZXhjZXB0aW9uX2luZm8KKworICAgIGRlZiBoYW5kbGVfZmluaXNoZWRfbGlz
dChzZWxmLCBzcmMsIGxpc3RfbmFtZSwgbnVtX3Rlc3RzLCBlbGFwc2VkX3RpbWUpOgorICAgICAg
ICBzZWxmLl9ncm91cF9zdGF0c1tsaXN0X25hbWVdID0gKG51bV90ZXN0cywgZWxhcHNlZF90aW1l
KQorCisgICAgZGVmIGhhbmRsZV9maW5pc2hlZF90ZXN0KHNlbGYsIHNyYywgcmVzdWx0LCBlbGFw
c2VkX3RpbWUpOgorICAgICAgICB3ID0gc2VsZi5fd29ya2Vyc1tzcmNdCisgICAgICAgIHcubmV4
dF90aW1lb3V0ID0gTm9uZQorICAgICAgICB3LmN1cnJlbnRfdGVzdF9uYW1lID0gTm9uZQorCisg
ICAgICAgIGlmIHcud2VkZ2VkOgorICAgICAgICAgICAgIyBIbW0uIFRoaXMgc2hvdWxkbid0IGhh
cHBlbiBpZiB3ZSBoYXZlIG91ciB0aW1lb3V0cworICAgICAgICAgICAgIyB0dW5lZCBwcm9wZXJs
eS4KKyAgICAgICAgICAgIF9sb2cuZXJyb3IoIiVzIHVud2VkZ2VkIiwgdy5uYW1lKQorCisgICAg
ICAgIHNlbGYuX2FsbF9yZXN1bHRzLmFwcGVuZChyZXN1bHQpCisgICAgICAgIHNlbGYuX3VwZGF0
ZV93b3JrZXJfc3RhdHMoc3JjLCByZXN1bHQsIGVsYXBzZWRfdGltZSkKKyAgICAgICAgc2VsZi5f
dXBkYXRlX3N1bW1hcnlfd2l0aF9yZXN1bHQoc2VsZi5fY3VycmVudF9yZXN1bHRfc3VtbWFyeSwg
cmVzdWx0KQorCisgICAgZGVmIF91cGRhdGVfd29ya2VyX3N0YXRzKHNlbGYsIHNyYywgcmVzdWx0
LCBlbGFwc2VkX3RpbWUpOgorICAgICAgICBzZWxmLl93b3JrZXJzW3NyY10uc3RhdHNbJ3RvdGFs
X3RpbWUnXSArPSBlbGFwc2VkX3RpbWUKKyAgICAgICAgc2VsZi5fd29ya2Vyc1tzcmNdLnN0YXRz
WydudW1fdGVzdHMnXSArPSAxCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS93b3JrZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS93b3JrZXIucHkKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGVh
YWZmZWE2OTlkNWJkNzFmNzcyYzA2ZmIwN2E3ZDgxYzg0ODk4MwotLS0gL2Rldi9udWxsCisrKyBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3dvcmtl
ci5weQpAQCAtMCwwICsxLDEyMiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMg
bWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
IyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIkhhbmRsZSBtZXNz
YWdlcyBmcm9tIHRoZSBUZXN0UnVubmVyIGFuZCBleGVjdXRlIGFjdHVhbCB0ZXN0cy4iIiIKKwor
aW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aW1lCisKK2Zyb20gd2Via2l0cHku
Y29tbW9uLnN5c3RlbSBpbXBvcnQgc3RhY2tfdXRpbHMKKworZnJvbSB3ZWJraXRweS5sYXlvdXRf
dGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IG1hbmFnZXJfd29ya2VyX2Jyb2tlcgorZnJvbSB3
ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IHdvcmtlcl9taXhpbgor
CisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKKworCitjbGFzcyBXb3JrZXIo
bWFuYWdlcl93b3JrZXJfYnJva2VyLkFic3RyYWN0V29ya2VyLCB3b3JrZXJfbWl4aW4uV29ya2Vy
TWl4aW4pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3b3JrZXJfY29ubmVjdGlvbiwgd29ya2Vy
X251bWJlciwgb3B0aW9ucyk6CisgICAgICAgIHNlbGYuX3dvcmtlcl9jb25uZWN0aW9uID0gd29y
a2VyX2Nvbm5lY3Rpb24KKyAgICAgICAgc2VsZi5fd29ya2VyX251bWJlciA9IHdvcmtlcl9udW1i
ZXIKKyAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKKyAgICAgICAgc2VsZi5fbmFtZSA9
ICd3b3JrZXIvJWQnICUgd29ya2VyX251bWJlcgorICAgICAgICBzZWxmLl9kb25lID0gRmFsc2UK
KyAgICAgICAgc2VsZi5fY2FuY2VsZWQgPSBGYWxzZQorICAgICAgICBzZWxmLl9wb3J0ID0gTm9u
ZQorCisgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgIHNlbGYuY2xlYW51cCgpCisKKyAg
ICBkZWYgY2FuY2VsKHNlbGYpOgorICAgICAgICAiIiJBdHRlbXB0IHRvIGFib3J0IHByb2Nlc3Np
bmcgKGJlc3QgZWZmb3J0KS4iIiIKKyAgICAgICAgc2VsZi5fY2FuY2VsZWQgPSBUcnVlCisKKyAg
ICBkZWYgaXNfZG9uZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2RvbmUgb3Igc2VsZi5f
Y2FuY2VsZWQKKworICAgIGRlZiBuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbmFt
ZQorCisgICAgZGVmIHJ1bihzZWxmLCBwb3J0KToKKyAgICAgICAgc2VsZi5kZWZlcnJlZF9pbml0
KHBvcnQpCisKKyAgICAgICAgZXhjZXB0aW9uX21zZyA9ICIiCisgICAgICAgIF9sb2cuZGVidWco
IiVzIHN0YXJ0aW5nIiAlIHNlbGYuX25hbWUpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAg
c2VsZi5fd29ya2VyX2Nvbm5lY3Rpb24ucnVuX21lc3NhZ2VfbG9vcCgpCisgICAgICAgICAgICBp
ZiBub3Qgc2VsZi5pc19kb25lKCk6CisgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJy
b3IoIiVzOiByYW4gb3V0IG9mIG1lc3NhZ2VzIGluIHdvcmtlciBxdWV1ZS4iCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBzZWxmLl9uYW1lKQorICAgICAgICBleGNlcHQg
S2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICBleGNlcHRpb25fbXNnID0gIiwgaW50ZXJy
dXB0ZWQiCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGV4Y2VwdGlvbl9tc2cgPSAiLCBl
eGNlcHRpb24gcmFpc2VkIgorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgX2xvZy5kZWJ1
ZygiJXMgZG9uZSVzIiAlIChzZWxmLl9uYW1lLCBleGNlcHRpb25fbXNnKSkKKyAgICAgICAgICAg
IGlmIGV4Y2VwdGlvbl9tc2c6CisgICAgICAgICAgICAgICAgZXhjX2luZm8gPSBzeXMuZXhjX2lu
Zm8oKQorICAgICAgICAgICAgICAgIHN0YWNrX3V0aWxzLmxvZ190cmFjZWJhY2soX2xvZy5lcnJv
ciwgZXhjX2luZm9bMl0pCisgICAgICAgICAgICAgICAgIyBGSVhNRTogRmlndXJlIG91dCBob3cg
dG8gc2VuZCBhIG1lc3NhZ2Ugd2l0aCBhIHRyYWNlYmFjay4KKyAgICAgICAgICAgICAgICBzZWxm
Ll93b3JrZXJfY29ubmVjdGlvbi5wb3N0X21lc3NhZ2UoJ2V4Y2VwdGlvbicsCisgICAgICAgICAg
ICAgICAgICAgIChleGNfaW5mb1swXSwgZXhjX2luZm9bMV0sIE5vbmUpKQorICAgICAgICAgICAg
c2VsZi5fd29ya2VyX2Nvbm5lY3Rpb24ucG9zdF9tZXNzYWdlKCdkb25lJykKKworICAgIGRlZiBo
YW5kbGVfdGVzdF9saXN0KHNlbGYsIHNyYywgbGlzdF9uYW1lLCB0ZXN0X2xpc3QpOgorICAgICAg
ICBpZiBsaXN0X25hbWUgPT0gInRlc3RzX3RvX2h0dHBfbG9jayI6CisgICAgICAgICAgICBzZWxm
LnN0YXJ0X3NlcnZlcnNfd2l0aF9sb2NrKCkKKworICAgICAgICBzdGFydF90aW1lID0gdGltZS50
aW1lKCkKKyAgICAgICAgbnVtX3Rlc3RzID0gMAorICAgICAgICBmb3IgdGVzdF9pbnB1dCBpbiB0
ZXN0X2xpc3Q6CisgICAgICAgICAgICBzZWxmLl9ydW5fdGVzdCh0ZXN0X2lucHV0KQorICAgICAg
ICAgICAgbnVtX3Rlc3RzICs9IDEKKyAgICAgICAgICAgIHNlbGYuX3dvcmtlcl9jb25uZWN0aW9u
LnlpZWxkX3RvX2Jyb2tlcigpCisKKyAgICAgICAgZWxhcHNlZF90aW1lID0gdGltZS50aW1lKCkg
LSBzdGFydF90aW1lCisgICAgICAgIHNlbGYuX3dvcmtlcl9jb25uZWN0aW9uLnBvc3RfbWVzc2Fn
ZSgnZmluaXNoZWRfbGlzdCcsIGxpc3RfbmFtZSwgbnVtX3Rlc3RzLCBlbGFwc2VkX3RpbWUpCisK
KyAgICAgICAgaWYgc2VsZi5faGFzX2h0dHBfbG9jazoKKyAgICAgICAgICAgIHNlbGYuc3RvcF9z
ZXJ2ZXJzX3dpdGhfbG9jaygpCisKKyAgICBkZWYgaGFuZGxlX3N0b3Aoc2VsZiwgc3JjKToKKyAg
ICAgICAgc2VsZi5fZG9uZSA9IFRydWUKKworICAgIGRlZiBfcnVuX3Rlc3Qoc2VsZiwgdGVzdF9p
bnB1dCk6CisgICAgICAgIHRpbWVvdXQgPSBzZWxmLnRpbWVvdXQodGVzdF9pbnB1dCkKKyAgICAg
ICAgc3RhcnQgPSB0aW1lLnRpbWUoKQorICAgICAgICBzZWxmLl93b3JrZXJfY29ubmVjdGlvbi5w
b3N0X21lc3NhZ2UoJ3N0YXJ0ZWRfdGVzdCcsIHRlc3RfaW5wdXQsIHRpbWVvdXQpCisKKyAgICAg
ICAgcmVzdWx0ID0gc2VsZi5ydW5fdGVzdF93aXRoX3RpbWVvdXQodGVzdF9pbnB1dCwgdGltZW91
dCkKKworICAgICAgICBlbGFwc2VkX3RpbWUgPSB0aW1lLnRpbWUoKSAtIHN0YXJ0CisgICAgICAg
IHNlbGYuX3dvcmtlcl9jb25uZWN0aW9uLnBvc3RfbWVzc2FnZSgnZmluaXNoZWRfdGVzdCcsIHJl
c3VsdCwgZWxhcHNlZF90aW1lKQorCisgICAgICAgIHNlbGYuY2xlYW5fdXBfYWZ0ZXJfdGVzdCh0
ZXN0X2lucHV0LCByZXN1bHQpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS93b3JrZXJfbWl4aW4ucHkgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS93b3JrZXJfbWl4aW4ucHkKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uODZiMjBjNjgzYzcxYWI2MDZkOWI2ZWUwYTkzMDViNmU0YmM5NGRhMwotLS0gL2Rl
di9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL3dvcmtlcl9taXhpbi5weQpAQCAtMCwwICsxLDIxMiBAQAorIyBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisj
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgc3lzCitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQg
dGltZQorCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy50ZXN0X3R5cGVzIGltcG9ydCB0ZXh0
X2RpZmYKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnRlc3RfdHlwZXMgaW1wb3J0IGltYWdl
X2RpZmYKKworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0
IHNpbmdsZV90ZXN0X3J1bm5lcgorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3Bh
Y2thZ2UgaW1wb3J0IHRlc3RfcmVzdWx0cworCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19u
YW1lX18pCisKKworY2xhc3MgV29ya2VyTWl4aW4ob2JqZWN0KToKKyAgICAiIiJUaGlzIGNsYXNz
IGhvbGRzIGxvZ2ljIGNvbW1vbiB0byBXb3JrZXIgYW5kIFRlc3RTaGVsbFRocmVhZCB0aGF0Cisg
ICAgZG9lc24ndCBkaXJlY3RseSBoYXZlIHRvIGRvIHdpdGggcnVubmluZyB0aGUgdGVzdHMgKHdo
aWNoIGlzCisgICAgU2luZ2xlVGVzdFJ1bm5lcidzIHJlc3BvbnNpYmlsaXR5LiBUaGlzIGNsYXNz
IGNhbm5vdCBzdGFuZCBvbiBpdHMgb3duLiIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAg
ICAgICAgYXNzZXJ0IEZhbHNlLCAiV29ya2VyTWl4aW4gY2FuJ3QgYmUgZGlyZWN0bHkgaW5zdGFu
dGlhdGVkIgorCisgICAgZGVmIGRlZmVycmVkX2luaXQoc2VsZiwgcG9ydCk6CisgICAgICAgIHNl
bGYuX3BvcnQgPSBwb3J0CisgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0gPSBwb3J0Ll9maWxlc3lz
dGVtCisgICAgICAgIHNlbGYuX2JhdGNoX2NvdW50ID0gMAorICAgICAgICBzZWxmLl9iYXRjaF9z
aXplID0gc2VsZi5fb3B0aW9ucy5iYXRjaF9zaXplCisgICAgICAgIHNlbGYuX3Rlc3RfdHlwZXMg
PSBbXQorICAgICAgICBzZWxmLl9kcml2ZXIgPSBOb25lCisgICAgICAgIHNlbGYuX2hhc19odHRw
X2xvY2sgPSBGYWxzZQorICAgICAgICBmb3IgY2xzIGluIHNlbGYuX2dldF90ZXN0X3R5cGVfY2xh
c3NlcygpOgorICAgICAgICAgICAgc2VsZi5fdGVzdF90eXBlcy5hcHBlbmQoY2xzKHNlbGYuX3Bv
cnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9u
cy5yZXN1bHRzX2RpcmVjdG9yeSkpCisgICAgICAgIHRlc3RzX3J1bl9maWxlbmFtZSA9IHNlbGYu
X2ZpbGVzeXN0ZW0uam9pbihzZWxmLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3RzX3J1biVk
LnR4dCIgJSBzZWxmLl93b3JrZXJfbnVtYmVyKQorICAgICAgICBzZWxmLl90ZXN0c19ydW5fZmls
ZSA9IHNlbGYuX2ZpbGVzeXN0ZW0ub3Blbl90ZXh0X2ZpbGVfZm9yX3dyaXRpbmcodGVzdHNfcnVu
X2ZpbGVuYW1lKQorCisgICAgZGVmIF9nZXRfdGVzdF90eXBlX2NsYXNzZXMoc2VsZik6CisgICAg
ICAgIGNsYXNzZXMgPSBbdGV4dF9kaWZmLlRlc3RUZXh0RGlmZl0KKyAgICAgICAgaWYgc2VsZi5f
b3B0aW9ucy5waXhlbF90ZXN0czoKKyAgICAgICAgICAgIGNsYXNzZXMuYXBwZW5kKGltYWdlX2Rp
ZmYuSW1hZ2VEaWZmKQorICAgICAgICByZXR1cm4gY2xhc3NlcworCisgICAgZGVmIGNsZWFudXAo
c2VsZik6CisgICAgICAgIGlmIHNlbGYuX2RyaXZlcjoKKyAgICAgICAgICAgIHNlbGYua2lsbF9k
cml2ZXIoKQorICAgICAgICBpZiBzZWxmLl9oYXNfaHR0cF9sb2NrOgorICAgICAgICAgICAgc2Vs
Zi5zdG9wX3NlcnZlcnNfd2l0aF9sb2NrKCkKKyAgICAgICAgaWYgc2VsZi5fdGVzdHNfcnVuX2Zp
bGU6CisgICAgICAgICAgICBzZWxmLl90ZXN0c19ydW5fZmlsZS5jbG9zZSgpCisgICAgICAgICAg
ICBzZWxmLl90ZXN0c19ydW5fZmlsZSA9IE5vbmUKKworICAgIGRlZiB0aW1lb3V0KHNlbGYsIHRl
c3RfaW5wdXQpOgorICAgICAgICAiIiJDb21wdXRlIHRoZSBhcHByb3ByaWF0ZSB0aW1lb3V0IHZh
bHVlIGZvciBhIHRlc3QuIiIiCisgICAgICAgICMgVGhlIER1bXBSZW5kZXJUcmVlIHdhdGNoZG9n
IHVzZXMgMi41eCB0aGUgdGltZW91dDsgd2Ugd2FudCB0byBiZQorICAgICAgICAjIGxhcmdlciB0
aGFuIHRoYXQuIFdlIGFsc28gYWRkIGEgbGl0dGxlIG1vcmUgcGFkZGluZyBpZiB3ZSdyZQorICAg
ICAgICAjIHJ1bm5pbmcgdGVzdHMgaW4gYSBzZXBhcmF0ZSB0aHJlYWQuCisgICAgICAgICMKKyAg
ICAgICAgIyBOb3RlIHRoYXQgd2UgbmVlZCB0byBjb252ZXJ0IHRoZSB0ZXN0IHRpbWVvdXQgZnJv
bSBhCisgICAgICAgICMgc3RyaW5nIHZhbHVlIGluIG1pbGxpc2Vjb25kcyB0byBhIGZsb2F0IGZv
ciBQeXRob24uCisgICAgICAgIGRyaXZlcl90aW1lb3V0X3NlYyA9IDMuMCAqIGZsb2F0KHRlc3Rf
aW5wdXQudGltZW91dCkgLyAxMDAwLjAKKyAgICAgICAgaWYgbm90IHNlbGYuX29wdGlvbnMucnVu
X3NpbmdseToKKyAgICAgICAgICAgIHJldHVybiBkcml2ZXJfdGltZW91dF9zZWMKKworICAgICAg
ICB0aHJlYWRfcGFkZGluZ19zZWMgPSAxLjAKKyAgICAgICAgdGhyZWFkX3RpbWVvdXRfc2VjID0g
ZHJpdmVyX3RpbWVvdXRfc2VjICsgdGhyZWFkX3BhZGRpbmdfc2VjCisgICAgICAgIHJldHVybiB0
aHJlYWRfdGltZW91dF9zZWMKKworICAgIGRlZiBzdGFydF9zZXJ2ZXJzX3dpdGhfbG9jayhzZWxm
KToKKyAgICAgICAgX2xvZy5kZWJ1ZygnQWNxdWlyaW5nIGh0dHAgbG9jayAuLi4nKQorICAgICAg
ICBzZWxmLl9wb3J0LmFjcXVpcmVfaHR0cF9sb2NrKCkKKyAgICAgICAgX2xvZy5kZWJ1ZygnU3Rh
cnRpbmcgSFRUUCBzZXJ2ZXIgLi4uJykKKyAgICAgICAgc2VsZi5fcG9ydC5zdGFydF9odHRwX3Nl
cnZlcigpCisgICAgICAgIF9sb2cuZGVidWcoJ1N0YXJ0aW5nIFdlYlNvY2tldCBzZXJ2ZXIgLi4u
JykKKyAgICAgICAgc2VsZi5fcG9ydC5zdGFydF93ZWJzb2NrZXRfc2VydmVyKCkKKyAgICAgICAg
c2VsZi5faGFzX2h0dHBfbG9jayA9IFRydWUKKworICAgIGRlZiBzdG9wX3NlcnZlcnNfd2l0aF9s
b2NrKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9oYXNfaHR0cF9sb2NrOgorICAgICAgICAgICAg
X2xvZy5kZWJ1ZygnU3RvcHBpbmcgSFRUUCBzZXJ2ZXIgLi4uJykKKyAgICAgICAgICAgIHNlbGYu
X3BvcnQuc3RvcF9odHRwX3NlcnZlcigpCisgICAgICAgICAgICBfbG9nLmRlYnVnKCdTdG9wcGlu
ZyBXZWJTb2NrZXQgc2VydmVyIC4uLicpCisgICAgICAgICAgICBzZWxmLl9wb3J0LnN0b3Bfd2Vi
c29ja2V0X3NlcnZlcigpCisgICAgICAgICAgICBfbG9nLmRlYnVnKCdSZWxlYXNpbmcgc2VydmVy
IGxvY2sgLi4uJykKKyAgICAgICAgICAgIHNlbGYuX3BvcnQucmVsZWFzZV9odHRwX2xvY2soKQor
ICAgICAgICAgICAgc2VsZi5oYXNfaHR0cF9sb2NrID0gRmFsc2UKKworICAgIGRlZiBraWxsX2Ry
aXZlcihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fZHJpdmVyOgorICAgICAgICAgICAgc2VsZi5f
ZHJpdmVyLnN0b3AoKQorICAgICAgICAgICAgc2VsZi5fZHJpdmVyID0gTm9uZQorCisgICAgZGVm
IHJ1bl90ZXN0X3dpdGhfdGltZW91dChzZWxmLCB0ZXN0X2lucHV0LCB0aW1lb3V0KToKKyAgICAg
ICAgaWYgc2VsZi5fb3B0aW9ucy5ydW5fc2luZ2x5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYu
X3J1bl90ZXN0X2luX2Fub3RoZXJfdGhyZWFkKHRlc3RfaW5wdXQsIHRpbWVvdXQpCisgICAgICAg
IGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fcnVuX3Rlc3RfaW5fdGhpc190aHJlYWQo
dGVzdF9pbnB1dCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIGNsZWFuX3VwX2Fm
dGVyX3Rlc3Qoc2VsZiwgdGVzdF9pbnB1dCwgcmVzdWx0KToKKyAgICAgICAgc2VsZi5fYmF0Y2hf
Y291bnQgKz0gMQorICAgICAgICBzZWxmLl90ZXN0c19ydW5fZmlsZS53cml0ZSh0ZXN0X2lucHV0
LmZpbGVuYW1lICsgIlxuIikKKyAgICAgICAgdGVzdF9uYW1lID0gc2VsZi5fcG9ydC5yZWxhdGl2
ZV90ZXN0X2ZpbGVuYW1lKHRlc3RfaW5wdXQuZmlsZW5hbWUpCisKKyAgICAgICAgaWYgcmVzdWx0
LmZhaWx1cmVzOgorICAgICAgICAgICAgIyBDaGVjayBhbmQga2lsbCBEdW1wUmVuZGVyVHJlZSBp
ZiB3ZSBuZWVkIHRvLgorICAgICAgICAgICAgaWYgYW55KFtmLnNob3VsZF9raWxsX2R1bXBfcmVu
ZGVyX3RyZWUoKSBmb3IgZiBpbiByZXN1bHQuZmFpbHVyZXNdKToKKyAgICAgICAgICAgICAgICBz
ZWxmLmtpbGxfZHJpdmVyKCkKKyAgICAgICAgICAgICAgICAjIFJlc2V0IHRoZSBiYXRjaCBjb3Vu
dCBzaW5jZSB0aGUgc2hlbGwganVzdCBib3VuY2VkLgorICAgICAgICAgICAgICAgIHNlbGYuX2Jh
dGNoX2NvdW50ID0gMAorCisgICAgICAgICAgICAjIFByaW50IHRoZSBlcnJvciBtZXNzYWdlKHMp
LgorICAgICAgICAgICAgX2xvZy5kZWJ1ZygiJXMgJXMgZmFpbGVkOiIgJSAoc2VsZi5fbmFtZSwg
dGVzdF9uYW1lKSkKKyAgICAgICAgICAgIGZvciBmIGluIHJlc3VsdC5mYWlsdXJlczoKKyAgICAg
ICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyAgJXMiICUgKHNlbGYuX25hbWUsIGYubWVzc2FnZSgp
KSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIF9sb2cuZGVidWcoIiVzICVzIHBhc3NlZCIg
JSAoc2VsZi5fbmFtZSwgdGVzdF9uYW1lKSkKKworICAgICAgICBpZiBzZWxmLl9iYXRjaF9zaXpl
ID4gMCBhbmQgc2VsZi5fYmF0Y2hfY291bnQgPj0gc2VsZi5fYmF0Y2hfc2l6ZToKKyAgICAgICAg
ICAgICMgQm91bmNlIHRoZSBzaGVsbCBhbmQgcmVzZXQgY291bnQuCisgICAgICAgICAgICBzZWxm
LmtpbGxfZHJpdmVyKCkKKyAgICAgICAgICAgIHNlbGYuX2JhdGNoX2NvdW50ID0gMAorCisgICAg
ZGVmIF9ydW5fdGVzdF9pbl9hbm90aGVyX3RocmVhZChzZWxmLCB0ZXN0X2lucHV0LCB0aHJlYWRf
dGltZW91dF9zZWMpOgorICAgICAgICAiIiJSdW4gYSB0ZXN0IGluIGEgc2VwYXJhdGUgdGhyZWFk
LCBlbmZvcmNpbmcgYSBoYXJkIHRpbWUgbGltaXQuCisKKyAgICAgICAgU2luY2Ugd2UgY2FuIG9u
bHkgZGV0ZWN0IHRoZSB0ZXJtaW5hdGlvbiBvZiBhIHRocmVhZCwgbm90IGFueSBpbnRlcm5hbAor
ICAgICAgICBzdGF0ZSBvciBwcm9ncmVzcywgd2UgY2FuIG9ubHkgcnVuIHBlci10ZXN0IHRpbWVv
dXRzIHdoZW4gcnVubmluZyB0ZXN0CisgICAgICAgIGZpbGVzIHNpbmdseS4KKworICAgICAgICBB
cmdzOgorICAgICAgICAgIHRlc3RfaW5wdXQ6IE9iamVjdCBjb250YWluaW5nIHRoZSB0ZXN0IGZp
bGVuYW1lIGFuZCB0aW1lb3V0CisgICAgICAgICAgdGhyZWFkX3RpbWVvdXRfc2VjOiB0aW1lIHRv
IHdhaXQgYmVmb3JlIGtpbGxpbmcgdGhlIGRyaXZlciBwcm9jZXNzLgorICAgICAgICBSZXR1cm5z
OgorICAgICAgICAgIEEgVGVzdFJlc3VsdAorICAgICAgICAiIiIKKyAgICAgICAgd29ya2VyID0g
c2VsZgorICAgICAgICByZXN1bHQgPSBOb25lCisKKyAgICAgICAgZHJpdmVyID0gd29ya2VyLl9w
b3J0LmNyZWF0ZV9kcml2ZXIod29ya2VyLl93b3JrZXJfbnVtYmVyKQorICAgICAgICBkcml2ZXIu
c3RhcnQoKQorCisgICAgICAgIGNsYXNzIFNpbmdsZVRlc3RUaHJlYWQodGhyZWFkaW5nLlRocmVh
ZCk6CisgICAgICAgICAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9
IHdvcmtlci5fcnVuX3NpbmdsZV90ZXN0KGRyaXZlciwgdGVzdF9pbnB1dCkKKworICAgICAgICB0
aHJlYWQgPSBTaW5nbGVUZXN0VGhyZWFkKCkKKyAgICAgICAgdGhyZWFkLnN0YXJ0KCkKKyAgICAg
ICAgdGhyZWFkLmpvaW4odGhyZWFkX3RpbWVvdXRfc2VjKQorICAgICAgICBpZiB0aHJlYWQuaXNB
bGl2ZSgpOgorICAgICAgICAgICAgIyBJZiBqb2luKCkgcmV0dXJuZWQgd2l0aCB0aGUgdGhyZWFk
IHN0aWxsIHJ1bm5pbmcsIHRoZQorICAgICAgICAgICAgIyBEdW1wUmVuZGVyVHJlZSBpcyBjb21w
bGV0ZWx5IGh1bmcgYW5kIHRoZXJlJ3Mgbm90aGluZworICAgICAgICAgICAgIyBtb3JlIHdlIGNh
biBkbyB3aXRoIGl0LiAgV2UgaGF2ZSB0byBraWxsIGFsbCB0aGUKKyAgICAgICAgICAgICMgRHVt
cFJlbmRlclRyZWVzIHRvIGZyZWUgaXQgdXAuIElmIHdlJ3JlIHJ1bm5pbmcgbW9yZSB0aGFuCisg
ICAgICAgICAgICAjIG9uZSBEdW1wUmVuZGVyVHJlZSB0aHJlYWQsIHdlJ2xsIGVuZCB1cCBraWxs
aW5nIHRoZSBvdGhlcgorICAgICAgICAgICAgIyBEdW1wUmVuZGVyVHJlZXMgdG9vLCBpbnRyb2R1
Y2luZyBzcHVyaW91cyBjcmFzaGVzLiBXZSBhY2NlcHQKKyAgICAgICAgICAgICMgdGhhdCB0cmFk
ZW9mZiBpbiBvcmRlciB0byBhdm9pZCBsb3NpbmcgdGhlIHJlc3Qgb2YgdGhpcworICAgICAgICAg
ICAgIyB0aHJlYWQncyByZXN1bHRzLgorICAgICAgICAgICAgX2xvZy5lcnJvcignVGVzdCB0aHJl
YWQgaHVuZzoga2lsbGluZyBhbGwgRHVtcFJlbmRlclRyZWVzJykKKworICAgICAgICBkcml2ZXIu
c3RvcCgpCisKKyAgICAgICAgaWYgbm90IHJlc3VsdDoKKyAgICAgICAgICAgIHJlc3VsdCA9IHRl
c3RfcmVzdWx0cy5UZXN0UmVzdWx0KHRlc3RfaW5wdXQuZmlsZW5hbWUsIGZhaWx1cmVzPVtdLAor
ICAgICAgICAgICAgICAgIHRlc3RfcnVuX3RpbWU9MCwgdG90YWxfdGltZV9mb3JfYWxsX2RpZmZz
PTAsIHRpbWVfZm9yX2RpZmZzPXt9KQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYg
X3J1bl90ZXN0X2luX3RoaXNfdGhyZWFkKHNlbGYsIHRlc3RfaW5wdXQpOgorICAgICAgICAiIiJS
dW4gYSBzaW5nbGUgdGVzdCBmaWxlIHVzaW5nIGEgc2hhcmVkIER1bXBSZW5kZXJUcmVlIHByb2Nl
c3MuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICB0ZXN0X2lucHV0OiBPYmplY3QgY29udGFp
bmluZyB0aGUgdGVzdCBmaWxlbmFtZSwgdXJpIGFuZCB0aW1lb3V0CisKKyAgICAgICAgUmV0dXJu
czogYSBUZXN0UmVzdWx0IG9iamVjdC4KKyAgICAgICAgIiIiCisgICAgICAgICMgcG9sbCgpIGlz
IG5vdCB0aHJlYWRzYWZlIGFuZCBjYW4gdGhyb3cgT1NFcnJvciBkdWUgdG86CisgICAgICAgICMg
aHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE3MzE3MTcKKyAgICAgICAgaWYgbm90IHNlbGYu
X2RyaXZlciBvciBzZWxmLl9kcml2ZXIucG9sbCgpIGlzIG5vdCBOb25lOgorICAgICAgICAgICAg
c2VsZi5fZHJpdmVyID0gc2VsZi5fcG9ydC5jcmVhdGVfZHJpdmVyKHNlbGYuX3dvcmtlcl9udW1i
ZXIpCisgICAgICAgICAgICBzZWxmLl9kcml2ZXIuc3RhcnQoKQorICAgICAgICByZXR1cm4gc2Vs
Zi5fcnVuX3NpbmdsZV90ZXN0KHNlbGYuX2RyaXZlciwgdGVzdF9pbnB1dCkKKworICAgIGRlZiBf
cnVuX3NpbmdsZV90ZXN0KHNlbGYsIGRyaXZlciwgdGVzdF9pbnB1dCk6CisgICAgICAgIHJldHVy
biBzaW5nbGVfdGVzdF9ydW5uZXIucnVuX3NpbmdsZV90ZXN0KHNlbGYuX3BvcnQsIHNlbGYuX29w
dGlvbnMsCisgICAgICAgICAgICB0ZXN0X2lucHV0LCBkcml2ZXIsIHNlbGYuX25hbWUsIHNlbGYu
X3Rlc3RfdHlwZXMpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2Jhc2UucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L2Jhc2UucHkKaW5kZXggZTNkNWY4ZTlhNDU4ZjE5ZDE5MzA2NjgxMTM3MTA5YzhkY2U3NGZm
ZS4uOTc3OTkxY2RjZWE3NTkwNDg2MTc4YmE4ZDA2MDg1Zjk1OTEzNWFmNSAxMDA2NDQKLS0tIGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CisrKyBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weQpAQCAtNDczLDYg
KzQ3MywxMCBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAgICAgICgnY3B1JykuIiIiCiAgICAg
ICAgIHJldHVybiAnY3B1JwogCisgICAgZGVmIHJlYWxfbmFtZShzZWxmKToKKyAgICAgICAgIiIi
UmV0dXJucyB0aGUgYWN0dWFsIG5hbWUgb2YgdGhlIHBvcnQsIG5vdCB0aGUgZGVsZWdhdGUncy4i
IiIKKyAgICAgICAgcmV0dXJuIHNlbGYubmFtZSgpCisKICAgICBkZWYgZ2V0X29wdGlvbihzZWxm
LCBuYW1lLCBkZWZhdWx0X3ZhbHVlPU5vbmUpOgogICAgICAgICAjIEZJWE1FOiBFdmVudHVhbGx5
IHdlIHNob3VsZCBub3QgaGF2ZSB0byBkbyBhIHRlc3QgZm9yCiAgICAgICAgICMgaGFzYXR0cigp
LCBhbmQgd2Ugc2hvdWxkIGJlIGFibGUgdG8ganVzdCBkbwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tb2NrX2RydC5weSBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbW9ja19kcnQucHkKaW5kZXggMzcwMzI3ZmIw
MWI1ODNjMGRkMDI1ODdlNjQzZDk3OGIxODRlYjAxZS4uMTE0Nzg0NmQ2MDk1MDg0NGI1NTNjMGVm
MDM3MDEyY2RhYzYxZjQ4ZCAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9tb2NrX2RydC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L21vY2tfZHJ0LnB5CkBAIC01Myw2ICs1MywxMCBAQCBjbGFzcyBNb2Nr
RFJUUG9ydChvYmplY3QpOgogICAgICAgICBpZiAncG9ydF9uYW1lJyBpbiBrd2FyZ3M6CiAgICAg
ICAgICAgICBrd2FyZ3NbJ3BvcnRfbmFtZSddID0ga3dhcmdzWydwb3J0X25hbWUnXVtsZW4ocHJl
Zml4KTpdCiAgICAgICAgIHNlbGYuX19kZWxlZ2F0ZSA9IGZhY3RvcnkuZ2V0KCoqa3dhcmdzKQor
ICAgICAgICBzZWxmLl9fcmVhbF9uYW1lID0gcHJlZml4ICsgc2VsZi5fX2RlbGVnYXRlLm5hbWUo
KQorCisgICAgZGVmIHJlYWxfbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX19yZWFs
X25hbWUKIAogICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKICAgICAgICAgcmV0dXJu
IGdldGF0dHIoc2VsZi5fX2RlbGVnYXRlLCBuYW1lKQpAQCAtMjcxLDcgKzI3NSw2IEBAIGNsYXNz
IE1vY2tDaHJvbWl1bURSVChNb2NrRFJUKToKICAgICAgICAgc2VsZi5fc3Rkb3V0LmZsdXNoKCkK
IAogCi0KIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgZnMgPSBmaWxlc3lzdGVtLkZp
bGVTeXN0ZW0oKQogICAgIHN5cy5leGl0KG1haW4oc3lzLmFyZ3ZbMTpdLCBmcywgc3lzLnN0ZGlu
LCBzeXMuc3Rkb3V0LCBzeXMuc3RkZXJyKSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5
CmluZGV4IGY0ZTUzNTBlNmY4NTMzYmYzODkzYzQxNTgyOWUyOWFiZDM2OGU0NTUuLjg0ZjU3MTgy
NTYwZGQxMmJhOTkyOThkYWVhYmJhNzgxMDk0OTVkZTggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkKKysr
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c191
bml0dGVzdC5weQpAQCAtNDY3LDcgKzQ2Nyw4IEBAIGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRl
c3RDYXNlKToKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3NpbmdfcnVuKFsnLS13b3JrZXIt
bW9kZWwnLCAnb2xkLXRocmVhZHMnXSkpCiAKICAgICBkZWYgdGVzdF93b3JrZXJfbW9kZWxfX3By
b2Nlc3NlcyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbG9n
Z2luZ19ydW4sIFsnLS13b3JrZXItbW9kZWwnLCAncHJvY2Vzc2VzJ10pCisgICAgICAgIGlmIGNv
bXBhcmVfdmVyc2lvbihzeXMsICcyLjYnKVswXSA+PSAwOgorICAgICAgICAgICAgc2VsZi5hc3Nl
cnRUcnVlKHBhc3NpbmdfcnVuKFsnLS13b3JrZXItbW9kZWwnLCAncHJvY2Vzc2VzJ10pKQogCiAg
ICAgZGVmIHRlc3Rfd29ya2VyX21vZGVsX190aHJlYWRzKHNlbGYpOgogICAgICAgICBzZWxmLmFz
c2VydFRydWUocGFzc2luZ19ydW4oWyctLXdvcmtlci1tb2RlbCcsICd0aHJlYWRzJ10pKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82223</attachid>
            <date>2011-02-11 18:55:34 -0800</date>
            <delta_ts>2011-02-11 18:55:34 -0800</delta_ts>
            <desc>roll up changes from bugs 54071, 54072, 54074, 54079, 54082, rebase to r78302</desc>
            <filename>bug-49566-20110211185533.patch</filename>
            <type>text/plain</type>
            <size>59538</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBiNWJh
NDMzN2ZlY2RlMTZmZGVlNWQ1NTU4ZDJhYTlkY2QyNjZmZmFkLi4xMzA3MmNlZDcwZDQwZTg4NTQ2
YmM5MDQ5NmEwYmY5NTRkYTVjMzhmIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTEtMDItMTEgIERpcmsgUHJhbmtl
ICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQ2hlY2twb2ludCBuZXctcnVuLXdl
YmtpdC10ZXN0cyBtdWx0aXByb2Nlc3NpbmcgY2xlYW51cC4gVGhpcworICAgICAgICBwYXRjaCBp
cyBmdWxseSBmdW5jdGlvbmFsIGFuZCBjb250YWlucyBhbGwgdGhlIGNoYW5nZXMgZnJvbSBidWdz
CisgICAgICAgIDU0MDcxLCA1NDA3MiwgNTQwNzQsIDU0MDc5LCBhbmQgNTQwODIuCisKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5NTY2CisKKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2Vy
X3dvcmtlcl9icm9rZXIucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlcl93b3JrZXJfYnJva2VyX3VuaXR0ZXN0LnB5OgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3Rf
cnVubmVyMi5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlv
dXRfcGFja2FnZS93b3JrZXIucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvbGF5b3V0X3BhY2thZ2Uvd29ya2VyX21peGluLnB5OgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weToKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21vY2tfZHJ0LnB5OgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHk6CisKIDIw
MTEtMDItMTAgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgVG9ueSBDaGFuZy4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVt
cF9yZW5kZXJfdHJlZV90aHJlYWQucHkKaW5kZXggN2RkZDdiMGY5YWMxOGJhNDgwNWM4ZDQwOTE4
ZWRhYTc4M2JkODgxNS4uODNiMjIxNTBlOTNlZTY3OWU0NDg2MTU4MDM3M2RhZDFhMjVmYjFhNCAx
MDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3Bh
Y2thZ2UvZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQu
cHkKQEAgLTQwLDEzICs0MCwxMyBAQCBpbXBvcnQgdGhyZWFkCiBpbXBvcnQgdGhyZWFkaW5nCiBp
bXBvcnQgdGltZQogCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZS5z
aW5nbGVfdGVzdF9ydW5uZXIgaW1wb3J0IFNpbmdsZVRlc3RSdW5uZXIKK2Zyb20gd2Via2l0cHku
bGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCB3b3JrZXJfbWl4aW4KIAogX2xvZyA9
IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2Uu
IgogICAgICAgICAgICAgICAgICAgICAgICAgICJkdW1wX3JlbmRlcl90cmVlX3RocmVhZCIpCiAK
IAotY2xhc3MgVGVzdFNoZWxsVGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgorY2xhc3MgVGVzdFNo
ZWxsVGhyZWFkKHRocmVhZGluZy5UaHJlYWQsIHdvcmtlcl9taXhpbi5Xb3JrZXJNaXhpbik6CiAg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMsIHdvcmtlcl9udW1iZXIsIHdvcmtl
cl9uYW1lLAogICAgICAgICAgICAgICAgICBmaWxlbmFtZV9saXN0X3F1ZXVlLCByZXN1bHRfcXVl
dWUpOgogICAgICAgICAiIiJJbml0aWFsaXplIGFsbCB0aGUgbG9jYWwgc3RhdGUgZm9yIHRoaXMg
RHVtcFJlbmRlclRyZWUgdGhyZWFkLgpAQCAtMTMwLDYgKzEzMCw3IEBAIGNsYXNzIFRlc3RTaGVs
bFRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKICAgICBkZWYgcnVuKHNlbGYpOgogICAgICAgICAi
IiJEZWxlZ2F0ZSBtYWluIHdvcmsgdG8gYSBoZWxwZXIgbWV0aG9kIGFuZCB3YXRjaCBmb3IgdW5j
YXVnaHQKICAgICAgICAgZXhjZXB0aW9ucy4iIiIKKwogICAgICAgICBzZWxmLl9jb3ZlcmVkX3J1
bigpCiAKICAgICBkZWYgX2NvdmVyZWRfcnVuKHNlbGYpOgpAQCAtMTc1LDIzICsxNzYsMTYgQEAg
Y2xhc3MgVGVzdFNoZWxsVGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgogCiAgICAgICAgIElmIHRl
c3RfcnVubmVyIGlzIG5vdCBOb25lLCB0aGVuIHdlIGNhbGwgdGVzdF9ydW5uZXIuVXBkYXRlU3Vt
bWFyeSgpCiAgICAgICAgIHdpdGggdGhlIHJlc3VsdHMgb2YgZWFjaCB0ZXN0LiIiIgotICAgICAg
ICBzaW5nbGVfdGVzdF9ydW5uZXIgPSBTaW5nbGVUZXN0UnVubmVyKHNlbGYuX29wdGlvbnMsIHNl
bGYuX3BvcnQsCi0gICAgICAgICAgICBzZWxmLl9uYW1lLCBzZWxmLl93b3JrZXJfbnVtYmVyKQot
Ci0gICAgICAgIGJhdGNoX3NpemUgPSBzZWxmLl9vcHRpb25zLmJhdGNoX3NpemUKLSAgICAgICAg
YmF0Y2hfY291bnQgPSAwCiAKLSAgICAgICAgIyBBcHBlbmQgdGVzdHMgd2UncmUgcnVubmluZyB0
byB0aGUgZXhpc3RpbmcgdGVzdHNfcnVuLnR4dCBmaWxlLgotICAgICAgICAjIFRoaXMgaXMgY3Jl
YXRlZCBpbiBydW5fd2Via2l0X3Rlc3RzLnB5Ol9QcmVwYXJlTGlzdHNBbmRQcmludE91dHB1dC4K
LSAgICAgICAgdGVzdHNfcnVuX2ZpbGVuYW1lID0gc2VsZi5fcG9ydC5fZmlsZXN5c3RlbS5qb2lu
KHNlbGYuX29wdGlvbnMucmVzdWx0c19kaXJlY3RvcnksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdHNfcnVuJWQudHh0IiAlIHNl
bGYuX3dvcmtlcl9udW1iZXIpCi0gICAgICAgIHRlc3RzX3J1bl9maWxlID0gc2VsZi5fcG9ydC5f
ZmlsZXN5c3RlbS5vcGVuX3RleHRfZmlsZV9mb3Jfd3JpdGluZyh0ZXN0c19ydW5fZmlsZW5hbWUs
IGFwcGVuZD1GYWxzZSkKKyAgICAgICAgIyBJbml0aWFsaXplIHRoZSByZWFsIHN0YXRlIG9mIHRo
ZSBXb3JrZXJNaXhpbiBub3cgdGhhdCB3ZSdyZSBleGVjdXRpbmcKKyAgICAgICAgIyBpbiB0aGUg
Y2hpbGQgdGhyZWFkLiBUZWNobmljYWxseSwgd2UgY291bGQgaGF2ZSBjYWxsZWQgdGhpcyBkdXJp
bmcKKyAgICAgICAgIyBfX2luaXRfXygpLCBidXQgd2Ugd2FpdCB1bnRpbCBub3cgdG8gbWF0Y2gg
V29ya2VyLnJ1bigpLgorICAgICAgICBzZWxmLnNhZmVfaW5pdChzZWxmLl9wb3J0KQogCiAgICAg
ICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICBpZiBzZWxmLl9jYW5jZWxlZDoKICAgICAgICAg
ICAgICAgICBfbG9nLmRlYnVnKCdUZXN0aW5nIGNhbmNlbGxlZCcpCi0gICAgICAgICAgICAgICAg
dGVzdHNfcnVuX2ZpbGUuY2xvc2UoKQotICAgICAgICAgICAgICAgIHNpbmdsZV90ZXN0X3J1bm5l
ci5jbGVhbnVwKCkKKyAgICAgICAgICAgICAgICBzZWxmLmNsZWFudXAoKQogICAgICAgICAgICAg
ICAgIHJldHVybgogCiAgICAgICAgICAgICBpZiBsZW4oc2VsZi5fZmlsZW5hbWVfbGlzdCkgaXMg
MDoKQEAgLTIwNCwxNiArMTk4LDE1IEBAIGNsYXNzIFRlc3RTaGVsbFRocmVhZCh0aHJlYWRpbmcu
VGhyZWFkKToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY3VycmVudF9ncm91cCwgc2VsZi5f
ZmlsZW5hbWVfbGlzdCA9IFwKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVuYW1l
X2xpc3RfcXVldWUuZ2V0X25vd2FpdCgpCiAgICAgICAgICAgICAgICAgZXhjZXB0IFF1ZXVlLkVt
cHR5OgotICAgICAgICAgICAgICAgICAgICB0ZXN0c19ydW5fZmlsZS5jbG9zZSgpCi0gICAgICAg
ICAgICAgICAgICAgIHNpbmdsZV90ZXN0X3J1bm5lci5jbGVhbnVwKCkKKyAgICAgICAgICAgICAg
ICAgICAgc2VsZi5jbGVhbnVwKCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCiAKICAgICAg
ICAgICAgICAgICBpZiBzZWxmLl9jdXJyZW50X2dyb3VwID09ICJ0ZXN0c190b19odHRwX2xvY2si
OgogICAgICAgICAgICAgICAgICAgICBzZWxmLl9odHRwX2xvY2tfd2FpdF9iZWdpbiA9IHRpbWUu
dGltZSgpCi0gICAgICAgICAgICAgICAgICAgIHNpbmdsZV90ZXN0X3J1bm5lci5zdGFydF9zZXJ2
ZXJzX3dpdGhfbG9jaygpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RhcnRfc2VydmVyc193
aXRoX2xvY2soKQogICAgICAgICAgICAgICAgICAgICBzZWxmLl9odHRwX2xvY2tfd2FpdF9lbmQg
PSB0aW1lLnRpbWUoKQotICAgICAgICAgICAgICAgIGVsaWYgc2luZ2xlX3Rlc3RfcnVubmVyLmhh
c19odHRwX2xvY2s6Ci0gICAgICAgICAgICAgICAgICAgIHNpbmdsZV90ZXN0X3J1bm5lci5zdG9w
X3NlcnZlcnNfd2l0aF9sb2NrKCkKKyAgICAgICAgICAgICAgICBlbGlmIHNlbGYuX2hhc19odHRw
X2xvY2s6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RvcF9zZXJ2ZXJzX3dpdGhfbG9jaygp
CiAKICAgICAgICAgICAgICAgICBzZWxmLl9udW1fdGVzdHNfaW5fY3VycmVudF9ncm91cCA9IGxl
bihzZWxmLl9maWxlbmFtZV9saXN0KQogICAgICAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfZ3Jv
dXBfc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCkBAIC0yMjEsMzMgKzIxNCwxMyBAQCBjbGFzcyBU
ZXN0U2hlbGxUaHJlYWQodGhyZWFkaW5nLlRocmVhZCk6CiAgICAgICAgICAgICB0ZXN0X2lucHV0
ID0gc2VsZi5fZmlsZW5hbWVfbGlzdC5wb3AoKQogCiAgICAgICAgICAgICAjIFdlIGhhdmUgYSB1
cmwsIHJ1biB0ZXN0cy4KLSAgICAgICAgICAgIGJhdGNoX2NvdW50ICs9IDEKICAgICAgICAgICAg
IHNlbGYuX251bV90ZXN0cyArPSAxCiAKLSAgICAgICAgICAgIHRpbWVvdXQgPSBzaW5nbGVfdGVz
dF9ydW5uZXIudGltZW91dCh0ZXN0X2lucHV0KQotICAgICAgICAgICAgcmVzdWx0ID0gc2luZ2xl
X3Rlc3RfcnVubmVyLnJ1bl90ZXN0KHRlc3RfaW5wdXQsIHRpbWVvdXQpCi0KLSAgICAgICAgICAg
IHRlc3RzX3J1bl9maWxlLndyaXRlKHRlc3RfaW5wdXQuZmlsZW5hbWUgKyAiXG4iKQotICAgICAg
ICAgICAgdGVzdF9uYW1lID0gc2VsZi5fcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKHRlc3Rf
aW5wdXQuZmlsZW5hbWUpCi0gICAgICAgICAgICBpZiByZXN1bHQuZmFpbHVyZXM6Ci0gICAgICAg
ICAgICAgICAgIyBDaGVjayBhbmQga2lsbCBEdW1wUmVuZGVyVHJlZSBpZiB3ZSBuZWVkIHRvLgot
ICAgICAgICAgICAgICAgIGlmIGFueShbZi5zaG91bGRfa2lsbF9kdW1wX3JlbmRlcl90cmVlKCkg
Zm9yIGYgaW4gcmVzdWx0LmZhaWx1cmVzXSk6Ci0gICAgICAgICAgICAgICAgICAgIHNpbmdsZV90
ZXN0X3J1bm5lci5raWxsX2R1bXBfcmVuZGVyX3RyZWUoKQotICAgICAgICAgICAgICAgICAgICAj
IFJlc2V0IHRoZSBiYXRjaCBjb3VudCBzaW5jZSB0aGUgc2hlbGwganVzdCBib3VuY2VkLgotICAg
ICAgICAgICAgICAgICAgICBiYXRjaF9jb3VudCA9IDAKLQotICAgICAgICAgICAgICAgICMgUHJp
bnQgdGhlIGVycm9yIG1lc3NhZ2UocykuCi0gICAgICAgICAgICAgICAgX2xvZy5kZWJ1ZygiJXMg
JXMgZmFpbGVkOiIgJSAoc2VsZi5fbmFtZSwgdGVzdF9uYW1lKSkKLSAgICAgICAgICAgICAgICBm
b3IgZiBpbiByZXN1bHQuZmFpbHVyZXM6Ci0gICAgICAgICAgICAgICAgICAgIF9sb2cuZGVidWco
IiVzICAlcyIgJSAoc2VsZi5fbmFtZSwgZi5tZXNzYWdlKCkpKQotICAgICAgICAgICAgZWxzZToK
LSAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyAlcyBwYXNzZWQiICUgKHNlbGYuX25hbWUs
IHRlc3RfbmFtZSkpCi0gICAgICAgICAgICBzZWxmLl9yZXN1bHRfcXVldWUucHV0KHJlc3VsdC5k
dW1wcygpKQorICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5ydW5fdGVzdF93aXRoX3RpbWVvdXQo
dGVzdF9pbnB1dCwgc2VsZi50aW1lb3V0KHRlc3RfaW5wdXQpKQogCi0gICAgICAgICAgICBpZiBi
YXRjaF9zaXplID4gMCBhbmQgYmF0Y2hfY291bnQgPj0gYmF0Y2hfc2l6ZToKLSAgICAgICAgICAg
ICAgICAjIEJvdW5jZSB0aGUgc2hlbGwgYW5kIHJlc2V0IGNvdW50LgotICAgICAgICAgICAgICAg
IHNpbmdsZV90ZXN0X3J1bm5lci5raWxsX2R1bXBfcmVuZGVyX3RyZWUoKQotICAgICAgICAgICAg
ICAgIGJhdGNoX2NvdW50ID0gMAorICAgICAgICAgICAgc2VsZi5jbGVhbl91cF9hZnRlcl90ZXN0
KHRlc3RfaW5wdXQsIHJlc3VsdCkKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RfcmVzdWx0cy5hcHBl
bmQocmVzdWx0KQorICAgICAgICAgICAgc2VsZi5fcmVzdWx0X3F1ZXVlLnB1dChyZXN1bHQuZHVt
cHMoKSkKIAogICAgICAgICAgICAgaWYgdGVzdF9ydW5uZXI6CiAgICAgICAgICAgICAgICAgdGVz
dF9ydW5uZXIudXBkYXRlX3N1bW1hcnkocmVzdWx0X3N1bW1hcnkpCmRpZmYgLS1naXQgYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyX3dv
cmtlcl9icm9rZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlv
dXRfcGFja2FnZS9tYW5hZ2VyX3dvcmtlcl9icm9rZXIucHkKaW5kZXggYzQ3ZTlkN2RjNmViM2Qz
YTU1NmI1ODhiYzA1MzhlZWQ2ZmE3MTY5ZC4uMjM5N2ZkY2E5MjkwMDFkYmQ3NWQ0MmVmOWFhZDQ4
NTQ0MTQzOTAwMSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlcl93b3JrZXJfYnJva2VyLnB5CisrKyBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21hbmFnZXJfd29ya2Vy
X2Jyb2tlci5weQpAQCAtNDYsMTUgKzQ2LDI1IEBAIFRlc3RSdW5uZXIyICAtLT4gX0lubGluZU1h
bmFnZXIgLS0tPiBfSW5saW5lV29ya2VyIDwtPiBXb3JrZXIKIGltcG9ydCBsb2dnaW5nCiBpbXBv
cnQgb3B0cGFyc2UKIGltcG9ydCBRdWV1ZQoraW1wb3J0IHRocmVhZAogaW1wb3J0IHRocmVhZGlu
ZworaW1wb3J0IHRpbWUKKwogCiAjIEhhbmRsZSBQeXRob24gPCAyLjYgd2hlcmUgbXVsdGlwcm9j
ZXNzaW5nIGlzbid0IGF2YWlsYWJsZS4KKyMKKyMgX011bHRpcHJvY2Vzc2luZ19Qcm9jZXNzIGlz
IG5lZWRlZCBzbyB0aGF0IF9NdWx0aVByb2Nlc3NXb3JrZXIKKyMgY2FuIGJlIGRlZmluZWQgd2l0
aCBvciB3aXRob3V0IG11bHRpcHJvY2Vzc2luZy4KIHRyeToKICAgICBpbXBvcnQgbXVsdGlwcm9j
ZXNzaW5nCisgICAgX011bHRpcHJvY2Vzc2luZ19Qcm9jZXNzID0gbXVsdGlwcm9jZXNzaW5nLlBy
b2Nlc3MKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICBtdWx0aXByb2Nlc3NpbmcgPSBOb25lCisg
ICAgX011bHRpcHJvY2Vzc2luZ19Qcm9jZXNzID0gdGhyZWFkaW5nLlRocmVhZAogCiAKK2Zyb20g
d2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgc3RhY2tfdXRpbHMKK2Zyb20gd2Via2l0cHku
bGF5b3V0X3Rlc3RzIGltcG9ydCBwb3J0CiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlv
dXRfcGFja2FnZSBpbXBvcnQgbWVzc2FnZV9icm9rZXIyCiAKIApAQCAtMTY0LDggKzE3NCw4IEBA
IGNsYXNzIF9JbmxpbmVNYW5hZ2VyKF9NYW5hZ2VyQ29ubmVjdGlvbik6CiAgICAgICAgIHNlbGYu
X2lubGluZV93b3JrZXIgPSBOb25lCiAKICAgICBkZWYgc3RhcnRfd29ya2VyKHNlbGYsIHdvcmtl
cl9udW1iZXIpOgotICAgICAgICBzZWxmLl9pbmxpbmVfd29ya2VyID0gX0lubGluZVdvcmtlcihz
ZWxmLl9icm9rZXIsIHNlbGYuX3BvcnQsIHNlbGYuX2NsaWVudCwKLSAgICAgICAgICAgIHNlbGYu
X3dvcmtlcl9jbGFzcywgd29ya2VyX251bWJlcikKKyAgICAgICAgc2VsZi5faW5saW5lX3dvcmtl
ciA9IF9JbmxpbmVXb3JrZXJDb25uZWN0aW9uKHNlbGYuX2Jyb2tlciwgc2VsZi5fcG9ydCwKKyAg
ICAgICAgICAgIHNlbGYuX2NsaWVudCwgc2VsZi5fd29ya2VyX2NsYXNzLCB3b3JrZXJfbnVtYmVy
KQogICAgICAgICByZXR1cm4gc2VsZi5faW5saW5lX3dvcmtlcgogCiAgICAgZGVmIHJ1bl9tZXNz
YWdlX2xvb3Aoc2VsZiwgZGVsYXlfc2Vjcz1Ob25lKToKQEAgLTE3NywxMiArMTg3LDMwIEBAIGNs
YXNzIF9JbmxpbmVNYW5hZ2VyKF9NYW5hZ2VyQ29ubmVjdGlvbik6CiAKIGNsYXNzIF9UaHJlYWRl
ZE1hbmFnZXIoX01hbmFnZXJDb25uZWN0aW9uKToKICAgICBkZWYgX19pbml0X18oc2VsZiwgYnJv
a2VyLCBwb3J0LCBvcHRpb25zLCBjbGllbnQsIHdvcmtlcl9jbGFzcyk6Ci0gICAgICAgIHJhaXNl
IE5vdEltcGxlbWVudGVkRXJyb3IKKyAgICAgICAgX01hbmFnZXJDb25uZWN0aW9uLl9faW5pdF9f
KHNlbGYsIGJyb2tlciwgb3B0aW9ucywgY2xpZW50LCB3b3JrZXJfY2xhc3MpCisgICAgICAgIHNl
bGYuX3BvcnQgPSBwb3J0CisKKyAgICBkZWYgc3RhcnRfd29ya2VyKHNlbGYsIHdvcmtlcl9udW1i
ZXIpOgorICAgICAgICB3b3JrZXJfY29ubmVjdGlvbiA9IF9UaHJlYWRlZFdvcmtlckNvbm5lY3Rp
b24oc2VsZi5fYnJva2VyLCBzZWxmLl9wb3J0LAorICAgICAgICAgICAgc2VsZi5fd29ya2VyX2Ns
YXNzLCB3b3JrZXJfbnVtYmVyKQorICAgICAgICB3b3JrZXJfY29ubmVjdGlvbi5zdGFydCgpCisg
ICAgICAgIHJldHVybiB3b3JrZXJfY29ubmVjdGlvbgogCiAKIGNsYXNzIF9NdWx0aVByb2Nlc3NN
YW5hZ2VyKF9NYW5hZ2VyQ29ubmVjdGlvbik6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb2tl
ciwgcG9ydCwgb3B0aW9ucywgY2xpZW50LCB3b3JrZXJfY2xhc3MpOgotICAgICAgICByYWlzZSBO
b3RJbXBsZW1lbnRlZEVycm9yCisgICAgICAgICMgTm90ZSB0aGF0IHRoaXMgY2xhc3MgZG9lcyBu
b3Qga2VlcCBhIGhhbmRsZSB0byB0aGUgYWN0dWFsIHBvcnQKKyAgICAgICAgIyBvYmplY3QsIGJl
Y2F1c2UgaXQgaXNuJ3QgUGlja2xhYmxlLiBJbnN0ZWFkIGl0IGtlZXBzIHRoZSBwb3J0CisgICAg
ICAgICMgbmFtZSBhbmQgcmVjcmVhdGVzIHRoZSBwb3J0IGluIHRoZSBjaGlsZCBwcm9jZXNzIGZy
b20gdGhlIG5hbWUKKyAgICAgICAgIyBhbmQgb3B0aW9ucy4KKyAgICAgICAgX01hbmFnZXJDb25u
ZWN0aW9uLl9faW5pdF9fKHNlbGYsIGJyb2tlciwgb3B0aW9ucywgY2xpZW50LCB3b3JrZXJfY2xh
c3MpCisgICAgICAgIHNlbGYuX3BsYXRmb3JtX25hbWUgPSBwb3J0LnJlYWxfbmFtZSgpCisKKyAg
ICBkZWYgc3RhcnRfd29ya2VyKHNlbGYsIHdvcmtlcl9udW1iZXIpOgorICAgICAgICB3b3JrZXJf
Y29ubmVjdGlvbiA9IF9NdWx0aVByb2Nlc3NXb3JrZXJDb25uZWN0aW9uKHNlbGYuX2Jyb2tlciwg
c2VsZi5fcGxhdGZvcm1fbmFtZSwKKyAgICAgICAgICAgIHNlbGYuX3dvcmtlcl9jbGFzcywgd29y
a2VyX251bWJlciwgc2VsZi5fb3B0aW9ucykKKyAgICAgICAgd29ya2VyX2Nvbm5lY3Rpb24uc3Rh
cnQoKQorICAgICAgICByZXR1cm4gd29ya2VyX2Nvbm5lY3Rpb24KIAogCiBjbGFzcyBfV29ya2Vy
Q29ubmVjdGlvbihtZXNzYWdlX2Jyb2tlcjIuQnJva2VyQ29ubmVjdGlvbik6CkBAIC0xOTIsMjEg
KzIyMCwxNDAgQEAgY2xhc3MgX1dvcmtlckNvbm5lY3Rpb24obWVzc2FnZV9icm9rZXIyLkJyb2tl
ckNvbm5lY3Rpb24pOgogICAgICAgICBtZXNzYWdlX2Jyb2tlcjIuQnJva2VyQ29ubmVjdGlvbi5f
X2luaXRfXyhzZWxmLCBicm9rZXIsIHNlbGYuX2NsaWVudCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU5ZX1dPUktFUl9UT1BJQywgTUFOQUdFUl9U
T1BJQykKIAotICAgIGRlZiBydW4oc2VsZik6CisgICAgZGVmIGNhbmNlbChzZWxmKToKKyAgICAg
ICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGlzX2FsaXZlKHNlbGYpOgor
ICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgam9pbihzZWxmLCB0
aW1lb3V0KToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGxv
Z193ZWRnZWRfd29ya2VyKHNlbGYsIHRlc3RfbmFtZSk6CiAgICAgICAgIHJhaXNlIE5vdEltcGxl
bWVudGVkRXJyb3IKIAogICAgIGRlZiB5aWVsZF90b19icm9rZXIoc2VsZik6CiAgICAgICAgIHBh
c3MKIAogCi1jbGFzcyBfSW5saW5lV29ya2VyKF9Xb3JrZXJDb25uZWN0aW9uKToKK2NsYXNzIF9J
bmxpbmVXb3JrZXJDb25uZWN0aW9uKF9Xb3JrZXJDb25uZWN0aW9uKToKICAgICBkZWYgX19pbml0
X18oc2VsZiwgYnJva2VyLCBwb3J0LCBtYW5hZ2VyX2NsaWVudCwgd29ya2VyX2NsYXNzLCB3b3Jr
ZXJfbnVtYmVyKToKICAgICAgICAgX1dvcmtlckNvbm5lY3Rpb24uX19pbml0X18oc2VsZiwgYnJv
a2VyLCB3b3JrZXJfY2xhc3MsIHdvcmtlcl9udW1iZXIsIHBvcnQuX29wdGlvbnMpCisgICAgICAg
IHNlbGYuX2FsaXZlID0gRmFsc2UKICAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKICAgICAgICAg
c2VsZi5fbWFuYWdlcl9jbGllbnQgPSBtYW5hZ2VyX2NsaWVudAogCisgICAgZGVmIGNhbmNlbChz
ZWxmKToKKyAgICAgICAgc2VsZi5fY2xpZW50LmNhbmNlbCgpCisKKyAgICBkZWYgaXNfYWxpdmUo
c2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9hbGl2ZQorCisgICAgZGVmIGpvaW4oc2VsZiwg
dGltZW91dCk6CisgICAgICAgIGFzc2VydCBub3Qgc2VsZi5fYWxpdmUKKworICAgIGRlZiBsb2df
d2VkZ2VkX3dvcmtlcihzZWxmLCB0ZXN0X25hbWUpOgorICAgICAgICBhc3NlcnQgRmFsc2UsICJf
SW5saW5lV29ya2VyQ29ubmVjdGlvbi5sb2dfd2VkZ2VkX3dvcmtlcigpIGNhbGxlZCIKKwogICAg
IGRlZiBydW4oc2VsZik6CisgICAgICAgIHNlbGYuX2FsaXZlID0gVHJ1ZQogICAgICAgICBzZWxm
Ll9jbGllbnQucnVuKHNlbGYuX3BvcnQpCisgICAgICAgIHNlbGYuX2FsaXZlID0gRmFsc2UKIAog
ICAgIGRlZiB5aWVsZF90b19icm9rZXIoc2VsZik6CiAgICAgICAgIHNlbGYuX2Jyb2tlci5ydW5f
YWxsX3BlbmRpbmcoTUFOQUdFUl9UT1BJQywgc2VsZi5fbWFuYWdlcl9jbGllbnQpCisKKworY2xh
c3MgX1RocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd29y
a2VyX2Nvbm5lY3Rpb24sIHBvcnQsIGNsaWVudCk6CisgICAgICAgIHRocmVhZGluZy5UaHJlYWQu
X19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5fd29ya2VyX2Nvbm5lY3Rpb24gPSB3b3JrZXJf
Y29ubmVjdGlvbgorICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAorICAgICAgICBzZWxmLl9jbGll
bnQgPSBjbGllbnQKKworICAgIGRlZiBjYW5jZWwoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxm
Ll9jbGllbnQuY2FuY2VsKCkKKworICAgIGRlZiBpc19hbGl2ZShzZWxmKToKKyAgICAgICAgIyBG
SVhNRTogV2UgY2FuIHJlbW92ZSB0aGlzIG9uY2UgZXZlcnlvbmUgaXMgb24gMi42LgorICAgICAg
ICByZXR1cm4gc2VsZi5pc0FsaXZlKCkKKworICAgIGRlZiBsb2dfd2VkZ2VkX3dvcmtlcihzZWxm
LCB0ZXN0X25hbWUpOgorICAgICAgICBzdGFja191dGlscy5sb2dfdGhyZWFkX3N0YXRlKF9sb2cu
ZXJyb3IsIHNlbGYuX2NsaWVudC5uYW1lKCksIHNlbGYuaWRlbnQsICIgaXMgd2VkZ2VkIG9uIHRl
c3QgJXMiICUgdGVzdF9uYW1lKQorCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgIyBGSVhN
RTogV2UgY2FuIHJlbW92ZSB0aGlzIG9uY2UgZXZlcnlvbmUgaXMgb24gMi42LgorICAgICAgICBp
ZiBub3QgaGFzYXR0cihzZWxmLCAnaWRlbnQnKToKKyAgICAgICAgICAgIHNlbGYuaWRlbnQgPSB0
aHJlYWQuZ2V0X2lkZW50KCkKKyAgICAgICAgc2VsZi5fY2xpZW50LnJ1bihzZWxmLl9wb3J0KQor
CisKK2NsYXNzIF9UaHJlYWRlZFdvcmtlckNvbm5lY3Rpb24oX1dvcmtlckNvbm5lY3Rpb24pOgor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXIsIHBvcnQsIHdvcmtlcl9jbGFzcywgd29ya2Vy
X251bWJlcik6CisgICAgICAgIF9Xb3JrZXJDb25uZWN0aW9uLl9faW5pdF9fKHNlbGYsIGJyb2tl
ciwgd29ya2VyX2NsYXNzLCB3b3JrZXJfbnVtYmVyLCBwb3J0Ll9vcHRpb25zKQorICAgICAgICBz
ZWxmLl90aHJlYWQgPSBfVGhyZWFkKHNlbGYsIHBvcnQsIHNlbGYuX2NsaWVudCkKKworICAgIGRl
ZiBjYW5jZWwoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl90aHJlYWQuY2FuY2VsKCkKKwor
ICAgIGRlZiBpc19hbGl2ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3RocmVhZC5pc19h
bGl2ZSgpCisKKyAgICBkZWYgam9pbihzZWxmLCB0aW1lb3V0KToKKyAgICAgICAgcmV0dXJuIHNl
bGYuX3RocmVhZC5qb2luKHRpbWVvdXQpCisKKyAgICBkZWYgbG9nX3dlZGdlZF93b3JrZXIoc2Vs
ZiwgdGVzdF9uYW1lKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3RocmVhZC5sb2dfd2VkZ2VkX3dv
cmtlcih0ZXN0X25hbWUpCisKKyAgICBkZWYgc3RhcnQoc2VsZik6CisgICAgICAgIHNlbGYuX3Ro
cmVhZC5zdGFydCgpCisKKworY2xhc3MgX1Byb2Nlc3MoX011bHRpcHJvY2Vzc2luZ19Qcm9jZXNz
KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd29ya2VyX2Nvbm5lY3Rpb24sIHBsYXRmb3JtX25h
bWUsIG9wdGlvbnMsIGNsaWVudCk6CisgICAgICAgIF9NdWx0aXByb2Nlc3NpbmdfUHJvY2Vzcy5f
X2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLl93b3JrZXJfY29ubmVjdGlvbiA9IHdvcmtlcl9j
b25uZWN0aW9uCisgICAgICAgIHNlbGYuX3BsYXRmb3JtX25hbWUgPSBwbGF0Zm9ybV9uYW1lCisg
ICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCisgICAgICAgIHNlbGYuX2NsaWVudCA9IGNs
aWVudAorCisgICAgZGVmIGNhbmNlbChzZWxmKToKKyAgICAgICAgaWYgbXVsdGlwcm9jZXNzaW5n
OgorICAgICAgICAgICAgc2VsZi50ZXJtaW5hdGUoKQorICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgc2VsZi5fY2xpZW50LmNhbmNlbCgpCisKKyAgICBkZWYgaXNfYWxpdmUoc2VsZik6CisgICAg
ICAgIGlmIG11bHRpcHJvY2Vzc2luZzoKKyAgICAgICAgICAgIF9NdWx0aXByb2Nlc3NpbmdfUHJv
Y2Vzcy5pc19hbGl2ZShzZWxmKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNl
bGYuaXNBbGl2ZSgpCisKKyAgICBkZWYgbG9nX3dlZGdlZF93b3JrZXIoc2VsZiwgdGVzdF9uYW1l
KToKKyAgICAgICAgX2xvZy5lcnJvcigiJXMgKHBpZCAlZCkgaXMgd2VkZ2VkIG9uIHRlc3QgJXMi
ICUgKHNlbGYubmFtZSwgc2VsZi5waWQsIHRlc3RfbmFtZSkpCisKKyAgICBkZWYgcnVuKHNlbGYp
OgorICAgICAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKCkKKyAgICAgICAgcG9ydF9vYmogPSBwb3J0
LmdldChzZWxmLl9wbGF0Zm9ybV9uYW1lLCBzZWxmLl9vcHRpb25zKQorICAgICAgICBzZWxmLl9j
bGllbnQucnVuKHBvcnRfb2JqKQorCisKK2NsYXNzIF9NdWx0aVByb2Nlc3NXb3JrZXJDb25uZWN0
aW9uKF9Xb3JrZXJDb25uZWN0aW9uKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCBw
bGF0Zm9ybV9uYW1lLCB3b3JrZXJfY2xhc3MsIHdvcmtlcl9udW1iZXIsIG9wdGlvbnMpOgorICAg
ICAgICBfV29ya2VyQ29ubmVjdGlvbi5fX2luaXRfXyhzZWxmLCBicm9rZXIsIHdvcmtlcl9jbGFz
cywgd29ya2VyX251bWJlciwgb3B0aW9ucykKKyAgICAgICAgc2VsZi5fcHJvYyA9IF9Qcm9jZXNz
KHNlbGYsIHBsYXRmb3JtX25hbWUsIG9wdGlvbnMsIHNlbGYuX2NsaWVudCkKKworICAgIGRlZiBj
YW5jZWwoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9wcm9jLmNhbmNlbCgpCisKKyAgICBk
ZWYgaXNfYWxpdmUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9wcm9jLmlzX2FsaXZlKCkK
KworICAgIGRlZiBqb2luKHNlbGYsIHRpbWVvdXQpOgorICAgICAgICByZXR1cm4gc2VsZi5fcHJv
Yy5qb2luKHRpbWVvdXQpCisKKyAgICBkZWYgbG9nX3dlZGdlZF93b3JrZXIoc2VsZiwgdGVzdF9u
YW1lKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Byb2MubG9nX3dlZGdlZF93b3JrZXIodGVzdF9u
YW1lKQorCisgICAgZGVmIHN0YXJ0KHNlbGYpOgorICAgICAgICBzZWxmLl9wcm9jLnN0YXJ0KCkK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL21hbmFnZXJfd29ya2VyX2Jyb2tlcl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21hbmFnZXJfd29ya2VyX2Jyb2tl
cl91bml0dGVzdC5weQppbmRleCAxYTQzMmQ2Yzk0MTU2NmZhMWU4YmUwMDYzMzVkNDE4MjRiOTUz
YmFjLi43Y2RjMjQyY2FlOTU1MDEwYWJiNTIxNzBiOGM0MGM5ODBlOWIzMmI0IDEwMDY0NAotLS0g
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5h
Z2VyX3dvcmtlcl9icm9rZXJfdW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlcl93b3JrZXJfYnJva2VyX3VuaXR0
ZXN0LnB5CkBAIC0yNyw2ICsyNyw3IEBACiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKIGltcG9ydCBvcHRwYXJz
ZQoraW1wb3J0IFF1ZXVlCiBpbXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QKIApAQCAtNDMsOCAr
NDQsNDcgQEAgZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0
IG1hbmFnZXJfd29ya2VyX2Jyb2tlcgogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0
X3BhY2thZ2UgaW1wb3J0IG1lc3NhZ2VfYnJva2VyMgogCiAKLWNsYXNzIFRlc3RXb3JrZXIob2Jq
ZWN0KToKLSAgICBwYXNzCitkZWYgd29ya2VyX21ha2VyKHN0YXJ0aW5nX3F1ZXVlPU5vbmUsIHN0
b3BwaW5nX3F1ZXVlPU5vbmUpOgorICAgIGNsYXNzIF9UZXN0V29ya2VyKG1hbmFnZXJfd29ya2Vy
X2Jyb2tlci5BYnN0cmFjdFdvcmtlcik6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9r
ZXJfY29ubmVjdGlvbiwgd29ya2VyX251bWJlciwgb3B0aW9ucyk6CisgICAgICAgICAgICBzZWxm
Ll9icm9rZXJfY29ubmVjdGlvbiA9IGJyb2tlcl9jb25uZWN0aW9uCisgICAgICAgICAgICBzZWxm
Ll9vcHRpb25zID0gb3B0aW9ucworICAgICAgICAgICAgc2VsZi5fd29ya2VyX251bWJlciA9IHdv
cmtlcl9udW1iZXIKKyAgICAgICAgICAgIHNlbGYuX25hbWUgPSAnVGVzdFdvcmtlci8lZCcgJSB3
b3JrZXJfbnVtYmVyCisgICAgICAgICAgICBzZWxmLl9zdG9wcGVkID0gRmFsc2UKKyAgICAgICAg
ICAgIHNlbGYuX2NhbmNlbGVkID0gRmFsc2UKKyAgICAgICAgICAgIHNlbGYuX3N0YXJ0aW5nX3F1
ZXVlID0gc3RhcnRpbmdfcXVldWUKKyAgICAgICAgICAgIHNlbGYuX3N0b3BwaW5nX3F1ZXVlID0g
c3RvcHBpbmdfcXVldWUKKworICAgICAgICBkZWYgaGFuZGxlX3N0b3Aoc2VsZiwgc3JjKToKKyAg
ICAgICAgICAgIHNlbGYuX3N0b3BwZWQgPSBUcnVlCisKKyAgICAgICAgZGVmIGhhbmRsZV90ZXN0
KHNlbGYsIHNyYywgYW5faW50LCBhX3N0cik6CisgICAgICAgICAgICBhc3NlcnQgYW5faW50ID09
IDEKKyAgICAgICAgICAgIGFzc2VydCBhX3N0ciA9PSAiaGVsbG8sIHdvcmxkIgorICAgICAgICAg
ICAgc2VsZi5fYnJva2VyX2Nvbm5lY3Rpb24ucG9zdF9tZXNzYWdlKCd0ZXN0JywgMiwgJ2hpLCBl
dmVyeWJvZHknKQorCisgICAgICAgIGRlZiBpc19kb25lKHNlbGYpOgorICAgICAgICAgICAgcmV0
dXJuIHNlbGYuX3N0b3BwZWQgb3Igc2VsZi5fY2FuY2VsZWQKKworICAgICAgICBkZWYgbmFtZShz
ZWxmKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9uYW1lCisKKyAgICAgICAgZGVmIGNhbmNl
bChzZWxmKToKKyAgICAgICAgICAgIHNlbGYuX2NhbmNlbGVkID0gVHJ1ZQorCisgICAgICAgIGRl
ZiBydW4oc2VsZiwgcG9ydCk6CisgICAgICAgICAgICBpZiBzZWxmLl9zdGFydGluZ19xdWV1ZToK
KyAgICAgICAgICAgICAgICBzZWxmLl9zdGFydGluZ19xdWV1ZS5wdXQoJycpCisgICAgICAgICAg
ICBpZiBzZWxmLl9zdG9wcGluZ19xdWV1ZToKKyAgICAgICAgICAgICAgICBzZWxmLl9zdG9wcGlu
Z19xdWV1ZS5nZXQoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX2Jy
b2tlcl9jb25uZWN0aW9uLnJ1bl9tZXNzYWdlX2xvb3AoKQorICAgICAgICAgICAgICAgIHNlbGYu
X2Jyb2tlcl9jb25uZWN0aW9uLnlpZWxkX3RvX2Jyb2tlcigpCisgICAgICAgICAgICAgICAgc2Vs
Zi5fYnJva2VyX2Nvbm5lY3Rpb24ucG9zdF9tZXNzYWdlKCdkb25lJykKKyAgICAgICAgICAgIGV4
Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICAgICAgc2VsZi5fYnJva2VyX2Nvbm5lY3Rp
b24ucG9zdF9tZXNzYWdlKCdleGNlcHRpb24nLCAodHlwZShlKSwgc3RyKGUpLCBOb25lKSkKKyAg
ICByZXR1cm4gX1Rlc3RXb3JrZXIKIAogCiBkZWYgZ2V0X29wdGlvbnMod29ya2VyX21vZGVsKToK
QEAgLTU0LDEwICs5NCwxMCBAQCBkZWYgZ2V0X29wdGlvbnMod29ya2VyX21vZGVsKToKICAgICBy
ZXR1cm4gb3B0aW9ucwogCiAKLWRlZiBtYWtlX2Jyb2tlcihtYW5hZ2VyLCB3b3JrZXJfbW9kZWwp
OgorZGVmIG1ha2VfYnJva2VyKG1hbmFnZXIsIHdvcmtlcl9tb2RlbCwgc3RhcnRpbmdfcXVldWU9
Tm9uZSwgc3RvcHBpbmdfcXVldWU9Tm9uZSk6CiAgICAgb3B0aW9ucyA9IGdldF9vcHRpb25zKHdv
cmtlcl9tb2RlbCkKICAgICByZXR1cm4gbWFuYWdlcl93b3JrZXJfYnJva2VyLmdldChwb3J0Lmdl
dCgidGVzdCIpLCBvcHRpb25zLCBtYW5hZ2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFRlc3RXb3JrZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd29ya2VyX21ha2VyKHN0YXJ0aW5nX3F1ZXVlLCBzdG9wcGluZ19xdWV1ZSkpCiAKIAogY2xh
c3MgRnVuY3Rpb25UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC02NSwyNCArMTA1LDE3MCBA
QCBjbGFzcyBGdW5jdGlvblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgc2VsZi5h
c3NlcnRUcnVlKG1ha2VfYnJva2VyKHNlbGYsICdpbmxpbmUnKSBpcyBub3QgTm9uZSkKIAogICAg
IGRlZiB0ZXN0X2dldF9fdGhyZWFkcyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMo
Tm90SW1wbGVtZW50ZWRFcnJvciwgbWFrZV9icm9rZXIsIHNlbGYsICd0aHJlYWRzJykKKyAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKG1ha2VfYnJva2VyKHNlbGYsICd0aHJlYWRzJykgaXMgbm90IE5v
bmUpCiAKICAgICBkZWYgdGVzdF9nZXRfX3Byb2Nlc3NlcyhzZWxmKToKICAgICAgICAgaWYgbXVs
dGlwcm9jZXNzaW5nOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50
ZWRFcnJvciwgbWFrZV9icm9rZXIsIHNlbGYsICdwcm9jZXNzZXMnKQorICAgICAgICAgICAgc2Vs
Zi5hc3NlcnRUcnVlKG1ha2VfYnJva2VyKHNlbGYsICdwcm9jZXNzZXMnKSBpcyBub3QgTm9uZSkK
ICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3Is
IG1ha2VfYnJva2VyLCBzZWxmLCAncHJvY2Vzc2VzJykKIAogICAgIGRlZiB0ZXN0X2dldF9fdW5r
bm93bihzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWFrZV9i
cm9rZXIsIHNlbGYsICd1bmtub3duJykKIAorCitjbGFzcyBfVGVzdHNNaXhpbihvYmplY3QpOgor
ICAgICIiIk1peGluIGNsYXNzIHRoYXQgaW1wbGVtZW50cyBhIHNlcmllcyBvZiB0ZXN0cyB0byBl
bmZvcmNlIHRoZQorICAgIGNvbnRyYWN0IGFsbCBpbXBsZW1lbnRhdGlvbnMgbXVzdCBmb2xsb3cu
IiIiCisKKyAgICBkZWYgbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuICdUZXN0ZXInCisKKyAg
ICBkZWYgaXNfZG9uZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2RvbmUKKworICAgIGRl
ZiBoYW5kbGVfZG9uZShzZWxmLCBzcmMpOgorICAgICAgICBzZWxmLl9kb25lID0gVHJ1ZQorCisg
ICAgZGVmIGhhbmRsZV90ZXN0KHNlbGYsIHNyYywgYW5faW50LCBhX3N0cik6CisgICAgICAgIHNl
bGYuX2FuX2ludCA9IGFuX2ludAorICAgICAgICBzZWxmLl9hX3N0ciA9IGFfc3RyCisKKyAgICBk
ZWYgaGFuZGxlX2V4Y2VwdGlvbihzZWxmLCBzcmMsIGV4Y19pbmZvKToKKyAgICAgICAgc2VsZi5f
ZXhjZXB0aW9uID0gZXhjX2luZm8KKyAgICAgICAgc2VsZi5fZG9uZSA9IFRydWUKKworICAgIGRl
ZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5fYW5faW50ID0gTm9uZQorICAgICAgICBzZWxm
Ll9hX3N0ciA9IE5vbmUKKyAgICAgICAgc2VsZi5fYnJva2VyID0gTm9uZQorICAgICAgICBzZWxm
Ll9kb25lID0gRmFsc2UKKyAgICAgICAgc2VsZi5fZXhjZXB0aW9uID0gTm9uZQorICAgICAgICBz
ZWxmLl93b3JrZXJfbW9kZWwgPSBOb25lCisKKyAgICBkZWYgbWFrZV9icm9rZXIoc2VsZiwgc3Rh
cnRpbmdfcXVldWU9Tm9uZSwgc3RvcHBpbmdfcXVldWU9Tm9uZSk6CisgICAgICAgIHNlbGYuX2Jy
b2tlciA9IG1ha2VfYnJva2VyKHNlbGYsIHNlbGYuX3dvcmtlcl9tb2RlbCwgc3RhcnRpbmdfcXVl
dWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3BwaW5nX3F1ZXVlKQor
CisgICAgZGVmIHRlc3RfY2FuY2VsKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5fd29ya2Vy
X21vZGVsOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYubWFrZV9icm9rZXIoKQor
ICAgICAgICB3b3JrZXIgPSBzZWxmLl9icm9rZXIuc3RhcnRfd29ya2VyKDApCisgICAgICAgIHdv
cmtlci5jYW5jZWwoKQorICAgICAgICBzZWxmLl9icm9rZXIucG9zdF9tZXNzYWdlKCd0ZXN0Jywg
MSwgJ2hlbGxvLCB3b3JsZCcpCisgICAgICAgIHdvcmtlci5qb2luKDAuNSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRGYWxzZSh3b3JrZXIuaXNfYWxpdmUoKSkKKworICAgIGRlZiB0ZXN0X2RvbmUoc2Vs
Zik6CisgICAgICAgIGlmIG5vdCBzZWxmLl93b3JrZXJfbW9kZWw6CisgICAgICAgICAgICByZXR1
cm4KKyAgICAgICAgc2VsZi5tYWtlX2Jyb2tlcigpCisgICAgICAgIHdvcmtlciA9IHNlbGYuX2Jy
b2tlci5zdGFydF93b3JrZXIoMCkKKyAgICAgICAgc2VsZi5fYnJva2VyLnBvc3RfbWVzc2FnZSgn
dGVzdCcsIDEsICdoZWxsbywgd29ybGQnKQorICAgICAgICBzZWxmLl9icm9rZXIucG9zdF9tZXNz
YWdlKCdzdG9wJykKKyAgICAgICAgc2VsZi5fYnJva2VyLnJ1bl9tZXNzYWdlX2xvb3AoKQorICAg
ICAgICB3b3JrZXIuam9pbigwLjUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uod29ya2VyLmlz
X2FsaXZlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmlzX2RvbmUoKSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9hbl9pbnQsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoc2VsZi5fYV9zdHIsICdoaSwgZXZlcnlib2R5JykKKworICAgIGRlZiB0ZXN0X2xvZ193
ZWRnZWRfd29ya2VyKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5fd29ya2VyX21vZGVsOgor
ICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHN0YXJ0aW5nX3F1ZXVlID0gc2VsZi5xdWV1ZSgp
CisgICAgICAgIHN0b3BwaW5nX3F1ZXVlID0gc2VsZi5xdWV1ZSgpCisgICAgICAgIHNlbGYubWFr
ZV9icm9rZXIoc3RhcnRpbmdfcXVldWUsIHN0b3BwaW5nX3F1ZXVlKQorICAgICAgICBvYyA9IG91
dHB1dGNhcHR1cmUuT3V0cHV0Q2FwdHVyZSgpCisgICAgICAgIG9jLmNhcHR1cmVfb3V0cHV0KCkK
KyAgICAgICAgd29ya2VyID0gc2VsZi5fYnJva2VyLnN0YXJ0X3dvcmtlcigwKQorICAgICAgICBz
dGFydGluZ19xdWV1ZS5nZXQoKQorICAgICAgICB3b3JrZXIubG9nX3dlZGdlZF93b3JrZXIoJ3Rl
c3RfbmFtZScpCisgICAgICAgIHN0b3BwaW5nX3F1ZXVlLnB1dCgnJykKKyAgICAgICAgc2VsZi5f
YnJva2VyLnBvc3RfbWVzc2FnZSgnc3RvcCcpCisgICAgICAgIHNlbGYuX2Jyb2tlci5ydW5fbWVz
c2FnZV9sb29wKCkKKyAgICAgICAgd29ya2VyLmpvaW4oMC41KQorICAgICAgICBvYy5yZXN0b3Jl
X291dHB1dCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uod29ya2VyLmlzX2FsaXZlKCkpCisg
ICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmlzX2RvbmUoKSkKKworICAgIGRlZiB0ZXN0X3Vu
a25vd25fbWVzc2FnZShzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuX3dvcmtlcl9tb2RlbDoK
KyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLm1ha2VfYnJva2VyKCkKKyAgICAgICAg
d29ya2VyID0gc2VsZi5fYnJva2VyLnN0YXJ0X3dvcmtlcigwKQorICAgICAgICBzZWxmLl9icm9r
ZXIucG9zdF9tZXNzYWdlKCd1bmtub3duJykKKyAgICAgICAgc2VsZi5fYnJva2VyLnJ1bl9tZXNz
YWdlX2xvb3AoKQorICAgICAgICB3b3JrZXIuam9pbigwLjUpCisKKyAgICAgICAgc2VsZi5hc3Nl
cnRUcnVlKHNlbGYuaXNfZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHdvcmtlci5p
c19hbGl2ZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLl9leGNlcHRpb25bMF0s
IFZhbHVlRXJyb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuX2V4Y2VwdGlvblsx
XSwKKyAgICAgICAgICAgICJUZXN0V29ya2VyLzA6IHJlY2VpdmVkIG1lc3NhZ2UgJ3Vua25vd24n
IGl0IGNvdWxkbid0IGhhbmRsZSIpCisKKworY2xhc3MgSW5saW5lQnJva2VyVGVzdHMoX1Rlc3Rz
TWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAg
IF9UZXN0c01peGluLnNldFVwKHNlbGYpCisgICAgICAgIHNlbGYuX3dvcmtlcl9tb2RlbCA9ICdp
bmxpbmUnCisKKyAgICBkZWYgdGVzdF9sb2dfd2VkZ2VkX3dvcmtlcihzZWxmKToKKyAgICAgICAg
c2VsZi5tYWtlX2Jyb2tlcigpCisgICAgICAgIHdvcmtlciA9IHNlbGYuX2Jyb2tlci5zdGFydF93
b3JrZXIoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIHdvcmtl
ci5sb2dfd2VkZ2VkX3dvcmtlciwgTm9uZSkKKworCitjbGFzcyBNdWx0aVByb2Nlc3NCcm9rZXJU
ZXN0cyhfVGVzdHNNaXhpbiwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxm
KToKKyAgICAgICAgX1Rlc3RzTWl4aW4uc2V0VXAoc2VsZikKKyAgICAgICAgaWYgbXVsdGlwcm9j
ZXNzaW5nOgorICAgICAgICAgICAgc2VsZi5fd29ya2VyX21vZGVsID0gJ3Byb2Nlc3NlcycKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3dvcmtlcl9tb2RlbCA9IE5vbmUKKworICAg
IGRlZiBxdWV1ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIG11bHRpcHJvY2Vzc2luZy5RdWV1ZSgp
CisKKworY2xhc3MgVGhyZWFkZWRCcm9rZXJUZXN0cyhfVGVzdHNNaXhpbiwgdW5pdHRlc3QuVGVz
dENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgX1Rlc3RzTWl4aW4uc2V0VXAo
c2VsZikKKyAgICAgICAgc2VsZi5fd29ya2VyX21vZGVsID0gJ3RocmVhZHMnCisKKyAgICBkZWYg
cXVldWUoc2VsZik6CisgICAgICAgIHJldHVybiBRdWV1ZS5RdWV1ZSgpCisKK2NsYXNzIEZ1bmN0
aW9uc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X3J1bnRpbWVfb3B0aW9u
cyhzZWxmKToKICAgICAgICAgb3B0aW9uX2xpc3QgPSBtYW5hZ2VyX3dvcmtlcl9icm9rZXIucnVu
dGltZV9vcHRpb25zKCkKICAgICAgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKG9w
dGlvbl9saXN0PW9wdGlvbl9saXN0KQogICAgICAgICBvcHRpb25zLCBhcmdzID0gcGFyc2VyLnBh
cnNlX2FyZ3MoW10pCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcHRpb25zKQogCi0jIEZJWE1F
OiBBZGQgaW4gdW5pdCB0ZXN0cyBmb3IgdGhlIG1hbmFnZXJzLCBjb3ZlcmFnZSB0ZXN0cyBmb3Ig
dGhlIGludGVyZmFjZXMuCisKK2NsYXNzIEludGVyZmFjZVRlc3QodW5pdHRlc3QuVGVzdENhc2Up
OgorICAgICMgVGhlc2UgdGVzdHMgbW9zdGx5IGV4aXN0IHRvIHBhY2lmeSBjb3ZlcmFnZS4KKwor
ICAgICMgRklYTUU6IFRoZXJlIG11c3QgYmUgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMgYW5kIGFs
c28gdmVyaWZ5CisgICAgIyB0aGF0IGNsYXNzZXMgZG8gaW1wbGVtZW50IGV2ZXJ5IGFic3RyYWN0
IG1ldGhvZCBpbiBhbiBpbnRlcmZhY2UuCisgICAgZGVmIHRlc3RfbWFuYWdlcmNvbm5lY3Rpb25f
aXNfYWJzdHJhY3Qoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGFsbCB0aGUgYmFzZSBjbGFz
cyBtZXRob2RzIGFyZSBhYnN0cmFjdCBhbmQgaGF2ZSB0aGUKKyAgICAgICAgIyBzaWduYXR1cmUg
d2UgZXhwZWN0LgorICAgICAgICBicm9rZXIgPSBtYWtlX2Jyb2tlcihzZWxmLCAnaW5saW5lJykK
KyAgICAgICAgb2JqID0gbWFuYWdlcl93b3JrZXJfYnJva2VyLl9NYW5hZ2VyQ29ubmVjdGlvbihi
cm9rZXIuX2Jyb2tlciwgTm9uZSwgc2VsZiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlz
ZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgb2JqLnN0YXJ0X3dvcmtlciwgMCkKKworICAgIGRlZiB0
ZXN0X3dvcmtlcmNvbm5lY3Rpb25faXNfYWJzdHJhY3Qoc2VsZik6CisgICAgICAgICMgVGVzdCB0
aGF0IGFsbCB0aGUgYmFzZSBjbGFzcyBtZXRob2RzIGFyZSBhYnN0cmFjdCBhbmQgaGF2ZSB0aGUK
KyAgICAgICAgIyBzaWduYXR1cmUgd2UgZXhwZWN0LgorICAgICAgICBicm9rZXIgPSBtYWtlX2Jy
b2tlcihzZWxmLCAnaW5saW5lJykKKyAgICAgICAgb2JqID0gbWFuYWdlcl93b3JrZXJfYnJva2Vy
Ll9Xb3JrZXJDb25uZWN0aW9uKGJyb2tlci5fYnJva2VyLCB3b3JrZXJfbWFrZXIoKSwgMCwgTm9u
ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgb2JqLmNh
bmNlbCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgb2Jq
LmlzX2FsaXZlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9y
LCBvYmouam9pbiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50
ZWRFcnJvciwgb2JqLmxvZ193ZWRnZWRfd29ya2VyLCBOb25lKQogCiAKIGlmIF9fbmFtZV9fID09
ICdfX21haW5fXyc6CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9sYXlvdXRfcGFja2FnZS9zaW5nbGVfdGVzdF9ydW5uZXIucHkgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9zaW5nbGVfdGVzdF9ydW5uZXIu
cHkKaW5kZXggOTZlM2VlNmU4MDQzM2ViMGM1MTc3YTI0N2ZhOTJiMmEzZWE4NTBkNC4uMDg2OGNi
NTliYWY3YjQ5OWNmMTYyNzY0ZWEyYWM3MzM3MDY4MTY5NSAxMDA2NDQKLS0tIGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvc2luZ2xlX3Rlc3RfcnVu
bmVyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL3NpbmdsZV90ZXN0X3J1bm5lci5weQpAQCAtMjgsMTQgKzI4LDkgQEAKIAogCiBpbXBv
cnQgbG9nZ2luZwotaW1wb3J0IHRocmVhZGluZwogaW1wb3J0IHRpbWUKIAogZnJvbSB3ZWJraXRw
eS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgYmFzZQotCi1mcm9tIHdlYmtpdHB5LmxheW91dF90
ZXN0cy50ZXN0X3R5cGVzIGltcG9ydCB0ZXh0X2RpZmYKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rl
c3RzLnRlc3RfdHlwZXMgaW1wb3J0IGltYWdlX2RpZmYKLQogZnJvbSB3ZWJraXRweS5sYXlvdXRf
dGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfZmFpbHVyZXMKIGZyb20gd2Via2l0cHku
bGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlLnRlc3RfcmVzdWx0cyBpbXBvcnQgVGVzdFJlc3Vs
dAogCkBAIC00Myw2ICszOCwxMiBAQCBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRf
cGFja2FnZS50ZXN0X3Jlc3VsdHMgaW1wb3J0IFRlc3RSZXN1bHQKIF9sb2cgPSBsb2dnaW5nLmdl
dExvZ2dlcihfX25hbWVfXykKIAogCitkZWYgcnVuX3NpbmdsZV90ZXN0KHBvcnQsIG9wdGlvbnMs
IHRlc3RfaW5wdXQsIGRyaXZlciwgd29ya2VyX25hbWUsIHRlc3RfdHlwZXMpOgorICAgICMgRklY
TUU6IFB1bGwgdGhpcyBpbnRvIFRlc3RTaGVsbFRocmVhZC5fcnVuKCkuCisgICAgcnVubmVyID0g
U2luZ2xlVGVzdFJ1bm5lcihvcHRpb25zLCBwb3J0LCBkcml2ZXIsIHRlc3RfaW5wdXQsIHdvcmtl
cl9uYW1lLCB0ZXN0X3R5cGVzKQorICAgIHJldHVybiBydW5uZXIucnVuKCkKKworCiBjbGFzcyBF
eHBlY3RlZERyaXZlck91dHB1dDoKICAgICAiIiJHcm91cHMgaW5mb3JtYXRpb24gYWJvdXQgYW4g
ZXhwZWN0ZWQgZHJpdmVyIG91dHB1dC4iIiIKICAgICBkZWYgX19pbml0X18oc2VsZiwgdGV4dCwg
aW1hZ2UsIGltYWdlX2hhc2gpOgpAQCAtNTMsMTExICs1NCwxNSBAQCBjbGFzcyBFeHBlY3RlZERy
aXZlck91dHB1dDoKIAogY2xhc3MgU2luZ2xlVGVzdFJ1bm5lcjoKIAotICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBvcHRpb25zLCBwb3J0LCB3b3JrZXJfbmFtZSwgd29ya2VyX251bWJlcik6CisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIG9wdGlvbnMsIHBvcnQsIGRyaXZlciwgdGVzdF9pbnB1dCwgd29y
a2VyX25hbWUsIHRlc3RfdHlwZXMpOgogICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucwog
ICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAorICAgICAgICBzZWxmLl9kcml2ZXIgPSBkcml2ZXIK
KyAgICAgICAgc2VsZi5fZmlsZW5hbWUgPSB0ZXN0X2lucHV0LmZpbGVuYW1lCisgICAgICAgIHNl
bGYuX3RpbWVvdXQgPSB0ZXN0X2lucHV0LnRpbWVvdXQKICAgICAgICAgc2VsZi5fd29ya2VyX25h
bWUgPSB3b3JrZXJfbmFtZQotICAgICAgICBzZWxmLl93b3JrZXJfbnVtYmVyID0gd29ya2VyX251
bWJlcgotICAgICAgICBzZWxmLl9kcml2ZXIgPSBOb25lCi0gICAgICAgIHNlbGYuX3Rlc3RfdHlw
ZXMgPSBbXQotICAgICAgICBzZWxmLmhhc19odHRwX2xvY2sgPSBGYWxzZQotICAgICAgICBmb3Ig
Y2xzIGluIHNlbGYuX2dldF90ZXN0X3R5cGVfY2xhc3NlcygpOgotICAgICAgICAgICAgc2VsZi5f
dGVzdF90eXBlcy5hcHBlbmQoY2xzKHNlbGYuX3BvcnQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSkpCi0KLSAg
ICBkZWYgY2xlYW51cChzZWxmKToKLSAgICAgICAgc2VsZi5raWxsX2R1bXBfcmVuZGVyX3RyZWUo
KQotICAgICAgICBpZiBzZWxmLmhhc19odHRwX2xvY2s6Ci0gICAgICAgICAgICBzZWxmLnN0b3Bf
c2VydmVyc193aXRoX2xvY2soKQotCi0gICAgZGVmIF9nZXRfdGVzdF90eXBlX2NsYXNzZXMoc2Vs
Zik6Ci0gICAgICAgIGNsYXNzZXMgPSBbdGV4dF9kaWZmLlRlc3RUZXh0RGlmZl0KLSAgICAgICAg
aWYgc2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0czoKLSAgICAgICAgICAgIGNsYXNzZXMuYXBwZW5k
KGltYWdlX2RpZmYuSW1hZ2VEaWZmKQotICAgICAgICByZXR1cm4gY2xhc3NlcwotCi0gICAgZGVm
IHRpbWVvdXQoc2VsZiwgdGVzdF9pbnB1dCk6Ci0gICAgICAgICMgV2UgY2FsY3VsYXRlIGhvdyBs
b25nIHdlIGV4cGVjdCB0aGUgdGVzdCB0byB0YWtlLgotICAgICAgICAjCi0gICAgICAgICMgVGhl
IER1bXBSZW5kZXJUcmVlIHdhdGNoZG9nIHVzZXMgMi41eCB0aGUgdGltZW91dDsgd2Ugd2FudCB0
byBiZQotICAgICAgICAjIGxhcmdlciB0aGFuIHRoYXQuIFdlIGFsc28gYWRkIGEgbGl0dGxlIG1v
cmUgcGFkZGluZyBpZiB3ZSdyZQotICAgICAgICAjIHJ1bm5pbmcgdGVzdHMgaW4gYSBzZXBhcmF0
ZSB0aHJlYWQuCi0gICAgICAgICMKLSAgICAgICAgIyBOb3RlIHRoYXQgd2UgbmVlZCB0byBjb252
ZXJ0IHRoZSB0ZXN0IHRpbWVvdXQgZnJvbSBhCi0gICAgICAgICMgc3RyaW5nIHZhbHVlIGluIG1p
bGxpc2Vjb25kcyB0byBhIGZsb2F0IGZvciBQeXRob24uCi0gICAgICAgIGRyaXZlcl90aW1lb3V0
X3NlYyA9IDMuMCAqIGZsb2F0KHRlc3RfaW5wdXQudGltZW91dCkgLyAxMDAwLjAKLSAgICAgICAg
aWYgbm90IHNlbGYuX29wdGlvbnMucnVuX3NpbmdseToKLSAgICAgICAgICAgIHJldHVybiBkcml2
ZXJfdGltZW91dF9zZWMKLQotICAgICAgICB0aHJlYWRfcGFkZGluZ19zZWMgPSAxLjAKLSAgICAg
ICAgdGhyZWFkX3RpbWVvdXRfc2VjID0gZHJpdmVyX3RpbWVvdXRfc2VjICsgdGhyZWFkX3BhZGRp
bmdfc2VjCi0gICAgICAgIHJldHVybiB0aHJlYWRfdGltZW91dF9zZWMKLQotICAgIGRlZiBydW5f
dGVzdChzZWxmLCB0ZXN0X2lucHV0LCB0aW1lb3V0KToKLSAgICAgICAgaWYgc2VsZi5fb3B0aW9u
cy5ydW5fc2luZ2x5OgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl90ZXN0X2luX2Fub3Ro
ZXJfdGhyZWFkKHRlc3RfaW5wdXQsIHRpbWVvdXQpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAg
ICByZXR1cm4gc2VsZi5fcnVuX3Rlc3RfaW5fdGhpc190aHJlYWQodGVzdF9pbnB1dCkKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdAotCi0gICAgZGVmIF9ydW5fdGVzdF9pbl9hbm90aGVyX3RocmVhZChz
ZWxmLCB0ZXN0X2lucHV0LCB0aHJlYWRfdGltZW91dF9zZWMpOgotICAgICAgICAiIiJSdW4gYSB0
ZXN0IGluIGEgc2VwYXJhdGUgdGhyZWFkLCBlbmZvcmNpbmcgYSBoYXJkIHRpbWUgbGltaXQuCi0K
LSAgICAgICAgU2luY2Ugd2UgY2FuIG9ubHkgZGV0ZWN0IHRoZSB0ZXJtaW5hdGlvbiBvZiBhIHRo
cmVhZCwgbm90IGFueSBpbnRlcm5hbAotICAgICAgICBzdGF0ZSBvciBwcm9ncmVzcywgd2UgY2Fu
IG9ubHkgcnVuIHBlci10ZXN0IHRpbWVvdXRzIHdoZW4gcnVubmluZyB0ZXN0Ci0gICAgICAgIGZp
bGVzIHNpbmdseS4KLQotICAgICAgICBBcmdzOgotICAgICAgICAgIHRlc3RfaW5wdXQ6IE9iamVj
dCBjb250YWluaW5nIHRoZSB0ZXN0IGZpbGVuYW1lIGFuZCB0aW1lb3V0Ci0gICAgICAgICAgdGhy
ZWFkX3RpbWVvdXRfc2VjOiB0aW1lIHRvIHdhaXQgYmVmb3JlIGtpbGxpbmcgdGhlIGRyaXZlciBw
cm9jZXNzLgotICAgICAgICBSZXR1cm5zOgotICAgICAgICAgIEEgVGVzdFJlc3VsdAotICAgICAg
ICAiIiIKLSAgICAgICAgd29ya2VyID0gc2VsZgotICAgICAgICByZXN1bHQgPSBOb25lCi0KLSAg
ICAgICAgZHJpdmVyID0gd29ya2VyLl9wb3J0LmNyZWF0ZV9kcml2ZXIod29ya2VyLl93b3JrZXJf
bnVtYmVyKQotICAgICAgICBkcml2ZXIuc3RhcnQoKQotCi0gICAgICAgIGNsYXNzIFNpbmdsZVRl
c3RUaHJlYWQodGhyZWFkaW5nLlRocmVhZCk6Ci0gICAgICAgICAgICBkZWYgcnVuKHNlbGYpOgot
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IHdvcmtlci5ydW4odGVzdF9pbnB1dCwgZHJpdmVyKQot
Ci0gICAgICAgIHRocmVhZCA9IFNpbmdsZVRlc3RUaHJlYWQoKQotICAgICAgICB0aHJlYWQuc3Rh
cnQoKQotICAgICAgICB0aHJlYWQuam9pbih0aHJlYWRfdGltZW91dF9zZWMpCi0gICAgICAgIGlm
IHRocmVhZC5pc0FsaXZlKCk6Ci0gICAgICAgICAgICAjIElmIGpvaW4oKSByZXR1cm5lZCB3aXRo
IHRoZSB0aHJlYWQgc3RpbGwgcnVubmluZywgdGhlCi0gICAgICAgICAgICAjIER1bXBSZW5kZXJU
cmVlIGlzIGNvbXBsZXRlbHkgaHVuZyBhbmQgdGhlcmUncyBub3RoaW5nCi0gICAgICAgICAgICAj
IG1vcmUgd2UgY2FuIGRvIHdpdGggaXQuICBXZSBoYXZlIHRvIGtpbGwgYWxsIHRoZQotICAgICAg
ICAgICAgIyBEdW1wUmVuZGVyVHJlZXMgdG8gZnJlZSBpdCB1cC4gSWYgd2UncmUgcnVubmluZyBt
b3JlIHRoYW4KLSAgICAgICAgICAgICMgb25lIER1bXBSZW5kZXJUcmVlIHRocmVhZCwgd2UnbGwg
ZW5kIHVwIGtpbGxpbmcgdGhlIG90aGVyCi0gICAgICAgICAgICAjIER1bXBSZW5kZXJUcmVlcyB0
b28sIGludHJvZHVjaW5nIHNwdXJpb3VzIGNyYXNoZXMuIFdlIGFjY2VwdAotICAgICAgICAgICAg
IyB0aGF0IHRyYWRlb2ZmIGluIG9yZGVyIHRvIGF2b2lkIGxvc2luZyB0aGUgcmVzdCBvZiB0aGlz
Ci0gICAgICAgICAgICAjIHRocmVhZCdzIHJlc3VsdHMuCi0gICAgICAgICAgICBfbG9nLmVycm9y
KCdUZXN0IHRocmVhZCBodW5nOiBraWxsaW5nIGFsbCBEdW1wUmVuZGVyVHJlZXMnKQotCi0gICAg
ICAgIGRyaXZlci5zdG9wKCkKLQotICAgICAgICBpZiBub3QgcmVzdWx0OgotICAgICAgICAgICAg
cmVzdWx0ID0gVGVzdFJlc3VsdCh0ZXN0X2lucHV0LmZpbGVuYW1lLCBmYWlsdXJlcz1bXSwKLSAg
ICAgICAgICAgICAgICB0ZXN0X3J1bl90aW1lPTAsIHRvdGFsX3RpbWVfZm9yX2FsbF9kaWZmcz0w
LCB0aW1lX2Zvcl9kaWZmcz17fSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdAotCi0gICAgZGVmIF9y
dW5fdGVzdF9pbl90aGlzX3RocmVhZChzZWxmLCB0ZXN0X2lucHV0KToKLSAgICAgICAgIiIiUnVu
IGEgc2luZ2xlIHRlc3QgZmlsZSB1c2luZyBhIHNoYXJlZCBEdW1wUmVuZGVyVHJlZSBwcm9jZXNz
LgotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgdGVzdF9pbnB1dDogT2JqZWN0IGNvbnRhaW5p
bmcgdGhlIHRlc3QgZmlsZW5hbWUsIHVyaSBhbmQgdGltZW91dAotCi0gICAgICAgIFJldHVybnM6
IGEgVGVzdFJlc3VsdCBvYmplY3QuCi0gICAgICAgICIiIgotICAgICAgICAjIHBvbGwoKSBpcyBu
b3QgdGhyZWFkc2FmZSBhbmQgY2FuIHRocm93IE9TRXJyb3IgZHVlIHRvOgotICAgICAgICAjIGh0
dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxNzMxNzE3Ci0gICAgICAgIGlmIG5vdCBzZWxmLl9k
cml2ZXIgb3Igc2VsZi5fZHJpdmVyLnBvbGwoKSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNl
bGYuX2RyaXZlciA9IHNlbGYuX3BvcnQuY3JlYXRlX2RyaXZlcihzZWxmLl93b3JrZXJfbnVtYmVy
KQotICAgICAgICAgICAgc2VsZi5fZHJpdmVyLnN0YXJ0KCkKLSAgICAgICAgcmV0dXJuIHNlbGYu
X3J1bihzZWxmLl9kcml2ZXIsIHRlc3RfaW5wdXQpCisgICAgICAgIHNlbGYuX3Rlc3RfdHlwZXMg
PSB0ZXN0X3R5cGVzCisgICAgICAgIHNlbGYuX3Rlc3RuYW1lID0gcG9ydC5yZWxhdGl2ZV90ZXN0
X2ZpbGVuYW1lKHRlc3RfaW5wdXQuZmlsZW5hbWUpCiAKICAgICBkZWYgX2V4cGVjdGVkX2RyaXZl
cl9vdXRwdXQoc2VsZik6CiAgICAgICAgIHJldHVybiBFeHBlY3RlZERyaXZlck91dHB1dChzZWxm
Ll9wb3J0LmV4cGVjdGVkX3RleHQoc2VsZi5fZmlsZW5hbWUpLApAQCAtMTY4LDExICs3Myw3IEBA
IGNsYXNzIFNpbmdsZVRlc3RSdW5uZXI6CiAgICAgICAgIHJldHVybiAoc2VsZi5fb3B0aW9ucy5w
aXhlbF90ZXN0cyBhbmQKICAgICAgICAgICAgICAgICBub3QgKHNlbGYuX29wdGlvbnMubmV3X2Jh
c2VsaW5lIG9yIHNlbGYuX29wdGlvbnMucmVzZXRfcmVzdWx0cykpCiAKLSAgICBkZWYgX2RyaXZl
cl9pbnB1dChzZWxmLCB0ZXN0X2lucHV0KToKLSAgICAgICAgc2VsZi5fZmlsZW5hbWUgPSB0ZXN0
X2lucHV0LmZpbGVuYW1lCi0gICAgICAgIHNlbGYuX3RpbWVvdXQgPSB0ZXN0X2lucHV0LnRpbWVv
dXQKLSAgICAgICAgc2VsZi5fdGVzdG5hbWUgPSBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmls
ZW5hbWUodGVzdF9pbnB1dC5maWxlbmFtZSkKLQorICAgIGRlZiBfZHJpdmVyX2lucHV0KHNlbGYp
OgogICAgICAgICAjIFRoZSBpbWFnZSBoYXNoIGlzIHVzZWQgdG8gYXZvaWQgZG9pbmcgYW4gaW1h
Z2UgZHVtcCBpZiB0aGUKICAgICAgICAgIyBjaGVja3N1bXMgbWF0Y2gsIHNvIGl0IHNob3VsZCBi
ZSBzZXQgdG8gYSBibGFuayB2YWx1ZSBpZiB3ZQogICAgICAgICAjIGFyZSBnZW5lcmF0aW5nIGEg
bmV3IGJhc2VsaW5lLiAgKE90aGVyd2lzZSwgYW4gaW1hZ2UgZnJvbSBhCkBAIC0xODIsMTcgKzgz
LDE3IEBAIGNsYXNzIFNpbmdsZVRlc3RSdW5uZXI6CiAgICAgICAgICAgICBpbWFnZV9oYXNoID0g
c2VsZi5fcG9ydC5leHBlY3RlZF9jaGVja3N1bShzZWxmLl9maWxlbmFtZSkKICAgICAgICAgcmV0
dXJuIGJhc2UuRHJpdmVySW5wdXQoc2VsZi5fZmlsZW5hbWUsIHNlbGYuX3RpbWVvdXQsIGltYWdl
X2hhc2gpCiAKLSAgICBkZWYgX3J1bihzZWxmLCBkcml2ZXIsIHRlc3RfaW5wdXQpOgorICAgIGRl
ZiBydW4oc2VsZik6CiAgICAgICAgIGlmIHNlbGYuX29wdGlvbnMubmV3X2Jhc2VsaW5lIG9yIHNl
bGYuX29wdGlvbnMucmVzZXRfcmVzdWx0czoKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9ydW5f
cmViYXNlbGluZShkcml2ZXIsIHRlc3RfaW5wdXQpCi0gICAgICAgIHJldHVybiBzZWxmLl9ydW5f
Y29tcGFyZV90ZXN0KGRyaXZlciwgdGVzdF9pbnB1dCkKKyAgICAgICAgICAgIHJldHVybiBzZWxm
Ll9ydW5fcmViYXNlbGluZSgpCisgICAgICAgIHJldHVybiBzZWxmLl9ydW5fY29tcGFyZV90ZXN0
KCkKIAotICAgIGRlZiBfcnVuX2NvbXBhcmVfdGVzdChzZWxmLCBkcml2ZXIsIHRlc3RfaW5wdXQp
OgotICAgICAgICBkcml2ZXJfb3V0cHV0ID0gc2VsZi5fZHJpdmVyLnJ1bl90ZXN0KHNlbGYuX2Ry
aXZlcl9pbnB1dCh0ZXN0X2lucHV0KSkKKyAgICBkZWYgX3J1bl9jb21wYXJlX3Rlc3Qoc2VsZik6
CisgICAgICAgIGRyaXZlcl9vdXRwdXQgPSBzZWxmLl9kcml2ZXIucnVuX3Rlc3Qoc2VsZi5fZHJp
dmVyX2lucHV0KCkpCiAgICAgICAgIHJldHVybiBzZWxmLl9wcm9jZXNzX291dHB1dChkcml2ZXJf
b3V0cHV0KQogCi0gICAgZGVmIF9ydW5fcmViYXNlbGluZShzZWxmLCBkcml2ZXIsIHRlc3RfaW5w
dXQpOgotICAgICAgICBkcml2ZXJfb3V0cHV0ID0gc2VsZi5fZHJpdmVyLnJ1bl90ZXN0KHNlbGYu
X2RyaXZlcl9pbnB1dCh0ZXN0X2lucHV0KSkKKyAgICBkZWYgX3J1bl9yZWJhc2VsaW5lKHNlbGYp
OgorICAgICAgICBkcml2ZXJfb3V0cHV0ID0gc2VsZi5fZHJpdmVyLnJ1bl90ZXN0KHNlbGYuX2Ry
aXZlcl9pbnB1dCgpKQogICAgICAgICBmYWlsdXJlcyA9IHNlbGYuX2hhbmRsZV9lcnJvcihkcml2
ZXJfb3V0cHV0KQogICAgICAgICAjIEZJWE1FOiBJdCB0aGUgdGVzdCBjcmFzaGVkIG9yIHRpbWVk
IG91dCwgaXQgbWlnaHQgYmUgYmV0dHRlciB0byBhdm9pZAogICAgICAgICAjIHRvIHdyaXRlIG5l
dyBiYXNlbGluZXMuCkBAIC0yNTksMTAgKzE2MCw2IEBAIGNsYXNzIFNpbmdsZVRlc3RSdW5uZXI6
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRyaXZlcl9vdXRwdXQuZXJyb3IpKQogICAgICAgICByZXR1cm4gZmFpbHVyZXMKIAotICAg
IGRlZiBfcnVuX3Rlc3Qoc2VsZik6Ci0gICAgICAgIGRyaXZlcl9vdXRwdXQgPSBzZWxmLl9kcml2
ZXIucnVuX3Rlc3Qoc2VsZi5fZHJpdmVyX2lucHV0KCkpCi0gICAgICAgIHJldHVybiBzZWxmLl9w
cm9jZXNzX291dHB1dChkcml2ZXJfb3V0cHV0KQotCiAgICAgZGVmIF9wcm9jZXNzX291dHB1dChz
ZWxmLCBkcml2ZXJfb3V0cHV0KToKICAgICAgICAgIiIiUmVjZWl2ZXMgdGhlIG91dHB1dCBmcm9t
IGEgRHVtcFJlbmRlclRyZWUgcHJvY2Vzcywgc3ViamVjdHMgaXQgdG8gYQogICAgICAgICBudW1i
ZXIgb2YgdGVzdHMsIGFuZCByZXR1cm5zIGEgbGlzdCBvZiBmYWlsdXJlIHR5cGVzIHRoZSB0ZXN0
IHByb2R1Y2VkLgpAQCAtMjk0LDI5ICsxOTEsMyBAQCBjbGFzcyBTaW5nbGVUZXN0UnVubmVyOgog
ICAgICAgICB0b3RhbF90aW1lX2Zvcl9hbGxfZGlmZnMgPSB0aW1lLnRpbWUoKSAtIHN0YXJ0X2Rp
ZmZfdGltZQogICAgICAgICByZXR1cm4gVGVzdFJlc3VsdChzZWxmLl9maWxlbmFtZSwgZmFpbHVy
ZXMsIGRyaXZlcl9vdXRwdXQudGVzdF90aW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICB0
b3RhbF90aW1lX2Zvcl9hbGxfZGlmZnMsIHRpbWVfZm9yX2RpZmZzKQotCi0gICAgZGVmIHN0YXJ0
X3NlcnZlcnNfd2l0aF9sb2NrKHNlbGYpOgotICAgICAgICBfbG9nLmRlYnVnKCdBY3F1aXJpbmcg
aHR0cCBsb2NrIC4uLicpCi0gICAgICAgIHNlbGYuX3BvcnQuYWNxdWlyZV9odHRwX2xvY2soKQot
ICAgICAgICBfbG9nLmRlYnVnKCdTdGFydGluZyBIVFRQIHNlcnZlciAuLi4nKQotICAgICAgICBz
ZWxmLl9wb3J0LnN0YXJ0X2h0dHBfc2VydmVyKCkKLSAgICAgICAgX2xvZy5kZWJ1ZygnU3RhcnRp
bmcgV2ViU29ja2V0IHNlcnZlciAuLi4nKQotICAgICAgICBzZWxmLl9wb3J0LnN0YXJ0X3dlYnNv
Y2tldF9zZXJ2ZXIoKQotICAgICAgICBzZWxmLmhhc19odHRwX2xvY2sgPSBUcnVlCi0KLSAgICBk
ZWYgc3RvcF9zZXJ2ZXJzX3dpdGhfbG9jayhzZWxmKToKLSAgICAgICAgIiIiU3RvcCB0aGUgc2Vy
dmVycyBhbmQgcmVsZWFzZSBodHRwIGxvY2suIiIiCi0gICAgICAgIGlmIHNlbGYuaGFzX2h0dHBf
bG9jazoKLSAgICAgICAgICAgIF9sb2cuZGVidWcoJ1N0b3BwaW5nIEhUVFAgc2VydmVyIC4uLicp
Ci0gICAgICAgICAgICBzZWxmLl9wb3J0LnN0b3BfaHR0cF9zZXJ2ZXIoKQotICAgICAgICAgICAg
X2xvZy5kZWJ1ZygnU3RvcHBpbmcgV2ViU29ja2V0IHNlcnZlciAuLi4nKQotICAgICAgICAgICAg
c2VsZi5fcG9ydC5zdG9wX3dlYnNvY2tldF9zZXJ2ZXIoKQotICAgICAgICAgICAgX2xvZy5kZWJ1
ZygnUmVsZWFzaW5nIHNlcnZlciBsb2NrIC4uLicpCi0gICAgICAgICAgICBzZWxmLl9wb3J0LnJl
bGVhc2VfaHR0cF9sb2NrKCkKLSAgICAgICAgICAgIHNlbGYuaGFzX2h0dHBfbG9jayA9IEZhbHNl
Ci0KLSAgICBkZWYga2lsbF9kdW1wX3JlbmRlcl90cmVlKHNlbGYpOgotICAgICAgICAiIiJLaWxs
IHRoZSBEdW1wUmVuZGVyVHJlZSBwcm9jZXNzIGlmIGl0J3MgcnVubmluZy4iIiIKLSAgICAgICAg
aWYgc2VsZi5fZHJpdmVyOgotICAgICAgICAgICAgc2VsZi5fZHJpdmVyLnN0b3AoKQotICAgICAg
ICAgICAgc2VsZi5fZHJpdmVyID0gTm9uZQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9ydW5uZXIyLnB5IGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9ydW5uZXIy
LnB5CmluZGV4IDc1YjlkZGE3NTBlN2VhN2VhMDE4MTQwMTI1M2NiMjA0YjJlYTFjODEuLjIzNmVh
ZDVjYWYwZWQ2MzMwNWI1Y2I0Nzk4ZjUwNjI0YzU3ODJhZjggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfcnVubmVyMi5w
eQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2Fn
ZS90ZXN0X3J1bm5lcjIucHkKQEAgLTM0LDI4ICszNCw2NSBAQCB3b3JrZXJzIGFuZCByZWNlaXZl
IHRoZWlyIGNvbXBsZXRpb24gbWVzc2FnZXMgYWNjb3JkaW5nbHkuCiAiIiIKIAogaW1wb3J0IGxv
Z2dpbmcKK2ltcG9ydCB0aW1lCiAKK2Zyb20gd2Via2l0cHkudG9vbCBpbXBvcnQgZ3JhbW1hcgog
CiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQgbWFuYWdl
cl93b3JrZXJfYnJva2VyCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2Fn
ZSBpbXBvcnQgdGVzdF9ydW5uZXIKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9w
YWNrYWdlIGltcG9ydCB3b3JrZXIKIAorCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1l
X18pCiAKIAorY2xhc3MgX1dvcmtlclN0YXRlKG9iamVjdCk6CisgICAgIiIiQSBjbGFzcyBmb3Ig
dGhlIFRlc3RSdW5uZXIvbWFuYWdlciB0byB1c2UgdG8gdHJhY2sgdGhlIGN1cnJlbnQgc3RhdGUK
KyAgICBvZiB0aGUgd29ya2Vycy4iIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbnVtYmVyLCB3
b3JrZXJfY29ubmVjdGlvbik6CisgICAgICAgIHNlbGYud29ya2VyX2Nvbm5lY3Rpb24gPSB3b3Jr
ZXJfY29ubmVjdGlvbgorICAgICAgICBzZWxmLm51bWJlciA9IG51bWJlcgorICAgICAgICBzZWxm
LmRvbmUgPSBGYWxzZQorICAgICAgICBzZWxmLmN1cnJlbnRfdGVzdF9uYW1lID0gTm9uZQorICAg
ICAgICBzZWxmLm5leHRfdGltZW91dCA9IE5vbmUKKyAgICAgICAgc2VsZi53ZWRnZWQgPSBGYWxz
ZQorICAgICAgICBzZWxmLnN0YXRzID0ge30KKyAgICAgICAgc2VsZi5zdGF0c1snbmFtZSddID0g
d29ya2VyX2Nvbm5lY3Rpb24ubmFtZQorICAgICAgICBzZWxmLnN0YXRzWydudW1fdGVzdHMnXSA9
IDAKKyAgICAgICAgc2VsZi5zdGF0c1sndG90YWxfdGltZSddID0gMAorCisgICAgZGVmIF9fcmVw
cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIl9Xb3JrZXJTdGF0ZSgiICsgc3RyKHNlbGYuX19k
aWN0X18pICsgIikiCisKKwogY2xhc3MgVGVzdFJ1bm5lcjIodGVzdF9ydW5uZXIuVGVzdFJ1bm5l
cik6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMsIHByaW50ZXIpOgotICAg
ICAgICBpZiBvcHRpb25zLndvcmtlcl9tb2RlbCBpbiAoJ3RocmVhZHMnLCAncHJvY2Vzc2VzJyk6
Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCctLXdvcmtlci1tb2RlbD0lcyBub3Qgc3Vw
cG9ydGVkIHlldCcgJSBvcHRpb25zLndvcmtlcl9tb2RlbCkKLQogICAgICAgICB0ZXN0X3J1bm5l
ci5UZXN0UnVubmVyLl9faW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMsIHByaW50ZXIpCiAgICAg
ICAgIHNlbGYuX2FsbF9yZXN1bHRzID0gW10KICAgICAgICAgc2VsZi5fZ3JvdXBfc3RhdHMgPSB7
fQogICAgICAgICBzZWxmLl9jdXJyZW50X3Jlc3VsdF9zdW1tYXJ5ID0gTm9uZQotICAgICAgICBz
ZWxmLl9kb25lID0gRmFsc2UKKworICAgICAgICAjIFRoaXMgbWFwcyB3b3JrZXIgbmFtZXMgdG8g
dGhlIHN0YXRlIHdlIGFyZSB0cmFja2luZyBmb3IgZWFjaCBvZiB0aGVtLgorICAgICAgICBzZWxm
Ll93b3JrZXJfc3RhdGVzID0ge30KIAogICAgIGRlZiBpc19kb25lKHNlbGYpOgotICAgICAgICBy
ZXR1cm4gc2VsZi5fZG9uZQorICAgICAgICB3b3JrZXJfc3RhdGVzID0gc2VsZi5fd29ya2VyX3N0
YXRlcy52YWx1ZXMoKQorICAgICAgICByZXR1cm4gd29ya2VyX3N0YXRlcyBhbmQgYWxsKHNlbGYu
X3dvcmtlcl9pc19kb25lKHdvcmtlcl9zdGF0ZSkgZm9yIHdvcmtlcl9zdGF0ZSBpbiB3b3JrZXJf
c3RhdGVzKQorCisgICAgZGVmIF93b3JrZXJfaXNfZG9uZShzZWxmLCB3b3JrZXJfc3RhdGUpOgor
ICAgICAgICB0ID0gdGltZS50aW1lKCkKKyAgICAgICAgaWYgd29ya2VyX3N0YXRlLmRvbmUgb3Ig
d29ya2VyX3N0YXRlLndlZGdlZDoKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAg
bmV4dF90aW1lb3V0ID0gd29ya2VyX3N0YXRlLm5leHRfdGltZW91dAorICAgICAgICBXRURHRV9Q
QURESU5HID0gNDAuMAorICAgICAgICBpZiBuZXh0X3RpbWVvdXQgYW5kIHQgPiBuZXh0X3RpbWVv
dXQgKyBXRURHRV9QQURESU5HOgorICAgICAgICAgICAgX2xvZy5lcnJvcignJykKKyAgICAgICAg
ICAgIHdvcmtlcl9zdGF0ZS53b3JrZXJfY29ubmVjdGlvbi5sb2dfd2VkZ2VkX3dvcmtlcih3b3Jr
ZXJfc3RhdGUuY3VycmVudF90ZXN0X25hbWUpCisgICAgICAgICAgICBfbG9nLmVycm9yKCcnKQor
ICAgICAgICAgICAgd29ya2VyX3N0YXRlLndlZGdlZCA9IFRydWUKKyAgICAgICAgICAgIHJldHVy
biBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQogCiAgICAgZGVmIG5hbWUoc2VsZik6CiAgICAg
ICAgIHJldHVybiAnVGVzdFJ1bm5lcjInCkBAIC03NSw1OCArMTEyLDExNCBAQCBjbGFzcyBUZXN0
UnVubmVyMih0ZXN0X3J1bm5lci5UZXN0UnVubmVyKToKICAgICAgICAgICAgIHJlc3VsdF9zdW1t
YXJ5OiBzdW1tYXJ5IG9iamVjdCB0byBwb3B1bGF0ZSB3aXRoIHRoZSByZXN1bHRzCiAgICAgICAg
ICIiIgogICAgICAgICBzZWxmLl9jdXJyZW50X3Jlc3VsdF9zdW1tYXJ5ID0gcmVzdWx0X3N1bW1h
cnkKKyAgICAgICAgc2VsZi5fYWxsX3Jlc3VsdHMgPSBbXQorICAgICAgICBzZWxmLl9ncm91cF9z
dGF0cyA9IHt9CisgICAgICAgIHNlbGYuX3dvcmtlcl9zdGF0ZXMgPSB7fQogCi0gICAgICAgICMg
RklYTUU6IHNoYXJkIHByb3Blcmx5LgorICAgICAgICBudW1fd29ya2VycyA9IHNlbGYuX251bV93
b3JrZXJzKCkKIAotICAgICAgICAjIEZJWE1FOiBzaG91bGQgc2hhcmRfdGVzdHMgcmV0dXJuIGEg
bGlzdCBvZiBvYmplY3RzIHJhdGhlciB0aGFuIHR1cGxlcz8KLSAgICAgICAgdGVzdF9saXN0cyA9
IHNlbGYuX3NoYXJkX3Rlc3RzKGZpbGVfbGlzdCwgRmFsc2UpCisgICAgICAgIHNlbGYuX3ByaW50
ZXIucHJpbnRfdXBkYXRlKCdTaGFyZGluZyB0ZXN0cyAuLi4nKQorICAgICAgICB0ZXN0X2xpc3Rz
ID0gc2VsZi5fc2hhcmRfdGVzdHMoZmlsZV9saXN0LAorICAgICAgICAgICAgbnVtX3dvcmtlcnMg
PiAxIGFuZCBub3Qgc2VsZi5fb3B0aW9ucy5leHBlcmltZW50YWxfZnVsbHlfcGFyYWxsZWwpCisg
ICAgICAgIF9sb2cuZGVidWcoIlVzaW5nICVkIHNoYXJkcyIgJSBsZW4odGVzdF9saXN0cykpCiAK
LSAgICAgICAgbWFuYWdlcl9jb25uZWN0aW9uID0gbWFuYWdlcl93b3JrZXJfYnJva2VyLmdldChz
ZWxmLl9wb3J0LCBzZWxmLl9vcHRpb25zLCBzZWxmLCB3b3JrZXIuV29ya2VyKQorICAgICAgICBt
YW5hZ2VyX2Nvbm5lY3Rpb24gPSBtYW5hZ2VyX3dvcmtlcl9icm9rZXIuZ2V0KHNlbGYuX3BvcnQs
IHNlbGYuX29wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZiwgd29ya2VyLldvcmtlcikKIAotICAgICAgICAjIEZJWE1FOiBz
dGFydCBhbGwgb2YgdGhlIHdvcmtlcnMuCi0gICAgICAgIG1hbmFnZXJfY29ubmVjdGlvbi5zdGFy
dF93b3JrZXIoMCkKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF91cGRhdGUoJ1N0YXJ0aW5n
ICVzIC4uLicgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFtbWFyLnBs
dXJhbGl6ZSgnd29ya2VyJywgbnVtX3dvcmtlcnMpKQorICAgICAgICBmb3Igd29ya2VyX251bWJl
ciBpbiB4cmFuZ2UobnVtX3dvcmtlcnMpOgorICAgICAgICAgICAgd29ya2VyX2Nvbm5lY3Rpb24g
PSBtYW5hZ2VyX2Nvbm5lY3Rpb24uc3RhcnRfd29ya2VyKHdvcmtlcl9udW1iZXIpCisgICAgICAg
ICAgICB3b3JrZXJfc3RhdGUgPSBfV29ya2VyU3RhdGUod29ya2VyX251bWJlciwgd29ya2VyX2Nv
bm5lY3Rpb24pCisgICAgICAgICAgICBzZWxmLl93b3JrZXJfc3RhdGVzW3dvcmtlcl9jb25uZWN0
aW9uLm5hbWVdID0gd29ya2VyX3N0YXRlCiAKKyAgICAgICAgICAgICMgRklYTUU6IElmIHdlIHN0
YXJ0IHdvcmtlcnMgdXAgdG9vIHF1aWNrbHksIER1bXBSZW5kZXJUcmVlIGFwcGVhcnMKKyAgICAg
ICAgICAgICMgdG8gdGhyYXNoIG9uIHNvbWV0aGluZyBhbmQgdGltZSBvdXQgaXRzIGZpcnN0IGZl
dyB0ZXN0cy4gVW50aWwKKyAgICAgICAgICAgICMgd2UgY2FuIGZpZ3VyZSBvdXQgd2hhdCdzIGdv
aW5nIG9uLCBzbGVlcCBhIGJpdCBpbiBiZXR3ZWVuCisgICAgICAgICAgICAjIHdvcmtlcnMuCisg
ICAgICAgICAgICB0aW1lLnNsZWVwKDAuMSkKKworICAgICAgICBzZWxmLl9wcmludGVyLnByaW50
X3VwZGF0ZSgiU3RhcnRpbmcgdGVzdGluZyAuLi4iKQogICAgICAgICBmb3IgdGVzdF9saXN0IGlu
IHRlc3RfbGlzdHM6CiAgICAgICAgICAgICBtYW5hZ2VyX2Nvbm5lY3Rpb24ucG9zdF9tZXNzYWdl
KCd0ZXN0X2xpc3QnLCB0ZXN0X2xpc3RbMF0sIHRlc3RfbGlzdFsxXSkKIAotICAgICAgICBtYW5h
Z2VyX2Nvbm5lY3Rpb24ucG9zdF9tZXNzYWdlKCdzdG9wJykKKyAgICAgICAgIyBXZSBwb3N0IG9u
ZSAnc3RvcCcgbWVzc2FnZSBmb3IgZWFjaCB3b3JrZXIuIEJlY2F1c2UgdGhlIHN0b3AgbWVzc2Fn
ZQorICAgICAgICAjIGFyZSBzZW50IGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMsIGFuZCBiZWNhdXNl
IGVhY2ggd29ya2VyIHdpbGwgc3RvcAorICAgICAgICAjIHJlYWRpbmcgbWVzc3NhZ2VzIGFmdGVy
IHJlY2VpdmluZyBhIHN0b3AsIHdlIGNhbiBiZSBzdXJlIGVhY2gKKyAgICAgICAgIyB3b3JrZXIg
d2lsbCBnZXQgYSBzdG9wIG1lc3NhZ2UgYW5kIGhlbmNlIHRoZXkgd2lsbCBhbGwgc2h1dCBkb3du
LgorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UobnVtX3dvcmtlcnMpOgorICAgICAgICAgICAgbWFu
YWdlcl9jb25uZWN0aW9uLnBvc3RfbWVzc2FnZSgnc3RvcCcpCiAKICAgICAgICAga2V5Ym9hcmRf
aW50ZXJydXB0ZWQgPSBGYWxzZQogICAgICAgICBpbnRlcnJ1cHRlZCA9IEZhbHNlCi0gICAgICAg
IGlmIG5vdCBzZWxmLl9vcHRpb25zLmRyeV9ydW46Ci0gICAgICAgICAgICB3aGlsZSBub3Qgc2Vs
Zi5fY2hlY2tfaWZfZG9uZSgpOgotICAgICAgICAgICAgICAgIG1hbmFnZXJfY29ubmVjdGlvbi5y
dW5fbWVzc2FnZV9sb29wKGRlbGF5X3NlY3M9MS4wKQotCi0gICAgICAgICMgRklYTUU6IGltcGxl
bWVudCBzdGF0cy4KLSAgICAgICAgdGhyZWFkX3RpbWluZ3MgPSBbXQorICAgICAgICB0cnk6Cisg
ICAgICAgICAgICBpZiBub3Qgc2VsZi5fb3B0aW9ucy5kcnlfcnVuOgorICAgICAgICAgICAgICAg
IHdoaWxlIG5vdCBzZWxmLmlzX2RvbmUoKToKKyAgICAgICAgICAgICAgICAgICAgIyBXZSBsb29w
IHdpdGggYSB0aW1lb3V0IGluIG9yZGVyIHRvIGJlIGFibGUgdG8gZGV0ZWN0IHdlZGdlZCB0aHJl
YWRzLgorICAgICAgICAgICAgICAgICAgICBtYW5hZ2VyX2Nvbm5lY3Rpb24ucnVuX21lc3NhZ2Vf
bG9vcChkZWxheV9zZWNzPTEuMCkKKworICAgICAgICAgICAgICAgIGlmIGFueSh3b3JrZXJfc3Rh
dGUud2VkZ2VkIGZvciB3b3JrZXJfc3RhdGUgaW4gc2VsZi5fd29ya2VyX3N0YXRlcy52YWx1ZXMo
KSk6CisgICAgICAgICAgICAgICAgICAgIF9sb2cuZXJyb3IoJycpCisgICAgICAgICAgICAgICAg
ICAgIF9sb2cuZXJyb3IoJ1JlbWFpbmluZyB3b3JrZXJzIGFyZSB3ZWRnZWQsIGJhaWxpbmcgb3V0
LicpCisgICAgICAgICAgICAgICAgICAgIF9sb2cuZXJyb3IoJycpCisgICAgICAgICAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgICAgICAgICAgX2xvZy5kZWJ1ZygnTm8gd2VkZ2VkIHRocmVhZHMn
KQorCisgICAgICAgICAgICAgICAgIyBNYWtlIHN1cmUgYWxsIG9mIHRoZSB3b3JrZXJzIGhhdmUg
c2h1dCBkb3duIChpZiBwb3NzaWJsZSkuCisgICAgICAgICAgICAgICAgZm9yIHdvcmtlcl9zdGF0
ZSBpbiBzZWxmLl93b3JrZXJfc3RhdGVzLnZhbHVlcygpOgorICAgICAgICAgICAgICAgICAgICBp
ZiBub3Qgd29ya2VyX3N0YXRlLndlZGdlZCBhbmQgd29ya2VyX3N0YXRlLndvcmtlcl9jb25uZWN0
aW9uLmlzX2FsaXZlKCk6CisgICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJfc3RhdGUud29y
a2VyX2Nvbm5lY3Rpb24uam9pbigwLjUpCisgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQg
bm90IHdvcmtlcl9zdGF0ZS53b3JrZXJfY29ubmVjdGlvbi5pc19hbGl2ZSgpCisKKyAgICAgICAg
ZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgX2xvZy5pbmZvKCJJbnRlcnJ1
cHRlZCwgZXhpdGluZyIpCisgICAgICAgICAgICBzZWxmLl9jYW5jZWxfd29ya2VycygpCisgICAg
ICAgICAgICBrZXlib2FyZF9pbnRlcnJ1cHRlZCA9IFRydWUKKyAgICAgICAgZXhjZXB0IHRlc3Rf
cnVubmVyLlRlc3RSdW5JbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIF9sb2cu
aW5mbyhlLnJlYXNvbikKKyAgICAgICAgICAgIHNlbGYuX2NhbmNlbF93b3JrZXJzKCkKKyAgICAg
ICAgICAgIGludGVycnVwdGVkID0gVHJ1ZQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAj
IFVuZXhwZWN0ZWQgZXhjZXB0aW9uOyBkb24ndCB0cnkgdG8gY2xlYW4gdXAgd29ya2Vycy4KKyAg
ICAgICAgICAgIF9sb2cuaW5mbygiRXhjZXB0aW9uIHJhaXNlZCwgZXhpdGluZyIpCisgICAgICAg
ICAgICByYWlzZQorCisgICAgICAgIHRocmVhZF90aW1pbmdzID0gW3dvcmtlcl9zdGF0ZS5zdGF0
cyBmb3Igd29ya2VyX3N0YXRlIGluIHNlbGYuX3dvcmtlcl9zdGF0ZXMudmFsdWVzKCldCiAKICAg
ICAgICAgIyBGSVhNRTogc2hvdWxkIHRoaXMgYmUgYSBjbGFzcyBpbnN0ZWFkIG9mIGEgdHVwbGU/
CiAgICAgICAgIHJldHVybiAoa2V5Ym9hcmRfaW50ZXJydXB0ZWQsIGludGVycnVwdGVkLCB0aHJl
YWRfdGltaW5ncywKICAgICAgICAgICAgICAgICBzZWxmLl9ncm91cF9zdGF0cywgc2VsZi5fYWxs
X3Jlc3VsdHMpCiAKLSAgICBkZWYgX2NoZWNrX2lmX2RvbmUoc2VsZik6Ci0gICAgICAgICIiIlJl
dHVybnMgdHJ1ZSBpZmYgYWxsIHRoZSB3b3JrZXJzIGhhdmUgZWl0aGVyIGNvbXBsZXRlZCBvciB3
ZWRnZWQuIiIiCi0gICAgICAgICMgRklYTUU6IGltcGxlbWVudCB0byBjaGVjayBmb3Igd2VkZ2Vk
IHdvcmtlcnMuCi0gICAgICAgIHJldHVybiBzZWxmLl9kb25lCisgICAgZGVmIGNhbmNlbF93b3Jr
ZXJzKHNlbGYpOgorICAgICAgICBmb3Igd29ya2VyX3N0YXRlIGluIHNlbGYuX3dvcmtlcl9zdGF0
ZXMudmFsdWVzKCk6CisgICAgICAgICAgICB3b3JrZXJfc3RhdGUud29ya2VyX2Nvbm5lY3Rpb24u
Y2FuY2VsKCkKIAotICAgIGRlZiBoYW5kbGVfc3RhcnRlZF90ZXN0KHNlbGYsIHNyYywgdGVzdF9p
bmZvLCBoYW5nX3RpbWVvdXQpOgotICAgICAgICAjIEZJWE1FOiBpbXBsZW1lbnQKLSAgICAgICAg
cGFzcworICAgIGRlZiBoYW5kbGVfc3RhcnRlZF90ZXN0KHNlbGYsIHNvdXJjZSwgdGVzdF9pbmZv
LCBoYW5nX3RpbWVvdXQpOgorICAgICAgICB3b3JrZXJfc3RhdGUgPSBzZWxmLl93b3JrZXJfc3Rh
dGVzW3NvdXJjZV0KKyAgICAgICAgd29ya2VyX3N0YXRlLmN1cnJlbnRfdGVzdF9uYW1lID0gc2Vs
Zi5fcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKHRlc3RfaW5mby5maWxlbmFtZSkKKyAgICAg
ICAgd29ya2VyX3N0YXRlLm5leHRfdGltZW91dCA9IHRpbWUudGltZSgpICsgaGFuZ190aW1lb3V0
CiAKLSAgICBkZWYgaGFuZGxlX2RvbmUoc2VsZiwgc3JjKToKLSAgICAgICAgIyBGSVhNRTogaW1w
bGVtZW50IHByb3Blcmx5IHRvIGhhbmRsZSBtdWx0aXBsZSB3b3JrZXJzLgotICAgICAgICBzZWxm
Ll9kb25lID0gVHJ1ZQotICAgICAgICBwYXNzCisgICAgZGVmIGhhbmRsZV9kb25lKHNlbGYsIHNv
dXJjZSk6CisgICAgICAgIHdvcmtlcl9zdGF0ZSA9IHNlbGYuX3dvcmtlcl9zdGF0ZXNbc291cmNl
XQorICAgICAgICB3b3JrZXJfc3RhdGUuZG9uZSA9IFRydWUKIAotICAgIGRlZiBoYW5kbGVfZXhj
ZXB0aW9uKHNlbGYsIHNyYywgZXhjZXB0aW9uX2luZm8pOgorICAgIGRlZiBoYW5kbGVfZXhjZXB0
aW9uKHNlbGYsIHNvdXJjZSwgZXhjZXB0aW9uX2luZm8pOgogICAgICAgICByYWlzZSBleGNlcHRp
b25faW5mbwogCi0gICAgZGVmIGhhbmRsZV9maW5pc2hlZF9saXN0KHNlbGYsIHNyYywgbGlzdF9u
YW1lLCBudW1fdGVzdHMsIGVsYXBzZWRfdGltZSk6Ci0gICAgICAgICMgRklYTUU6IHVwZGF0ZSBz
dGF0cworICAgIGRlZiBoYW5kbGVfZmluaXNoZWRfbGlzdChzZWxmLCBzb3VyY2UsIGxpc3RfbmFt
ZSwgbnVtX3Rlc3RzLCBlbGFwc2VkX3RpbWUpOgorICAgICAgICBzZWxmLl9ncm91cF9zdGF0c1ts
aXN0X25hbWVdID0gKG51bV90ZXN0cywgZWxhcHNlZF90aW1lKQogICAgICAgICBwYXNzCiAKLSAg
ICBkZWYgaGFuZGxlX2ZpbmlzaGVkX3Rlc3Qoc2VsZiwgc3JjLCByZXN1bHQsIGVsYXBzZWRfdGlt
ZSk6Ci0gICAgICAgIHNlbGYuX3VwZGF0ZV9zdW1tYXJ5X3dpdGhfcmVzdWx0KHNlbGYuX2N1cnJl
bnRfcmVzdWx0X3N1bW1hcnksIHJlc3VsdCkKKyAgICBkZWYgaGFuZGxlX2ZpbmlzaGVkX3Rlc3Qo
c2VsZiwgc291cmNlLCByZXN1bHQsIGVsYXBzZWRfdGltZSk6CisgICAgICAgIHdvcmtlcl9zdGF0
ZSA9IHNlbGYuX3dvcmtlcl9zdGF0ZXNbc291cmNlXQorICAgICAgICB3b3JrZXJfc3RhdGUubmV4
dF90aW1lb3V0ID0gTm9uZQorICAgICAgICB3b3JrZXJfc3RhdGUuY3VycmVudF90ZXN0X25hbWUg
PSBOb25lCisgICAgICAgIHdvcmtlcl9zdGF0ZS5zdGF0c1sndG90YWxfdGltZSddICs9IGVsYXBz
ZWRfdGltZQorICAgICAgICB3b3JrZXJfc3RhdGUuc3RhdHNbJ251bV90ZXN0cyddICs9IDEKKwor
ICAgICAgICBpZiB3b3JrZXJfc3RhdGUud2VkZ2VkOgorICAgICAgICAgICAgIyBUaGlzIHNob3Vs
ZG4ndCBoYXBwZW4gaWYgd2UgaGF2ZSBvdXIgdGltZW91dHMgdHVuZWQgcHJvcGVybHkuCisgICAg
ICAgICAgICBfbG9nLmVycm9yKCIlcyB1bndlZGdlZCIsIHcubmFtZSkKIAotICAgICAgICAjIEZJ
WE1FOiB1cGRhdGUgc3RhdHMuCiAgICAgICAgIHNlbGYuX2FsbF9yZXN1bHRzLmFwcGVuZChyZXN1
bHQpCisgICAgICAgIHNlbGYuX3VwZGF0ZV9zdW1tYXJ5X3dpdGhfcmVzdWx0KHNlbGYuX2N1cnJl
bnRfcmVzdWx0X3N1bW1hcnksIHJlc3VsdCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3dvcmtlci5weSBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3dvcmtlci5weQppbmRleCA0
N2Q0ZmJkYmJlMDhjZTdkZWUxMzc1MDNiNzRmYjY4MWM3NzhlNGE1Li44YTIwYTk4YzQwMjZiNmFm
MzMzZjU0YTljZjZhYjQ4OWY2MDMyMDk2IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS93b3JrZXIucHkKKysrIGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvd29ya2VyLnB5CkBAIC0z
NSw0MSArMzUsNjMgQEAgaW1wb3J0IHRpbWUKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBp
bXBvcnQgc3RhY2tfdXRpbHMKIAogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3Bh
Y2thZ2UgaW1wb3J0IG1hbmFnZXJfd29ya2VyX2Jyb2tlcgotZnJvbSB3ZWJraXRweS5sYXlvdXRf
dGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfcmVzdWx0cworZnJvbSB3ZWJraXRweS5s
YXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IHdvcmtlcl9taXhpbgogCiAKIF9sb2cg
PSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKIAogCi1jbGFzcyBXb3JrZXIobWFuYWdlcl93
b3JrZXJfYnJva2VyLkFic3RyYWN0V29ya2VyKToKK2NsYXNzIFdvcmtlcihtYW5hZ2VyX3dvcmtl
cl9icm9rZXIuQWJzdHJhY3RXb3JrZXIsIHdvcmtlcl9taXhpbi5Xb3JrZXJNaXhpbik6CiAgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIHdvcmtlcl9jb25uZWN0aW9uLCB3b3JrZXJfbnVtYmVyLCBvcHRp
b25zKToKICAgICAgICAgc2VsZi5fd29ya2VyX2Nvbm5lY3Rpb24gPSB3b3JrZXJfY29ubmVjdGlv
bgogICAgICAgICBzZWxmLl93b3JrZXJfbnVtYmVyID0gd29ya2VyX251bWJlcgogICAgICAgICBz
ZWxmLl9vcHRpb25zID0gb3B0aW9ucwogICAgICAgICBzZWxmLl9uYW1lID0gJ3dvcmtlci8lZCcg
JSB3b3JrZXJfbnVtYmVyCiAgICAgICAgIHNlbGYuX2RvbmUgPSBGYWxzZQorICAgICAgICBzZWxm
Ll9jYW5jZWxlZCA9IEZhbHNlCiAgICAgICAgIHNlbGYuX3BvcnQgPSBOb25lCiAKLSAgICBkZWYg
X2RlZmVycmVkX2luaXQoc2VsZiwgcG9ydCk6Ci0gICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0Cisg
ICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgIHNlbGYuY2xlYW51cCgpCisKKyAgICBkZWYg
Y2FuY2VsKHNlbGYpOgorICAgICAgICAiIiJBdHRlbXB0IHRvIGFib3J0IHByb2Nlc3NpbmcgKGJl
c3QgZWZmb3J0KS4iIiIKKyAgICAgICAgc2VsZi5fY2FuY2VsZWQgPSBUcnVlCiAKICAgICBkZWYg
aXNfZG9uZShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2RvbmUKKyAgICAgICAgcmV0dXJu
IHNlbGYuX2RvbmUgb3Igc2VsZi5fY2FuY2VsZWQKIAogICAgIGRlZiBuYW1lKHNlbGYpOgogICAg
ICAgICByZXR1cm4gc2VsZi5fbmFtZQogCiAgICAgZGVmIHJ1bihzZWxmLCBwb3J0KToKLSAgICAg
ICAgc2VsZi5fZGVmZXJyZWRfaW5pdChwb3J0KQorICAgICAgICBzZWxmLnNhZmVfaW5pdChwb3J0
KQogCisgICAgICAgIGV4Y2VwdGlvbl9tc2cgPSAiIgogICAgICAgICBfbG9nLmRlYnVnKCIlcyBz
dGFydGluZyIgJSBzZWxmLl9uYW1lKQogCi0gICAgICAgICMgRklYTUU6IG5lZWQgdG8gYWRkIGlu
IGVycm9yIGhhbmRsaW5nLCBiZXR0ZXIgbG9nZ2luZy4KLSAgICAgICAgc2VsZi5fd29ya2VyX2Nv
bm5lY3Rpb24ucnVuX21lc3NhZ2VfbG9vcCgpCi0gICAgICAgIHNlbGYuX3dvcmtlcl9jb25uZWN0
aW9uLnBvc3RfbWVzc2FnZSgnZG9uZScpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYu
X3dvcmtlcl9jb25uZWN0aW9uLnJ1bl9tZXNzYWdlX2xvb3AoKQorICAgICAgICAgICAgaWYgbm90
IHNlbGYuaXNfZG9uZSgpOgorICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCIl
czogcmFuIG91dCBvZiBtZXNzYWdlcyBpbiB3b3JrZXIgcXVldWUuIgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICUgc2VsZi5fbmFtZSkKKyAgICAgICAgZXhjZXB0IEtleWJv
YXJkSW50ZXJydXB0OgorICAgICAgICAgICAgZXhjZXB0aW9uX21zZyA9ICIsIGludGVycnVwdGVk
IgorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBleGNlcHRpb25fbXNnID0gIiwgZXhjZXB0
aW9uIHJhaXNlZCIKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIF9sb2cuZGVidWcoIiVz
IGRvbmUlcyIgJSAoc2VsZi5fbmFtZSwgZXhjZXB0aW9uX21zZykpCisgICAgICAgICAgICBpZiBl
eGNlcHRpb25fbXNnOgorICAgICAgICAgICAgICAgIGV4Y19pbmZvID0gc3lzLmV4Y19pbmZvKCkK
KyAgICAgICAgICAgICAgICBzdGFja191dGlscy5sb2dfdHJhY2ViYWNrKF9sb2cuZXJyb3IsIGV4
Y19pbmZvWzJdKQorICAgICAgICAgICAgICAgICMgRklYTUU6IEZpZ3VyZSBvdXQgaG93IHRvIHNl
bmQgYSBtZXNzYWdlIHdpdGggYSB0cmFjZWJhY2suCisgICAgICAgICAgICAgICAgc2VsZi5fd29y
a2VyX2Nvbm5lY3Rpb24ucG9zdF9tZXNzYWdlKCdleGNlcHRpb24nLAorICAgICAgICAgICAgICAg
ICAgICAoZXhjX2luZm9bMF0sIGV4Y19pbmZvWzFdLCBOb25lKSkKKyAgICAgICAgICAgIHNlbGYu
X3dvcmtlcl9jb25uZWN0aW9uLnBvc3RfbWVzc2FnZSgnZG9uZScpCiAKICAgICBkZWYgaGFuZGxl
X3Rlc3RfbGlzdChzZWxmLCBzcmMsIGxpc3RfbmFtZSwgdGVzdF9saXN0KToKLSAgICAgICAgIyBG
SVhNRTogY2hlY2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8gZ2V0IHRoZSBodHRwIGxvY2suCisgICAg
ICAgIGlmIGxpc3RfbmFtZSA9PSAidGVzdHNfdG9faHR0cF9sb2NrIjoKKyAgICAgICAgICAgIHNl
bGYuc3RhcnRfc2VydmVyc193aXRoX2xvY2soKQogCiAgICAgICAgIHN0YXJ0X3RpbWUgPSB0aW1l
LnRpbWUoKQogICAgICAgICBudW1fdGVzdHMgPSAwCkBAIC04MSwyNCArMTAzLDIwIEBAIGNsYXNz
IFdvcmtlcihtYW5hZ2VyX3dvcmtlcl9icm9rZXIuQWJzdHJhY3RXb3JrZXIpOgogICAgICAgICBl
bGFwc2VkX3RpbWUgPSB0aW1lLnRpbWUoKSAtIHN0YXJ0X3RpbWUKICAgICAgICAgc2VsZi5fd29y
a2VyX2Nvbm5lY3Rpb24ucG9zdF9tZXNzYWdlKCdmaW5pc2hlZF9saXN0JywgbGlzdF9uYW1lLCBu
dW1fdGVzdHMsIGVsYXBzZWRfdGltZSkKIAotICAgICAgICAjIEZJWE1FOiByZWxlYXNlIHRoZSBs
b2NrIGlmIG5lY2Vzc2FyeQorICAgICAgICBpZiBzZWxmLl9oYXNfaHR0cF9sb2NrOgorICAgICAg
ICAgICAgc2VsZi5zdG9wX3NlcnZlcnNfd2l0aF9sb2NrKCkKIAogICAgIGRlZiBoYW5kbGVfc3Rv
cChzZWxmLCBzcmMpOgogICAgICAgICBzZWxmLl9kb25lID0gVHJ1ZQogCiAgICAgZGVmIF9ydW5f
dGVzdChzZWxmLCB0ZXN0X2lucHV0KToKLQotICAgICAgICAjIEZJWE1FOiBnZXQgcmVhbCB0aW1l
b3V0IHZhbHVlIGZyb20gU2luZ2xlVGVzdFJ1bm5lcgotICAgICAgICB0ZXN0X3RpbWVvdXRfc2Vj
ID0gaW50KHRlc3RfaW5wdXQudGltZW91dCkgLyAxMDAwCisgICAgICAgIHRlc3RfdGltZW91dF9z
ZWMgPSBzZWxmLnRpbWVvdXQodGVzdF9pbnB1dCkKICAgICAgICAgc3RhcnQgPSB0aW1lLnRpbWUo
KQogICAgICAgICBzZWxmLl93b3JrZXJfY29ubmVjdGlvbi5wb3N0X21lc3NhZ2UoJ3N0YXJ0ZWRf
dGVzdCcsIHRlc3RfaW5wdXQsIHRlc3RfdGltZW91dF9zZWMpCiAKLSAgICAgICAgIyBGSVhNRTog
YWN0dWFsbHkgcnVuIHRoZSB0ZXN0LgotICAgICAgICByZXN1bHQgPSB0ZXN0X3Jlc3VsdHMuVGVz
dFJlc3VsdCh0ZXN0X2lucHV0LmZpbGVuYW1lLCBmYWlsdXJlcz1bXSwKLSAgICAgICAgICAgIHRl
c3RfcnVuX3RpbWU9MCwgdG90YWxfdGltZV9mb3JfYWxsX2RpZmZzPTAsIHRpbWVfZm9yX2RpZmZz
PXt9KQorICAgICAgICByZXN1bHQgPSBzZWxmLnJ1bl90ZXN0X3dpdGhfdGltZW91dCh0ZXN0X2lu
cHV0LCB0ZXN0X3RpbWVvdXRfc2VjKQogCiAgICAgICAgIGVsYXBzZWRfdGltZSA9IHRpbWUudGlt
ZSgpIC0gc3RhcnQKLQotICAgICAgICAjIEZJWE1FOiB1cGRhdGUgc3RhdHMsIGNoZWNrIGZvciBm
YWlsdXJlcy4KLQogICAgICAgICBzZWxmLl93b3JrZXJfY29ubmVjdGlvbi5wb3N0X21lc3NhZ2Uo
J2ZpbmlzaGVkX3Rlc3QnLCByZXN1bHQsIGVsYXBzZWRfdGltZSkKKworICAgICAgICBzZWxmLmNs
ZWFuX3VwX2FmdGVyX3Rlc3QodGVzdF9pbnB1dCwgcmVzdWx0KQpkaWZmIC0tZ2l0IGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvd29ya2VyX21peGlu
LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uv
d29ya2VyX21peGluLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIwYmE0ZDQxMDkzYWVlZGFkYmVmNWZmZDk5NDA2
YjA5Y2M1NjJlY2IKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS93b3JrZXJfbWl4aW4ucHkKQEAgLTAsMCArMSwyMjIg
QEAKKyMgQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRp
b24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
IyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHN5cworaW1wb3J0
IHRocmVhZGluZworaW1wb3J0IHRpbWUKKworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMudGVz
dF90eXBlcyBpbXBvcnQgdGV4dF9kaWZmCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy50ZXN0
X3R5cGVzIGltcG9ydCBpbWFnZV9kaWZmCisKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxh
eW91dF9wYWNrYWdlIGltcG9ydCBzaW5nbGVfdGVzdF9ydW5uZXIKK2Zyb20gd2Via2l0cHkubGF5
b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X3Jlc3VsdHMKKworX2xvZyA9IGxv
Z2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCisKK2NsYXNzIFdvcmtlck1peGluKG9iamVjdCk6
CisgICAgIiIiVGhpcyBjbGFzcyBob2xkcyBsb2dpYyBjb21tb24gdG8gV29ya2VyIGFuZCBUZXN0
U2hlbGxUaHJlYWQgdGhhdAorICAgIGRvZXNuJ3QgZGlyZWN0bHkgaGF2ZSB0byBkbyB3aXRoIHJ1
bm5pbmcgdGhlIHRlc3RzICh3aGljaCBpcworICAgIFNpbmdsZVRlc3RSdW5uZXIncyByZXNwb25z
aWJpbGl0eS4gVGhpcyBjbGFzcyBjYW5ub3Qgc3RhbmQgb24gaXRzIG93bi4iIiIKKyAgICBkZWYg
X19pbml0X18oc2VsZik6CisgICAgICAgIGFzc2VydCBGYWxzZSwgIldvcmtlck1peGluIGNhbid0
IGJlIGRpcmVjdGx5IGluc3RhbnRpYXRlZCIKKworICAgIGRlZiBzYWZlX2luaXQoc2VsZiwgcG9y
dCk6CisgICAgICAgICIiIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIGl0
IGlzIGlzIHNhZmUgZm9yIHRoZSBtaXhpbgorICAgICAgICB0byBjcmVhdGUgc3RhdGUgdGhhdCBj
YW4ndCBiZSBQaWNrbGVkLgorCisgICAgICAgIFRoaXMgcm91dGluZSBleGlzdHMgc28gdGhhdCB0
aGUgbWl4aW4gY2FuIGJlIGNyZWF0ZWQgYW5kIHRoZW4gbWFyc2hhbGVkCisgICAgICAgIGFjcm9z
cyBpbnRvIGEgY2hpbGQgcHJvY2Vzcy4iIiIKKyAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKKyAg
ICAgICAgc2VsZi5fZmlsZXN5c3RlbSA9IHBvcnQuX2ZpbGVzeXN0ZW0KKyAgICAgICAgc2VsZi5f
YmF0Y2hfY291bnQgPSAwCisgICAgICAgIHNlbGYuX2JhdGNoX3NpemUgPSBzZWxmLl9vcHRpb25z
LmJhdGNoX3NpemUKKyAgICAgICAgc2VsZi5fdGVzdF90eXBlcyA9IFtdCisgICAgICAgIHNlbGYu
X2RyaXZlciA9IE5vbmUKKyAgICAgICAgZm9yIGNscyBpbiBzZWxmLl9nZXRfdGVzdF90eXBlX2Ns
YXNzZXMoKToKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RfdHlwZXMuYXBwZW5kKGNscyhzZWxmLl9w
b3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29wdGlv
bnMucmVzdWx0c19kaXJlY3RvcnkpKQorICAgICAgICB0ZXN0c19ydW5fZmlsZW5hbWUgPSBzZWxm
Ll9maWxlc3lzdGVtLmpvaW4oc2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0c19ydW4l
ZC50eHQiICUgc2VsZi5fd29ya2VyX251bWJlcikKKyAgICAgICAgc2VsZi5fdGVzdHNfcnVuX2Zp
bGUgPSBzZWxmLl9maWxlc3lzdGVtLm9wZW5fdGV4dF9maWxlX2Zvcl93cml0aW5nKHRlc3RzX3J1
bl9maWxlbmFtZSkKKworICAgICAgICAjIEZJWE1FOiBpdCdzIGdvb2Z5IHRoYXQgd2UgaGF2ZSB0
byB0cmFjayB0aGlzIGF0IGFsbCwgYnV0IGl0J3MgZHVlIHRvCisgICAgICAgICMgdGhlIGF3a3dh
cmQgbG9naWMgaW4gVGVzdFNoZWxsVGhyZWFkLl9ydW4oKS4gV2hlbiB3ZSByZW1vdmUgdGhhdAor
ICAgICAgICAjIGZpbGUsIHdlIHNob3VsZCByZXdyaXRlIHRoaXMgY29kZSBzbyB0aGF0IGNhbGxl
ciBrZWVwcyB0cmFjayBvZiB3aGV0aGVyCisgICAgICAgICMgdGhlIGxvY2sgaXMgaGVsZC4KKyAg
ICAgICAgc2VsZi5faGFzX2h0dHBfbG9jayA9IEZhbHNlCisKKyAgICBkZWYgX2dldF90ZXN0X3R5
cGVfY2xhc3NlcyhzZWxmKToKKyAgICAgICAgY2xhc3NlcyA9IFt0ZXh0X2RpZmYuVGVzdFRleHRE
aWZmXQorICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RzOgorICAgICAgICAgICAg
Y2xhc3Nlcy5hcHBlbmQoaW1hZ2VfZGlmZi5JbWFnZURpZmYpCisgICAgICAgIHJldHVybiBjbGFz
c2VzCisKKyAgICBkZWYgY2xlYW51cChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fZHJpdmVyOgor
ICAgICAgICAgICAgc2VsZi5raWxsX2RyaXZlcigpCisgICAgICAgIGlmIHNlbGYuX2hhc19odHRw
X2xvY2s6CisgICAgICAgICAgICBzZWxmLnN0b3Bfc2VydmVyc193aXRoX2xvY2soKQorICAgICAg
ICBpZiBzZWxmLl90ZXN0c19ydW5fZmlsZToKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9m
aWxlLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9maWxlID0gTm9uZQorCisg
ICAgZGVmIHRpbWVvdXQoc2VsZiwgdGVzdF9pbnB1dCk6CisgICAgICAgICIiIkNvbXB1dGUgdGhl
IGFwcHJvcHJpYXRlIHRpbWVvdXQgdmFsdWUgZm9yIGEgdGVzdC4iIiIKKyAgICAgICAgIyBUaGUg
RHVtcFJlbmRlclRyZWUgd2F0Y2hkb2cgdXNlcyAyLjV4IHRoZSB0aW1lb3V0OyB3ZSB3YW50IHRv
IGJlCisgICAgICAgICMgbGFyZ2VyIHRoYW4gdGhhdC4gV2UgYWxzbyBhZGQgYSBsaXR0bGUgbW9y
ZSBwYWRkaW5nIGlmIHdlJ3JlCisgICAgICAgICMgcnVubmluZyB0ZXN0cyBpbiBhIHNlcGFyYXRl
IHRocmVhZC4KKyAgICAgICAgIworICAgICAgICAjIE5vdGUgdGhhdCB3ZSBuZWVkIHRvIGNvbnZl
cnQgdGhlIHRlc3QgdGltZW91dCBmcm9tIGEKKyAgICAgICAgIyBzdHJpbmcgdmFsdWUgaW4gbWls
bGlzZWNvbmRzIHRvIGEgZmxvYXQgZm9yIFB5dGhvbi4KKyAgICAgICAgZHJpdmVyX3RpbWVvdXRf
c2VjID0gMy4wICogZmxvYXQodGVzdF9pbnB1dC50aW1lb3V0KSAvIDEwMDAuMAorICAgICAgICBp
ZiBub3Qgc2VsZi5fb3B0aW9ucy5ydW5fc2luZ2x5OgorICAgICAgICAgICAgcmV0dXJuIGRyaXZl
cl90aW1lb3V0X3NlYworCisgICAgICAgIHRocmVhZF9wYWRkaW5nX3NlYyA9IDEuMAorICAgICAg
ICB0aHJlYWRfdGltZW91dF9zZWMgPSBkcml2ZXJfdGltZW91dF9zZWMgKyB0aHJlYWRfcGFkZGlu
Z19zZWMKKyAgICAgICAgcmV0dXJuIHRocmVhZF90aW1lb3V0X3NlYworCisgICAgZGVmIHN0YXJ0
X3NlcnZlcnNfd2l0aF9sb2NrKHNlbGYpOgorICAgICAgICBfbG9nLmRlYnVnKCdBY3F1aXJpbmcg
aHR0cCBsb2NrIC4uLicpCisgICAgICAgIHNlbGYuX3BvcnQuYWNxdWlyZV9odHRwX2xvY2soKQor
ICAgICAgICBfbG9nLmRlYnVnKCdTdGFydGluZyBIVFRQIHNlcnZlciAuLi4nKQorICAgICAgICBz
ZWxmLl9wb3J0LnN0YXJ0X2h0dHBfc2VydmVyKCkKKyAgICAgICAgX2xvZy5kZWJ1ZygnU3RhcnRp
bmcgV2ViU29ja2V0IHNlcnZlciAuLi4nKQorICAgICAgICBzZWxmLl9wb3J0LnN0YXJ0X3dlYnNv
Y2tldF9zZXJ2ZXIoKQorICAgICAgICBzZWxmLl9oYXNfaHR0cF9sb2NrID0gVHJ1ZQorCisgICAg
ZGVmIHN0b3Bfc2VydmVyc193aXRoX2xvY2soc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2hhc19o
dHRwX2xvY2s6CisgICAgICAgICAgICBfbG9nLmRlYnVnKCdTdG9wcGluZyBIVFRQIHNlcnZlciAu
Li4nKQorICAgICAgICAgICAgc2VsZi5fcG9ydC5zdG9wX2h0dHBfc2VydmVyKCkKKyAgICAgICAg
ICAgIF9sb2cuZGVidWcoJ1N0b3BwaW5nIFdlYlNvY2tldCBzZXJ2ZXIgLi4uJykKKyAgICAgICAg
ICAgIHNlbGYuX3BvcnQuc3RvcF93ZWJzb2NrZXRfc2VydmVyKCkKKyAgICAgICAgICAgIF9sb2cu
ZGVidWcoJ1JlbGVhc2luZyBzZXJ2ZXIgbG9jayAuLi4nKQorICAgICAgICAgICAgc2VsZi5fcG9y
dC5yZWxlYXNlX2h0dHBfbG9jaygpCisgICAgICAgICAgICBzZWxmLmhhc19odHRwX2xvY2sgPSBG
YWxzZQorCisgICAgZGVmIGtpbGxfZHJpdmVyKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9kcml2
ZXI6CisgICAgICAgICAgICBzZWxmLl9kcml2ZXIuc3RvcCgpCisgICAgICAgICAgICBzZWxmLl9k
cml2ZXIgPSBOb25lCisKKyAgICBkZWYgcnVuX3Rlc3Rfd2l0aF90aW1lb3V0KHNlbGYsIHRlc3Rf
aW5wdXQsIHRpbWVvdXQpOgorICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnJ1bl9zaW5nbHk6Cisg
ICAgICAgICAgICByZXR1cm4gc2VsZi5fcnVuX3Rlc3RfaW5fYW5vdGhlcl90aHJlYWQodGVzdF9p
bnB1dCwgdGltZW91dCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9y
dW5fdGVzdF9pbl90aGlzX3RocmVhZCh0ZXN0X2lucHV0KQorICAgICAgICByZXR1cm4gcmVzdWx0
CisKKyAgICBkZWYgY2xlYW5fdXBfYWZ0ZXJfdGVzdChzZWxmLCB0ZXN0X2lucHV0LCByZXN1bHQp
OgorICAgICAgICBzZWxmLl9iYXRjaF9jb3VudCArPSAxCisgICAgICAgIHNlbGYuX3Rlc3RzX3J1
bl9maWxlLndyaXRlKHRlc3RfaW5wdXQuZmlsZW5hbWUgKyAiXG4iKQorICAgICAgICB0ZXN0X25h
bWUgPSBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUodGVzdF9pbnB1dC5maWxlbmFt
ZSkKKworICAgICAgICBpZiByZXN1bHQuZmFpbHVyZXM6CisgICAgICAgICAgICAjIENoZWNrIGFu
ZCBraWxsIER1bXBSZW5kZXJUcmVlIGlmIHdlIG5lZWQgdG8uCisgICAgICAgICAgICBpZiBhbnko
W2Yuc2hvdWxkX2tpbGxfZHVtcF9yZW5kZXJfdHJlZSgpIGZvciBmIGluIHJlc3VsdC5mYWlsdXJl
c10pOgorICAgICAgICAgICAgICAgIHNlbGYua2lsbF9kcml2ZXIoKQorICAgICAgICAgICAgICAg
ICMgUmVzZXQgdGhlIGJhdGNoIGNvdW50IHNpbmNlIHRoZSBzaGVsbCBqdXN0IGJvdW5jZWQuCisg
ICAgICAgICAgICAgICAgc2VsZi5fYmF0Y2hfY291bnQgPSAwCisKKyAgICAgICAgICAgICMgUHJp
bnQgdGhlIGVycm9yIG1lc3NhZ2UocykuCisgICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyAlcyBm
YWlsZWQ6IiAlIChzZWxmLl9uYW1lLCB0ZXN0X25hbWUpKQorICAgICAgICAgICAgZm9yIGYgaW4g
cmVzdWx0LmZhaWx1cmVzOgorICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoIiVzICAlcyIgJSAo
c2VsZi5fbmFtZSwgZi5tZXNzYWdlKCkpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgX2xv
Zy5kZWJ1ZygiJXMgJXMgcGFzc2VkIiAlIChzZWxmLl9uYW1lLCB0ZXN0X25hbWUpKQorCisgICAg
ICAgIGlmIHNlbGYuX2JhdGNoX3NpemUgPiAwIGFuZCBzZWxmLl9iYXRjaF9jb3VudCA+PSBzZWxm
Ll9iYXRjaF9zaXplOgorICAgICAgICAgICAgIyBCb3VuY2UgdGhlIHNoZWxsIGFuZCByZXNldCBj
b3VudC4KKyAgICAgICAgICAgIHNlbGYua2lsbF9kcml2ZXIoKQorICAgICAgICAgICAgc2VsZi5f
YmF0Y2hfY291bnQgPSAwCisKKyAgICBkZWYgX3J1bl90ZXN0X2luX2Fub3RoZXJfdGhyZWFkKHNl
bGYsIHRlc3RfaW5wdXQsIHRocmVhZF90aW1lb3V0X3NlYyk6CisgICAgICAgICIiIlJ1biBhIHRl
c3QgaW4gYSBzZXBhcmF0ZSB0aHJlYWQsIGVuZm9yY2luZyBhIGhhcmQgdGltZSBsaW1pdC4KKwor
ICAgICAgICBTaW5jZSB3ZSBjYW4gb25seSBkZXRlY3QgdGhlIHRlcm1pbmF0aW9uIG9mIGEgdGhy
ZWFkLCBub3QgYW55IGludGVybmFsCisgICAgICAgIHN0YXRlIG9yIHByb2dyZXNzLCB3ZSBjYW4g
b25seSBydW4gcGVyLXRlc3QgdGltZW91dHMgd2hlbiBydW5uaW5nIHRlc3QKKyAgICAgICAgZmls
ZXMgc2luZ2x5LgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgdGVzdF9pbnB1dDogT2JqZWN0
IGNvbnRhaW5pbmcgdGhlIHRlc3QgZmlsZW5hbWUgYW5kIHRpbWVvdXQKKyAgICAgICAgICB0aHJl
YWRfdGltZW91dF9zZWM6IHRpbWUgdG8gd2FpdCBiZWZvcmUga2lsbGluZyB0aGUgZHJpdmVyIHBy
b2Nlc3MuCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgQSBUZXN0UmVzdWx0CisgICAgICAg
ICIiIgorICAgICAgICB3b3JrZXIgPSBzZWxmCisgICAgICAgIHJlc3VsdCA9IE5vbmUKKworICAg
ICAgICBkcml2ZXIgPSB3b3JrZXIuX3BvcnQuY3JlYXRlX2RyaXZlcih3b3JrZXIuX3dvcmtlcl9u
dW1iZXIpCisgICAgICAgIGRyaXZlci5zdGFydCgpCisKKyAgICAgICAgY2xhc3MgU2luZ2xlVGVz
dFRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKKyAgICAgICAgICAgIGRlZiBydW4oc2VsZik6Cisg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gd29ya2VyLl9ydW5fc2luZ2xlX3Rlc3QoZHJpdmVyLCB0
ZXN0X2lucHV0KQorCisgICAgICAgIHRocmVhZCA9IFNpbmdsZVRlc3RUaHJlYWQoKQorICAgICAg
ICB0aHJlYWQuc3RhcnQoKQorICAgICAgICB0aHJlYWQuam9pbih0aHJlYWRfdGltZW91dF9zZWMp
CisgICAgICAgIGlmIHRocmVhZC5pc0FsaXZlKCk6CisgICAgICAgICAgICAjIElmIGpvaW4oKSBy
ZXR1cm5lZCB3aXRoIHRoZSB0aHJlYWQgc3RpbGwgcnVubmluZywgdGhlCisgICAgICAgICAgICAj
IER1bXBSZW5kZXJUcmVlIGlzIGNvbXBsZXRlbHkgaHVuZyBhbmQgdGhlcmUncyBub3RoaW5nCisg
ICAgICAgICAgICAjIG1vcmUgd2UgY2FuIGRvIHdpdGggaXQuICBXZSBoYXZlIHRvIGtpbGwgYWxs
IHRoZQorICAgICAgICAgICAgIyBEdW1wUmVuZGVyVHJlZXMgdG8gZnJlZSBpdCB1cC4gSWYgd2Un
cmUgcnVubmluZyBtb3JlIHRoYW4KKyAgICAgICAgICAgICMgb25lIER1bXBSZW5kZXJUcmVlIHRo
cmVhZCwgd2UnbGwgZW5kIHVwIGtpbGxpbmcgdGhlIG90aGVyCisgICAgICAgICAgICAjIER1bXBS
ZW5kZXJUcmVlcyB0b28sIGludHJvZHVjaW5nIHNwdXJpb3VzIGNyYXNoZXMuIFdlIGFjY2VwdAor
ICAgICAgICAgICAgIyB0aGF0IHRyYWRlb2ZmIGluIG9yZGVyIHRvIGF2b2lkIGxvc2luZyB0aGUg
cmVzdCBvZiB0aGlzCisgICAgICAgICAgICAjIHRocmVhZCdzIHJlc3VsdHMuCisgICAgICAgICAg
ICBfbG9nLmVycm9yKCdUZXN0IHRocmVhZCBodW5nOiBraWxsaW5nIGFsbCBEdW1wUmVuZGVyVHJl
ZXMnKQorCisgICAgICAgIGRyaXZlci5zdG9wKCkKKworICAgICAgICBpZiBub3QgcmVzdWx0Ogor
ICAgICAgICAgICAgcmVzdWx0ID0gdGVzdF9yZXN1bHRzLlRlc3RSZXN1bHQodGVzdF9pbnB1dC5m
aWxlbmFtZSwgZmFpbHVyZXM9W10sCisgICAgICAgICAgICAgICAgdGVzdF9ydW5fdGltZT0wLCB0
b3RhbF90aW1lX2Zvcl9hbGxfZGlmZnM9MCwgdGltZV9mb3JfZGlmZnM9e30pCisgICAgICAgIHJl
dHVybiByZXN1bHQKKworICAgIGRlZiBfcnVuX3Rlc3RfaW5fdGhpc190aHJlYWQoc2VsZiwgdGVz
dF9pbnB1dCk6CisgICAgICAgICIiIlJ1biBhIHNpbmdsZSB0ZXN0IGZpbGUgdXNpbmcgYSBzaGFy
ZWQgRHVtcFJlbmRlclRyZWUgcHJvY2Vzcy4KKworICAgICAgICBBcmdzOgorICAgICAgICAgIHRl
c3RfaW5wdXQ6IE9iamVjdCBjb250YWluaW5nIHRoZSB0ZXN0IGZpbGVuYW1lLCB1cmkgYW5kIHRp
bWVvdXQKKworICAgICAgICBSZXR1cm5zOiBhIFRlc3RSZXN1bHQgb2JqZWN0LgorICAgICAgICAi
IiIKKyAgICAgICAgIyBwb2xsKCkgaXMgbm90IHRocmVhZHNhZmUgYW5kIGNhbiB0aHJvdyBPU0Vy
cm9yIGR1ZSB0bzoKKyAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTczMTcx
NworICAgICAgICBpZiBub3Qgc2VsZi5fZHJpdmVyIG9yIHNlbGYuX2RyaXZlci5wb2xsKCkgaXMg
bm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9kcml2ZXIgPSBzZWxmLl9wb3J0LmNyZWF0ZV9k
cml2ZXIoc2VsZi5fd29ya2VyX251bWJlcikKKyAgICAgICAgICAgIHNlbGYuX2RyaXZlci5zdGFy
dCgpCisgICAgICAgIHJldHVybiBzZWxmLl9ydW5fc2luZ2xlX3Rlc3Qoc2VsZi5fZHJpdmVyLCB0
ZXN0X2lucHV0KQorCisgICAgZGVmIF9ydW5fc2luZ2xlX3Rlc3Qoc2VsZiwgZHJpdmVyLCB0ZXN0
X2lucHV0KToKKyAgICAgICAgcmV0dXJuIHNpbmdsZV90ZXN0X3J1bm5lci5ydW5fc2luZ2xlX3Rl
c3Qoc2VsZi5fcG9ydCwgc2VsZi5fb3B0aW9ucywKKyAgICAgICAgICAgIHRlc3RfaW5wdXQsIGRy
aXZlciwgc2VsZi5fbmFtZSwgc2VsZi5fdGVzdF90eXBlcykKZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weSBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weQppbmRleCA4ZjNjODQwMWVlN2I1OGE3
NjY3YjJmNmFiMTMyMmViN2UzOTZhMWM2Li41ZmY0YmZmNDA0ZjBmOTVjMjUyY2Q1MzEzZmUyZWEx
NDNlYzY3YjFkIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L2Jhc2UucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC9iYXNlLnB5CkBAIC00NjcsNiArNDY3LDEwIEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAg
ICAgICAgKCdjcHUnKS4iIiIKICAgICAgICAgcmV0dXJuICdjcHUnCiAKKyAgICBkZWYgcmVhbF9u
YW1lKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBhY3R1YWwgbmFtZSBvZiB0aGUgcG9y
dCwgbm90IHRoZSBkZWxlZ2F0ZSdzLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5uYW1lKCkKKwog
ICAgIGRlZiBnZXRfb3B0aW9uKHNlbGYsIG5hbWUsIGRlZmF1bHRfdmFsdWU9Tm9uZSk6CiAgICAg
ICAgICMgRklYTUU6IEV2ZW50dWFsbHkgd2Ugc2hvdWxkIG5vdCBoYXZlIHRvIGRvIGEgdGVzdCBm
b3IKICAgICAgICAgIyBoYXNhdHRyKCksIGFuZCB3ZSBzaG91bGQgYmUgYWJsZSB0byBqdXN0IGRv
CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21v
Y2tfZHJ0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tb2Nr
X2RydC5weQppbmRleCAzNzAzMjdmYjAxYjU4M2MwZGQwMjU4N2U2NDNkOTc4YjE4NGViMDFlLi4x
MTQ3ODQ2ZDYwOTUwODQ0YjU1M2MwZWYwMzcwMTJjZGFjNjFmNDhkIDEwMDY0NAotLS0gYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21vY2tfZHJ0LnB5CisrKyBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbW9ja19kcnQucHkKQEAgLTUz
LDYgKzUzLDEwIEBAIGNsYXNzIE1vY2tEUlRQb3J0KG9iamVjdCk6CiAgICAgICAgIGlmICdwb3J0
X25hbWUnIGluIGt3YXJnczoKICAgICAgICAgICAgIGt3YXJnc1sncG9ydF9uYW1lJ10gPSBrd2Fy
Z3NbJ3BvcnRfbmFtZSddW2xlbihwcmVmaXgpOl0KICAgICAgICAgc2VsZi5fX2RlbGVnYXRlID0g
ZmFjdG9yeS5nZXQoKiprd2FyZ3MpCisgICAgICAgIHNlbGYuX19yZWFsX25hbWUgPSBwcmVmaXgg
KyBzZWxmLl9fZGVsZWdhdGUubmFtZSgpCisKKyAgICBkZWYgcmVhbF9uYW1lKHNlbGYpOgorICAg
ICAgICByZXR1cm4gc2VsZi5fX3JlYWxfbmFtZQogCiAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYs
IG5hbWUpOgogICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLl9fZGVsZWdhdGUsIG5hbWUpCkBA
IC0yNzEsNyArMjc1LDYgQEAgY2xhc3MgTW9ja0Nocm9taXVtRFJUKE1vY2tEUlQpOgogICAgICAg
ICBzZWxmLl9zdGRvdXQuZmx1c2goKQogCiAKLQogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoK
ICAgICBmcyA9IGZpbGVzeXN0ZW0uRmlsZVN5c3RlbSgpCiAgICAgc3lzLmV4aXQobWFpbihzeXMu
YXJndlsxOl0sIGZzLCBzeXMuc3RkaW4sIHN5cy5zdGRvdXQsIHN5cy5zdGRlcnIpKQpkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0
c191bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93
ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkKaW5kZXggODkxNzk3ZDUwNWM0OGUxOGVjOWI0OTcxNjU5
MDcyMTZjZmNlOTFjZC4uODRmNTcxODI1NjBkZDEyYmE5OTI5OGRhZWFiYmE3ODEwOTQ5NWRlOCAx
MDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtp
dF90ZXN0c191bml0dGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5CkBAIC00NjcsMTAgKzQ2NywxMSBAQCBj
bGFzcyBNYWluVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZShwYXNzaW5nX3J1bihbJy0td29ya2VyLW1vZGVsJywgJ29sZC10aHJlYWRzJ10pKQogCiAgICAg
ZGVmIHRlc3Rfd29ya2VyX21vZGVsX19wcm9jZXNzZXMoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNz
ZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxvZ2dpbmdfcnVuLCBbJy0td29ya2VyLW1vZGVsJywgJ3By
b2Nlc3NlcyddKQorICAgICAgICBpZiBjb21wYXJlX3ZlcnNpb24oc3lzLCAnMi42JylbMF0gPj0g
MDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bihbJy0td29ya2VyLW1v
ZGVsJywgJ3Byb2Nlc3NlcyddKSkKIAogICAgIGRlZiB0ZXN0X3dvcmtlcl9tb2RlbF9fdGhyZWFk
cyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbG9nZ2luZ19y
dW4sIFsnLS13b3JrZXItbW9kZWwnLCAndGhyZWFkcyddKQorICAgICAgICBzZWxmLmFzc2VydFRy
dWUocGFzc2luZ19ydW4oWyctLXdvcmtlci1tb2RlbCcsICd0aHJlYWRzJ10pKQogCiAgICAgZGVm
IHRlc3Rfd29ya2VyX21vZGVsX191bmtub3duKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJh
aXNlcyhWYWx1ZUVycm9yLCBsb2dnaW5nX3J1biwK
</data>

          </attachment>
      

    </bug>

</bugzilla>