<?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>52194</bug_id>
          
          <creation_ts>2011-01-10 21:18:57 -0800</creation_ts>
          <short_desc>new-run-webkit-tests: checkpoint merge of dual-mode multiprocessing work</short_desc>
          <delta_ts>2011-01-24 18:12: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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>49566</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>49566</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Pranke">dpranke</reporter>
          <assigned_to name="Dirk Pranke">dpranke</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>332147</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-10 21:18:57 -0800</bug_when>
    <thetext>new-run-webkit-tests: checkpoint merge of dual-mode multiprocessing work</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332148</commentid>
    <comment_count>1</comment_count>
      <attachid>78493</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-10 21:19:18 -0800</bug_when>
    <thetext>Created attachment 78493
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332149</commentid>
    <comment_count>2</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-10 21:19:50 -0800</bug_when>
    <thetext>Note that this code passes all the unit tests but doesn&apos;t actually work ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332658</commentid>
    <comment_count>3</comment_count>
      <attachid>78599</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-11 14:29:29 -0800</bug_when>
    <thetext>Created attachment 78599
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339425</commentid>
    <comment_count>4</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-24 18:12:15 -0800</bug_when>
    <thetext>no point in having both this and 49566 open. closing this one.

*** This bug has been marked as a duplicate of bug 49566 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78493</attachid>
            <date>2011-01-10 21:19:18 -0800</date>
            <delta_ts>2011-01-11 14:29:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52194-20110110211917.patch</filename>
            <type>text/plain</type>
            <size>69701</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA5MGI5
Nzg5Y2U5ZDFmNjYzYWNhNzY4OTgxZmYyNDdjNWJhNDMyYWRjLi5iMTUyMTQ5YTczMWFmZjg0ZjNj
ZTRlYjFlODViNDk3NmJlMGMwZjg5IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMDEtMTAgIERpcmsgUHJhbmtl
ICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgbmV3LXJ1bi13ZWJraXQtdGVzdHM6IGNoZWNrcG9pbnQgbWVyZ2Ug
b2YgZHVhbC1tb2RlIG11bHRpcHJvY2Vzc2luZyB3b3JrCisKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyMTk0CisKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyX3dvcmtlcl9icm9rZXIu
cHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL21hbmFnZXJfd29ya2VyX2Jyb2tlcl91bml0dGVzdC5weTogQWRkZWQuCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWVzc2Fn
ZV9icm9rZXIyLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tlcjJfdW5pdHRlc3QucHk6IEFkZGVkLgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rl
c3RfcnVubmVyMi5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvbGF5b3V0X3BhY2thZ2Uvd29ya2VyLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHk6CisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9tYWMucHk6CisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tYWMucHk6CisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weToKKwogMjAxMS0wMS0x
MCAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBsZS5jb20+CiAKICAgICAgICAgUm9sbCBvdXQgcjc1
MzkyCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlv
dXRfcGFja2FnZS9tYW5hZ2VyX3dvcmtlcl9icm9rZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyX3dvcmtlcl9icm9rZXIucHkK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZmYyMGM5MjJmOTgwZjk4N2M5YTdmM2MwOTA0YWJhZGY4Y2Y0MjkwOAotLS0g
L2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL21hbmFnZXJfd29ya2VyX2Jyb2tlci5weQpAQCAtMCwwICsxLDMyNSBAQAorIyBD
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
U1VDSCBEQU1BR0UuCisKKyIiIk1vZHVsZSBmb3IgaGFuZGxpbmcgbWVzc2FnZXMgYW5kIGNvbmN1
cnJlbmN5IGZvciBydW4td2Via2l0LXRlc3RzLgorCitUZXN0aW5nIGlzIGFjY29tcGxpc2hlZCBi
eSBoYXZpbmcgYSBtYW5hZ2VyIChUZXN0UnVubmVyKSBnYXRoZXIgYWxsIG9mIHRoZQordGVzdHMg
dG8gYmUgcnVuLCBhbmQgc2VuZGluZyBtZXNzYWdlcyB0byBhIHBvb2wgb2Ygd29ya2VycyAoVGVz
dFNoZWxsVGhyZWFkcykKK3RvIHJ1biBlYWNoIHRlc3QuIEVhY2ggd29ya2VyIGNvbW11bmljYXRl
cyB3aXRoIG9uZSBkcml2ZXIgKHVzdWFsbHkKK0R1bXBSZW5kZXJUcmVlKSB0byBydW4gb25lIHRl
c3QgYXQgYSB0aW1lIGFuZCB0aGVuIGNvbXBhcmUgdGhlIG91dHB1dCBhZ2FpbnN0Cit3aGF0IHdl
IGV4cGVjdGVkIHRvIGdldC4KKworVGhpcyBtb2R1bGVzIGltcGxlbWVudHMgYSBtZXNzYWdlIGJy
b2tlciB0aGF0IGNvbm5lY3RzIHRoZSBtYW5hZ2VyIHRvIHRoZQord29ya2VyczogaXQgcHJvdmlk
ZXMgYSBtZXNzYWdpbmcgYWJzdHJhY3Rpb24gYW5kIG1lc3NhZ2UgbG9vcHMsIGFuZAoraGFuZGxl
cyBsYXVuY2hpbmcgdGhyZWFkcyBhbmQvb3IgcHJvY2Vzc2VzIGRlcGVuZGluZyBvbiB0aGUgcmVx
dWVzdGVkCitjb25maWd1cmF0aW9uLgorCitCb3RoIE1hbmFnZXJzIGFuZCBXb3JrZXJzIGFyZSBy
ZXF1aXJlZCB0byBpbXBsZW1lbnQgdGhlIG1ldGhvZHMgaW4gdGhlCitCcm9rZXJDbGllbnQgaW50
ZXJmYWNlIC8gYWJzdHJhY3QgYmFzZSBjbGFzcyBpbiBvcmRlciB0byB0aGUgbWVzc2FnZQorYnJv
a2VyIHRvIHByb3Blcmx5IGNvbW11bmljYXRlIHdpdGggdGhlbS4KKworRXZlcnl0aGluZyBzdGFy
dHMgYnkgY2FsbGluZyBnZXQoKSB0byBvYnRhaW4gYW4gaW5pdGlhbCByZWZlcmVuY2UgdG8gYSBi
cm9rZXIuCitUaGUgYnJva2VyIGlzIG1lZGlhdGVkIGJ5IGEgQ29ubmVjdGlvbiBvYmplY3QgdGhh
dCBwcm92aWRlcyBzb21lIHN5bnRhY3RpYworc3VnYXIgdG8gcmVwcmVzZW50IHRoZSBNYW5hZ2Vy
IGFuZCBXb3JrZXIgZW5kcG9pbnRzLiBUeXBpY2FsbHkgdGhlCittYW5hZ2VyIHRoZW4gY2FsbHMg
c3RhcnRfd29ya2VyKCkgcmVwZWF0ZWRseSB0byBsYXVuY2ggd29ya2VycyAod2hpY2ggYXJlCit1
c3VhbGx5IHJ1biBpbiBzZXBhcmF0ZSB0aHJlYWRzIG9yIHByb2Nlc3NlcyBhcyBjb250cm9sbGVk
IGJ5IHRoZQorLS13b3JrZXItbW9kZWwgcnVudGltZSBmbGFnKSwgb3B0aW9uYWxseSBzZXRzIHVw
IHNvbWUgdGltZXJzLCBhbmQgdGhlbgoraW52b2tlcyBydW5fbWVzc2FnZV9sb29wKCkuCisiIiIK
KworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IFF1ZXVlCitpbXBvcnQgc3lzCitp
bXBvcnQgdGhyZWFkCitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgdGltZQoraW1wb3J0IHRyYWNl
YmFjaworCisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKKworZnJvbSB3ZWJr
aXRweSBpbXBvcnQgbGF5b3V0X3Rlc3RzCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cyBpbXBv
cnQgcG9ydAorCitpbXBvcnQgbWVzc2FnZV9icm9rZXIyCisKKyMKKyMgSGFuZGxlIFB5dGhvbiA8
IDIuNiB3aGVyZSBtdWx0aXByb2Nlc3NpbmcgaXNuJ3QgYXZhaWxhYmxlLgorIwordHJ5OgorICAg
IF9tdWx0aXByb2Nlc3NpbmdfaXNfYXZhaWxhYmxlID0gVHJ1ZQorICAgIGZyb20gbXVsdGlwcm9j
ZXNzaW5nIGltcG9ydCBQcm9jZXNzIGFzIF9NdWx0aXByb2Nlc3NpbmdfUHJvY2VzcworICAgIGZy
b20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBRdWV1ZSBhcyBfTXVsdGlwcm9jZXNzaW5nX1F1ZXVl
CitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgX211bHRpcHJvY2Vzc2luZ19pc19hdmFpbGFibGUg
PSBGYWxzZQorICAgIF9NdWx0aXByb2Nlc3NpbmdfUHJvY2VzcyA9IHRocmVhZGluZy5UaHJlYWQK
KyAgICBfTXVsdGlwcm9jZXNzaW5nX1F1ZXVlID0gUXVldWUuUXVldWUKKworCisjCisjIFRvcGlj
IG5hbWVzIGZvciBNYW5hZ2VyIDwtPiBXb3JrZXIgbWVzc2FnaW5nCisjCitNQU5BR0VSX1RPUElD
ID0gJ21hbmFnZXJzJworQU5ZX1dPUktFUl9UT1BJQyA9ICd3b3JrZXJzJworCisKK2RlZiBydW50
aW1lX29wdGlvbnMoKToKKyAgICByZXR1cm4gbWVzc2FnZV9icm9rZXIyLnJ1bnRpbWVfb3B0aW9u
cygpCisKKworZGVmIGdldChwb3J0LCBvcHRpb25zLCBtYW5hZ2VyLCB3b3JrZXJfY2xhc3MpOgor
ICAgICIiIlJldHVybiBhIGNvbm5lY3Rpb24gdG8gYSBtYW5hZ2VyL3dvcmtlciBtZXNzYWdlX2Jy
b2tlcgorCisgICAgQXJnczoKKyAgICAgICAgcG9ydCAtIGhhbmRsZSB0byBsYXlvdXRfdGVzdHMv
cG9ydCBvYmplY3QgZm9yIHBvcnQtc3BlY2lmaWMgc3R1ZmYKKyAgICAgICAgb3B0aW9ucyAtIG9w
dHBhcnNlIGFyZ3VtZW50IGZvciBjb21tYW5kLWxpbmUgb3B0aW9ucworICAgICAgICBtYW5hZ2Vy
IC0gb2JqZWN0IHRvIGRpc3BhdGNoIHJlcGxpZXMgdG8KKyAgICAgICAgd29ya2VyX2NsYXNzIC0g
dHlwZSBvZiB3b3JrZXJzIHRvIGNyZWF0ZS4gVGhpcyBjbGFzcyBtdXN0IGltcGxlbWVudAorICAg
ICAgICAgICAgdGhlIG1ldGhvZHMgaW4gdGhlIENsaWVudEludGVyZmFjZS4KKyAgICBSZXR1cm5z
OgorICAgICAgICBBIGhhbmRsZSB0byBhbiBvYmplY3QgdGhhdCB3aWxsIHRhbGsgdG8gYSBtZXNz
YWdlIGJyb2tlciBjb25maWd1cmVkCisgICAgICAgIGZvciB0aGUgbm9ybWFsIG1hbmFnZXIvd29y
a2VyIGNvbW11bmljYXRpb24uCisgICAgIiIiCisgICAgd29ya2VyX21vZGVsID0gb3B0aW9ucy53
b3JrZXJfbW9kZWwKKyAgICBpZiB3b3JrZXJfbW9kZWwgPT0gJ2lubGluZSc6CisgICAgICAgIHF1
ZXVlX2NsYXNzID0gUXVldWUuUXVldWUKKyAgICAgICAgbWFuYWdlcl9jbGFzcyA9IF9JbmxpbmVN
YW5hZ2VyCisgICAgZWxpZiB3b3JrZXJfbW9kZWwgPT0gJ3RocmVhZHMnOgorICAgICAgICBxdWV1
ZV9jbGFzcyA9IFF1ZXVlLlF1ZXVlCisgICAgICAgIG1hbmFnZXJfY2xhc3MgPSBfVGhyZWFkZWRN
YW5hZ2VyCisgICAgZWxpZiB3b3JrZXJfbW9kZWwgPT0gJ3Byb2Nlc3NlcycgYW5kIF9tdWx0aXBy
b2Nlc3NpbmdfaXNfYXZhaWxhYmxlOgorICAgICAgICBxdWV1ZV9jbGFzcyA9IF9NdWx0aXByb2Nl
c3NpbmdfUXVldWUKKyAgICAgICAgbWFuYWdlcl9jbGFzcyA9IF9NdWx0aVByb2Nlc3NNYW5hZ2Vy
CisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5zdXBwb3J0ZWQgdmFsdWUg
Zm9yIC0td29ya2VyLW1vZGVsOiAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtl
cl9tb2RlbCkKKworICAgIGJyb2tlciA9IG1lc3NhZ2VfYnJva2VyMi5Ccm9rZXIob3B0aW9ucywg
cXVldWVfY2xhc3MpCisgICAgcmV0dXJuIG1hbmFnZXJfY2xhc3MoYnJva2VyLCBwb3J0LCBvcHRp
b25zLCBtYW5hZ2VyLCB3b3JrZXJfY2xhc3MpCisKKworY2xhc3MgX01hbmFnZXJDb25uZWN0aW9u
KG1lc3NhZ2VfYnJva2VyMi5Ccm9rZXJDb25uZWN0aW9uKToKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgYnJva2VyLCBvcHRpb25zLCBtYW5hZ2VyLCB3b3JrZXJfY2xhc3MpOgorICAgICAgICBtZXNz
YWdlX2Jyb2tlcjIuQnJva2VyQ29ubmVjdGlvbi5fX2luaXRfXyhzZWxmLCBicm9rZXIsIE1BTkFH
RVJfVE9QSUMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQU5ZX1dPUktFUl9UT1BJQykKKyAgICAgICAgc2VsZi5fYnJva2VyID0gYnJva2VyCisgICAg
ICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCisgICAgICAgIHNlbGYuX21hbmFnZXIgPSBtYW5h
Z2VyCisgICAgICAgIHNlbGYuX3dvcmtlcl9jb25uZWN0aW9uX2NsYXNzID0gTm9uZQorICAgICAg
ICBzZWxmLl93b3JrZXJfY2xhc3MgPSB3b3JrZXJfY2xhc3MKKworICAgIGRlZiBfbWFrZV93b3Jr
ZXJfY29ubmVjdGlvbihzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgor
CisgICAgZGVmIF9tYWtlX3dvcmtlcihzZWxmLCB3b3JrZXJfY29ubmVjdGlvbiwgd29ya2VyX251
bWJlciwgKiprd2FyZ3MpOgorICAgICAgICByZXR1cm4gc2VsZi5fd29ya2VyX2NsYXNzKHdvcmtl
cl9jb25uZWN0aW9uLCB3b3JrZXJfbnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGYuX29wdGlvbnMsICoqa3dhcmdzKQorCisgICAgZGVmIGNsaWVudChzZWxmKToK
KyAgICAgICAgcmV0dXJuIHNlbGYuX21hbmFnZXIKKworICAgIGRlZiBzdGFydF93b3JrZXIoc2Vs
Ziwgd29ya2VyX251bWJlciwgKiprd2FyZ3MpOgorICAgICAgICB3b3JrZXJfY29ubmVjdGlvbiA9
IHNlbGYuX21ha2Vfd29ya2VyX2Nvbm5lY3Rpb24oKQorICAgICAgICB3b3JrZXIgPSBzZWxmLl9t
YWtlX3dvcmtlcih3b3JrZXJfY29ubmVjdGlvbiwgd29ya2VyX251bWJlciwgKiprd2FyZ3MpCisg
ICAgICAgIHdvcmtlcl9jb25uZWN0aW9uLnNldF93b3JrZXIod29ya2VyKQorICAgICAgICB3b3Jr
ZXJfY29ubmVjdGlvbi5zdGFydCgpCisgICAgICAgIHJldHVybiB3b3JrZXJfY29ubmVjdGlvbgor
CisKK2NsYXNzIF9JbmxpbmVNYW5hZ2VyKF9NYW5hZ2VyQ29ubmVjdGlvbik6CisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIGJyb2tlciwgcG9ydCwgb3B0aW9ucywgbWFuYWdlciwgd29ya2VyX2NsYXNz
KToKKyAgICAgICAgX01hbmFnZXJDb25uZWN0aW9uLl9faW5pdF9fKHNlbGYsIGJyb2tlciwgb3B0
aW9ucywgbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtl
cl9jbGFzcykKKyAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKKyAgICAgICAgc2VsZi5faW5saW5l
X3dvcmtlciA9IE5vbmUKKworICAgIGRlZiBfbWFrZV93b3JrZXJfY29ubmVjdGlvbihzZWxmKToK
KyAgICAgICAgc2VsZi5faW5saW5lX3dvcmtlciA9IF9JbmxpbmVXb3JrZXIoc2VsZi5fYnJva2Vy
LCBzZWxmLl9wb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxmLl9tYW5hZ2VyKQorICAgICAgICByZXR1cm4gc2VsZi5faW5saW5lX3dvcmtlcgorCisg
ICAgZGVmIHJ1bl9tZXNzYWdlX2xvb3Aoc2VsZiwgZGVsYXlfc2Vjcz1Ob25lKToKKyAgICAgICAg
IyBOb3RlIHRoYXQgZGVsYXlfc2VjcyBpcyBpZ25vcmVkIGluIHRoaXMgY2FzZSBzaW5jZSB3ZSBj
YW4ndCBlYXNpbHkKKyAgICAgICAgIyBpbXBsZW1lbnQgaXQuCisgICAgICAgIHNlbGYuX2lubGlu
ZV93b3JrZXIucnVuKCkKKyAgICAgICAgc2VsZi5fYnJva2VyLnJ1bl9hbGxfcGVuZGluZyhNQU5B
R0VSX1RPUElDLCBzZWxmLl9tYW5hZ2VyKQorCisKK2NsYXNzIF9UaHJlYWRlZE1hbmFnZXIoX01h
bmFnZXJDb25uZWN0aW9uKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCBwb3J0LCBv
cHRpb25zLCBtYW5hZ2VyLCB3b3JrZXJfY2xhc3MpOgorICAgICAgICBfTWFuYWdlckNvbm5lY3Rp
b24uX19pbml0X18oc2VsZiwgYnJva2VyLCBvcHRpb25zLCBtYW5hZ2VyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyX2NsYXNzKQorICAgICAgICBzZWxmLl9wb3J0
ID0gcG9ydAorCisgICAgZGVmIF9tYWtlX3dvcmtlcl9jb25uZWN0aW9uKHNlbGYpOgorICAgICAg
ICByZXR1cm4gX1RocmVhZGVkV29ya2VyKHNlbGYuX2Jyb2tlciwgc2VsZi5fcG9ydCkKKworCitj
bGFzcyBfTXVsdGlQcm9jZXNzTWFuYWdlcihfTWFuYWdlckNvbm5lY3Rpb24pOgorICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBicm9rZXIsIHBvcnQsIG9wdGlvbnMsIG1hbmFnZXIsIHdvcmtlcl9jbGFz
cyk6CisgICAgICAgIF9NYW5hZ2VyQ29ubmVjdGlvbi5fX2luaXRfXyhzZWxmLCBicm9rZXIsIG9w
dGlvbnMsIG1hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3Jr
ZXJfY2xhc3MpCisgICAgICAgIHNlbGYuX3BsYXRmb3JtX25hbWUgPSBwb3J0Lm5hbWUoKQorCisg
ICAgZGVmIF9tYWtlX3dvcmtlcl9jb25uZWN0aW9uKHNlbGYpOgorICAgICAgICByZXR1cm4gX011
bHRpUHJvY2Vzc1dvcmtlcihzZWxmLl9icm9rZXIsIHNlbGYuX3BsYXRmb3JtX25hbWUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMpCisKKworY2xhc3Mg
X1dvcmtlckNvbm5lY3Rpb24obWVzc2FnZV9icm9rZXIyLkJyb2tlckNvbm5lY3Rpb24pOgorICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXIpOgorICAgICAgICBtZXNzYWdlX2Jyb2tlcjIuQnJv
a2VyQ29ubmVjdGlvbi5fX2luaXRfXyhzZWxmLCBicm9rZXIsIEFOWV9XT1JLRVJfVE9QSUMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFOQUdFUl9U
T1BJQykKKyAgICAgICAgc2VsZi5fd29ya2VyID0gTm9uZQorCisgICAgZGVmIHNldF93b3JrZXIo
c2VsZiwgd29ya2VyKToKKyAgICAgICAgc2VsZi5fd29ya2VyID0gd29ya2VyCisgICAgICAgIHNl
bGYubmFtZSA9IHdvcmtlci5uYW1lKCkKKworICAgIGRlZiBjbGllbnQoc2VsZik6CisgICAgICAg
IHJldHVybiBzZWxmLl93b3JrZXIKKworICAgIGRlZiBzdGFydChzZWxmKToKKyAgICAgICAgcmFp
c2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgcmFp
c2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHlpZWxkX3RvX2Jyb2tlcihzZWxmKToK
KyAgICAgICAgcGFzcworCisgICAgZGVmIGNhbmNlbChzZWxmKToKKyAgICAgICAgcmFpc2UgTm90
SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGlzX2FsaXZlKHNlbGYpOgorICAgICAgICByYWlz
ZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgam9pbihzZWxmLCB0aW1lb3V0KToKKyAg
ICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGxvZ193ZWRnZWRfd29y
a2VyKHNlbGYsIHRlc3RfbmFtZSk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IK
KworIAorY2xhc3MgX0lubGluZVdvcmtlcihfV29ya2VyQ29ubmVjdGlvbik6CisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIGJyb2tlciwgcG9ydCwgbWFuYWdlcik6CisgICAgICAgIF9Xb3JrZXJDb25u
ZWN0aW9uLl9faW5pdF9fKHNlbGYsIGJyb2tlcikKKyAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQK
KyAgICAgICAgc2VsZi5fbWFuYWdlciA9IG1hbmFnZXIKKyAgICAgICAgc2VsZi5fYWxpdmUgPSBG
YWxzZQorCisgICAgZGVmIHN0YXJ0KHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgcnVu
KHNlbGYpOgorICAgICAgICBzZWxmLl9hbGl2ZSA9IFRydWUKKyAgICAgICAgc2VsZi5fd29ya2Vy
LnJ1bihzZWxmLl9wb3J0KQorICAgICAgICBzZWxmLl9hbGl2ZSA9IEZhbHNlCisKKyAgICBkZWYg
eWllbGRfdG9fYnJva2VyKHNlbGYpOgorICAgICAgICBzZWxmLl9icm9rZXIucnVuX2FsbF9wZW5k
aW5nKE1BTkFHRVJfVE9QSUMsIHNlbGYuX21hbmFnZXIpCisKKyAgICBkZWYgY2FuY2VsKHNlbGYp
OgorICAgICAgICBzZWxmLl93b3JrZXIuY2FuY2VsKCkKKworICAgIGRlZiBpc19hbGl2ZShzZWxm
KToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2FsaXZlCisKKyAgICBkZWYgam9pbihzZWxmLCB0aW1l
b3V0KToKKyAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLmlzX2FsaXZlKCkKKworICAgIGRlZiBsb2df
d2VkZ2VkX3dvcmtlcihzZWxmLCB0ZXN0X25hbWUpOgorICAgICAgICByYWlzZSBBc3NlcnRpb25F
cnJvcigiX0lubGluZVdvcmtlci5sb2dfd2VkZ2VkX3dvcmtlcigpIGNhbGxlZCIpCisKKworY2xh
c3MgX1RocmVhZGVkV29ya2VyKHRocmVhZGluZy5UaHJlYWQsIF9Xb3JrZXJDb25uZWN0aW9uKToK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCBwb3J0KToKKyAgICAgICAgdGhyZWFkaW5n
LlRocmVhZC5fX2luaXRfXyhzZWxmKQorICAgICAgICBfV29ya2VyQ29ubmVjdGlvbi5fX2luaXRf
XyhzZWxmLCBicm9rZXIpCisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CisKKyAgICBkZWYgcnVu
KHNlbGYpOgorICAgICAgICAjIEZJWE1FOiBXZSBjYW4gcmVtb3ZlIHRoaXMgb25jZSBldmVyeW9u
ZSBpcyBvbiAyLjYuCisgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYsICdpZGVudCcpOgorICAg
ICAgICAgICAgc2VsZi5pZGVudCA9IHRocmVhZC5nZXRfaWRlbnQoKQorICAgICAgICBzZWxmLl93
b3JrZXIucnVuKHNlbGYuX3BvcnQpCisKKyAgICBkZWYgY2FuY2VsKHNlbGYpOgorICAgICAgICBz
ZWxmLl93b3JrZXIuY2FuY2VsKCkKKworICAgIGRlZiBpc19hbGl2ZShzZWxmKToKKyAgICAgICAg
IyBGSVhNRTogV2UgY2FuIHJlbW92ZSB0aGlzIG9uY2UgZXZlcnlvbmUgaXMgb24gMi42LgorICAg
ICAgICBzZWxmLmlzQWxpdmUoKQorCisgICAgZGVmIGxvZ193ZWRnZWRfd29ya2VyKHNlbGYsIHRl
c3RfbmFtZSk6CisgICAgICAgIHRpZCA9IHNlbGYuaWRlbnQKKyAgICAgICAgc3RhY2sgPSBfZmlu
ZF90aHJlYWRfc3RhY2sodGlkKQorICAgICAgICBhc3NlcnQoc3RhY2sgaXMgbm90IE5vbmUpCisg
ICAgICAgIF9sb2cuZXJyb3IoIiVzICh0aWQgJWQpIGlzIHdlZGdlZCBvbiB0ZXN0ICVzIiAlCisg
ICAgICAgICAgICAgICAgICAgKHNlbGYubmFtZSwgdGlkLCB0ZXN0X25hbWUpKQorICAgICAgICBf
bG9nX3N0YWNrKHN0YWNrKQorCisKK2NsYXNzIF9NdWx0aVByb2Nlc3NXb3JrZXIoX011bHRpcHJv
Y2Vzc2luZ19Qcm9jZXNzLCBfV29ya2VyQ29ubmVjdGlvbik6CisgICAgZGVmIF9faW5pdF9fKHNl
bGYsIGJyb2tlciwgcGxhdGZvcm1fbmFtZSwgb3B0aW9ucyk6CisgICAgICAgIF9NdWx0aXByb2Nl
c3NpbmdfUHJvY2Vzcy5fX2luaXRfXyhzZWxmKQorICAgICAgICBfV29ya2VyQ29ubmVjdGlvbi5f
X2luaXRfXyhzZWxmLCBicm9rZXIpCisgICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCisg
ICAgICAgIHNlbGYuX3BsYXRmb3JtX25hbWUgPSBwbGF0Zm9ybV9uYW1lCisKKyAgICBkZWYgcnVu
KHNlbGYpOgorICAgICAgICAjIFJlLWNvbmZpZ3VyZSB0aGUgbG9nZ2VyLgorICAgICAgICAjIEZJ
WE1FOiBmaWd1cmUgb3V0IGhvdyB0byBnZXQgYSBoYW5kbGUgdG8gdGhlIHJpZ2h0IHN0cmVhbS4K
KyAgICAgICAgbG9nZ2luZy5iYXNpY0NvbmZpZygpCisgICAgICAgIHBvcnQgPSBsYXlvdXRfdGVz
dHMucG9ydC5nZXQoc2VsZi5fcGxhdGZvcm1fbmFtZSwgc2VsZi5fb3B0aW9ucykKKyAgICAgICAg
c2VsZi5fd29ya2VyLnJ1bihwb3J0KQorCisgICAgZGVmIGNhbmNlbChzZWxmKToKKyAgICAgICAg
c2VsZi50ZXJtaW5hdGUoKQorCisgICAgZGVmIGxvZ193ZWRnZWRfd29ya2VyKHNlbGYsIHRlc3Rf
bmFtZSk6CisgICAgICAgIF9sb2cuZXJyb3IoIiVzIChwaWQgJWQpIGlzIHdlZGdlZCBvbiB0ZXN0
ICVzIiAlCisgICAgICAgICAgICAgICAgICAgKHNlbGYubmFtZSwgc2VsZi5waWQsIHRlc3RfbmFt
ZSkpCisKKworZGVmIF9maW5kX3RocmVhZF9zdGFjayh0aWQpOgorICAgICIiIlJldHVybnMgYSBz
dGFjayBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byBkdW1wIGEgc3RhY2sgdHJhY2UgZm9yCisg
ICAgdGhlIGdpdmVuIHRocmVhZCBpZCAob3IgTm9uZSBpZiB0aGUgaWQgaXMgbm90IGZvdW5kKS4i
IiIKKyAgICBmb3IgdGhyZWFkX2lkLCBzdGFjayBpbiBzeXMuX2N1cnJlbnRfZnJhbWVzKCkuaXRl
bXMoKToKKyAgICAgICAgaWYgdGhyZWFkX2lkID09IHRpZDoKKyAgICAgICAgICAgIHJldHVybiBz
dGFjaworICAgIHJldHVybiBOb25lCisKKworZGVmIF9sb2dfc3RhY2soc3RhY2spOgorICAgICIi
IkxvZyBhIHN0YWNrIHRyYWNlIHRvIGxvZy5lcnJvcigpLiIiIgorICAgIGZvciBmaWxlbmFtZSwg
bGluZW5vLCBuYW1lLCBsaW5lIGluIHRyYWNlYmFjay5leHRyYWN0X3N0YWNrKHN0YWNrKToKKyAg
ICAgICAgX2xvZy5lcnJvcignRmlsZTogIiVzIiwgbGluZSAlZCwgaW4gJXMnICUgKGZpbGVuYW1l
LCBsaW5lbm8sIG5hbWUpKQorICAgICAgICBpZiBsaW5lOgorICAgICAgICAgICAgX2xvZy5lcnJv
cignICAlcycgJSBsaW5lLnN0cmlwKCkpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyX3dvcmtlcl9icm9rZXJfdW5p
dHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFj
a2FnZS9tYW5hZ2VyX3dvcmtlcl9icm9rZXJfdW5pdHRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzQyMWYw
NzZhYmYzYzRkOTg4OWYyOGI2ODU2NjQyYzExMjc0M2MxZAotLS0gL2Rldi9udWxsCisrKyBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21hbmFnZXJf
d29ya2VyX2Jyb2tlcl91bml0dGVzdC5weQpAQCAtMCwwICsxLDMxMSBAQAorIyBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
IyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IFF1ZXVlCitpbXBvcnQgc3lzCitpbXBvcnQg
dW5pdHRlc3QKKwordHJ5OgorICAgIF9tdWx0aXByb2Nlc3NpbmdfaXNfYXZhaWxhYmxlID0gVHJ1
ZQorICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBRdWV1ZSBhcyBfTXVsdGlwcm9jZXNz
aW5nX1F1ZXVlCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgX211bHRpcHJvY2Vzc2luZ19pc19h
dmFpbGFibGUgPSBGYWxzZQorICAgIF9NdWx0aXByb2Nlc3NpbmdfUXVldWUgPSBRdWV1ZS5RdWV1
ZQorCisKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgb3V0cHV0Y2FwdHVyZQor
ZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMgaW1wb3J0IHBvcnQKKworaW1wb3J0IG1lc3NhZ2Vf
YnJva2VyMgoraW1wb3J0IG1hbmFnZXJfd29ya2VyX2Jyb2tlcgoraW1wb3J0IHByaW50aW5nCisK
KworY2xhc3MgVGVzdFdvcmtlcihtZXNzYWdlX2Jyb2tlcjIuQ2xpZW50SW50ZXJmYWNlKToKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCB3b3JrZXJfbnVtYmVyLCBvcHRpb25zLCAqKmt3
YXJncyk6CisgICAgICAgIHNlbGYuX2Jyb2tlciA9IGJyb2tlcgorICAgICAgICBzZWxmLl9vcHRp
b25zID0gb3B0aW9ucworICAgICAgICBzZWxmLl93b3JrZXJfbnVtYmVyID0gd29ya2VyX251bWJl
cgorICAgICAgICBzZWxmLl9uYW1lID0gJ1Rlc3RXb3JrZXIvJWQnICUgd29ya2VyX251bWJlcgor
ICAgICAgICBzZWxmLl9jYW5jZWxlZCA9IEZhbHNlCisgICAgICAgIHNlbGYuX3N0b3BwZWQgPSBG
YWxzZQorICAgICAgICBzZWxmLl9zdGFydGluZ19xdWV1ZSA9IGt3YXJncy5nZXQoJ3N0YXJ0aW5n
X3F1ZXVlJykKKyAgICAgICAgc2VsZi5fc3RvcHBpbmdfcXVldWUgPSBrd2FyZ3MuZ2V0KCdzdG9w
cGluZ19xdWV1ZScpCisKKyAgICBkZWYgY2FuY2VsKHNlbGYpOgorICAgICAgICBzZWxmLl9jYW5j
ZWxlZCA9IFRydWUKKworICAgIGRlZiBoYW5kbGVfc3RvcChzZWxmLCBzcmMpOgorICAgICAgICBz
ZWxmLl9zdG9wcGVkID0gVHJ1ZQorCisgICAgZGVmIGhhbmRsZV90ZXN0KHNlbGYsIHNyYywgYW5f
aW50LCBhX3N0cik6CisgICAgICAgIGFzc2VydCBhbl9pbnQgPT0gMQorICAgICAgICBhc3NlcnQg
YV9zdHIgPT0gImhlbGxvLCB3b3JsZCIKKyAgICAgICAgc2VsZi5fYnJva2VyLnBvc3RfbWVzc2Fn
ZSgndGVzdCcsIDIsICdoaSwgZXZlcnlib2R5JykKKworICAgIGRlZiBpc19kb25lKHNlbGYpOgor
ICAgICAgICByZXR1cm4gc2VsZi5fc3RvcHBlZCBvciBzZWxmLl9jYW5jZWxlZAorCisgICAgZGVm
IG5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9uYW1lCisKKyAgICBkZWYgc3RhcnQo
c2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBydW4oc2VsZiwgcG9ydCk6CisgICAgICAg
IGlmIHNlbGYuX3N0YXJ0aW5nX3F1ZXVlOgorICAgICAgICAgICAgc2VsZi5fc3RhcnRpbmdfcXVl
dWUucHV0KCcnKQorICAgICAgICBpZiBzZWxmLl9zdG9wcGluZ19xdWV1ZToKKyAgICAgICAgICAg
IHNlbGYuX3N0b3BwaW5nX3F1ZXVlLmdldCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNl
bGYuX2Jyb2tlci5ydW5fbWVzc2FnZV9sb29wKCkKKyAgICAgICAgICAgIHNlbGYuX2Jyb2tlci55
aWVsZF90b19icm9rZXIoKQorICAgICAgICAgICAgc2VsZi5fYnJva2VyLnBvc3RfbWVzc2FnZSgn
ZG9uZScpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBzZWxmLl9i
cm9rZXIucG9zdF9tZXNzYWdlKCdleGNlcHRpb24nLCAodHlwZShlKSwgc3RyKGUpLCBOb25lKSkK
KworCitkZWYgZ2V0X29wdGlvbnMod29ya2VyX21vZGVsKToKKyAgICBvcHRpb25fbGlzdCA9IG1l
c3NhZ2VfYnJva2VyMi5ydW50aW1lX29wdGlvbnMoKQorICAgIHBhcnNlciA9IG9wdHBhcnNlLk9w
dGlvblBhcnNlcihvcHRpb25fbGlzdD1vcHRpb25fbGlzdCkKKyAgICBvcHRpb25zLCBhcmdzID0g
cGFyc2VyLnBhcnNlX2FyZ3MoYXJncz1bJy0td29ya2VyLW1vZGVsJywgd29ya2VyX21vZGVsXSkK
KyAgICByZXR1cm4gb3B0aW9ucworCisKK2RlZiBtYWtlX2Jyb2tlcihtYW5hZ2VyLCB3b3JrZXJf
bW9kZWwpOgorICAgIG9wdGlvbnMgPSBnZXRfb3B0aW9ucyh3b3JrZXJfbW9kZWwpCisgICAgcmV0
dXJuIG1hbmFnZXJfd29ya2VyX2Jyb2tlci5nZXQocG9ydC5nZXQoInRlc3QiKSwgb3B0aW9ucywg
bWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXN0V29ya2Vy
KQorCisKK2NsYXNzIEZ1bmN0aW9uVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0
ZXN0X2dldF9faW5saW5lKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUobWFrZV9icm9r
ZXIoc2VsZiwgJ2lubGluZScpIGlzIG5vdCBOb25lKQorCisgICAgZGVmIHRlc3RfZ2V0X190aHJl
YWRzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUobWFrZV9icm9rZXIoc2VsZiwgJ3Ro
cmVhZHMnKSBpcyBub3QgTm9uZSkKKworICAgIGRlZiB0ZXN0X2dldF9fcHJvY2Vzc2VzKHNlbGYp
OgorICAgICAgICBpZiBfbXVsdGlwcm9jZXNzaW5nX2lzX2F2YWlsYWJsZToKKyAgICAgICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZShtYWtlX2Jyb2tlcihzZWxmLCAncHJvY2Vzc2VzJykgaXMgbm90IE5v
bmUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVy
cm9yLCBtYWtlX2Jyb2tlciwgc2VsZiwgJ3Byb2Nlc3NlcycpCisKKyAgICBkZWYgdGVzdF9nZXRf
X3Vua25vd24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1h
a2VfYnJva2VyLCBzZWxmLCAndW5rbm93bicpCisKKworY2xhc3MgX1Rlc3RzTWl4aW4ob2JqZWN0
KToKKyAgICAiIiJNaXhpbiBjbGFzcyB0aGF0IGltcGxlbWVudHMgYSBzZXJpZXMgb2YgdGVzdHMg
dG8gZW5mb3JjZSB0aGUKKyAgICBjb250cmFjdCBhbGwgaW1wbGVtZW50YXRpb25zIG11c3QgZm9s
bG93LiIiIgorCisgICAgIworICAgICMgTWV0aG9kcyB0byBpbXBsZW1lbnQgdGhlIE1hbmFnZXIg
c2lkZSBvZiB0aGUgQ2xpZW50SW50ZXJmYWNlCisgICAgIworICAgIGRlZiBuYW1lKHNlbGYpOgor
ICAgICAgICByZXR1cm4gJ1Rlc3RlcicKKworICAgIGRlZiBpc19kb25lKHNlbGYpOgorICAgICAg
ICByZXR1cm4gc2VsZi5fZG9uZQorCisgICAgIworICAgICMgSGFuZGxlcnMgZm9yIHRoZSBtZXNz
YWdlcyB0aGUgVGVzdFdvcmtlciBtYXkgc2VuZC4KKyAgICAjCisgICAgZGVmIGhhbmRsZV9kb25l
KHNlbGYsIHNyYyk6CisgICAgICAgIHNlbGYuX2RvbmUgPSBUcnVlCisKKyAgICBkZWYgaGFuZGxl
X3Rlc3Qoc2VsZiwgc3JjLCBhbl9pbnQsIGFfc3RyKToKKyAgICAgICAgc2VsZi5fYW5faW50ID0g
YW5faW50CisgICAgICAgIHNlbGYuX2Ffc3RyID0gYV9zdHIKKworICAgIGRlZiBoYW5kbGVfZXhj
ZXB0aW9uKHNlbGYsIHNyYywgZXhjX2luZm8pOgorICAgICAgICBzZWxmLl9leGNlcHRpb24gPSBl
eGNfaW5mbworICAgICAgICBzZWxmLl9kb25lID0gVHJ1ZQorCisgICAgIworICAgICMgVGVzdGlu
ZyBoZWxwZXIgbWV0aG9kcworICAgICMKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNl
bGYuX2FuX2ludCA9IE5vbmUKKyAgICAgICAgc2VsZi5fYV9zdHIgPSBOb25lCisgICAgICAgIHNl
bGYuX2Jyb2tlciA9IE5vbmUKKyAgICAgICAgc2VsZi5fZG9uZSA9IEZhbHNlCisgICAgICAgIHNl
bGYuX2V4Y2VwdGlvbiA9IE5vbmUKKyAgICAgICAgc2VsZi5fd29ya2VyX21vZGVsID0gTm9uZQor
CisgICAgZGVmIG1ha2VfYnJva2VyKHNlbGYpOgorICAgICAgICBzZWxmLl9icm9rZXIgPSBtYWtl
X2Jyb2tlcihzZWxmLCBzZWxmLl93b3JrZXJfbW9kZWwpCisKKyAgICAjCisgICAgIyBBY3R1YWwg
dW5pdCB0ZXN0cworICAgICMKKyAgICBkZWYgdGVzdF9jYW5jZWwoc2VsZik6CisgICAgICAgIGlm
IG5vdCBzZWxmLl93b3JrZXJfbW9kZWw6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2Vs
Zi5tYWtlX2Jyb2tlcigpCisgICAgICAgIHdvcmtlciA9IHNlbGYuX2Jyb2tlci5zdGFydF93b3Jr
ZXIoMCkKKyAgICAgICAgd29ya2VyLmNhbmNlbCgpCisgICAgICAgIHNlbGYuX2Jyb2tlci5wb3N0
X21lc3NhZ2UoJ3Rlc3QnLCAxLCAnaGVsbG8sIHdvcmxkJykKKyAgICAgICAgd29ya2VyLmpvaW4o
MC41KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHdvcmtlci5pc19hbGl2ZSgpKQorCisgICAg
ZGVmIHRlc3RfZG9uZShzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuX3dvcmtlcl9tb2RlbDoK
KyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLm1ha2VfYnJva2VyKCkKKyAgICAgICAg
d29ya2VyID0gc2VsZi5fYnJva2VyLnN0YXJ0X3dvcmtlcigwKQorICAgICAgICBzZWxmLl9icm9r
ZXIucG9zdF9tZXNzYWdlKCd0ZXN0JywgMSwgJ2hlbGxvLCB3b3JsZCcpCisgICAgICAgIHNlbGYu
X2Jyb2tlci5wb3N0X21lc3NhZ2UoJ3N0b3AnKQorICAgICAgICBzZWxmLl9icm9rZXIucnVuX21l
c3NhZ2VfbG9vcCgpCisgICAgICAgIHdvcmtlci5qb2luKDAuNSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRGYWxzZSh3b3JrZXIuaXNfYWxpdmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYu
aXNfZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2FuX2ludCwgMikKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9hX3N0ciwgJ2hpLCBldmVyeWJvZHknKQorCisg
ICAgZGVmIHRlc3RfbG9nX3dlZGdlZF93b3JrZXIoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxm
Ll93b3JrZXJfbW9kZWw6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc3RhcnRpbmdfcXVl
dWUgPSBzZWxmLnF1ZXVlKCkKKyAgICAgICAgc3RvcHBpbmdfcXVldWUgPSBzZWxmLnF1ZXVlKCkK
KyAgICAgICAgc2VsZi5tYWtlX2Jyb2tlcigpCisgICAgICAgIG9jID0gb3V0cHV0Y2FwdHVyZS5P
dXRwdXRDYXB0dXJlKCkKKyAgICAgICAgb2MuY2FwdHVyZV9vdXRwdXQoKQorICAgICAgICB3b3Jr
ZXIgPSBzZWxmLl9icm9rZXIuc3RhcnRfd29ya2VyKDAsCisgICAgICAgICAgICBzdGFydGluZ19x
dWV1ZT1zdGFydGluZ19xdWV1ZSwgc3RvcHBpbmdfcXVldWU9c3RvcHBpbmdfcXVldWUpCisgICAg
ICAgIHN0YXJ0aW5nX3F1ZXVlLmdldCgpCisgICAgICAgIHdvcmtlci5sb2dfd2VkZ2VkX3dvcmtl
cigndGVzdF9uYW1lJykKKyAgICAgICAgc3RvcHBpbmdfcXVldWUucHV0KCcnKQorICAgICAgICBz
ZWxmLl9icm9rZXIucG9zdF9tZXNzYWdlKCdzdG9wJykKKyAgICAgICAgc2VsZi5fYnJva2VyLnJ1
bl9tZXNzYWdlX2xvb3AoKQorICAgICAgICB3b3JrZXIuam9pbigwLjUpCisgICAgICAgIG9jLnJl
c3RvcmVfb3V0cHV0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh3b3JrZXIuaXNfYWxpdmUo
KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuaXNfZG9uZSgpKQorCisgICAgZGVmIHRl
c3RfdW5rbm93bl9tZXNzYWdlKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5fd29ya2VyX21v
ZGVsOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYubWFrZV9icm9rZXIoKQorICAg
ICAgICB3b3JrZXIgPSBzZWxmLl9icm9rZXIuc3RhcnRfd29ya2VyKDApCisgICAgICAgIHNlbGYu
X2Jyb2tlci5wb3N0X21lc3NhZ2UoJ3Vua25vd24nKQorICAgICAgICBzZWxmLl9icm9rZXIucnVu
X21lc3NhZ2VfbG9vcCgpCisgICAgICAgIHdvcmtlci5qb2luKDAuNSkKKworICAgICAgICBzZWxm
LmFzc2VydFRydWUoc2VsZi5pc19kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uod29y
a2VyLmlzX2FsaXZlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuX2V4Y2VwdGlv
blswXSwgVmFsdWVFcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5fZXhjZXB0
aW9uWzFdLAorICAgICAgICAgICAgIlRlc3RXb3JrZXIvMDogcmVjZWl2ZWQgbWVzc2FnZSAndW5r
bm93bicgaXQgY291bGRuJ3QgaGFuZGxlIikKKworCitjbGFzcyBJbmxpbmVCcm9rZXJUZXN0cyhf
VGVzdHNNaXhpbiwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAg
ICAgICAgX1Rlc3RzTWl4aW4uc2V0VXAoc2VsZikKKyAgICAgICAgc2VsZi5fd29ya2VyX21vZGVs
ID0gJ2lubGluZScKKworICAgIGRlZiB0ZXN0X2xvZ193ZWRnZWRfd29ya2VyKHNlbGYpOgorICAg
ICAgICBzZWxmLm1ha2VfYnJva2VyKCkKKyAgICAgICAgd29ya2VyID0gc2VsZi5fYnJva2VyLnN0
YXJ0X3dvcmtlcigwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwg
d29ya2VyLmxvZ193ZWRnZWRfd29ya2VyLCBOb25lKQorCisKK2NsYXNzIE11bHRpUHJvY2Vzc0Jy
b2tlclRlc3RzKF9UZXN0c01peGluLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVw
KHNlbGYpOgorICAgICAgICBfVGVzdHNNaXhpbi5zZXRVcChzZWxmKQorICAgICAgICBpZiBfbXVs
dGlwcm9jZXNzaW5nX2lzX2F2YWlsYWJsZToKKyAgICAgICAgICAgIHNlbGYuX3dvcmtlcl9tb2Rl
bCA9ICdwcm9jZXNzZXMnCisgICAgICAgIGVsc2U6ICAgCisgICAgICAgICAgICBzZWxmLl93b3Jr
ZXJfbW9kZWwgPSBOb25lCisKKyAgICBkZWYgcXVldWUoc2VsZik6CisgICAgICAgIHJldHVybiBf
TXVsdGlwcm9jZXNzaW5nX1F1ZXVlKCkKKworCitjbGFzcyBUaHJlYWRlZEJyb2tlclRlc3RzKF9U
ZXN0c01peGluLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHF1ZXVlKHNlbGYpOgorICAg
ICAgICByZXR1cm4gUXVldWUuUXVldWUoKQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAg
ICBfVGVzdHNNaXhpbi5zZXRVcChzZWxmKQorICAgICAgICBzZWxmLl93b3JrZXJfbW9kZWwgPSAn
dGhyZWFkcycKKworCitjbGFzcyBGdW5jdGlvbnNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAg
ICBkZWYgdGVzdF9maW5kX3RocmVhZF9zdGFja19mb3VuZChzZWxmKToKKyAgICAgICAgaWQsIHN0
YWNrID0gc3lzLl9jdXJyZW50X2ZyYW1lcygpLml0ZW1zKClbMF0KKyAgICAgICAgZm91bmRfc3Rh
Y2sgPSBtYW5hZ2VyX3dvcmtlcl9icm9rZXIuX2ZpbmRfdGhyZWFkX3N0YWNrKGlkKQorICAgICAg
ICBzZWxmLmFzc2VydE5vdEVxdWFsKGZvdW5kX3N0YWNrLCBOb25lKQorCisgICAgZGVmIHRlc3Rf
ZmluZF90aHJlYWRfc3RhY2tfbm90X2ZvdW5kKHNlbGYpOgorICAgICAgICBmb3VuZF9zdGFjayA9
IG1hbmFnZXJfd29ya2VyX2Jyb2tlci5fZmluZF90aHJlYWRfc3RhY2soMCkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChmb3VuZF9zdGFjaywgTm9uZSkKKworICAgIGRlZiB0ZXN0X2xvZ19zdGFj
ayhzZWxmKToKKyAgICAgICAgaWQsIHN0YWNrID0gc3lzLl9jdXJyZW50X2ZyYW1lcygpLml0ZW1z
KClbMF0KKyAgICAgICAgb2MgPSBvdXRwdXRjYXB0dXJlLk91dHB1dENhcHR1cmUoKQorICAgICAg
ICAjIEZJWE1FOiB2ZXJpZnkgb3V0cHV0PworICAgICAgICBvYy5jYXB0dXJlX291dHB1dCgpCisg
ICAgICAgIG1hbmFnZXJfd29ya2VyX2Jyb2tlci5fbG9nX3N0YWNrKHN0YWNrKQorICAgICAgICBv
Yy5yZXN0b3JlX291dHB1dCgpCisKKyAgICBkZWYgdGVzdF9ydW50aW1lX29wdGlvbnMoc2VsZik6
CisgICAgICAgIG9wdGlvbl9saXN0ID0gbWFuYWdlcl93b3JrZXJfYnJva2VyLnJ1bnRpbWVfb3B0
aW9ucygpCisgICAgICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcihvcHRpb25fbGlz
dD1vcHRpb25fbGlzdCkKKyAgICAgICAgb3B0aW9ucywgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdz
KFtdKSAKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wdGlvbnMpCisgIAorCitjbGFzcyBJbnRl
cmZhY2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFRoZXNlIHRlc3RzIG1vc3RseSBl
eGlzdCB0byBwYWNpZnkgY292ZXJhZ2UuCisKKyAgICAjIEZJWE1FOiBUaGVyZSBtdXN0IGJlIGEg
YmV0dGVyIHdheSB0byBkbyB0aGlzIGFuZCBhbHNvIHZlcmlmeQorICAgICMgdGhhdCBjbGFzc2Vz
IGRvIGltcGxlbWVudCBldmVyeSBhYnN0cmFjdCBtZXRob2QgaW4gYW4gaW50ZXJmYWNlLgorICAg
IGRlZiB0ZXN0X21hbmFnZXJjb25uZWN0aW9uX2lzX2Fic3RyYWN0KHNlbGYpOgorICAgICAgICAj
IFRlc3QgdGhhdCBhbGwgdGhlIGJhc2UgY2xhc3MgbWV0aG9kcyBhcmUgYWJzdHJhY3QgYW5kIGhh
dmUgdGhlCisgICAgICAgICMgc2lnbmF0dXJlIHdlIGV4cGVjdC4KKyAgICAgICAgYnJva2VyID0g
bWFrZV9icm9rZXIoc2VsZiwgJ2lubGluZScpCisgICAgICAgIG9iaiA9IG1hbmFnZXJfd29ya2Vy
X2Jyb2tlci5fTWFuYWdlckNvbm5lY3Rpb24oYnJva2VyLl9icm9rZXIsIE5vbmUsIHNlbGYsIE5v
bmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIG9iai5f
bWFrZV93b3JrZXJfY29ubmVjdGlvbikKKworICAgIGRlZiB0ZXN0X3dvcmtlcmNvbm5lY3Rpb25f
aXNfYWJzdHJhY3Qoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGFsbCB0aGUgYmFzZSBjbGFz
cyBtZXRob2RzIGFyZSBhYnN0cmFjdCBhbmQgaGF2ZSB0aGUKKyAgICAgICAgIyBzaWduYXR1cmUg
d2UgZXhwZWN0LgorICAgICAgICBicm9rZXIgPSBtYWtlX2Jyb2tlcihzZWxmLCAnaW5saW5lJykK
KyAgICAgICAgb2JqID0gbWFuYWdlcl93b3JrZXJfYnJva2VyLl9Xb3JrZXJDb25uZWN0aW9uKGJy
b2tlci5fYnJva2VyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVy
cm9yLCBvYmouc3RhcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVk
RXJyb3IsIG9iai5ydW4pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVk
RXJyb3IsIG9iai5jYW5jZWwpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVu
dGVkRXJyb3IsIG9iai5pc19hbGl2ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1w
bGVtZW50ZWRFcnJvciwgb2JqLmpvaW4sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2Vz
KE5vdEltcGxlbWVudGVkRXJyb3IsIG9iai5sb2dfd2VkZ2VkX3dvcmtlciwgTm9uZSkKKworCitp
ZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWVz
c2FnZV9icm9rZXIyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5
b3V0X3BhY2thZ2UvbWVzc2FnZV9icm9rZXIyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZkZjhlODllOTQwMDU0
MTgyN2Q0YjMxZTg1NmNkNDFhODUxOGQ4YzkKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tlcjIu
cHkKQEAgLTAsMCArMSwyMDQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1l
dDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMg
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJNb2R1bGUgZm9yIGhh
bmRsaW5nIG1lc3NhZ2VzIGFuZCBjb25jdXJyZW5jeSBmb3IgcnVuLXdlYmtpdC10ZXN0cy4KKwor
VGVzdGluZyBpcyBhY2NvbXBsaXNoZWQgYnkgaGF2aW5nIGEgbWFuYWdlciAoVGVzdFJ1bm5lcikg
Z2F0aGVyIGFsbCBvZiB0aGUKK3Rlc3RzIHRvIGJlIHJ1biwgYW5kIHNlbmRpbmcgbWVzc2FnZXMg
dG8gYSBwb29sIG9mIHdvcmtlcnMgKFRlc3RTaGVsbFRocmVhZHMpCit0byBydW4gZWFjaCB0ZXN0
LiBFYWNoIHdvcmtlciBjb21tdW5pY2F0ZXMgd2l0aCBvbmUgZHJpdmVyICh1c3VhbGx5CitEdW1w
UmVuZGVyVHJlZSkgdG8gcnVuIG9uZSB0ZXN0IGF0IGEgdGltZSBhbmQgdGhlbiBjb21wYXJlIHRo
ZSBvdXRwdXQgYWdhaW5zdAord2hhdCB3ZSBleHBlY3RlZCB0byBnZXQuCisKK1RoaXMgbW9kdWxl
cyBpbXBsZW1lbnRzIGEgbWVzc2FnZSBicm9rZXIgdGhhdCBjb25uZWN0cyB0aGUgbWFuYWdlciB0
byB0aGUKK3dvcmtlcnM6IGl0IHByb3ZpZGVzIGEgbWVzc2FnaW5nIGFic3RyYWN0aW9uIGFuZCBt
ZXNzYWdlIGxvb3BzLCBhbmQKK2hhbmRsZXMgbGF1bmNoaW5nIHRocmVhZHMgYW5kL29yIHByb2Nl
c3NlcyBkZXBlbmRpbmcgb24gdGhlIHJlcXVlc3RlZAorY29uZmlndXJhdGlvbi4KKworQm90aCBN
YW5hZ2VycyBhbmQgV29ya2VycyBhcmUgcmVxdWlyZWQgdG8gaW1wbGVtZW50IHRoZSBtZXRob2Rz
IGluIHRoZQorQnJva2VyQ2xpZW50IGludGVyZmFjZSAvIGFic3RyYWN0IGJhc2UgY2xhc3MgaW4g
b3JkZXIgdG8gdGhlIG1lc3NhZ2UKK2Jyb2tlciB0byBwcm9wZXJseSBjb21tdW5pY2F0ZSB3aXRo
IHRoZW0uCisKK0V2ZXJ5dGhpbmcgc3RhcnRzIGJ5IGNhbGxpbmcgZ2V0KCkgdG8gb2J0YWluIGFu
IGluaXRpYWwgcmVmZXJlbmNlIHRvIGEgYnJva2VyLgorVGhlIGJyb2tlciBpcyBtZWRpYXRlZCBi
eSBhIENvbm5lY3Rpb24gb2JqZWN0IHRoYXQgcHJvdmlkZXMgc29tZSBzeW50YWN0aWMKK3N1Z2Fy
IHRvIHJlcHJlc2VudCB0aGUgTWFuYWdlciBhbmQgV29ya2VyIGVuZHBvaW50cy4gVHlwaWNhbGx5
IHRoZQorbWFuYWdlciB0aGVuIGNhbGxzIHN0YXJ0X3dvcmtlcigpIHJlcGVhdGVkbHkgdG8gbGF1
bmNoIHdvcmtlcnMgKHdoaWNoIGFyZQordXN1YWxseSBydW4gaW4gc2VwYXJhdGUgdGhyZWFkcyBv
ciBwcm9jZXNzZXMgYXMgY29udHJvbGxlZCBieSB0aGUKKy0td29ya2VyLW1vZGVsIHJ1bnRpbWUg
ZmxhZyksIG9wdGlvbmFsbHkgc2V0cyB1cCBzb21lIHRpbWVycywgYW5kIHRoZW4KK2ludm9rZXMg
cnVuX21lc3NhZ2VfbG9vcCgpLgorIiIiCisKK2ltcG9ydCBjUGlja2xlCitpbXBvcnQgbG9nZ2lu
ZworaW1wb3J0IG9wdHBhcnNlCitpbXBvcnQgUXVldWUKK2ltcG9ydCB0aW1lCisKKworX2xvZyA9
IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCisKK2NsYXNzIENsaWVudEludGVyZmFjZShv
YmplY3QpOgorICAgICIiIkFic3RyYWN0IGJhc2UgY2xhc3MgLyBpbnRlcmZhY2UgdGhhdCBhbGwg
bWVzc2FnZSBicm9rZXIgY2xpZW50cyBtdXN0CisgICAgaW1wbGVtZW50LiBJbiBhZGRpdGlvbiB0
byB0aGUgbWV0aG9kcyBiZWxvdywgYnkgY29udmVudGlvbiBjbGllbnRzCisgICAgaW1wbGVtZW50
IHJvdXRpbmVzIG9mIHRoZSBzaWduYXR1cmUgdHlwZQorCisgICAgICAgIGhhbmRsZV9NRVNTQUdF
X05BTUUoc2VsZiwgc3JjLCAuLi4pOgorCisgICAgd2hlcmUgTUVTU0FHRV9OQU1FIG1hdGNoZXMg
dGhlIHN0cmluZyBwYXNzZWQgdG8gcG9zdF9tZXNzYWdlKCksIGFuZAorICAgIHNyYyBpbmRpY2F0
ZXMgdGhlIG5hbWUgb2YgdGhlIHNlbmRlci4gSWYgdGhlIG1lc3NhZ2UgY29udGFpbnMgdmFsdWVz
IGluCisgICAgdGhlIG1lc3NhZ2UgYm9keSwgdGhvc2Ugd2lsbCBiZSBwcm92aWRlZCBhcyBvcHRw
YXJhbXMuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyX2Nvbm5lY3Rpb24sIHdv
cmtlcl9udW1iZXIsIG9wdGlvbnMsICoqa3dhcmdzKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVt
ZW50ZWRFcnJvcgorCisgICAgZGVmIGNhbmNlbChzZWxmKToKKyAgICAgICAgIiIiQ2FsbGVkIChp
ZiBwb3NzaWJsZSkgdG8gbm90aWZ5IHRoZSB3b3JrZXIgdGhhdCBpdCBoYXMgYmVlbiBhYm9ydGVk
LgorCisgICAgICAgIE9ubHkgd29ya2VycyBuZWVkIGltcGxlbWVudCB0aGlzIG1ldGhvZC4gV29y
a2VycyBjYW5ub3QgcmVseSBvbiB0aGlzCisgICAgICAgIG1ldGhvZCBhbHdheXMgYmVpbmcgY2Fs
bGVkLiBGb3IgZXhhbXBsZSwgd29ya2VycyBydW5uaW5nIGluIHRoZWlyCisgICAgICAgIG93biBw
cm9jZXNzZXMgbWF5IGJlIGtpbGxlZCBkaXJlY3RseSBpbnN0ZWFkIG9mIGludm9raW5nIHRoaXMg
bWV0aG9kCisgICAgICAgIGFuZCB3YWl0aW5nIGZvciB0aGUgdGhlIHdvcmtlciB0byBleGl0LiIi
IgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgaXNfZG9uZShz
ZWxmKToKKyAgICAgICAgIiIiQ2FsbGVkIGZyb20gaW5zaWRlIHJ1bl9tZXNzYWdlX2xvb3AoKSB0
byBpbmRpY2F0ZSB3aGV0aGVyIHRvIGV4aXQuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVu
dGVkRXJyb3IKKworICAgIGRlZiBuYW1lKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gYSBuYW1l
IHRoYXQgaWRlbnRpZmllcyB0aGUgd29ya2VyIG9yIG1hbmFnZXIuIiIiCisgICAgICAgIHJhaXNl
IE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBydW4oc2VsZiwgcG9ydCk6CisgICAgICAg
ICIiIk9ubHkgd29ya2VycyBuZWVkIGltcGxlbWVudCB0aGlzIG1ldGhvZC4iIiIKKyAgICAgICAg
cmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisKK2RlZiBydW50aW1lX29wdGlvbnMoKToKKyAg
ICAiIiJSZXR1cm4gYSBsaXN0IG9mIG9wdHBhcnNlLk9wdGlvbiBvYmplY3RzIGZvciBhbnkgcnVu
dGltZSB2YWx1ZXMgdXNlZAorICAgIGJ5IHRoaXMgbWV0aG9kLiIiIgorICAgIG9wdGlvbnMgPSBb
CisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXdvcmtlci1tb2RlbCIsIGFjdGlvbj0i
c3RvcmUiLAorICAgICAgICAgICAgaGVscD0oImNvbnRyb2xzIHdvcmtlciBtb2RlbC4gVmFsaWQg
dmFsdWVzIGFyZSAiCisgICAgICAgICAgICAiJ2lubGluZScsICd0aHJlYWRzJywgYW5kICdwcm9j
ZXNzZXMnLiIpKSwKKyAgICBdCisgICAgcmV0dXJuIG9wdGlvbnMKKworCitjbGFzcyBCcm9rZXIo
b2JqZWN0KToKKyAgICAiIiJUaGlzIGNsYXNzIGltcGxlbWVudHMgYSBnZW5lcmljIG1lc3NhZ2Ug
YnJva2VyLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9wdGlvbnMsIHF1ZXVlX21ha2Vy
KToKKyAgICAgICAgIiIiUmV0dXJuIGEgbWVzc2FnZSBicm9rZXIgZm9yIG1hbmFnZXIvd29ya2Vy
IGNvbW11bmljYXRpb24uCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIG9wdGlvbnM6IGEg
cnVudGltZSBvcHRpb24gY2xhc3MgZnJvbSBvcHRwYXJzZQorICAgICAgICAiIiIKKyAgICAgICAg
c2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKKyAgICAgICAgc2VsZi5fcXVldWVfbWFrZXIgPSBxdWV1
ZV9tYWtlcgorICAgICAgICBzZWxmLl90b3BpY3MgPSB7fQorCisgICAgZGVmIGFkZF90b3BpYyhz
ZWxmLCB0b3BpY19uYW1lKToKKyAgICAgICAgaWYgdG9waWNfbmFtZSBub3QgaW4gc2VsZi5fdG9w
aWNzOgorICAgICAgICAgICAgc2VsZi5fdG9waWNzW3RvcGljX25hbWVdID0gc2VsZi5fcXVldWVf
bWFrZXIoKQorCisgICAgZGVmIF9maW5kX3RvcGljKHNlbGYsIHRvcGljX25hbWUpOgorICAgICAg
ICByZXR1cm4gc2VsZi5fdG9waWNzW3RvcGljX25hbWVdCisKKyAgICBkZWYgcG9zdF9tZXNzYWdl
KHNlbGYsIGNsaWVudCwgdG9waWNfbmFtZSwgbWVzc2FnZV9uYW1lLCAqb3B0YXJncyk6CisgICAg
ICAgICIiIlBvc3QgYSBtZXNzYWdlIHRvIHRoZSBhcHByb3ByaWF0ZSB0b3BpYyBxdWV1ZS4iIiIK
KyAgICAgICAgbWVzc2FnZSA9IF9NZXNzYWdlKGNsaWVudC5uYW1lKCksIHRvcGljX25hbWUsIG1l
c3NhZ2VfbmFtZSwgb3B0YXJncykKKyAgICAgICAgdG9waWMgPSBzZWxmLl9maW5kX3RvcGljKHRv
cGljX25hbWUpCisgICAgICAgIHRvcGljLnB1dChfTWVzc2FnZS5kdW1wcyhtZXNzYWdlKSkKKwor
ICAgIGRlZiBydW5fbWVzc2FnZV9sb29wKHNlbGYsIHRvcGljX25hbWUsIGNsaWVudCwgZGVsYXlf
c2Vjcz1Ob25lKToKKyAgICAgICAgIiIiTG9vcCBwcm9jZXNzaW5nIG1lc3NhZ2VzIHVudGlsIGNs
aWVudC5pc19kb25lKCkgb3IgZGVsYXkgcGFzc2VzLiIiIgorICAgICAgICBhc3NlcnQgZGVsYXlf
c2VjcyBpcyBOb25lIG9yIGRlbGF5X3NlY3MgPiAwLCAicnVuX21lc3NhZ2VfbG9vcCgpOiBkZWxh
eSBtdXN0IGJlIE5vbmUgb3IgYSBwb3NpdGl2ZSBudW1iZXIiCisgICAgICAgIHNlbGYuX3J1bl9s
b29wKHRvcGljX25hbWUsIGNsaWVudCwgVHJ1ZSwgZGVsYXlfc2VjcykKKworICAgIGRlZiBydW5f
YWxsX3BlbmRpbmcoc2VsZiwgdG9waWNfbmFtZSwgY2xpZW50KToKKyAgICAgICAgIiIiUHJvY2Vz
cyBtZXNzYWdlcyB1bnRpbCBjbGllbnQuaXNfZG9uZSgpIG9yIGNhbGxlciB3b3VsZCBibG9jay4i
IiIKKyAgICAgICAgc2VsZi5fcnVuX2xvb3AodG9waWNfbmFtZSwgY2xpZW50LCBibG9jaz1GYWxz
ZSwgZGVsYXlfc2Vjcz1Ob25lKQorCisgICAgZGVmIF9ydW5fbG9vcChzZWxmLCB0b3BpY19uYW1l
LCBjbGllbnQsIGJsb2NrLCBkZWxheV9zZWNzKToKKyAgICAgICAgdG9waWMgPSBzZWxmLl9maW5k
X3RvcGljKHRvcGljX25hbWUpCisgICAgICAgIHdoaWxlIG5vdCBjbGllbnQuaXNfZG9uZSgpOgor
ICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHMgPSB0b3BpYy5nZXQoYmxvY2ssIGRl
bGF5X3NlY3MpCisgICAgICAgICAgICBleGNlcHQgUXVldWUuRW1wdHk6CisgICAgICAgICAgICAg
ICAgcmV0dXJuCisgICAgICAgICAgICBtc2cgPSBfTWVzc2FnZS5sb2FkcyhzKQorICAgICAgICAg
ICAgc2VsZi5fZGlzcGF0Y2hfbWVzc2FnZShtc2csIGNsaWVudCkKKyAKKyAgICBkZWYgX2Rpc3Bh
dGNoX21lc3NhZ2Uoc2VsZiwgbWVzc2FnZSwgY2xpZW50KToKKyAgICAgICAgaWYgbm90IGhhc2F0
dHIoY2xpZW50LCAnaGFuZGxlXycgKyBtZXNzYWdlLm5hbWUpOgorICAgICAgICAgICAgcmFpc2Ug
VmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICIlczogcmVjZWl2ZWQgbWVzc2FnZSAnJXMnIGl0
IGNvdWxkbid0IGhhbmRsZSIgJQorICAgICAgICAgICAgICAgKGNsaWVudC5uYW1lKCksIG1lc3Nh
Z2UubmFtZSkpCisgICAgICAgIG9wdGFyZ3MgPSBtZXNzYWdlLmJvZHkKKyAgICAgICAgbWVzc2Fn
ZV9oYW5kbGVyID0gZ2V0YXR0cihjbGllbnQsICdoYW5kbGVfJyArIG1lc3NhZ2UubmFtZSkKKyAg
ICAgICAgbWVzc2FnZV9oYW5kbGVyKG1lc3NhZ2Uuc3JjLCAqb3B0YXJncykKKworCitjbGFzcyBf
TWVzc2FnZShvYmplY3QpOgorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgbG9hZHMoc3RyKToK
KyAgICAgICAgb2JqID0gY1BpY2tsZS5sb2FkcyhzdHIpCisgICAgICAgIGFzc2VydChpc2luc3Rh
bmNlKG9iaiwgX01lc3NhZ2UpKQorICAgICAgICByZXR1cm4gb2JqCisKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgc3JjLCB0b3BpY19uYW1lLCBtZXNzYWdlX25hbWUsIG1lc3NhZ2VfYm9keSk6Cisg
ICAgICAgIHNlbGYuc3JjID0gc3JjCisgICAgICAgIHNlbGYudG9waWNfbmFtZSA9IHRvcGljX25h
bWUKKyAgICAgICAgc2VsZi5uYW1lID0gbWVzc2FnZV9uYW1lCisgICAgICAgIHNlbGYuYm9keSA9
IG1lc3NhZ2VfYm9keQorCisgICAgZGVmIGR1bXBzKHNlbGYpOgorICAgICAgICByZXR1cm4gY1Bp
Y2tsZS5kdW1wcyhzZWxmKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1
cm4gKCJfTWVzc2FnZShmcm9tPSclcycsIHRvcGljX25hbWU9JyVzJywgbWVzc2FnZV9uYW1lPScl
cycpIiAlCisgICAgICAgICAgICAgICAgKHNlbGYuc3JjLCBzZWxmLnRvcGljX25hbWUsIHNlbGYu
bmFtZSkpCisKKworY2xhc3MgQnJva2VyQ29ubmVjdGlvbihvYmplY3QpOgorICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBicm9rZXIsIHJ1bl90b3BpYywgcG9zdF90b3BpYyk6CisgICAgICAgIHNlbGYu
X2Jyb2tlciA9IGJyb2tlcgorICAgICAgICBzZWxmLl9wb3N0X3RvcGljID0gcG9zdF90b3BpYwor
ICAgICAgICBzZWxmLl9ydW5fdG9waWMgPSBydW5fdG9waWMKKyAgICAgICAgYnJva2VyLmFkZF90
b3BpYyhydW5fdG9waWMpCisgICAgICAgIGJyb2tlci5hZGRfdG9waWMocG9zdF90b3BpYykKKwor
ICAgIGRlZiBjbGllbnQoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IK
KworICAgIGRlZiBydW5fbWVzc2FnZV9sb29wKHNlbGYsIGRlbGF5X3NlY3M9Tm9uZSk6CisgICAg
ICAgIHNlbGYuX2Jyb2tlci5ydW5fbWVzc2FnZV9sb29wKHNlbGYuX3J1bl90b3BpYywgc2VsZi5j
bGllbnQoKSwgZGVsYXlfc2VjcykKKworICAgIGRlZiBwb3N0X21lc3NhZ2Uoc2VsZiwgbWVzc2Fn
ZV9uYW1lLCAqbWVzc2FnZV9hcmdzKToKKyAgICAgICAgc2VsZi5fYnJva2VyLnBvc3RfbWVzc2Fn
ZShzZWxmLmNsaWVudCgpLCBzZWxmLl9wb3N0X3RvcGljLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1lc3NhZ2VfbmFtZSwgKm1lc3NhZ2VfYXJncykKZGlmZiAtLWdpdCBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2Vf
YnJva2VyMl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L2xheW91dF9wYWNrYWdlL21lc3NhZ2VfYnJva2VyMl91bml0dGVzdC5weQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5i
YWYzOTk3MGYzZGE4NTFhMzE3M2E4MmQ1NWRjYjExYmZlODNjNDJjCi0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWVz
c2FnZV9icm9rZXIyX3VuaXR0ZXN0LnB5CkBAIC0wLDAgKzEsMTAyIEBACisjIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1
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
RS4KKworaW1wb3J0IG9wdHBhcnNlCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IG1lc3NhZ2Vf
YnJva2VyMgorCisKK2NsYXNzIEZ1bmN0aW9uc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAg
IGRlZiB0ZXN0X3J1bnRpbWVfb3B0aW9ucyhzZWxmKToKKyAgICAgICAgb3B0aW9uX2xpc3QgPSBt
ZXNzYWdlX2Jyb2tlcjIucnVudGltZV9vcHRpb25zKCkKKyAgICAgICAgcGFyc2VyID0gb3B0cGFy
c2UuT3B0aW9uUGFyc2VyKG9wdGlvbl9saXN0PW9wdGlvbl9saXN0KQorICAgICAgICBvcHRpb25z
LCBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoW10pIAorICAgICAgICBzZWxmLmFzc2VydFRydWUo
b3B0aW9ucykKKyAgICAgICAgCisKK2NsYXNzIE1lc3NhZ2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNl
KToKKyAgICBkZWYgdGVzdF9fbm9fYm9keShzZWxmKToKKyAgICAgICAgbXNnID0gbWVzc2FnZV9i
cm9rZXIyLl9NZXNzYWdlKCdzcmMnLCAndG9waWNfbmFtZScsICdtZXNzYWdlX25hbWUnLCBOb25l
KQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcihtc2cpKQorICAgICAgICBzID0gbXNnLmR1
bXBzKCkKKyAgICAgICAgbmV3X21zZyA9IG1lc3NhZ2VfYnJva2VyMi5fTWVzc2FnZS5sb2Fkcyhz
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld19tc2cubmFtZSwgJ21lc3NhZ2VfbmFtZScp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3X21zZy5ib2R5LCBOb25lKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKG5ld19tc2cudG9waWNfbmFtZSwgJ3RvcGljX25hbWUnKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKG5ld19tc2cuc3JjLCAnc3JjJykKKworICAgIGRlZiB0ZXN0X19i
b2R5KHNlbGYpOgorICAgICAgICBtc2cgPSBtZXNzYWdlX2Jyb2tlcjIuX01lc3NhZ2UoJ3NyYycs
ICd0b3BpY19uYW1lJywgJ21lc3NhZ2VfbmFtZScsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICgnYm9keScsIDApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwciht
c2cpKQorICAgICAgICBzID0gbXNnLmR1bXBzKCkKKyAgICAgICAgbmV3X21zZyA9IG1lc3NhZ2Vf
YnJva2VyMi5fTWVzc2FnZS5sb2FkcyhzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld19t
c2cubmFtZSwgJ21lc3NhZ2VfbmFtZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3X21z
Zy5ib2R5LCAoJ2JvZHknLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdfbXNnLnRv
cGljX25hbWUsICd0b3BpY19uYW1lJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdfbXNn
LnNyYywgJ3NyYycpCisKKworY2xhc3MgSW50ZXJmYWNlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6
CisgICAgIyBUaGVzZSB0ZXN0cyBtb3N0bHkgZXhpc3QgdG8gcGFjaWZ5IGNvdmVyYWdlLgorCisg
ICAgIyBGSVhNRTogVGhlcmUgbXVzdCBiZSBhIGJldHRlciB3YXkgdG8gZG8gdGhpcyBhbmQgYWxz
byB2ZXJpZnkKKyAgICAjIHRoYXQgY2xhc3NlcyBkbyBpbXBsZW1lbnQgZXZlcnkgYWJzdHJhY3Qg
bWV0aG9kIGluIGFuIGludGVyZmFjZS4KKworICAgIGRlZiB0ZXN0X2NsaWVudGludGVyZmFjZV9p
c19hYnN0cmFjdChzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgd2UgY2FuJ3QgY3JlYXRlIGFu
IGluc3RhbmNlIGRpcmVjdGx5LgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1l
bnRlZEVycm9yLCBtZXNzYWdlX2Jyb2tlcjIuQ2xpZW50SW50ZXJmYWNlLAorICAgICAgICAgICAg
Tm9uZSwgTm9uZSwgTm9uZSkKKworICAgICAgICBjbGFzcyBUZXN0Q2xpZW50KG1lc3NhZ2VfYnJv
a2VyMi5DbGllbnRJbnRlcmZhY2UpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsICpv
cHRhcmdzKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgIyBUZXN0IHRoYXQgYWxs
IHRoZSBiYXNlIGNsYXNzIG1ldGhvZHMgYXJlIGFic3RyYWN0IGFuZCBoYXZlIHRoZQorICAgICAg
ICAjIHNpZ25hdHVyZSB3ZSBleHBlY3QuCisgICAgICAgIG9iaiA9IFRlc3RDbGllbnQoKQorICAg
ICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBvYmouY2FuY2VsKQor
ICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBvYmouaXNfZG9u
ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgb2JqLm5h
bWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIG9iai5y
dW4sIE5vbmUpCisKKyAgICBkZWYgdGVzdF9icm9rZXJjb25uZWN0aW9uX2lzX2Fic3RyYWN0KHNl
bGYpOgorICAgICAgICBjbGFzcyBUZXN0QnJva2VyQ29ubmVjdGlvbihtZXNzYWdlX2Jyb2tlcjIu
QnJva2VyQ29ubmVjdGlvbik6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgKm9wdGFy
Z3MpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAjIFRlc3QgdGhhdCBhbGwgdGhl
IGJhc2UgY2xhc3MgbWV0aG9kcyBhcmUgYWJzdHJhY3QgYW5kIGhhdmUgdGhlCisgICAgICAgICMg
c2lnbmF0dXJlIHdlIGV4cGVjdC4KKyAgICAgICAgYnJva2VyID0gbWVzc2FnZV9icm9rZXIyLkJy
b2tlcihOb25lLCBOb25lKQorICAgICAgICBvYmogPSBUZXN0QnJva2VyQ29ubmVjdGlvbihicm9r
ZXIsICJmb28iLCAiYmFyIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50
ZWRFcnJvciwgb2JqLmNsaWVudCkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAg
IHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9ydW5uZXIyLnB5IGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9ydW5uZXIyLnB5Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmE4MTczYzU5YmVhZThhZDQ2ZjZhNDU3YjYyMDZhZWY1ZTc2MjY0NjkKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFj
a2FnZS90ZXN0X3J1bm5lcjIucHkKQEAgLTAsMCArMSwyMTcgQEAKKyMhL3Vzci9iaW4vZW52IHB5
dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1
dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIgorVGhlIFRlc3RSdW5uZXIgY2xhc3MgcnVucyBh
IHNlcmllcyBvZiB0ZXN0cyAoVGVzdFR5cGUgaW50ZXJmYWNlKSBhZ2FpbnN0IGEgc2V0CitvZiB0
ZXN0IGZpbGVzLiAgSWYgYSB0ZXN0IGZpbGUgZmFpbHMgYSBUZXN0VHlwZSwgaXQgcmV0dXJucyBh
IGxpc3QgVGVzdEZhaWx1cmUKK29iamVjdHMgdG8gdGhlIFRlc3RSdW5uZXIuICBUaGUgVGVzdFJ1
bm5lciB0aGVuIGFnZ3JlZ2F0ZXMgdGhlIFRlc3RGYWlsdXJlcyB0bworY3JlYXRlIGEgZmluYWwg
cmVwb3J0LgorIiIiCisKK2ltcG9ydCB0aW1lCisKK2Zyb20gd2Via2l0cHkudG9vbCBpbXBvcnQg
Z3JhbW1hcgorCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG1hbmFnZXJfd29ya2VyX2Jyb2tlcgor
aW1wb3J0IHRlc3RfcnVubmVyCitpbXBvcnQgd29ya2VyCisKK19sb2cgPSBsb2dnaW5nLmdldExv
Z2dlcihfX25hbWVfXykKKworY2xhc3MgX1dvcmtlclN0YXRlKG9iamVjdCk6CisgICAgIiIiQSBj
bGFzcyBmb3IgdGhlIFRlc3RSdW5uZXIvbWFuYWdlciB0byB1c2UgdG8gdHJhY2sgdGhlIGN1cnJl
bnQgc3RhdGUKKyAgICBvZiB0aGUgd29ya2Vycy4iIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
bnVtYmVyLCB3b3JrZXIpOgorICAgICAgICBzZWxmLndvcmtlciA9IHdvcmtlcgorICAgICAgICBz
ZWxmLm51bWJlciA9IG51bWJlcgorICAgICAgICBzZWxmLmRvbmUgPSBGYWxzZQorICAgICAgICBz
ZWxmLm5leHRfdGltZW91dCA9IE5vbmUKKyAgICAgICAgc2VsZi53ZWRnZWQgPSBGYWxzZQorICAg
ICAgICBzZWxmLnN0YXRzID0ge30KKyAgICAgICAgc2VsZi5zdGF0c1snbmFtZSddID0gd29ya2Vy
Lm5hbWUKKyAgICAgICAgc2VsZi5zdGF0c1snbnVtX3Rlc3RzJ10gPSAwCisgICAgICAgIHNlbGYu
c3RhdHNbJ3RvdGFsX3RpbWUnXSA9IDAKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAg
ICAgcmV0dXJuICJfV29ya2VyU3RhdGUoIiArIHN0cihzZWxmLl9fZGljdF9fKSArICIpIgorCisK
K2NsYXNzIFRlc3RSdW5uZXIyKHRlc3RfcnVubmVyLlRlc3RSdW5uZXIpOgorICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zLCBwcmludGVyKToKKyAgICAgICAgdGVzdF9ydW5uZXIu
VGVzdFJ1bm5lci5fX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zLCBwcmludGVyKQorICAgICAg
ICBzZWxmLl9tZXNzYWdlX2Jyb2tlciA9IE5vbmUKKworICAgICAgICAjIFRoaXMgbWFwcyB3b3Jr
ZXIgbmFtZXMgdG8gdGhlIHN0YXRlIHdlIGFyZSB0cmFja2luZyBmb3IgZWFjaCBvZiB0aGVtLgor
ICAgICAgICBzZWxmLl93b3JrZXJzID0ge30KKworICAgIGRlZiBpc19kb25lKHNlbGYpOgorICAg
ICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4g
J1Rlc3RSdW5uZXIyJworCisgICAgZGVmIF9ydW5fdGVzdHMoc2VsZiwgZmlsZV9saXN0LCByZXN1
bHRfc3VtbWFyeSk6CisgICAgICAgICIiIlJ1bnMgdGhlIHRlc3RzIGluIHRoZSBmaWxlX2xpc3Qu
CisKKyAgICAgICAgUmV0dXJuOiBBIHR1cGxlIChrZXlib2FyZF9pbnRlcnJ1cHRlZCwgdGhyZWFk
X3RpbWluZ3MsIHRlc3RfdGltaW5ncywKKyAgICAgICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1p
bmdzKQorICAgICAgICAgICAga2V5Ym9hcmRfaW50ZXJydXB0ZWQgaXMgd2hldGhlciBzb21lb25l
IHR5cGVkIEN0cmxeQworICAgICAgICAgICAgdGhyZWFkX3RpbWluZ3MgaXMgYSBsaXN0IG9mIGRp
Y3RzIHdpdGggdGhlIHRvdGFsIHJ1bnRpbWUKKyAgICAgICAgICAgICAgb2YgZWFjaCB0aHJlYWQg
d2l0aCAnbmFtZScsICdudW1fdGVzdHMnLCAndG90YWxfdGltZScgcHJvcGVydGllcworICAgICAg
ICAgICAgdGVzdF90aW1pbmdzIGlzIGEgbGlzdCBvZiB0aW1pbmdzIGZvciBlYWNoIHNoYXJkZWQg
c3ViZGlyZWN0b3J5CisgICAgICAgICAgICAgIG9mIHRoZSBmb3JtIFt0aW1lLCBkaXJlY3Rvcnlf
bmFtZSwgbnVtX3Rlc3RzXQorICAgICAgICAgICAgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MgaXMg
YSBsaXN0IG9mIHJ1biB0aW1lcyBmb3IgZWFjaCB0ZXN0CisgICAgICAgICAgICAgIGluIHRoZSBm
b3JtIHtmaWxlbmFtZTpmaWxlbmFtZSwgdGVzdF9ydW5fdGltZTp0ZXN0X3J1bl90aW1lfQorICAg
ICAgICAgICAgcmVzdWx0X3N1bW1hcnk6IHN1bW1hcnkgb2JqZWN0IHRvIHBvcHVsYXRlIHdpdGgg
dGhlIHJlc3VsdHMKKyAgICAgICAgIiIiCisgICAgICAgIG51bV93b3JrZXJzID0gc2VsZi5fbnVt
X3dvcmtlcnMoKQorCisgICAgICAgIHNlbGYuX2N1cnJlbnRfZmlsZV9saXN0ID0gZmlsZV9saXN0
CisgICAgICAgIHNlbGYuX2N1cnJlbnRfcmVzdWx0X3N1bW1hcnkgPSByZXN1bHRfc3VtbWFyeQor
CisgICAgICAgIHNlbGYuX2FsbF9yZXN1bHRzID0gW10KKyAgICAgICAgc2VsZi5fZ3JvdXBfc3Rh
dHMgPSB7fQorICAgICAgICBzZWxmLl93b3JrZXJzID0ge30KKworICAgICAgICBzZWxmLl9wcmlu
dGVyLnByaW50X3VwZGF0ZSgnU2hhcmRpbmcgdGVzdHMgLi4uJykKKyAgICAgICAgdGVzdF9saXN0
cyA9IHNlbGYuX3NoYXJkX3Rlc3RzKGZpbGVfbGlzdCwKKyAgICAgICAgICAgIHNlbGYuX29wdGlv
bnMuZXhwZXJpbWVudGFsX2Z1bGx5X3BhcmFsbGVsKQorICAgICAgICBfbG9nLmRlYnVnKCJVc2lu
ZyAlZCBzaGFyZHMiICUgbGVuKHRlc3RfbGlzdHMpKQorCisgICAgICAgIGJyb2tlciA9IG1hbmFn
ZXJfd29ya2VyX2Jyb2tlci5nZXQoc2VsZi5fcG9ydCwgc2VsZi5fb3B0aW9ucywgc2VsZiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXIuV29ya2VyKQor
CisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCdTdGFydGluZyAlcyAuLi4nICUK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhbW1hci5wbHVyYWxpemUoJ3dv
cmtlcicsIG51bV93b3JrZXJzKSkKKyAgICAgICAgZm9yIHdvcmtlcl9udW1iZXIgaW4geHJhbmdl
KG51bV93b3JrZXJzKToKKyAgICAgICAgICAgIHcgPSBicm9rZXIuc3RhcnRfd29ya2VyKHdvcmtl
cl9udW1iZXIpCisgICAgICAgICAgICB3cyA9IF9Xb3JrZXJTdGF0ZSh3b3JrZXJfbnVtYmVyLCB3
KQorICAgICAgICAgICAgc2VsZi5fd29ya2Vyc1t3Lm5hbWVdID0gd3MKKworICAgICAgICBzZWxm
Ll9wcmludGVyLnByaW50X3VwZGF0ZSgiU3RhcnRpbmcgdGVzdGluZyAuLi4iKQorICAgICAgICBm
b3IgdGVzdF9saXN0IGluIHRlc3RfbGlzdHM6CisgICAgICAgICAgICBicm9rZXIucG9zdF9tZXNz
YWdlKCd0ZXN0X2xpc3QnLCB0ZXN0X2xpc3RbMF0sIHRlc3RfbGlzdFsxXSkKKworICAgICAgICAj
IFRlbGwgdGhlIHdvcmtlcnMgdG8gc2h1dCBkb3duIGFmdGVyIHRoZXkncmUgZG9uZSBydW5uaW5n
IGFsbCB0aGUKKyAgICAgICAgIyB0ZXN0cy4KKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKG51bV93
b3JrZXJzKToKKyAgICAgICAgICAgIGJyb2tlci5wb3N0X21lc3NhZ2UoJ3N0b3AnKQorCisgICAg
ICAgIGtleWJvYXJkX2ludGVycnVwdGVkID0gRmFsc2UKKyAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgaWYgbm90IHNlbGYuX29wdGlvbnMuZHJ5X3J1bjoKKyAgICAgICAgICAgICAgICB3aGlsZSBu
b3Qgc2VsZi5fY2hlY2tfaWZfZG9uZSgpOgorICAgICAgICAgICAgICAgICAgICBicm9rZXIucnVu
X21lc3NhZ2VfbG9vcChkZWxheV9zZWNzPTEuMCkKKworICAgICAgICAgICAgICAgIGZvciB3IGlu
IHNlbGYuX3dvcmtlcnMudmFsdWVzKCk6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCB3Lndl
ZGdlZCBhbmQgdy53b3JrZXIuaXNfYWxpdmUoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHcu
d29ya2VyLmpvaW4oMC41KQorICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IG5vdCB3Lndv
cmtlci5pc19hbGl2ZSgpCisKKyAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAg
ICAgICAgICAgX2xvZy5pbmZvKCJJbnRlcnJ1cHRlZCwgZXhpdGluZyIpCisgICAgICAgICAgICBm
b3IgdyBpbiBzZWxmLl93b3JrZXJzLnZhbHVlcygpOgorICAgICAgICAgICAgICAgIHcud29ya2Vy
LmNhbmNlbCgpCisgICAgICAgICAgICBrZXlib2FyZF9pbnRlcnJ1cHRlZCA9IFRydWUKKyAgICAg
ICAgZXhjZXB0OgorICAgICAgICAgICAgIyBVbmV4cGVjdGVkIGV4Y2VwdGlvbjsgZG9uJ3QgdHJ5
IHRvIGNsZWFuIHVwIHdvcmtlcnMuCisgICAgICAgICAgICBfbG9nLmluZm8oIkV4Y2VwdGlvbiBy
YWlzZWQsIGV4aXRpbmciKQorICAgICAgICAgICAgcmFpc2UKKworICAgICAgICB0aHJlYWRfdGlt
aW5ncyA9IFt3LnN0YXRzIGZvciB3IGluIHNlbGYuX3dvcmtlcnMudmFsdWVzKCldCisgICAgICAg
IHJldHVybiAoa2V5Ym9hcmRfaW50ZXJydXB0ZWQsIHRocmVhZF90aW1pbmdzLAorICAgICAgICAg
ICAgICAgIHNlbGYuX2dyb3VwX3N0YXRzLCBzZWxmLl9hbGxfcmVzdWx0cykKKworICAgIGRlZiBf
Y2hlY2tfaWZfZG9uZShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyB0cnVlIGlmZiBhbGwgdGhl
IHdvcmtlcnMgaGF2ZSBlaXRoZXIgY29tcGxldGVkIG9yIHdlZGdlZC4iIiIKKyAgICAgICAgZG9u
ZSA9IFRydWUKKyAgICAgICAgdCA9IHRpbWUudGltZSgpCisgICAgICAgIGZvciB3IGluIHNlbGYu
X3dvcmtlcnMudmFsdWVzKCk6CisgICAgICAgICAgICBpZiBub3Qgdy5kb25lIGFuZCBub3Qgdy53
ZWRnZWQ6CisgICAgICAgICAgICAgICAgbmV4dF90aW1lb3V0ID0gdy5uZXh0X3RpbWVvdXQKKyAg
ICAgICAgICAgICAgICBXRURHRV9QQURESU5HID0gNDAuMAorICAgICAgICAgICAgICAgIGlmIG5l
eHRfdGltZW91dCBhbmQgdCA+IG5leHRfdGltZW91dCArIFdFREdFX1BBRERJTkc6CisgICAgICAg
ICAgICAgICAgICAgIF9sb2cuZXJyb3IoJycpCisgICAgICAgICAgICAgICAgICAgIHcud29ya2Vy
LmxvZ193ZWRnZWRfd29ya2VyKHcuY3VycmVudF90ZXN0X25hbWUpCisgICAgICAgICAgICAgICAg
ICAgIF9sb2cuZXJyb3IoJycpCisgICAgICAgICAgICAgICAgICAgIHcud2VkZ2VkID0gVHJ1ZQor
ICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBGYWxzZQor
CisgICAgICAgIGlmIGRvbmU6CisgICAgICAgICAgICBpZiBhbnkoW3cud2VkZ2VkIGZvciB3IGlu
IHNlbGYuX3dvcmtlcnMudmFsdWVzKCldKToKKyAgICAgICAgICAgICAgICBfbG9nLmVycm9yKCcn
KQorICAgICAgICAgICAgICAgIF9sb2cuZXJyb3IoJ1JlbWFpbmluZyB3b3JrZXJzIGFyZSB3ZWRn
ZWQsIGJhaWxpbmcgb3V0LicpCisgICAgICAgICAgICAgICAgX2xvZy5lcnJvcignJykKKyAgICAg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgX2xvZy5kZWJ1ZygnTm8gd2VkZ2VkIHRocmVh
ZHMnKQorICAgICAgICByZXR1cm4gZG9uZQorCisgICAgZGVmIGhhbmRsZV9zdGFydGVkX3Rlc3Qo
c2VsZiwgc3JjLCB0ZXN0X2luZm8sIGhhbmdfdGltZW91dCk6CisgICAgICAgIHcgPSBzZWxmLl93
b3JrZXJzW3NyY10KKyAgICAgICAgdy5jdXJyZW50X3Rlc3RfbmFtZSA9IHNlbGYuX3BvcnQucmVs
YXRpdmVfdGVzdF9maWxlbmFtZSgKKyAgICAgICAgICAgIHRlc3RfaW5mby5maWxlbmFtZSkKKyAg
ICAgICAgdy5uZXh0X3RpbWVvdXQgPSB0aW1lLnRpbWUoKSArIGhhbmdfdGltZW91dAorCisgICAg
ZGVmIGhhbmRsZV9kb25lKHNlbGYsIHNyYyk6CisgICAgICAgIHcgPSBzZWxmLl93b3JrZXJzW3Ny
Y10KKyAgICAgICAgdy5kb25lID0gVHJ1ZQorCisgICAgZGVmIGhhbmRsZV9maW5pc2hlZF90ZXN0
KHNlbGYsIHNyYywgcmVzdWx0LCBlbGFwc2VkX3RpbWUpOgorICAgICAgICAiIiJVcGRhdGUgdGhl
IHN1bW1hcnkgYW5kIHByaW50IHJlc3VsdHMgd2l0aCBhbnkgY29tcGxldGVkIHRlc3RzLiIiIgor
ICAgICAgICB3ID0gc2VsZi5fd29ya2Vyc1tzcmNdCisgICAgICAgIHcubmV4dF90aW1lb3V0ID0g
Tm9uZQorICAgICAgICB3LmN1cnJlbnRfdGVzdCA9IE5vbmUKKworICAgICAgICBpZiB3LndlZGdl
ZDoKKyAgICAgICAgICAgICMgSG1tLiBUaGlzIHNob3VsZG4ndCBoYXBwZW4gaWYgd2UgaGF2ZSBv
dXIgdGltZW91dHMKKyAgICAgICAgICAgICMgdHVuZWQgcHJvcGVybHkuCisgICAgICAgICAgICBf
bG9nLmVycm9yKCIlcyB1bndlZGdlZCIsIHcubmFtZSkKKworICAgICAgICBzZWxmLl91cGRhdGVf
d29ya2VyX3N0YXRzKHNyYywgcmVzdWx0LCBlbGFwc2VkX3RpbWUpCisKKyAgICAgICAgZXhwZWN0
ZWQgPSBzZWxmLl9leHBlY3RhdGlvbnMubWF0Y2hlc19hbl9leHBlY3RlZF9yZXN1bHQoCisgICAg
ICAgICAgICByZXN1bHQuZmlsZW5hbWUsIHJlc3VsdC50eXBlLCBzZWxmLl9vcHRpb25zLnBpeGVs
X3Rlc3RzKQorICAgICAgICBleHBfc3RyID0gc2VsZi5fZXhwZWN0YXRpb25zLmdldF9leHBlY3Rh
dGlvbnNfc3RyaW5nKAorICAgICAgICAgICAgcmVzdWx0LmZpbGVuYW1lKQorICAgICAgICBnb3Rf
c3RyID0gc2VsZi5fZXhwZWN0YXRpb25zLmV4cGVjdGF0aW9uX3RvX3N0cmluZyhyZXN1bHQudHlw
ZSkKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90ZXN0X3Jlc3VsdChyZXN1bHQsIGV4cGVj
dGVkLCBleHBfc3RyLCBnb3Rfc3RyKQorCisgICAgICAgIHNlbGYuX2N1cnJlbnRfcmVzdWx0X3N1
bW1hcnkuYWRkKHJlc3VsdCwgZXhwZWN0ZWQpCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRf
cHJvZ3Jlc3Moc2VsZi5fY3VycmVudF9yZXN1bHRfc3VtbWFyeSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZXRyeWluZywgc2VsZi5fdGVzdF9maWxlc19saXN0
KQorCisgICAgZGVmIGhhbmRsZV9maW5pc2hlZF9saXN0KHNlbGYsIHNyYywgbGlzdF9uYW1lLCBu
dW1fdGVzdHMsIGVsYXBzZWRfdGltZSk6CisgICAgICAgIHNlbGYuX2dyb3VwX3N0YXRzW2xpc3Rf
bmFtZV0gPSAobnVtX3Rlc3RzLCBlbGFwc2VkX3RpbWUpCisKKyAgICBkZWYgaGFuZGxlX2V4Y2Vw
dGlvbihzZWxmLCBzcmMsIGV4Y2VwdGlvbl9pbmZvKToKKyAgICAgICAgcmFpc2UgZXhjZXB0aW9u
X2luZm8KKworCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS93b3JrZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9sYXlvdXRfcGFja2FnZS93b3JrZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzA2NzZmNzliYjg2
ZDRjZTVhNzg1YzE1ZDBiOWVjYzdjNGYxODA4MgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3dvcmtlci5weQpAQCAt
MCwwICsxLDQxMiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMTAg
R2Fib3IgUmFwY3NhbnlpIChyZ2Fib3JAaW5mLnUtc3plZ2VkLmh1KSwgVW5pdmVyc2l0eSBvZiBT
emVnZWQKKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
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
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIkEgVGhyZWFkIG9iamVjdCBmb3IgcnVubmlu
ZyBEdW1wUmVuZGVyVHJlZSBhbmQgcHJvY2Vzc2luZyBVUkxzIGZyb20gYQorc2hhcmVkIHF1ZXVl
LgorCitFYWNoIHRocmVhZCBydW5zIGEgc2VwYXJhdGUgaW5zdGFuY2Ugb2YgdGhlIER1bXBSZW5k
ZXJUcmVlIGJpbmFyeSBhbmQgdmFsaWRhdGVzCit0aGUgb3V0cHV0LiAgV2hlbiB0aGVyZSBhcmUg
bm8gbW9yZSBVUkxzIHRvIHByb2Nlc3MgaW4gdGhlIHNoYXJlZCBxdWV1ZSwgdGhlCit0aHJlYWQg
ZXhpdHMuCisiIiIKKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudAorCitp
bXBvcnQgY29kZWNzCitpbXBvcnQgY29weQoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1w
b3J0IHNpZ25hbAoraW1wb3J0IHN5cworaW1wb3J0IHRocmVhZGluZworaW1wb3J0IHRpbWUKK2lt
cG9ydCB0cmFjZWJhY2sKKworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMudGVzdF90eXBlcyBp
bXBvcnQgaW1hZ2VfZGlmZgorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMudGVzdF90eXBlcyBp
bXBvcnQgdGVzdF90eXBlX2Jhc2UKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnRlc3RfdHlw
ZXMgaW1wb3J0IHRleHRfZGlmZgorCitpbXBvcnQgbWVzc2FnZV9icm9rZXIyCitpbXBvcnQgdGVz
dF9mYWlsdXJlcworaW1wb3J0IHRlc3Rfb3V0cHV0CitpbXBvcnQgdGVzdF9yZXN1bHRzCisKK19s
b2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKKworCitjbGFzcyBXb3JrZXIobWVzc2Fn
ZV9icm9rZXIyLkNsaWVudEludGVyZmFjZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb2tl
ciwgd29ya2VyX251bWJlciwgb3B0aW9ucyk6CisgICAgICAgIHNlbGYuX2Jyb2tlciA9IGJyb2tl
cgorICAgICAgICBzZWxmLl93b3JrZXJfbnVtYmVyID0gd29ya2VyX251bWJlcgorICAgICAgICBz
ZWxmLl9vcHRpb25zID0gb3B0aW9ucworICAgICAgICBzZWxmLl9uYW1lID0gJ3dvcmtlci8lZCcg
JSB3b3JrZXJfbnVtYmVyCisgICAgICAgIHNlbGYuX2NhbmNlbGVkID0gRmFsc2UKKyAgICAgICAg
c2VsZi5fZG9uZSA9IEZhbHNlCisKKyAgICAgICAgc2VsZi5fcG9ydCA9IE5vbmUKKyAgICAgICAg
c2VsZi5fYmF0Y2hfY291bnQgPSAwCisgICAgICAgIHNlbGYuX2JhdGNoX3NpemUgPSAwCisgICAg
ICAgIHNlbGYuX2RyaXZlciA9IE5vbmUKKyAgICAgICAgc2VsZi5faGF2ZV9odHRwX2xvY2sgPSBG
YWxzZQorICAgICAgICBzZWxmLl90ZXN0X3R5cGVzID0gW10KKyAgICAgICAgc2VsZi5fdGVzdF9h
cmdzID0gW10KKyAgICAgICAgc2VsZi5fdGVzdHNfcnVuX2ZpbGUgPSBOb25lCisKKyAgICBkZWYg
X2RlZmVycmVkX2luaXQoc2VsZiwgcG9ydCk6CisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0Cisg
ICAgICAgIHNlbGYuX2JhdGNoX3NpemUgPSBzZWxmLl9vcHRpb25zLmJhdGNoX3NpemUKKyAgICAg
ICAgZm9yIGNscyBpbiBzZWxmLl9nZXRfdGVzdF90eXBlX2NsYXNzZXMoKToKKyAgICAgICAgICAg
IHNlbGYuX3Rlc3RfdHlwZXMuYXBwZW5kKGNscyhzZWxmLl9wb3J0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMucmVzdWx0c19kaXJlY3Rvcnkp
KQorICAgICAgICBzZWxmLl90ZXN0X2FyZ3MgPSBzZWxmLl9nZXRfdGVzdF9hcmdzKHNlbGYuX3dv
cmtlcl9udW1iZXIpCisKKyAgICAgICAgIyBBcHBlbmQgdGVzdHMgd2UncmUgcnVubmluZyB0byB0
aGUgZXhpc3RpbmcgdGVzdHNfcnVuLnR4dCBmaWxlLgorICAgICAgICAjIFRoaXMgaXMgY3JlYXRl
ZCBpbiBydW5fd2Via2l0X3Rlc3RzLnB5Ol9QcmVwYXJlTGlzdHNBbmRQcmludE91dHB1dC4KKyAg
ICAgICAgdGVzdHNfcnVuX2ZpbGVuYW1lID0gb3MucGF0aC5qb2luKHNlbGYuX29wdGlvbnMucmVz
dWx0c19kaXJlY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAidGVzdHNfcnVuLnR4dCIpCisgICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9maWxlID0gY29kZWNz
Lm9wZW4odGVzdHNfcnVuX2ZpbGVuYW1lLCAiYSIsICJ1dGYtOCIpCisKKyAgICBkZWYgX19kZWxf
XyhzZWxmKToKKyAgICAgICAgc2VsZi5fY2xlYW51cCgpCisKKyAgICBkZWYgX2dldF90ZXN0X2Fy
Z3Moc2VsZiwgd29ya2VyX251bWJlcik6CisgICAgICAgICIiIlJldHVybnMgdGhlIHR1cGxlIG9m
IGFyZ3VtZW50cyBmb3IgdGVzdHMgYW5kIGZvciBEdW1wUmVuZGVyVHJlZS4iIiIKKyAgICAgICAg
dGVzdF9hcmdzID0gdGVzdF90eXBlX2Jhc2UuVGVzdEFyZ3VtZW50cygpCisgICAgICAgIHRlc3Rf
YXJncy5uZXdfYmFzZWxpbmUgPSBzZWxmLl9vcHRpb25zLm5ld19iYXNlbGluZQorICAgICAgICB0
ZXN0X2FyZ3MucmVzZXRfcmVzdWx0cyA9IHNlbGYuX29wdGlvbnMucmVzZXRfcmVzdWx0cworICAg
ICAgICByZXR1cm4gdGVzdF9hcmdzCisKKyAgICBkZWYgX2dldF90ZXN0X3R5cGVfY2xhc3Nlcyhz
ZWxmKToKKyAgICAgICAgY2xhc3NlcyA9IFt0ZXh0X2RpZmYuVGVzdFRleHREaWZmXQorICAgICAg
ICBpZiBzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RzOgorICAgICAgICAgICAgY2xhc3Nlcy5hcHBl
bmQoaW1hZ2VfZGlmZi5JbWFnZURpZmYpCisgICAgICAgIHJldHVybiBjbGFzc2VzCisKKyAgICBk
ZWYgY2FuY2VsKHNlbGYpOgorICAgICAgICAiIiJBdHRlbXB0IHRvIGFib3J0IHByb2Nlc3Npbmcg
KGJlc3QgZWZmb3J0KS4iIiIKKyAgICAgICAgc2VsZi5fY2FuY2VsZWQgPSBUcnVlCisKKyAgICBk
ZWYgaXNfZG9uZShzZWxmKToKKyAgICAgICAgIyBUaGlzIGlzIHVzZWQgZm9yIGFzc2VydGlvbiBj
aGVja2luZyBpbiB0aGUgbWFuYWdlci4KKyAgICAgICAgcmV0dXJuIHNlbGYuX2RvbmUgb3Igc2Vs
Zi5fY2FuY2VsZWQKKworICAgIGRlZiBuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5f
bmFtZQorCisgICAgZGVmIHJ1bihzZWxmLCBwb3J0KToKKyAgICAgICAgc2VsZi5fZGVmZXJyZWRf
aW5pdChwb3J0KQorCisgICAgICAgIGV4Y2VwdGlvbl9tc2cgPSAiIgorICAgICAgICBfbG9nLmRl
YnVnKCclcyBzdGFydGluZycgJSBzZWxmLl9uYW1lKQorCisgICAgICAgIHRyeToKKyAgICAgICAg
ICAgIHNlbGYuX2Jyb2tlci5ydW5fbWVzc2FnZV9sb29wKCkKKyAgICAgICAgICAgIGlmIG5vdCBz
ZWxmLmlzX2RvbmUoKToKKyAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigiJXM6
IHJhbiBvdXQgb2YgbWVzc2FnZXMgaW4gd29ya2VyIHF1ZXVlLiIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAlIHNlbGYuX25hbWUpCisgICAgICAgIGV4Y2VwdCBLZXlib2Fy
ZEludGVycnVwdDoKKyAgICAgICAgICAgIGV4Y2VwdGlvbl9tc2cgPSAiLCBpbnRlcnJ1cHRlZCIK
KyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgZXhjZXB0aW9uX21zZyA9ICIsIGV4Y2VwdGlv
biByYWlzZWQiCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyBk
b25lJXMiICUgKHNlbGYuX25hbWUsIGV4Y2VwdGlvbl9tc2cpKQorICAgICAgICAgICAgaWYgZXhj
ZXB0aW9uX21zZzoKKyAgICAgICAgICAgICAgICBleGNfaW5mbyA9IHN5cy5leGNfaW5mbygpCisg
ICAgICAgICAgICAgICAgc2VsZi5fbG9nX3RyYWNlYmFjayhleGNfaW5mb1syXSkKKyAgICAgICAg
ICAgICAgICAjIEZJWE1FOiBGaWd1cmUgb3V0IGhvdyB0byBzZW5kIGEgbWVzc2FnZSB3aXRoIGEg
dHJhY2ViYWNrLgorICAgICAgICAgICAgICAgIHNlbGYuX2Jyb2tlci5wb3N0X21lc3NhZ2UoJ2V4
Y2VwdGlvbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXhj
X2luZm9bMF0sIGV4Y19pbmZvWzFdLCBOb25lKSkKKyAgICAgICAgICAgIHNlbGYuX2Jyb2tlci5w
b3N0X21lc3NhZ2UoJ2RvbmUnKQorICAgICAgICAgICAgc2VsZi5fY2xlYW51cCgpCisKKyAgICBk
ZWYgX2xvZ190cmFjZWJhY2soc2VsZiwgdGIpOgorICAgICAgICBzdGFjayA9IHRyYWNlYmFjay5l
eHRyYWN0X3RiKHRiKQorICAgICAgICBmb3IgZnJhbWVfc3RyIGluIHRyYWNlYmFjay5mb3JtYXRf
bGlzdChzdGFjayk6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBmcmFtZV9zdHIuc3BsaXQoJ1xu
Jyk6CisgICAgICAgICAgICAgICAgaWYgbGluZToKKyAgICAgICAgICAgICAgICAgICAgX2xvZy5l
cnJvcigiICAlcyIgJSBsaW5lKQorCisgICAgZGVmIF9jbGVhbnVwKHNlbGYpOgorICAgICAgICBz
ZWxmLl9raWxsX2R1bXBfcmVuZGVyX3RyZWUoKQorICAgICAgICBpZiBzZWxmLl9oYXZlX2h0dHBf
bG9jazoKKyAgICAgICAgICAgIHNlbGYuX3N0b3Bfc2VydmVyc193aXRoX2xvY2soKQorICAgICAg
ICBpZiBzZWxmLl90ZXN0c19ydW5fZmlsZToKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9m
aWxlLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9maWxlID0gTm9uZQorCisg
ICAgZGVmIGhhbmRsZV90ZXN0X2xpc3Qoc2VsZiwgc3JjLCBsaXN0X25hbWUsIHRlc3RfbGlzdCk6
CisgICAgICAgIGlmIGxpc3RfbmFtZSA9PSAidGVzdHNfdG9faHR0cF9sb2NrIiBhbmQgc2VsZi5f
cG9ydC5sb2NrX3BvbGljeSgpID09ICJvbmUiOgorICAgICAgICAgICAgc2VsZi5fc3RhcnRfc2Vy
dmVyc193aXRoX2xvY2soKQorCisgICAgICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQorICAg
ICAgICBudW1fdGVzdHMgPSAwCisgICAgICAgIGZvciB0ZXN0X2lucHV0IGluIHRlc3RfbGlzdDoK
KyAgICAgICAgICAgIHNlbGYuX3J1bl90ZXN0KHRlc3RfaW5wdXQpCisgICAgICAgICAgICBzZWxm
Ll9icm9rZXIueWllbGRfdG9fYnJva2VyKCkKKyAgICAgICAgICAgIGlmIHNlbGYuX2NhbmNlbGVk
OgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBudW1fdGVzdHMgKz0gMQorCisg
ICAgICAgIGVsYXBzZWRfdGltZSA9IHRpbWUudGltZSgpIC0gc3RhcnRfdGltZQorCisgICAgICAg
IGlmIHNlbGYuX2hhdmVfaHR0cF9sb2NrOgorICAgICAgICAgICAgc2VsZi5fc3RvcF9zZXJ2ZXJz
X3dpdGhfbG9jaygpCisKKyAgICAgICAgc2VsZi5fYnJva2VyLnBvc3RfbWVzc2FnZSgnZmluaXNo
ZWRfbGlzdCcsIGxpc3RfbmFtZSwgbnVtX3Rlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVsYXBzZWRfdGltZSkKKworICAgIGRlZiBoYW5kbGVfc3RvcChzZWxmLCBzcmMp
OgorICAgICAgICAiIiJTdG9wIHJlY2VpdmVkIC0gbm8gbW9yZSB0ZXN0cyB0byBydW4uIiIiCisg
ICAgICAgIHNlbGYuX2RvbmUgPSBUcnVlCisKKyAgICBkZWYgX3J1bl90ZXN0KHNlbGYsIHRlc3Rf
aW5wdXQpOgorICAgICAgICBzZWxmLl9zZXRfdXBfdGVzdCh0ZXN0X2lucHV0KQorCisgICAgICAg
ICMgV2UgY2FsY3VsYXRlIGhvdyBsb25nIHdlIGV4cGVjdCB0aGUgdGVzdCB0byB0YWtlLgorICAg
ICAgICAjCisgICAgICAgICMgVGhlIER1bXBSZW5kZXJUcmVlIHdhdGNoZG9nIHVzZXMgMi41eCB0
aGUgdGltZW91dDsgd2Ugd2FudCB0byBiZQorICAgICAgICAjIGxhcmdlciB0aGFuIHRoYXQuIFdl
IGFsc28gYWRkIGEgbGl0dGxlIG1vcmUgcGFkZGluZyBpZiB3ZSdyZQorICAgICAgICAjIHJ1bm5p
bmcgdGVzdHMgaW4gYSBzZXBhcmF0ZSB0aHJlYWQuCisgICAgICAgICMKKyAgICAgICAgIyBOb3Rl
IHRoYXQgd2UgbmVlZCB0byBjb252ZXJ0IHRoZSB0ZXN0IHRpbWVvdXQgZnJvbSBhCisgICAgICAg
ICMgc3RyaW5nIHZhbHVlIGluIG1pbGxpc2Vjb25kcyB0byBhIGZsb2F0IGZvciBQeXRob24uCisg
ICAgICAgIGRyaXZlcl90aW1lb3V0X3NlYyA9IDMuMCAqIGZsb2F0KHRlc3RfaW5wdXQudGltZW91
dCkgLyAxMDAwLjAKKyAgICAgICAgdGhyZWFkX3BhZGRpbmdfc2VjID0gMS4wCisgICAgICAgIHRo
cmVhZF90aW1lb3V0X3NlYyA9IGRyaXZlcl90aW1lb3V0X3NlYyArIHRocmVhZF9wYWRkaW5nX3Nl
YworICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnJ1bl9zaW5nbHk6CisgICAgICAgICAgICB0ZXN0
X3RpbWVvdXRfc2VjID0gdGhyZWFkX3RpbWVvdXRfc2VjCisgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICB0ZXN0X3RpbWVvdXRfc2VjID0gZHJpdmVyX3RpbWVvdXRfc2VjCisKKyAgICAgICAgc3Rh
cnQgPSB0aW1lLnRpbWUoKQorICAgICAgICBzZWxmLl9icm9rZXIucG9zdF9tZXNzYWdlKCdzdGFy
dGVkX3Rlc3QnLCB0ZXN0X2lucHV0LCB0ZXN0X3RpbWVvdXRfc2VjKQorCisgICAgICAgIGlmIHNl
bGYuX29wdGlvbnMucnVuX3NpbmdseToKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuX3J1bl90
ZXN0X2luX2Fub3RoZXJfdGhyZWFkKHRlc3RfaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWRfdGltZW91dF9zZWMpCisgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICByZXN1bHQgPSBzZWxmLl9ydW5fdGVzdF9pbl90aGlzX3Ro
cmVhZCh0ZXN0X2lucHV0KQorCisgICAgICAgIHNlbGYuX3RlYXJfZG93bl90ZXN0KHRlc3RfaW5w
dXQsIHJlc3VsdCwgdGltZS50aW1lKCkgLSBzdGFydCkKKworICAgIGRlZiBfc2V0X3VwX3Rlc3Qo
c2VsZiwgdGVzdF9pbnB1dCk6CisgICAgICAgIHRlc3RfaW5wdXQudXJpID0gc2VsZi5fcG9ydC5m
aWxlbmFtZV90b191cmkodGVzdF9pbnB1dC5maWxlbmFtZSkKKyAgICAgICAgaWYgc2VsZi5fc2hv
dWxkX2ZldGNoX2V4cGVjdGVkX2NoZWNrc3VtKCk6CisgICAgICAgICAgICB0ZXN0X2lucHV0Lmlt
YWdlX2NoZWNrc3VtID0gc2VsZi5fcG9ydC5leHBlY3RlZF9jaGVja3N1bSgKKyAgICAgICAgICAg
ICAgICB0ZXN0X2lucHV0LmZpbGVuYW1lKQorCisgICAgZGVmIF9zaG91bGRfZmV0Y2hfZXhwZWN0
ZWRfY2hlY2tzdW0oc2VsZik6CisgICAgICAgIHJldHVybiAoc2VsZi5fb3B0aW9ucy5waXhlbF90
ZXN0cyBhbmQgbm90CisgICAgICAgICAgICAgICAgKHNlbGYuX29wdGlvbnMubmV3X2Jhc2VsaW5l
IG9yIHNlbGYuX29wdGlvbnMucmVzZXRfcmVzdWx0cykpCisKKyAgICBkZWYgX3J1bl90ZXN0X2lu
X2Fub3RoZXJfdGhyZWFkKHNlbGYsIHRlc3RfaW5wdXQsIHRocmVhZF90aW1lb3V0X3NlYyk6Cisg
ICAgICAgICIiIlJ1biBhIHRlc3QgaW4gYSBzZXBhcmF0ZSB0aHJlYWQsIGVuZm9yY2luZyBhIGhh
cmQgdGltZSBsaW1pdC4KKworICAgICAgICBTaW5jZSB3ZSBjYW4gb25seSBkZXRlY3QgdGhlIHRl
cm1pbmF0aW9uIG9mIGEgdGhyZWFkLCBub3QgYW55IGludGVybmFsCisgICAgICAgIHN0YXRlIG9y
IHByb2dyZXNzLCB3ZSBjYW4gb25seSBydW4gcGVyLXRlc3QgdGltZW91dHMgd2hlbiBydW5uaW5n
IHRlc3QKKyAgICAgICAgZmlsZXMgc2luZ2x5LgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAg
dGVzdF9pbnB1dDogT2JqZWN0IGNvbnRhaW5pbmcgdGhlIHRlc3QgZmlsZW5hbWUgYW5kIHRpbWVv
dXQKKyAgICAgICAgICB0aHJlYWRfdGltZW91dF9zZWM6IHRpbWUgdG8gd2FpdCBiZWZvcmUga2ls
bGluZyB0aGUgZHJpdmVyIHByb2Nlc3MuCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgQSBU
ZXN0UmVzdWx0CisgICAgICAgICIiIgorICAgICAgICB3b3JrZXIgPSBzZWxmCisgICAgICAgIHJl
c3VsdCA9IE5vbmUKKworICAgICAgICBkcml2ZXIgPSB3b3JrZXIuX3BvcnQuY3JlYXRlX2RyaXZl
cih3b3JrZXIuX3dvcmtlcl9udW1iZXIpCisgICAgICAgIGRyaXZlci5zdGFydCgpCisKKyAgICAg
ICAgY2xhc3MgU2luZ2xlVGVzdFRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKKyAgICAgICAgICAg
IGRlZiBydW4oc2VsZik6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gd29ya2VyLl9ydW5fc2lu
Z2xlX3Rlc3QodGVzdF9pbnB1dCwgZHJpdmVyKQorCisgICAgICAgIHRocmVhZCA9IFNpbmdsZVRl
c3RUaHJlYWQoKQorICAgICAgICB0aHJlYWQuc3RhcnQoKQorICAgICAgICB0aHJlYWQuam9pbih0
aHJlYWRfdGltZW91dF9zZWMpCisgICAgICAgIGlmIHRocmVhZC5pc0FsaXZlKCk6CisgICAgICAg
ICAgICAjIElmIGpvaW4oKSByZXR1cm5lZCB3aXRoIHRoZSB0aHJlYWQgc3RpbGwgcnVubmluZywg
dGhlCisgICAgICAgICAgICAjIER1bXBSZW5kZXJUcmVlIGlzIGNvbXBsZXRlbHkgaHVuZyBhbmQg
dGhlcmUncyBub3RoaW5nCisgICAgICAgICAgICAjIG1vcmUgd2UgY2FuIGRvIHdpdGggaXQuICBX
ZSBoYXZlIHRvIGtpbGwgYWxsIHRoZQorICAgICAgICAgICAgIyBEdW1wUmVuZGVyVHJlZXMgdG8g
ZnJlZSBpdCB1cC4gSWYgd2UncmUgcnVubmluZyBtb3JlIHRoYW4KKyAgICAgICAgICAgICMgb25l
IER1bXBSZW5kZXJUcmVlIHRocmVhZCwgd2UnbGwgZW5kIHVwIGtpbGxpbmcgdGhlIG90aGVyCisg
ICAgICAgICAgICAjIER1bXBSZW5kZXJUcmVlcyB0b28sIGludHJvZHVjaW5nIHNwdXJpb3VzIGNy
YXNoZXMuIFdlIGFjY2VwdAorICAgICAgICAgICAgIyB0aGF0IHRyYWRlb2ZmIGluIG9yZGVyIHRv
IGF2b2lkIGxvc2luZyB0aGUgcmVzdCBvZiB0aGlzCisgICAgICAgICAgICAjIHRocmVhZCdzIHJl
c3VsdHMuCisgICAgICAgICAgICBfbG9nLmVycm9yKCdUZXN0IHRocmVhZCBodW5nOiBraWxsaW5n
IGFsbCBEdW1wUmVuZGVyVHJlZXMnKQorCisgICAgICAgIGRyaXZlci5zdG9wKCkKKworICAgICAg
ICBpZiBub3QgcmVzdWx0OgorICAgICAgICAgICAgcmVzdWx0ID0gdGVzdF9yZXN1bHRzLlRlc3RS
ZXN1bHQodGVzdF9pbnB1dC5maWxlbmFtZSwgZmFpbHVyZXM9W10sCisgICAgICAgICAgICAgICAg
dGVzdF9ydW5fdGltZT0wLCB0b3RhbF90aW1lX2Zvcl9hbGxfZGlmZnM9MCwgdGltZV9mb3JfZGlm
ZnM9e30pCisKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIF9ydW5fdGVzdF9pbl90
aGlzX3RocmVhZChzZWxmLCB0ZXN0X2lucHV0KToKKyAgICAgICAgIiIiUnVuIGEgc2luZ2xlIHRl
c3QgZmlsZSB1c2luZyBhIHNoYXJlZCBEdW1wUmVuZGVyVHJlZSBwcm9jZXNzLgorCisgICAgICAg
IEFyZ3M6CisgICAgICAgICAgdGVzdF9pbnB1dDogT2JqZWN0IGNvbnRhaW5pbmcgdGhlIHRlc3Qg
ZmlsZW5hbWUsIHVyaSBhbmQgdGltZW91dAorCisgICAgICAgIFJldHVybnM6IGEgVGVzdFJlc3Vs
dCBvYmplY3QuCisgICAgICAgICIiIgorICAgICAgICAjIHBvbGwoKSBpcyBub3QgdGhyZWFkc2Fm
ZSBhbmQgY2FuIHRocm93IE9TRXJyb3IgZHVlIHRvOgorICAgICAgICAjIGh0dHA6Ly9idWdzLnB5
dGhvbi5vcmcvaXNzdWUxNzMxNzE3CisgICAgICAgIGlmIG5vdCBzZWxmLl9kcml2ZXIgb3Igc2Vs
Zi5fZHJpdmVyLnBvbGwoKSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2RyaXZlciA9
IHNlbGYuX3BvcnQuY3JlYXRlX2RyaXZlcihzZWxmLl93b3JrZXJfbnVtYmVyKQorICAgICAgICAg
ICAgc2VsZi5fZHJpdmVyLnN0YXJ0KCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9zaW5nbGVf
dGVzdCh0ZXN0X2lucHV0LCBzZWxmLl9kcml2ZXIpCisKKyAgICBkZWYgX3J1bl9zaW5nbGVfdGVz
dChzZWxmLCB0ZXN0X2lucHV0LCBkcml2ZXIpOgorICAgICAgICAjIFRoZSBpbWFnZSBoYXNoIGlz
IHVzZWQgdG8gYXZvaWQgZG9pbmcgYW4gaW1hZ2UgZHVtcCBpZiB0aGUKKyAgICAgICAgIyBjaGVj
a3N1bXMgbWF0Y2gsIHNvIGl0IHNob3VsZCBiZSBzZXQgdG8gYSBibGFuayB2YWx1ZSBpZiB3ZQor
ICAgICAgICAjIGFyZSBnZW5lcmF0aW5nIGEgbmV3IGJhc2VsaW5lLiAgKE90aGVyd2lzZSwgYW4g
aW1hZ2UgZnJvbSBhCisgICAgICAgICMgcHJldmlvdXMgcnVuIHdpbGwgYmUgY29waWVkIGludG8g
dGhlIGJhc2VsaW5lLiIiIgorICAgICAgICBpZiBzZWxmLl9zaG91bGRfZmV0Y2hfZXhwZWN0ZWRf
Y2hlY2tzdW0oKToKKyAgICAgICAgICAgIHRlc3RfaW5wdXQuaW1hZ2VfaGFzaCA9IHNlbGYuX3Bv
cnQuZXhwZWN0ZWRfY2hlY2tzdW0oCisgICAgICAgICAgICAgICAgdGVzdF9pbnB1dC5maWxlbmFt
ZSkKKyAgICAgICAgdGVzdF9vdXRwdXQgPSBkcml2ZXIucnVuX3Rlc3QodGVzdF9pbnB1dCkKKyAg
ICAgICAgcmV0dXJuIHNlbGYuX3Byb2Nlc3Nfb3V0cHV0KHRlc3RfaW5wdXQsIHRlc3Rfb3V0cHV0
KQorCisgICAgZGVmIF9wcm9jZXNzX291dHB1dChzZWxmLCB0ZXN0X2lucHV0LCB0ZXN0X291dHB1
dCk6CisgICAgICAgICIiIlJlY2VpdmVzIHRoZSBvdXRwdXQgZnJvbSBhIER1bXBSZW5kZXJUcmVl
IHByb2Nlc3MsIHN1YmplY3RzIGl0IHRvIGEKKyAgICAgICAgbnVtYmVyIG9mIHRlc3RzLCBhbmQg
cmV0dXJucyBhIGxpc3Qgb2YgZmFpbHVyZSB0eXBlcyB0aGUgdGVzdCBwcm9kdWNlZC4KKworICAg
ICAgICBBcmdzOgorICAgICAgICB0ZXN0X2lucHV0OiBhIFRlc3RJbnB1dCBvYmplY3QKKyAgICAg
ICAgdGVzdF9vdXRwdXQ6IGEgVGVzdE91dHB1dCBvYmplY3QgY29udGFpbmluZyB0aGUgb3V0cHV0
IG9mIHRoZSB0ZXN0CisKKyAgICAgICAgUmV0dXJuczogYSBUZXN0UmVzdWx0IG9iamVjdAorICAg
ICAgICAiIiIKKyAgICAgICAgZmFpbHVyZXMgPSBbXQorICAgICAgICB0ZXN0X2ZpbGVuYW1lID0g
dGVzdF9pbnB1dC5maWxlbmFtZQorCisgICAgICAgIGlmIHRlc3Rfb3V0cHV0LmNyYXNoOgorICAg
ICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKHRlc3RfZmFpbHVyZXMuRmFpbHVyZUNyYXNoKCkpCisg
ICAgICAgIGlmIHRlc3Rfb3V0cHV0LnRpbWVvdXQ6CisgICAgICAgICAgICBmYWlsdXJlcy5hcHBl
bmQodGVzdF9mYWlsdXJlcy5GYWlsdXJlVGltZW91dCgpKQorCisgICAgICAgIHRlc3RfbmFtZSA9
IHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZSh0ZXN0X2ZpbGVuYW1lKQorICAgICAg
ICBpZiB0ZXN0X291dHB1dC5jcmFzaDoKKyAgICAgICAgICAgIF9sb2cuZGVidWcoIiVzIFN0YWNr
dHJhY2UgZm9yICVzOlxuJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuX25hbWUs
IHRlc3RfbmFtZSwgdGVzdF9vdXRwdXQuZXJyb3IpKQorICAgICAgICAgICAgZmlsZW5hbWUgPSBv
cy5wYXRoLmpvaW4oc2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSwgdGVzdF9uYW1lKQor
ICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKVswXSArICIt
c3RhY2sudHh0IgorICAgICAgICAgICAgc2VsZi5fcG9ydC5tYXliZV9tYWtlX2RpcmVjdG9yeShv
cy5wYXRoLnNwbGl0KGZpbGVuYW1lKVswXSkKKyAgICAgICAgICAgIHdpdGggY29kZWNzLm9wZW4o
ZmlsZW5hbWUsICJ3YiIsICJ1dGYtOCIpIGFzIGZpbGU6CisgICAgICAgICAgICAgICAgZmlsZS53
cml0ZSh0ZXN0X291dHB1dC5lcnJvcikKKyAgICAgICAgZWxpZiB0ZXN0X291dHB1dC5lcnJvcjoK
KyAgICAgICAgICAgIF9sb2cuZGVidWcoIiVzICVzIG91dHB1dCBzdGRlcnIgbGluZXM6XG4lcyIg
JQorICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5fbmFtZSwgdGVzdF9uYW1lLCB0ZXN0X291
dHB1dC5lcnJvcikpCisKKyAgICAgICAgZXhwZWN0ZWRfdGVzdF9vdXRwdXQgPSBzZWxmLl9leHBl
Y3RlZF90ZXN0X291dHB1dCh0ZXN0X2ZpbGVuYW1lKQorCisgICAgICAgICMgQ2hlY2sgdGhlIG91
dHB1dCBhbmQgc2F2ZSB0aGUgcmVzdWx0cy4KKyAgICAgICAgc3RhcnRfdGltZSA9IHRpbWUudGlt
ZSgpCisgICAgICAgIHRpbWVfZm9yX2RpZmZzID0ge30KKyAgICAgICAgZm9yIHRlc3RfdHlwZSBp
biBzZWxmLl90ZXN0X3R5cGVzOgorICAgICAgICAgICAgc3RhcnRfZGlmZl90aW1lID0gdGltZS50
aW1lKCkKKyAgICAgICAgICAgIG5ld19mYWlsdXJlcyA9IHRlc3RfdHlwZS5jb21wYXJlX291dHB1
dChzZWxmLl9wb3J0LCB0ZXN0X2lucHV0LmZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RfYXJncywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X291dHB1dCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBl
Y3RlZF90ZXN0X291dHB1dCkKKyAgICAgICAgICAgICMgRG9uJ3QgYWRkIGFueSBtb3JlIGZhaWx1
cmVzIGlmIHdlIGFscmVhZHkgaGF2ZSBhIGNyYXNoLCBzbyB3ZQorICAgICAgICAgICAgIyBkb24n
dCBkb3VibGUtcmVwb3J0IHRob3NlIHRlc3RzLiBXZSBkbyBkb3VibGUtcmVwb3J0IGZvciB0aW1l
b3V0cworICAgICAgICAgICAgIyBzaW5jZSB3ZSBzdGlsbCB3YW50IHRvIHNlZSB0aGUgdGV4dCBh
bmQgaW1hZ2Ugb3V0cHV0LgorICAgICAgICAgICAgaWYgbm90IHRlc3Rfb3V0cHV0LmNyYXNoOgor
ICAgICAgICAgICAgICAgIGZhaWx1cmVzLmV4dGVuZChuZXdfZmFpbHVyZXMpCisgICAgICAgICAg
ICB0aW1lX2Zvcl9kaWZmc1t0ZXN0X3R5cGUuX19jbGFzc19fLl9fbmFtZV9fXSA9ICgKKyAgICAg
ICAgICAgICAgICB0aW1lLnRpbWUoKSAtIHN0YXJ0X2RpZmZfdGltZSkKKworICAgICAgICB0b3Rh
bF90aW1lX2Zvcl9hbGxfZGlmZnMgPSB0aW1lLnRpbWUoKSAtIHN0YXJ0X2RpZmZfdGltZQorICAg
ICAgICByZXR1cm4gdGVzdF9yZXN1bHRzLlRlc3RSZXN1bHQodGVzdF9maWxlbmFtZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhaWx1cmVzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9vdXRwdXQudGVzdF90aW1lLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxfdGltZV9mb3JfYWxsX2RpZmZz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZV9mb3JfZGlmZnMp
CisKKyAgICBkZWYgX2V4cGVjdGVkX3Rlc3Rfb3V0cHV0KHNlbGYsIGZpbGVuYW1lKToKKyAgICAg
ICAgIiIiUmV0dXJucyBhbiBleHBlY3RlZCBUZXN0T3V0cHV0IG9iamVjdC4iIiIKKyAgICAgICAg
cmV0dXJuIHRlc3Rfb3V0cHV0LlRlc3RPdXRwdXQoc2VsZi5fcG9ydC5leHBlY3RlZF90ZXh0KGZp
bGVuYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQu
ZXhwZWN0ZWRfaW1hZ2UoZmlsZW5hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fcG9ydC5leHBlY3RlZF9jaGVja3N1bShmaWxlbmFtZSkpCisKKyAgICBkZWYg
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
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkKaW5kZXggOTdi
NTRjOTdkODFmZmY5Mzk5OTFlNmFlYjJhMzMzMTYwODg4ODE1Mi4uMjViZjkzYjdjNjQ4MWM5N2Y1
MTNmYThkMDhhOGYzMjUwYjdkYjg3ZSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weQpAQCAtMTI3LDYgKzEyNyw5IEBAIGNsYXNzIFBvcnQo
b2JqZWN0KToKICAgICAgICAgcG9ydC4iIiIKICAgICAgICAgcmV0dXJuIHNlbGYuX2V4ZWN1dGl2
ZS5jcHVfY291bnQoKQogCisgICAgZGVmIGRlZmF1bHRfd29ya2VyX21vZGVsKHNlbGYpOgorICAg
ICAgICByZXR1cm4gJ29sZC10aHJlYWRzJworCiAgICAgZGVmIGJhc2VsaW5lX3BhdGgoc2VsZik6
CiAgICAgICAgICIiIlJldHVybiB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5IHRv
IHN0b3JlIG5ldyBiYXNlbGluZXMKICAgICAgICAgaW4gZm9yIHRoaXMgcG9ydC4iIiIKZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1f
bWFjLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1
bV9tYWMucHkKaW5kZXggZjYzOGUwMTNjNjE5MjdhYmNhOGY2ZmVjNDNkZDYxYzllNDI3MjhiMC4u
NWZkNzY1ODg2ZmJlMDlmYzMyOTIyNDRjNTA3ZWRlYTJkNTFkMjU2NyAxMDA2NDQKLS0tIGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9tYWMucHkKKysr
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9tYWMu
cHkKQEAgLTY5LDEzICs2OSwxNiBAQCBjbGFzcyBDaHJvbWl1bU1hY1BvcnQoY2hyb21pdW0uQ2hy
b21pdW1Qb3J0KToKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCiAgICAgZGVmIGRlZmF1bHRfY2hp
bGRfcHJvY2Vzc2VzKHNlbGYpOgotICAgICAgICAjIEZJWE1FOiB3ZSBuZWVkIHRvIHJ1biBzaW5n
bGUtdGhyZWFkZWQgZm9yIG5vdy4gU2VlCi0gICAgICAgICMgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTM4NTUzLiBVbmZvcnR1bmF0ZWx5IHRoaXMKLSAgICAgICAgIyBy
b3V0aW5lIGlzIGNhbGxlZCByaWdodCBiZWZvcmUgdGhlIGxvZ2dlciBpcyBjb25maWd1cmVkLCBz
byBpZiB3ZQotICAgICAgICAjIHRyeSB0byBfbG9nLndhcm5pbmcoKSwgaXQgZ2V0cyB0aHJvd24g
YXdheS4KLSAgICAgICAgaW1wb3J0IHN5cwotICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJEZWZh
dWx0aW5nIHRvIG9uZSBjaGlsZCAtIHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9Mzg1NTNcbiIpCi0gICAgICAgIHJldHVybiAxCisgICAgICAgIGlmIHNlbGYuZ2V0
X29wdGlvbignd29ya2VyX21vZGVsJykgPT0gJ29sZC10aHJlYWRzJzoKKyAgICAgICAgICAgICMg
RklYTUU6IHdlIG5lZWQgdG8gcnVuIHNpbmdsZS10aHJlYWRlZCBmb3Igbm93LiBTZWUKKyAgICAg
ICAgICAgICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4NTUzLiBV
bmZvcnR1bmF0ZWx5IHRoaXMKKyAgICAgICAgICAgICMgcm91dGluZSBpcyBjYWxsZWQgcmlnaHQg
YmVmb3JlIHRoZSBsb2dnZXIgaXMgY29uZmlndXJlZCwgc28gaWYgd2UKKyAgICAgICAgICAgICMg
dHJ5IHRvIF9sb2cud2FybmluZygpLCBpdCBnZXRzIHRocm93biBhd2F5LgorICAgICAgICAgICAg
aW1wb3J0IHN5cworICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiRGVmYXVsdGluZyB0byBv
bmUgY2hpbGQgLSBzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4
NTUzXG4iKQorICAgICAgICAgICAgcmV0dXJuIDEKKworICAgICAgICByZXR1cm4gY2hyb21pdW0u
Q2hyb21pdW1Qb3J0LmRlZmF1bHRfY2hpbGRfcHJvY2Vzc2VzKHNlbGYpIAogCiAgICAgZGVmIGRy
aXZlcl9uYW1lKHNlbGYpOgogICAgICAgICAiIiJuYW1lIGZvciB0aGlzIHBvcnQncyBlcXVpdmFs
ZW50IG9mIER1bXBSZW5kZXJUcmVlLiIiIgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tYWMucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L21hYy5weQppbmRleCA2OTZlMzM5OGVhNGIyOGFjNzYyMjU5MDdkYzM2
MmZmYzNmYjg2ZjllLi5kZjM0OGE2NGRmODVjOTQyMjVhMjJmYjNjOTBlNTUyZGRhMmJjY2RkIDEw
MDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21hYy5w
eQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21hYy5weQpA
QCAtNTIsNyArNTIsNyBAQCBjbGFzcyBNYWNQb3J0KFdlYktpdFBvcnQpOgogICAgICAgICAjIGZv
dXIgdGhyZWFkcyBpbiBwYXJhbGxlbC4KICAgICAgICAgIyBTZWUgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTM2NjIyCiAgICAgICAgIGNoaWxkX3Byb2Nlc3NlcyA9IFdl
YktpdFBvcnQuZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMoc2VsZikKLSAgICAgICAgaWYgY2hpbGRf
cHJvY2Vzc2VzID4gNDoKKyAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCd3b3JrZXJfbW9kZWwn
KSA9PSAnb2xkLXRocmVhZHMnIGFuZCBjaGlsZF9wcm9jZXNzZXMgPiA0OgogICAgICAgICAgICAg
cmV0dXJuIDQKICAgICAgICAgcmV0dXJuIGNoaWxkX3Byb2Nlc3NlcwogCmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5IGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQpp
bmRleCBjNDMxNzY1YWUyY2ZkOWM3MDcxMGQ4M2M5ZDU5OWE5NzhiNTJlMzE2Li42M2Q4MmFkOTRm
OWY5OTMyYWZlOTIzMTc3NWQ0ZjMzMmJlYzgxNDQzIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CisrKyBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKQEAgLTQyLDYg
KzQyLDcgQEAgaW1wb3J0IHN5cwogCiBmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCBwcmludGlu
ZwogZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9ydW5uZXIKK2Zyb20gbGF5b3V0X3Bh
Y2thZ2UgaW1wb3J0IHRlc3RfcnVubmVyMgogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0g
aW1wb3J0IHVzZXIKIGZyb20gd2Via2l0cHkudGhpcmRwYXJ0eSBpbXBvcnQgc2ltcGxlanNvbgpA
QCAtOTAsNyArOTEsMTEgQEAgZGVmIHJ1bihwb3J0LCBvcHRpb25zLCBhcmdzLCByZWd1bGFyX291
dHB1dD1zeXMuc3RkZXJyLAogICAgICMgaW4gYSB0cnkvZmluYWxseSB0byBlbnN1cmUgdGhhdCB3
ZSBjbGVhbiB1cCB0aGUgbG9nZ2luZyBjb25maWd1cmF0aW9uLgogICAgIG51bV91bmV4cGVjdGVk
X3Jlc3VsdHMgPSAtMQogICAgIHRyeToKLSAgICAgICAgcnVubmVyID0gdGVzdF9ydW5uZXIuVGVz
dFJ1bm5lcihwb3J0LCBvcHRpb25zLCBwcmludGVyKQorICAgICAgICBpZiBvcHRpb25zLndvcmtl
cl9tb2RlbCBpbiAoJ2lubGluZScsICd0aHJlYWRzJywgJ3Byb2Nlc3NlcycpOgorICAgICAgICAg
ICAgcnVubmVyID0gdGVzdF9ydW5uZXIyLlRlc3RSdW5uZXIyKHBvcnQsIG9wdGlvbnMsIHByaW50
ZXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBydW5uZXIgPSB0ZXN0X3J1bm5lci5UZXN0
UnVubmVyKHBvcnQsIG9wdGlvbnMsIHByaW50ZXIpCisKICAgICAgICAgcnVubmVyLl9wcmludF9j
b25maWcoKQogCiAgICAgICAgIHByaW50ZXIucHJpbnRfdXBkYXRlKCJDb2xsZWN0aW5nIHRlc3Rz
IC4uLiIpCkBAIC0xMjksOSArMTM0LDEyIEBAIGRlZiBfc2V0X3VwX2Rlcml2ZWRfb3B0aW9ucyhw
b3J0X29iaiwgb3B0aW9ucyk6CiAgICAgIyBXZSByZXR1cm4gYSBsaXN0IG9mIHdhcm5pbmdzIHRv
IHByaW50IGFmdGVyIHRoZSBwcmludGVyIGlzIGluaXRpYWxpemVkLgogICAgIHdhcm5pbmdzID0g
W10KIAotICAgIGlmIG9wdGlvbnMud29ya2VyX21vZGVsID09ICdvbGQtaW5saW5lJzoKKyAgICBp
ZiBvcHRpb25zLndvcmtlcl9tb2RlbCBpcyBOb25lOgorICAgICAgICBvcHRpb25zLndvcmtlcl9t
b2RlbCA9IHBvcnRfb2JqLmRlZmF1bHRfd29ya2VyX21vZGVsKCkKKworICAgIGlmIG9wdGlvbnMu
d29ya2VyX21vZGVsIGluICgnaW5saW5lJywgJ29sZC1pbmxpbmUnKToKICAgICAgICAgaWYgb3B0
aW9ucy5jaGlsZF9wcm9jZXNzZXMgYW5kIGludChvcHRpb25zLmNoaWxkX3Byb2Nlc3NlcykgPiAx
OgotICAgICAgICAgICAgd2FybmluZ3MuYXBwZW5kKCItLXdvcmtlci1tb2RlbD1vbGQtaW5saW5l
IG92ZXJyaWRlcyAtLWNoaWxkLXByb2Nlc3NlcyIpCisgICAgICAgICAgICB3YXJuaW5ncy5hcHBl
bmQoIi0td29ya2VyLW1vZGVsPSVzIG92ZXJyaWRlcyAtLWNoaWxkLXByb2Nlc3NlcyIgJSBvcHRp
b25zLndvcmtlcl9tb2RlbCkKICAgICAgICAgb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMgPSAiMSIK
ICAgICBpZiBub3Qgb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXM6CiAgICAgICAgIG9wdGlvbnMuY2hp
bGRfcHJvY2Vzc2VzID0gb3MuZW52aXJvbi5nZXQoIldFQktJVF9URVNUX0NISUxEX1BST0NFU1NF
UyIsCkBAIC0zNjIsOCArMzcwLDggQEAgZGVmIHBhcnNlX2FyZ3MoYXJncz1Ob25lKToKICAgICAg
ICAgICAgIGhlbHA9Ik51bWJlciBvZiBEdW1wUmVuZGVyVHJlZXMgdG8gcnVuIGluIHBhcmFsbGVs
LiIpLAogICAgICAgICAjIEZJWE1FOiBEaXNwbGF5IGRlZmF1bHQgbnVtYmVyIG9mIGNoaWxkIHBy
b2Nlc3NlcyB0aGF0IHdpbGwgcnVuLgogICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS13
b3JrZXItbW9kZWwiLCBhY3Rpb249InN0b3JlIiwKLSAgICAgICAgICAgIGRlZmF1bHQ9Im9sZC10
aHJlYWRzIiwgaGVscD0oImNvbnRyb2xzIHdvcmtlciBtb2RlbC4gVmFsaWQgdmFsdWVzICIKLSAg
ICAgICAgICAgICJhcmUgJ29sZC1pbmxpbmUnLCAnb2xkLXRocmVhZHMnLiIpKSwKKyAgICAgICAg
ICAgIGRlZmF1bHQ9Tm9uZSwgaGVscD0oImNvbnRyb2xzIHdvcmtlciBtb2RlbC4gVmFsaWQgdmFs
dWVzIGFyZSAnb2xkLWlubGluZScsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IidvbGQtdGhyZWFkcycsICdpbmxpbmUnLCAndGhyZWFkcycsIGFuZCAncHJvY2Vzc2VzJy4iKSks
CiAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLWV4cGVyaW1lbnRhbC1mdWxseS1wYXJh
bGxlbCIsCiAgICAgICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLCBkZWZhdWx0PUZhbHNlLAog
ICAgICAgICAgICAgaGVscD0icnVuIGFsbCB0ZXN0cyBpbiBwYXJhbGxlbCIpLAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78599</attachid>
            <date>2011-01-11 14:29:29 -0800</date>
            <delta_ts>2011-01-11 14:34:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52194-20110111142927.patch</filename>
            <type>text/plain</type>
            <size>72817</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA5MGI5
Nzg5Y2U5ZDFmNjYzYWNhNzY4OTgxZmYyNDdjNWJhNDMyYWRjLi5iMTUyMTQ5YTczMWFmZjg0ZjNj
ZTRlYjFlODViNDk3NmJlMGMwZjg5IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMDEtMTAgIERpcmsgUHJhbmtl
ICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgbmV3LXJ1bi13ZWJraXQtdGVzdHM6IGNoZWNrcG9pbnQgbWVyZ2Ug
b2YgZHVhbC1tb2RlIG11bHRpcHJvY2Vzc2luZyB3b3JrCisKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyMTk0CisKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyX3dvcmtlcl9icm9rZXIu
cHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL21hbmFnZXJfd29ya2VyX2Jyb2tlcl91bml0dGVzdC5weTogQWRkZWQuCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWVzc2Fn
ZV9icm9rZXIyLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tlcjJfdW5pdHRlc3QucHk6IEFkZGVkLgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rl
c3RfcnVubmVyMi5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvbGF5b3V0X3BhY2thZ2Uvd29ya2VyLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHk6CisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9tYWMucHk6CisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tYWMucHk6CisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weToKKwogMjAxMS0wMS0x
MCAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBsZS5jb20+CiAKICAgICAgICAgUm9sbCBvdXQgcjc1
MzkyCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlv
dXRfcGFja2FnZS9tYW5hZ2VyX3dvcmtlcl9icm9rZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyX3dvcmtlcl9icm9rZXIucHkK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZTI4YTdiYjRjMzAzNDU3MWQzNTFjOTJlNDAyYWMyNjI1Yjc4YTMzNwotLS0g
L2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL21hbmFnZXJfd29ya2VyX2Jyb2tlci5weQpAQCAtMCwwICsxLDMyNSBAQAorIyBD
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
U1VDSCBEQU1BR0UuCisKKyIiIk1vZHVsZSBmb3IgaGFuZGxpbmcgbWVzc2FnZXMgYW5kIGNvbmN1
cnJlbmN5IGZvciBydW4td2Via2l0LXRlc3RzLgorCitUZXN0aW5nIGlzIGFjY29tcGxpc2hlZCBi
eSBoYXZpbmcgYSBtYW5hZ2VyIChUZXN0UnVubmVyKSBnYXRoZXIgYWxsIG9mIHRoZQordGVzdHMg
dG8gYmUgcnVuLCBhbmQgc2VuZGluZyBtZXNzYWdlcyB0byBhIHBvb2wgb2Ygd29ya2VycyAoVGVz
dFNoZWxsVGhyZWFkcykKK3RvIHJ1biBlYWNoIHRlc3QuIEVhY2ggd29ya2VyIGNvbW11bmljYXRl
cyB3aXRoIG9uZSBkcml2ZXIgKHVzdWFsbHkKK0R1bXBSZW5kZXJUcmVlKSB0byBydW4gb25lIHRl
c3QgYXQgYSB0aW1lIGFuZCB0aGVuIGNvbXBhcmUgdGhlIG91dHB1dCBhZ2FpbnN0Cit3aGF0IHdl
IGV4cGVjdGVkIHRvIGdldC4KKworVGhpcyBtb2R1bGVzIGltcGxlbWVudHMgYSBtZXNzYWdlIGJy
b2tlciB0aGF0IGNvbm5lY3RzIHRoZSBtYW5hZ2VyIHRvIHRoZQord29ya2VyczogaXQgcHJvdmlk
ZXMgYSBtZXNzYWdpbmcgYWJzdHJhY3Rpb24gYW5kIG1lc3NhZ2UgbG9vcHMsIGFuZAoraGFuZGxl
cyBsYXVuY2hpbmcgdGhyZWFkcyBhbmQvb3IgcHJvY2Vzc2VzIGRlcGVuZGluZyBvbiB0aGUgcmVx
dWVzdGVkCitjb25maWd1cmF0aW9uLgorCitCb3RoIE1hbmFnZXJzIGFuZCBXb3JrZXJzIGFyZSBy
ZXF1aXJlZCB0byBpbXBsZW1lbnQgdGhlIG1ldGhvZHMgaW4gdGhlCitCcm9rZXJDbGllbnQgaW50
ZXJmYWNlIC8gYWJzdHJhY3QgYmFzZSBjbGFzcyBpbiBvcmRlciB0byB0aGUgbWVzc2FnZQorYnJv
a2VyIHRvIHByb3Blcmx5IGNvbW11bmljYXRlIHdpdGggdGhlbS4KKworRXZlcnl0aGluZyBzdGFy
dHMgYnkgY2FsbGluZyBnZXQoKSB0byBvYnRhaW4gYW4gaW5pdGlhbCByZWZlcmVuY2UgdG8gYSBi
cm9rZXIuCitUaGUgYnJva2VyIGlzIG1lZGlhdGVkIGJ5IGEgQ29ubmVjdGlvbiBvYmplY3QgdGhh
dCBwcm92aWRlcyBzb21lIHN5bnRhY3RpYworc3VnYXIgdG8gcmVwcmVzZW50IHRoZSBNYW5hZ2Vy
IGFuZCBXb3JrZXIgZW5kcG9pbnRzLiBUeXBpY2FsbHkgdGhlCittYW5hZ2VyIHRoZW4gY2FsbHMg
c3RhcnRfd29ya2VyKCkgcmVwZWF0ZWRseSB0byBsYXVuY2ggd29ya2VycyAod2hpY2ggYXJlCit1
c3VhbGx5IHJ1biBpbiBzZXBhcmF0ZSB0aHJlYWRzIG9yIHByb2Nlc3NlcyBhcyBjb250cm9sbGVk
IGJ5IHRoZQorLS13b3JrZXItbW9kZWwgcnVudGltZSBmbGFnKSwgb3B0aW9uYWxseSBzZXRzIHVw
IHNvbWUgdGltZXJzLCBhbmQgdGhlbgoraW52b2tlcyBydW5fbWVzc2FnZV9sb29wKCkuCisiIiIK
KworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IFF1ZXVlCitpbXBvcnQgc3lzCitp
bXBvcnQgdGhyZWFkCitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgdGltZQoraW1wb3J0IHRyYWNl
YmFjaworCisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKKworZnJvbSB3ZWJr
aXRweSBpbXBvcnQgbGF5b3V0X3Rlc3RzCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cyBpbXBv
cnQgcG9ydAorCitpbXBvcnQgbWVzc2FnZV9icm9rZXIyCisKKyMKKyMgSGFuZGxlIFB5dGhvbiA8
IDIuNiB3aGVyZSBtdWx0aXByb2Nlc3NpbmcgaXNuJ3QgYXZhaWxhYmxlLgorIwordHJ5OgorICAg
IF9tdWx0aXByb2Nlc3NpbmdfaXNfYXZhaWxhYmxlID0gVHJ1ZQorICAgIGZyb20gbXVsdGlwcm9j
ZXNzaW5nIGltcG9ydCBQcm9jZXNzIGFzIF9NdWx0aXByb2Nlc3NpbmdfUHJvY2VzcworICAgIGZy
b20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBRdWV1ZSBhcyBfTXVsdGlwcm9jZXNzaW5nX1F1ZXVl
CitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgX211bHRpcHJvY2Vzc2luZ19pc19hdmFpbGFibGUg
PSBGYWxzZQorICAgIF9NdWx0aXByb2Nlc3NpbmdfUHJvY2VzcyA9IHRocmVhZGluZy5UaHJlYWQK
KyAgICBfTXVsdGlwcm9jZXNzaW5nX1F1ZXVlID0gUXVldWUuUXVldWUKKworCisjCisjIFRvcGlj
IG5hbWVzIGZvciBNYW5hZ2VyIDwtPiBXb3JrZXIgbWVzc2FnaW5nCisjCitNQU5BR0VSX1RPUElD
ID0gJ21hbmFnZXJzJworQU5ZX1dPUktFUl9UT1BJQyA9ICd3b3JrZXJzJworCisKK2RlZiBydW50
aW1lX29wdGlvbnMoKToKKyAgICByZXR1cm4gbWVzc2FnZV9icm9rZXIyLnJ1bnRpbWVfb3B0aW9u
cygpCisKKworZGVmIGdldChwb3J0LCBvcHRpb25zLCBtYW5hZ2VyLCB3b3JrZXJfY2xhc3MpOgor
ICAgICIiIlJldHVybiBhIGNvbm5lY3Rpb24gdG8gYSBtYW5hZ2VyL3dvcmtlciBtZXNzYWdlX2Jy
b2tlcgorCisgICAgQXJnczoKKyAgICAgICAgcG9ydCAtIGhhbmRsZSB0byBsYXlvdXRfdGVzdHMv
cG9ydCBvYmplY3QgZm9yIHBvcnQtc3BlY2lmaWMgc3R1ZmYKKyAgICAgICAgb3B0aW9ucyAtIG9w
dHBhcnNlIGFyZ3VtZW50IGZvciBjb21tYW5kLWxpbmUgb3B0aW9ucworICAgICAgICBtYW5hZ2Vy
IC0gb2JqZWN0IHRvIGRpc3BhdGNoIHJlcGxpZXMgdG8KKyAgICAgICAgd29ya2VyX2NsYXNzIC0g
dHlwZSBvZiB3b3JrZXJzIHRvIGNyZWF0ZS4gVGhpcyBjbGFzcyBtdXN0IGltcGxlbWVudAorICAg
ICAgICAgICAgdGhlIG1ldGhvZHMgaW4gdGhlIENsaWVudEludGVyZmFjZS4KKyAgICBSZXR1cm5z
OgorICAgICAgICBBIGhhbmRsZSB0byBhbiBvYmplY3QgdGhhdCB3aWxsIHRhbGsgdG8gYSBtZXNz
YWdlIGJyb2tlciBjb25maWd1cmVkCisgICAgICAgIGZvciB0aGUgbm9ybWFsIG1hbmFnZXIvd29y
a2VyIGNvbW11bmljYXRpb24uCisgICAgIiIiCisgICAgd29ya2VyX21vZGVsID0gb3B0aW9ucy53
b3JrZXJfbW9kZWwKKyAgICBpZiB3b3JrZXJfbW9kZWwgPT0gJ2lubGluZSc6CisgICAgICAgIHF1
ZXVlX2NsYXNzID0gUXVldWUuUXVldWUKKyAgICAgICAgbWFuYWdlcl9jbGFzcyA9IF9JbmxpbmVN
YW5hZ2VyCisgICAgZWxpZiB3b3JrZXJfbW9kZWwgPT0gJ3RocmVhZHMnOgorICAgICAgICBxdWV1
ZV9jbGFzcyA9IFF1ZXVlLlF1ZXVlCisgICAgICAgIG1hbmFnZXJfY2xhc3MgPSBfVGhyZWFkZWRN
YW5hZ2VyCisgICAgZWxpZiB3b3JrZXJfbW9kZWwgPT0gJ3Byb2Nlc3NlcycgYW5kIF9tdWx0aXBy
b2Nlc3NpbmdfaXNfYXZhaWxhYmxlOgorICAgICAgICBxdWV1ZV9jbGFzcyA9IF9NdWx0aXByb2Nl
c3NpbmdfUXVldWUKKyAgICAgICAgbWFuYWdlcl9jbGFzcyA9IF9NdWx0aVByb2Nlc3NNYW5hZ2Vy
CisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5zdXBwb3J0ZWQgdmFsdWUg
Zm9yIC0td29ya2VyLW1vZGVsOiAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtl
cl9tb2RlbCkKKworICAgIGJyb2tlciA9IG1lc3NhZ2VfYnJva2VyMi5Ccm9rZXIob3B0aW9ucywg
cXVldWVfY2xhc3MpCisgICAgcmV0dXJuIG1hbmFnZXJfY2xhc3MoYnJva2VyLCBwb3J0LCBvcHRp
b25zLCBtYW5hZ2VyLCB3b3JrZXJfY2xhc3MpCisKKworY2xhc3MgX01hbmFnZXJDb25uZWN0aW9u
KG1lc3NhZ2VfYnJva2VyMi5Ccm9rZXJDb25uZWN0aW9uKToKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgYnJva2VyLCBvcHRpb25zLCBtYW5hZ2VyLCB3b3JrZXJfY2xhc3MpOgorICAgICAgICBtZXNz
YWdlX2Jyb2tlcjIuQnJva2VyQ29ubmVjdGlvbi5fX2luaXRfXyhzZWxmLCBicm9rZXIsIE1BTkFH
RVJfVE9QSUMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQU5ZX1dPUktFUl9UT1BJQykKKyAgICAgICAgc2VsZi5fYnJva2VyID0gYnJva2VyCisgICAg
ICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCisgICAgICAgIHNlbGYuX21hbmFnZXIgPSBtYW5h
Z2VyCisgICAgICAgIHNlbGYuX3dvcmtlcl9jb25uZWN0aW9uX2NsYXNzID0gTm9uZQorICAgICAg
ICBzZWxmLl93b3JrZXJfY2xhc3MgPSB3b3JrZXJfY2xhc3MKKworICAgIGRlZiBfbWFrZV93b3Jr
ZXJfY29ubmVjdGlvbihzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgor
CisgICAgZGVmIF9tYWtlX3dvcmtlcihzZWxmLCB3b3JrZXJfY29ubmVjdGlvbiwgd29ya2VyX251
bWJlciwgKiprd2FyZ3MpOgorICAgICAgICByZXR1cm4gc2VsZi5fd29ya2VyX2NsYXNzKHdvcmtl
cl9jb25uZWN0aW9uLCB3b3JrZXJfbnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGYuX29wdGlvbnMsICoqa3dhcmdzKQorCisgICAgZGVmIGNsaWVudChzZWxmKToK
KyAgICAgICAgcmV0dXJuIHNlbGYuX21hbmFnZXIKKworICAgIGRlZiBzdGFydF93b3JrZXIoc2Vs
Ziwgd29ya2VyX251bWJlciwgKiprd2FyZ3MpOgorICAgICAgICB3b3JrZXJfY29ubmVjdGlvbiA9
IHNlbGYuX21ha2Vfd29ya2VyX2Nvbm5lY3Rpb24oKQorICAgICAgICB3b3JrZXIgPSBzZWxmLl9t
YWtlX3dvcmtlcih3b3JrZXJfY29ubmVjdGlvbiwgd29ya2VyX251bWJlciwgKiprd2FyZ3MpCisg
ICAgICAgIHdvcmtlcl9jb25uZWN0aW9uLnNldF93b3JrZXIod29ya2VyKQorICAgICAgICB3b3Jr
ZXJfY29ubmVjdGlvbi5zdGFydCgpCisgICAgICAgIHJldHVybiB3b3JrZXJfY29ubmVjdGlvbgor
CisKK2NsYXNzIF9JbmxpbmVNYW5hZ2VyKF9NYW5hZ2VyQ29ubmVjdGlvbik6CisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIGJyb2tlciwgcG9ydCwgb3B0aW9ucywgbWFuYWdlciwgd29ya2VyX2NsYXNz
KToKKyAgICAgICAgX01hbmFnZXJDb25uZWN0aW9uLl9faW5pdF9fKHNlbGYsIGJyb2tlciwgb3B0
aW9ucywgbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtl
cl9jbGFzcykKKyAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKKyAgICAgICAgc2VsZi5faW5saW5l
X3dvcmtlciA9IE5vbmUKKworICAgIGRlZiBfbWFrZV93b3JrZXJfY29ubmVjdGlvbihzZWxmKToK
KyAgICAgICAgc2VsZi5faW5saW5lX3dvcmtlciA9IF9JbmxpbmVXb3JrZXIoc2VsZi5fYnJva2Vy
LCBzZWxmLl9wb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxmLl9tYW5hZ2VyKQorICAgICAgICByZXR1cm4gc2VsZi5faW5saW5lX3dvcmtlcgorCisg
ICAgZGVmIHJ1bl9tZXNzYWdlX2xvb3Aoc2VsZiwgZGVsYXlfc2Vjcz1Ob25lKToKKyAgICAgICAg
IyBOb3RlIHRoYXQgZGVsYXlfc2VjcyBpcyBpZ25vcmVkIGluIHRoaXMgY2FzZSBzaW5jZSB3ZSBj
YW4ndCBlYXNpbHkKKyAgICAgICAgIyBpbXBsZW1lbnQgaXQuCisgICAgICAgIHNlbGYuX2lubGlu
ZV93b3JrZXIucnVuKCkKKyAgICAgICAgc2VsZi5fYnJva2VyLnJ1bl9hbGxfcGVuZGluZyhNQU5B
R0VSX1RPUElDLCBzZWxmLl9tYW5hZ2VyKQorCisKK2NsYXNzIF9UaHJlYWRlZE1hbmFnZXIoX01h
bmFnZXJDb25uZWN0aW9uKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCBwb3J0LCBv
cHRpb25zLCBtYW5hZ2VyLCB3b3JrZXJfY2xhc3MpOgorICAgICAgICBfTWFuYWdlckNvbm5lY3Rp
b24uX19pbml0X18oc2VsZiwgYnJva2VyLCBvcHRpb25zLCBtYW5hZ2VyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyX2NsYXNzKQorICAgICAgICBzZWxmLl9wb3J0
ID0gcG9ydAorCisgICAgZGVmIF9tYWtlX3dvcmtlcl9jb25uZWN0aW9uKHNlbGYpOgorICAgICAg
ICByZXR1cm4gX1RocmVhZGVkV29ya2VyKHNlbGYuX2Jyb2tlciwgc2VsZi5fcG9ydCkKKworCitj
bGFzcyBfTXVsdGlQcm9jZXNzTWFuYWdlcihfTWFuYWdlckNvbm5lY3Rpb24pOgorICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBicm9rZXIsIHBvcnQsIG9wdGlvbnMsIG1hbmFnZXIsIHdvcmtlcl9jbGFz
cyk6CisgICAgICAgIF9NYW5hZ2VyQ29ubmVjdGlvbi5fX2luaXRfXyhzZWxmLCBicm9rZXIsIG9w
dGlvbnMsIG1hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3Jr
ZXJfY2xhc3MpCisgICAgICAgIHNlbGYuX3BsYXRmb3JtX25hbWUgPSBwb3J0Lm5hbWUoKQorCisg
ICAgZGVmIF9tYWtlX3dvcmtlcl9jb25uZWN0aW9uKHNlbGYpOgorICAgICAgICByZXR1cm4gX011
bHRpUHJvY2Vzc1dvcmtlcihzZWxmLl9icm9rZXIsIHNlbGYuX3BsYXRmb3JtX25hbWUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMpCisKKworY2xhc3Mg
X1dvcmtlckNvbm5lY3Rpb24obWVzc2FnZV9icm9rZXIyLkJyb2tlckNvbm5lY3Rpb24pOgorICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXIpOgorICAgICAgICBtZXNzYWdlX2Jyb2tlcjIuQnJv
a2VyQ29ubmVjdGlvbi5fX2luaXRfXyhzZWxmLCBicm9rZXIsIEFOWV9XT1JLRVJfVE9QSUMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFOQUdFUl9U
T1BJQykKKyAgICAgICAgc2VsZi5fd29ya2VyID0gTm9uZQorCisgICAgZGVmIHNldF93b3JrZXIo
c2VsZiwgd29ya2VyKToKKyAgICAgICAgc2VsZi5fd29ya2VyID0gd29ya2VyCisgICAgICAgIHNl
bGYubmFtZSA9IHdvcmtlci5uYW1lKCkKKworICAgIGRlZiBjbGllbnQoc2VsZik6CisgICAgICAg
IHJldHVybiBzZWxmLl93b3JrZXIKKworICAgIGRlZiBzdGFydChzZWxmKToKKyAgICAgICAgcmFp
c2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgcmFp
c2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHlpZWxkX3RvX2Jyb2tlcihzZWxmKToK
KyAgICAgICAgcGFzcworCisgICAgZGVmIGNhbmNlbChzZWxmKToKKyAgICAgICAgcmFpc2UgTm90
SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGlzX2FsaXZlKHNlbGYpOgorICAgICAgICByYWlz
ZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgam9pbihzZWxmLCB0aW1lb3V0KToKKyAg
ICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGxvZ193ZWRnZWRfd29y
a2VyKHNlbGYsIHRlc3RfbmFtZSk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IK
KworCitjbGFzcyBfSW5saW5lV29ya2VyKF9Xb3JrZXJDb25uZWN0aW9uKToKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgYnJva2VyLCBwb3J0LCBtYW5hZ2VyKToKKyAgICAgICAgX1dvcmtlckNvbm5l
Y3Rpb24uX19pbml0X18oc2VsZiwgYnJva2VyKQorICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAor
ICAgICAgICBzZWxmLl9tYW5hZ2VyID0gbWFuYWdlcgorICAgICAgICBzZWxmLl9hbGl2ZSA9IEZh
bHNlCisKKyAgICBkZWYgc3RhcnQoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBydW4o
c2VsZik6CisgICAgICAgIHNlbGYuX2FsaXZlID0gVHJ1ZQorICAgICAgICBzZWxmLl93b3JrZXIu
cnVuKHNlbGYuX3BvcnQpCisgICAgICAgIHNlbGYuX2FsaXZlID0gRmFsc2UKKworICAgIGRlZiB5
aWVsZF90b19icm9rZXIoc2VsZik6CisgICAgICAgIHNlbGYuX2Jyb2tlci5ydW5fYWxsX3BlbmRp
bmcoTUFOQUdFUl9UT1BJQywgc2VsZi5fbWFuYWdlcikKKworICAgIGRlZiBjYW5jZWwoc2VsZik6
CisgICAgICAgIHNlbGYuX3dvcmtlci5jYW5jZWwoKQorCisgICAgZGVmIGlzX2FsaXZlKHNlbGYp
OgorICAgICAgICByZXR1cm4gc2VsZi5fYWxpdmUKKworICAgIGRlZiBqb2luKHNlbGYsIHRpbWVv
dXQpOgorICAgICAgICBhc3NlcnQgbm90IHNlbGYuaXNfYWxpdmUoKQorCisgICAgZGVmIGxvZ193
ZWRnZWRfd29ya2VyKHNlbGYsIHRlc3RfbmFtZSk6CisgICAgICAgIHJhaXNlIEFzc2VydGlvbkVy
cm9yKCJfSW5saW5lV29ya2VyLmxvZ193ZWRnZWRfd29ya2VyKCkgY2FsbGVkIikKKworCitjbGFz
cyBfVGhyZWFkZWRXb3JrZXIodGhyZWFkaW5nLlRocmVhZCwgX1dvcmtlckNvbm5lY3Rpb24pOgor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXIsIHBvcnQpOgorICAgICAgICB0aHJlYWRpbmcu
VGhyZWFkLl9faW5pdF9fKHNlbGYpCisgICAgICAgIF9Xb3JrZXJDb25uZWN0aW9uLl9faW5pdF9f
KHNlbGYsIGJyb2tlcikKKyAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKKworICAgIGRlZiBydW4o
c2VsZik6CisgICAgICAgICMgRklYTUU6IFdlIGNhbiByZW1vdmUgdGhpcyBvbmNlIGV2ZXJ5b25l
IGlzIG9uIDIuNi4KKyAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgJ2lkZW50Jyk6CisgICAg
ICAgICAgICBzZWxmLmlkZW50ID0gdGhyZWFkLmdldF9pZGVudCgpCisgICAgICAgIHNlbGYuX3dv
cmtlci5ydW4oc2VsZi5fcG9ydCkKKworICAgIGRlZiBjYW5jZWwoc2VsZik6CisgICAgICAgIHNl
bGYuX3dvcmtlci5jYW5jZWwoKQorCisgICAgZGVmIGlzX2FsaXZlKHNlbGYpOgorICAgICAgICAj
IEZJWE1FOiBXZSBjYW4gcmVtb3ZlIHRoaXMgb25jZSBldmVyeW9uZSBpcyBvbiAyLjYuCisgICAg
ICAgIHNlbGYuaXNBbGl2ZSgpCisKKyAgICBkZWYgbG9nX3dlZGdlZF93b3JrZXIoc2VsZiwgdGVz
dF9uYW1lKToKKyAgICAgICAgdGlkID0gc2VsZi5pZGVudAorICAgICAgICBzdGFjayA9IF9maW5k
X3RocmVhZF9zdGFjayh0aWQpCisgICAgICAgIGFzc2VydChzdGFjayBpcyBub3QgTm9uZSkKKyAg
ICAgICAgX2xvZy5lcnJvcigiJXMgKHRpZCAlZCkgaXMgd2VkZ2VkIG9uIHRlc3QgJXMiICUKKyAg
ICAgICAgICAgICAgICAgICAoc2VsZi5uYW1lLCB0aWQsIHRlc3RfbmFtZSkpCisgICAgICAgIF9s
b2dfc3RhY2soc3RhY2spCisKKworY2xhc3MgX011bHRpUHJvY2Vzc1dvcmtlcihfTXVsdGlwcm9j
ZXNzaW5nX1Byb2Nlc3MsIF9Xb3JrZXJDb25uZWN0aW9uKToKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgYnJva2VyLCBwbGF0Zm9ybV9uYW1lLCBvcHRpb25zKToKKyAgICAgICAgX011bHRpcHJvY2Vz
c2luZ19Qcm9jZXNzLl9faW5pdF9fKHNlbGYpCisgICAgICAgIF9Xb3JrZXJDb25uZWN0aW9uLl9f
aW5pdF9fKHNlbGYsIGJyb2tlcikKKyAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKKyAg
ICAgICAgc2VsZi5fcGxhdGZvcm1fbmFtZSA9IHBsYXRmb3JtX25hbWUKKworICAgIGRlZiBydW4o
c2VsZik6CisgICAgICAgICMgUmUtY29uZmlndXJlIHRoZSBsb2dnZXIuCisgICAgICAgICMgRklY
TUU6IGZpZ3VyZSBvdXQgaG93IHRvIGdldCBhIGhhbmRsZSB0byB0aGUgcmlnaHQgc3RyZWFtLgor
ICAgICAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKCkKKyAgICAgICAgcG9ydCA9IGxheW91dF90ZXN0
cy5wb3J0LmdldChzZWxmLl9wbGF0Zm9ybV9uYW1lLCBzZWxmLl9vcHRpb25zKQorICAgICAgICBz
ZWxmLl93b3JrZXIucnVuKHBvcnQpCisKKyAgICBkZWYgY2FuY2VsKHNlbGYpOgorICAgICAgICBz
ZWxmLnRlcm1pbmF0ZSgpCisKKyAgICBkZWYgbG9nX3dlZGdlZF93b3JrZXIoc2VsZiwgdGVzdF9u
YW1lKToKKyAgICAgICAgX2xvZy5lcnJvcigiJXMgKHBpZCAlZCkgaXMgd2VkZ2VkIG9uIHRlc3Qg
JXMiICUKKyAgICAgICAgICAgICAgICAgICAoc2VsZi5uYW1lLCBzZWxmLnBpZCwgdGVzdF9uYW1l
KSkKKworCitkZWYgX2ZpbmRfdGhyZWFkX3N0YWNrKHRpZCk6CisgICAgIiIiUmV0dXJucyBhIHN0
YWNrIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIGR1bXAgYSBzdGFjayB0cmFjZSBmb3IKKyAg
ICB0aGUgZ2l2ZW4gdGhyZWFkIGlkIChvciBOb25lIGlmIHRoZSBpZCBpcyBub3QgZm91bmQpLiIi
IgorICAgIGZvciB0aHJlYWRfaWQsIHN0YWNrIGluIHN5cy5fY3VycmVudF9mcmFtZXMoKS5pdGVt
cygpOgorICAgICAgICBpZiB0aHJlYWRfaWQgPT0gdGlkOgorICAgICAgICAgICAgcmV0dXJuIHN0
YWNrCisgICAgcmV0dXJuIE5vbmUKKworCitkZWYgX2xvZ19zdGFjayhzdGFjayk6CisgICAgIiIi
TG9nIGEgc3RhY2sgdHJhY2UgdG8gbG9nLmVycm9yKCkuIiIiCisgICAgZm9yIGZpbGVuYW1lLCBs
aW5lbm8sIG5hbWUsIGxpbmUgaW4gdHJhY2ViYWNrLmV4dHJhY3Rfc3RhY2soc3RhY2spOgorICAg
ICAgICBfbG9nLmVycm9yKCdGaWxlOiAiJXMiLCBsaW5lICVkLCBpbiAlcycgJSAoZmlsZW5hbWUs
IGxpbmVubywgbmFtZSkpCisgICAgICAgIGlmIGxpbmU6CisgICAgICAgICAgICBfbG9nLmVycm9y
KCcgICVzJyAlIGxpbmUuc3RyaXAoKSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21hbmFnZXJfd29ya2VyX2Jyb2tlcl91bml0
dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNr
YWdlL21hbmFnZXJfd29ya2VyX2Jyb2tlcl91bml0dGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZWYxYjQ1
NzNmZmY0ODZiMjIyMzhhN2FiNzY3M2I3ZDU5MzM4YjZiCi0tLSAvZGV2L251bGwKKysrIGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlcl93
b3JrZXJfYnJva2VyX3VuaXR0ZXN0LnB5CkBAIC0wLDAgKzEsMzExIEBACisjIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1
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
RS4KKworaW1wb3J0IG9wdHBhcnNlCitpbXBvcnQgUXVldWUKK2ltcG9ydCBzeXMKK2ltcG9ydCB1
bml0dGVzdAorCit0cnk6CisgICAgX211bHRpcHJvY2Vzc2luZ19pc19hdmFpbGFibGUgPSBUcnVl
CisgICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFF1ZXVlIGFzIF9NdWx0aXByb2Nlc3Np
bmdfUXVldWUKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBfbXVsdGlwcm9jZXNzaW5nX2lzX2F2
YWlsYWJsZSA9IEZhbHNlCisgICAgX011bHRpcHJvY2Vzc2luZ19RdWV1ZSA9IFF1ZXVlLlF1ZXVl
CisKKworZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBvdXRwdXRjYXB0dXJlCitm
cm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cyBpbXBvcnQgcG9ydAorCitpbXBvcnQgbWVzc2FnZV9i
cm9rZXIyCitpbXBvcnQgbWFuYWdlcl93b3JrZXJfYnJva2VyCitpbXBvcnQgcHJpbnRpbmcKKwor
CitjbGFzcyBUZXN0V29ya2VyKG1lc3NhZ2VfYnJva2VyMi5DbGllbnRJbnRlcmZhY2UpOgorICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXIsIHdvcmtlcl9udW1iZXIsIG9wdGlvbnMsICoqa3dh
cmdzKToKKyAgICAgICAgc2VsZi5fYnJva2VyID0gYnJva2VyCisgICAgICAgIHNlbGYuX29wdGlv
bnMgPSBvcHRpb25zCisgICAgICAgIHNlbGYuX3dvcmtlcl9udW1iZXIgPSB3b3JrZXJfbnVtYmVy
CisgICAgICAgIHNlbGYuX25hbWUgPSAnVGVzdFdvcmtlci8lZCcgJSB3b3JrZXJfbnVtYmVyCisg
ICAgICAgIHNlbGYuX2NhbmNlbGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5fc3RvcHBlZCA9IEZh
bHNlCisgICAgICAgIHNlbGYuX3N0YXJ0aW5nX3F1ZXVlID0ga3dhcmdzLmdldCgnc3RhcnRpbmdf
cXVldWUnKQorICAgICAgICBzZWxmLl9zdG9wcGluZ19xdWV1ZSA9IGt3YXJncy5nZXQoJ3N0b3Bw
aW5nX3F1ZXVlJykKKworICAgIGRlZiBjYW5jZWwoc2VsZik6CisgICAgICAgIHNlbGYuX2NhbmNl
bGVkID0gVHJ1ZQorCisgICAgZGVmIGhhbmRsZV9zdG9wKHNlbGYsIHNyYyk6CisgICAgICAgIHNl
bGYuX3N0b3BwZWQgPSBUcnVlCisKKyAgICBkZWYgaGFuZGxlX3Rlc3Qoc2VsZiwgc3JjLCBhbl9p
bnQsIGFfc3RyKToKKyAgICAgICAgYXNzZXJ0IGFuX2ludCA9PSAxCisgICAgICAgIGFzc2VydCBh
X3N0ciA9PSAiaGVsbG8sIHdvcmxkIgorICAgICAgICBzZWxmLl9icm9rZXIucG9zdF9tZXNzYWdl
KCd0ZXN0JywgMiwgJ2hpLCBldmVyeWJvZHknKQorCisgICAgZGVmIGlzX2RvbmUoc2VsZik6Cisg
ICAgICAgIHJldHVybiBzZWxmLl9zdG9wcGVkIG9yIHNlbGYuX2NhbmNlbGVkCisKKyAgICBkZWYg
bmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX25hbWUKKworICAgIGRlZiBzdGFydChz
ZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHJ1bihzZWxmLCBwb3J0KToKKyAgICAgICAg
aWYgc2VsZi5fc3RhcnRpbmdfcXVldWU6CisgICAgICAgICAgICBzZWxmLl9zdGFydGluZ19xdWV1
ZS5wdXQoJycpCisgICAgICAgIGlmIHNlbGYuX3N0b3BwaW5nX3F1ZXVlOgorICAgICAgICAgICAg
c2VsZi5fc3RvcHBpbmdfcXVldWUuZ2V0KCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2Vs
Zi5fYnJva2VyLnJ1bl9tZXNzYWdlX2xvb3AoKQorICAgICAgICAgICAgc2VsZi5fYnJva2VyLnlp
ZWxkX3RvX2Jyb2tlcigpCisgICAgICAgICAgICBzZWxmLl9icm9rZXIucG9zdF9tZXNzYWdlKCdk
b25lJykKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIHNlbGYuX2Jy
b2tlci5wb3N0X21lc3NhZ2UoJ2V4Y2VwdGlvbicsICh0eXBlKGUpLCBzdHIoZSksIE5vbmUpKQor
CisKK2RlZiBnZXRfb3B0aW9ucyh3b3JrZXJfbW9kZWwpOgorICAgIG9wdGlvbl9saXN0ID0gbWVz
c2FnZV9icm9rZXIyLnJ1bnRpbWVfb3B0aW9ucygpCisgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0
aW9uUGFyc2VyKG9wdGlvbl9saXN0PW9wdGlvbl9saXN0KQorICAgIG9wdGlvbnMsIGFyZ3MgPSBw
YXJzZXIucGFyc2VfYXJncyhhcmdzPVsnLS13b3JrZXItbW9kZWwnLCB3b3JrZXJfbW9kZWxdKQor
ICAgIHJldHVybiBvcHRpb25zCisKKworZGVmIG1ha2VfYnJva2VyKG1hbmFnZXIsIHdvcmtlcl9t
b2RlbCk6CisgICAgb3B0aW9ucyA9IGdldF9vcHRpb25zKHdvcmtlcl9tb2RlbCkKKyAgICByZXR1
cm4gbWFuYWdlcl93b3JrZXJfYnJva2VyLmdldChwb3J0LmdldCgidGVzdCIpLCBvcHRpb25zLCBt
YW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlc3RXb3JrZXIp
CisKKworY2xhc3MgRnVuY3Rpb25UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRl
c3RfZ2V0X19pbmxpbmUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYWtlX2Jyb2tl
cihzZWxmLCAnaW5saW5lJykgaXMgbm90IE5vbmUpCisKKyAgICBkZWYgdGVzdF9nZXRfX3RocmVh
ZHMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYWtlX2Jyb2tlcihzZWxmLCAndGhy
ZWFkcycpIGlzIG5vdCBOb25lKQorCisgICAgZGVmIHRlc3RfZ2V0X19wcm9jZXNzZXMoc2VsZik6
CisgICAgICAgIGlmIF9tdWx0aXByb2Nlc3NpbmdfaXNfYXZhaWxhYmxlOgorICAgICAgICAgICAg
c2VsZi5hc3NlcnRUcnVlKG1ha2VfYnJva2VyKHNlbGYsICdwcm9jZXNzZXMnKSBpcyBub3QgTm9u
ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJy
b3IsIG1ha2VfYnJva2VyLCBzZWxmLCAncHJvY2Vzc2VzJykKKworICAgIGRlZiB0ZXN0X2dldF9f
dW5rbm93bihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWFr
ZV9icm9rZXIsIHNlbGYsICd1bmtub3duJykKKworCitjbGFzcyBfVGVzdHNNaXhpbihvYmplY3Qp
OgorICAgICIiIk1peGluIGNsYXNzIHRoYXQgaW1wbGVtZW50cyBhIHNlcmllcyBvZiB0ZXN0cyB0
byBlbmZvcmNlIHRoZQorICAgIGNvbnRyYWN0IGFsbCBpbXBsZW1lbnRhdGlvbnMgbXVzdCBmb2xs
b3cuIiIiCisKKyAgICAjCisgICAgIyBNZXRob2RzIHRvIGltcGxlbWVudCB0aGUgTWFuYWdlciBz
aWRlIG9mIHRoZSBDbGllbnRJbnRlcmZhY2UKKyAgICAjCisgICAgZGVmIG5hbWUoc2VsZik6Cisg
ICAgICAgIHJldHVybiAnVGVzdGVyJworCisgICAgZGVmIGlzX2RvbmUoc2VsZik6CisgICAgICAg
IHJldHVybiBzZWxmLl9kb25lCisKKyAgICAjCisgICAgIyBIYW5kbGVycyBmb3IgdGhlIG1lc3Nh
Z2VzIHRoZSBUZXN0V29ya2VyIG1heSBzZW5kLgorICAgICMKKyAgICBkZWYgaGFuZGxlX2RvbmUo
c2VsZiwgc3JjKToKKyAgICAgICAgc2VsZi5fZG9uZSA9IFRydWUKKworICAgIGRlZiBoYW5kbGVf
dGVzdChzZWxmLCBzcmMsIGFuX2ludCwgYV9zdHIpOgorICAgICAgICBzZWxmLl9hbl9pbnQgPSBh
bl9pbnQKKyAgICAgICAgc2VsZi5fYV9zdHIgPSBhX3N0cgorCisgICAgZGVmIGhhbmRsZV9leGNl
cHRpb24oc2VsZiwgc3JjLCBleGNfaW5mbyk6CisgICAgICAgIHNlbGYuX2V4Y2VwdGlvbiA9IGV4
Y19pbmZvCisgICAgICAgIHNlbGYuX2RvbmUgPSBUcnVlCisKKyAgICAjCisgICAgIyBUZXN0aW5n
IGhlbHBlciBtZXRob2RzCisgICAgIworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2Vs
Zi5fYW5faW50ID0gTm9uZQorICAgICAgICBzZWxmLl9hX3N0ciA9IE5vbmUKKyAgICAgICAgc2Vs
Zi5fYnJva2VyID0gTm9uZQorICAgICAgICBzZWxmLl9kb25lID0gRmFsc2UKKyAgICAgICAgc2Vs
Zi5fZXhjZXB0aW9uID0gTm9uZQorICAgICAgICBzZWxmLl93b3JrZXJfbW9kZWwgPSBOb25lCisK
KyAgICBkZWYgbWFrZV9icm9rZXIoc2VsZik6CisgICAgICAgIHNlbGYuX2Jyb2tlciA9IG1ha2Vf
YnJva2VyKHNlbGYsIHNlbGYuX3dvcmtlcl9tb2RlbCkKKworICAgICMKKyAgICAjIEFjdHVhbCB1
bml0IHRlc3RzCisgICAgIworICAgIGRlZiB0ZXN0X2NhbmNlbChzZWxmKToKKyAgICAgICAgaWYg
bm90IHNlbGYuX3dvcmtlcl9tb2RlbDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxm
Lm1ha2VfYnJva2VyKCkKKyAgICAgICAgd29ya2VyID0gc2VsZi5fYnJva2VyLnN0YXJ0X3dvcmtl
cigwKQorICAgICAgICB3b3JrZXIuY2FuY2VsKCkKKyAgICAgICAgc2VsZi5fYnJva2VyLnBvc3Rf
bWVzc2FnZSgndGVzdCcsIDEsICdoZWxsbywgd29ybGQnKQorICAgICAgICB3b3JrZXIuam9pbigw
LjUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uod29ya2VyLmlzX2FsaXZlKCkpCisKKyAgICBk
ZWYgdGVzdF9kb25lKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5fd29ya2VyX21vZGVsOgor
ICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYubWFrZV9icm9rZXIoKQorICAgICAgICB3
b3JrZXIgPSBzZWxmLl9icm9rZXIuc3RhcnRfd29ya2VyKDApCisgICAgICAgIHNlbGYuX2Jyb2tl
ci5wb3N0X21lc3NhZ2UoJ3Rlc3QnLCAxLCAnaGVsbG8sIHdvcmxkJykKKyAgICAgICAgc2VsZi5f
YnJva2VyLnBvc3RfbWVzc2FnZSgnc3RvcCcpCisgICAgICAgIHNlbGYuX2Jyb2tlci5ydW5fbWVz
c2FnZV9sb29wKCkKKyAgICAgICAgd29ya2VyLmpvaW4oMC41KQorICAgICAgICBzZWxmLmFzc2Vy
dEZhbHNlKHdvcmtlci5pc19hbGl2ZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5p
c19kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYW5faW50LCAyKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2Ffc3RyLCAnaGksIGV2ZXJ5Ym9keScpCisKKyAg
ICBkZWYgdGVzdF9sb2dfd2VkZ2VkX3dvcmtlcihzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYu
X3dvcmtlcl9tb2RlbDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzdGFydGluZ19xdWV1
ZSA9IHNlbGYucXVldWUoKQorICAgICAgICBzdG9wcGluZ19xdWV1ZSA9IHNlbGYucXVldWUoKQor
ICAgICAgICBzZWxmLm1ha2VfYnJva2VyKCkKKyAgICAgICAgb2MgPSBvdXRwdXRjYXB0dXJlLk91
dHB1dENhcHR1cmUoKQorICAgICAgICBvYy5jYXB0dXJlX291dHB1dCgpCisgICAgICAgIHdvcmtl
ciA9IHNlbGYuX2Jyb2tlci5zdGFydF93b3JrZXIoMCwKKyAgICAgICAgICAgIHN0YXJ0aW5nX3F1
ZXVlPXN0YXJ0aW5nX3F1ZXVlLCBzdG9wcGluZ19xdWV1ZT1zdG9wcGluZ19xdWV1ZSkKKyAgICAg
ICAgc3RhcnRpbmdfcXVldWUuZ2V0KCkKKyAgICAgICAgd29ya2VyLmxvZ193ZWRnZWRfd29ya2Vy
KCd0ZXN0X25hbWUnKQorICAgICAgICBzdG9wcGluZ19xdWV1ZS5wdXQoJycpCisgICAgICAgIHNl
bGYuX2Jyb2tlci5wb3N0X21lc3NhZ2UoJ3N0b3AnKQorICAgICAgICBzZWxmLl9icm9rZXIucnVu
X21lc3NhZ2VfbG9vcCgpCisgICAgICAgIHdvcmtlci5qb2luKDAuNSkKKyAgICAgICAgb2MucmVz
dG9yZV9vdXRwdXQoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHdvcmtlci5pc19hbGl2ZSgp
KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5pc19kb25lKCkpCisKKyAgICBkZWYgdGVz
dF91bmtub3duX21lc3NhZ2Uoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLl93b3JrZXJfbW9k
ZWw6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5tYWtlX2Jyb2tlcigpCisgICAg
ICAgIHdvcmtlciA9IHNlbGYuX2Jyb2tlci5zdGFydF93b3JrZXIoMCkKKyAgICAgICAgc2VsZi5f
YnJva2VyLnBvc3RfbWVzc2FnZSgndW5rbm93bicpCisgICAgICAgIHNlbGYuX2Jyb2tlci5ydW5f
bWVzc2FnZV9sb29wKCkKKyAgICAgICAgd29ya2VyLmpvaW4oMC41KQorCisgICAgICAgIHNlbGYu
YXNzZXJ0VHJ1ZShzZWxmLmlzX2RvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh3b3Jr
ZXIuaXNfYWxpdmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5fZXhjZXB0aW9u
WzBdLCBWYWx1ZUVycm9yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLl9leGNlcHRp
b25bMV0sCisgICAgICAgICAgICAiVGVzdFdvcmtlci8wOiByZWNlaXZlZCBtZXNzYWdlICd1bmtu
b3duJyBpdCBjb3VsZG4ndCBoYW5kbGUiKQorCisKK2NsYXNzIElubGluZUJyb2tlclRlc3RzKF9U
ZXN0c01peGluLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAg
ICAgICBfVGVzdHNNaXhpbi5zZXRVcChzZWxmKQorICAgICAgICBzZWxmLl93b3JrZXJfbW9kZWwg
PSAnaW5saW5lJworCisgICAgZGVmIHRlc3RfbG9nX3dlZGdlZF93b3JrZXIoc2VsZik6CisgICAg
ICAgIHNlbGYubWFrZV9icm9rZXIoKQorICAgICAgICB3b3JrZXIgPSBzZWxmLl9icm9rZXIuc3Rh
cnRfd29ya2VyKDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCB3
b3JrZXIubG9nX3dlZGdlZF93b3JrZXIsIE5vbmUpCisKKworY2xhc3MgTXVsdGlQcm9jZXNzQnJv
a2VyVGVzdHMoX1Rlc3RzTWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAo
c2VsZik6CisgICAgICAgIF9UZXN0c01peGluLnNldFVwKHNlbGYpCisgICAgICAgIGlmIF9tdWx0
aXByb2Nlc3NpbmdfaXNfYXZhaWxhYmxlOgorICAgICAgICAgICAgc2VsZi5fd29ya2VyX21vZGVs
ID0gJ3Byb2Nlc3NlcycKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3dvcmtlcl9t
b2RlbCA9IE5vbmUKKworICAgIGRlZiBxdWV1ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIF9NdWx0
aXByb2Nlc3NpbmdfUXVldWUoKQorCisKK2NsYXNzIFRocmVhZGVkQnJva2VyVGVzdHMoX1Rlc3Rz
TWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgcXVldWUoc2VsZik6CisgICAgICAg
IHJldHVybiBRdWV1ZS5RdWV1ZSgpCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIF9U
ZXN0c01peGluLnNldFVwKHNlbGYpCisgICAgICAgIHNlbGYuX3dvcmtlcl9tb2RlbCA9ICd0aHJl
YWRzJworCisKK2NsYXNzIEZ1bmN0aW9uc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRl
ZiB0ZXN0X2ZpbmRfdGhyZWFkX3N0YWNrX2ZvdW5kKHNlbGYpOgorICAgICAgICBpZCwgc3RhY2sg
PSBzeXMuX2N1cnJlbnRfZnJhbWVzKCkuaXRlbXMoKVswXQorICAgICAgICBmb3VuZF9zdGFjayA9
IG1hbmFnZXJfd29ya2VyX2Jyb2tlci5fZmluZF90aHJlYWRfc3RhY2soaWQpCisgICAgICAgIHNl
bGYuYXNzZXJ0Tm90RXF1YWwoZm91bmRfc3RhY2ssIE5vbmUpCisKKyAgICBkZWYgdGVzdF9maW5k
X3RocmVhZF9zdGFja19ub3RfZm91bmQoc2VsZik6CisgICAgICAgIGZvdW5kX3N0YWNrID0gbWFu
YWdlcl93b3JrZXJfYnJva2VyLl9maW5kX3RocmVhZF9zdGFjaygwKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKGZvdW5kX3N0YWNrLCBOb25lKQorCisgICAgZGVmIHRlc3RfbG9nX3N0YWNrKHNl
bGYpOgorICAgICAgICBpZCwgc3RhY2sgPSBzeXMuX2N1cnJlbnRfZnJhbWVzKCkuaXRlbXMoKVsw
XQorICAgICAgICBvYyA9IG91dHB1dGNhcHR1cmUuT3V0cHV0Q2FwdHVyZSgpCisgICAgICAgICMg
RklYTUU6IHZlcmlmeSBvdXRwdXQ/CisgICAgICAgIG9jLmNhcHR1cmVfb3V0cHV0KCkKKyAgICAg
ICAgbWFuYWdlcl93b3JrZXJfYnJva2VyLl9sb2dfc3RhY2soc3RhY2spCisgICAgICAgIG9jLnJl
c3RvcmVfb3V0cHV0KCkKKworICAgIGRlZiB0ZXN0X3J1bnRpbWVfb3B0aW9ucyhzZWxmKToKKyAg
ICAgICAgb3B0aW9uX2xpc3QgPSBtYW5hZ2VyX3dvcmtlcl9icm9rZXIucnVudGltZV9vcHRpb25z
KCkKKyAgICAgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKG9wdGlvbl9saXN0PW9w
dGlvbl9saXN0KQorICAgICAgICBvcHRpb25zLCBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoW10p
CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcHRpb25zKQorCisKK2NsYXNzIEludGVyZmFjZVRl
c3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVGhlc2UgdGVzdHMgbW9zdGx5IGV4aXN0IHRv
IHBhY2lmeSBjb3ZlcmFnZS4KKworICAgICMgRklYTUU6IFRoZXJlIG11c3QgYmUgYSBiZXR0ZXIg
d2F5IHRvIGRvIHRoaXMgYW5kIGFsc28gdmVyaWZ5CisgICAgIyB0aGF0IGNsYXNzZXMgZG8gaW1w
bGVtZW50IGV2ZXJ5IGFic3RyYWN0IG1ldGhvZCBpbiBhbiBpbnRlcmZhY2UuCisgICAgZGVmIHRl
c3RfbWFuYWdlcmNvbm5lY3Rpb25faXNfYWJzdHJhY3Qoc2VsZik6CisgICAgICAgICMgVGVzdCB0
aGF0IGFsbCB0aGUgYmFzZSBjbGFzcyBtZXRob2RzIGFyZSBhYnN0cmFjdCBhbmQgaGF2ZSB0aGUK
KyAgICAgICAgIyBzaWduYXR1cmUgd2UgZXhwZWN0LgorICAgICAgICBicm9rZXIgPSBtYWtlX2Jy
b2tlcihzZWxmLCAnaW5saW5lJykKKyAgICAgICAgb2JqID0gbWFuYWdlcl93b3JrZXJfYnJva2Vy
Ll9NYW5hZ2VyQ29ubmVjdGlvbihicm9rZXIuX2Jyb2tlciwgTm9uZSwgc2VsZiwgTm9uZSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgb2JqLl9tYWtlX3dv
cmtlcl9jb25uZWN0aW9uKQorCisgICAgZGVmIHRlc3Rfd29ya2VyY29ubmVjdGlvbl9pc19hYnN0
cmFjdChzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgYWxsIHRoZSBiYXNlIGNsYXNzIG1ldGhv
ZHMgYXJlIGFic3RyYWN0IGFuZCBoYXZlIHRoZQorICAgICAgICAjIHNpZ25hdHVyZSB3ZSBleHBl
Y3QuCisgICAgICAgIGJyb2tlciA9IG1ha2VfYnJva2VyKHNlbGYsICdpbmxpbmUnKQorICAgICAg
ICBvYmogPSBtYW5hZ2VyX3dvcmtlcl9icm9rZXIuX1dvcmtlckNvbm5lY3Rpb24oYnJva2VyLl9i
cm9rZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIG9i
ai5zdGFydCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwg
b2JqLnJ1bikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwg
b2JqLmNhbmNlbCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJv
ciwgb2JqLmlzX2FsaXZlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRl
ZEVycm9yLCBvYmouam9pbiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1w
bGVtZW50ZWRFcnJvciwgb2JqLmxvZ193ZWRnZWRfd29ya2VyLCBOb25lKQorCisKK2lmIF9fbmFt
ZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jy
b2tlcjIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFj
a2FnZS9tZXNzYWdlX2Jyb2tlcjIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjQ2ZjUwZTZmNjc4ZDVhOWEwY2Fl
YWIyYjgyYmNkNmFmOGU0MzY3YwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2VfYnJva2VyMi5weQpAQCAt
MCwwICsxLDIwNCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIwor
IyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisj
IGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisj
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIk1vZHVsZSBmb3IgaGFuZGxpbmcg
bWVzc2FnZXMgYW5kIGNvbmN1cnJlbmN5IGZvciBydW4td2Via2l0LXRlc3RzLgorCitUZXN0aW5n
IGlzIGFjY29tcGxpc2hlZCBieSBoYXZpbmcgYSBtYW5hZ2VyIChUZXN0UnVubmVyKSBnYXRoZXIg
YWxsIG9mIHRoZQordGVzdHMgdG8gYmUgcnVuLCBhbmQgc2VuZGluZyBtZXNzYWdlcyB0byBhIHBv
b2wgb2Ygd29ya2VycyAoVGVzdFNoZWxsVGhyZWFkcykKK3RvIHJ1biBlYWNoIHRlc3QuIEVhY2gg
d29ya2VyIGNvbW11bmljYXRlcyB3aXRoIG9uZSBkcml2ZXIgKHVzdWFsbHkKK0R1bXBSZW5kZXJU
cmVlKSB0byBydW4gb25lIHRlc3QgYXQgYSB0aW1lIGFuZCB0aGVuIGNvbXBhcmUgdGhlIG91dHB1
dCBhZ2FpbnN0Cit3aGF0IHdlIGV4cGVjdGVkIHRvIGdldC4KKworVGhpcyBtb2R1bGVzIGltcGxl
bWVudHMgYSBtZXNzYWdlIGJyb2tlciB0aGF0IGNvbm5lY3RzIHRoZSBtYW5hZ2VyIHRvIHRoZQor
d29ya2VyczogaXQgcHJvdmlkZXMgYSBtZXNzYWdpbmcgYWJzdHJhY3Rpb24gYW5kIG1lc3NhZ2Ug
bG9vcHMsIGFuZAoraGFuZGxlcyBsYXVuY2hpbmcgdGhyZWFkcyBhbmQvb3IgcHJvY2Vzc2VzIGRl
cGVuZGluZyBvbiB0aGUgcmVxdWVzdGVkCitjb25maWd1cmF0aW9uLgorCitCb3RoIE1hbmFnZXJz
IGFuZCBXb3JrZXJzIGFyZSByZXF1aXJlZCB0byBpbXBsZW1lbnQgdGhlIG1ldGhvZHMgaW4gdGhl
CitCcm9rZXJDbGllbnQgaW50ZXJmYWNlIC8gYWJzdHJhY3QgYmFzZSBjbGFzcyBpbiBvcmRlciB0
byB0aGUgbWVzc2FnZQorYnJva2VyIHRvIHByb3Blcmx5IGNvbW11bmljYXRlIHdpdGggdGhlbS4K
KworRXZlcnl0aGluZyBzdGFydHMgYnkgY2FsbGluZyBnZXQoKSB0byBvYnRhaW4gYW4gaW5pdGlh
bCByZWZlcmVuY2UgdG8gYSBicm9rZXIuCitUaGUgYnJva2VyIGlzIG1lZGlhdGVkIGJ5IGEgQ29u
bmVjdGlvbiBvYmplY3QgdGhhdCBwcm92aWRlcyBzb21lIHN5bnRhY3RpYworc3VnYXIgdG8gcmVw
cmVzZW50IHRoZSBNYW5hZ2VyIGFuZCBXb3JrZXIgZW5kcG9pbnRzLiBUeXBpY2FsbHkgdGhlCitt
YW5hZ2VyIHRoZW4gY2FsbHMgc3RhcnRfd29ya2VyKCkgcmVwZWF0ZWRseSB0byBsYXVuY2ggd29y
a2VycyAod2hpY2ggYXJlCit1c3VhbGx5IHJ1biBpbiBzZXBhcmF0ZSB0aHJlYWRzIG9yIHByb2Nl
c3NlcyBhcyBjb250cm9sbGVkIGJ5IHRoZQorLS13b3JrZXItbW9kZWwgcnVudGltZSBmbGFnKSwg
b3B0aW9uYWxseSBzZXRzIHVwIHNvbWUgdGltZXJzLCBhbmQgdGhlbgoraW52b2tlcyBydW5fbWVz
c2FnZV9sb29wKCkuCisiIiIKKworaW1wb3J0IGNQaWNrbGUKK2ltcG9ydCBsb2dnaW5nCitpbXBv
cnQgb3B0cGFyc2UKK2ltcG9ydCBRdWV1ZQoraW1wb3J0IHRpbWUKKworCitfbG9nID0gbG9nZ2lu
Zy5nZXRMb2dnZXIoX19uYW1lX18pCisKKworY2xhc3MgQ2xpZW50SW50ZXJmYWNlKG9iamVjdCk6
CisgICAgIiIiQWJzdHJhY3QgYmFzZSBjbGFzcyAvIGludGVyZmFjZSB0aGF0IGFsbCBtZXNzYWdl
IGJyb2tlciBjbGllbnRzIG11c3QKKyAgICBpbXBsZW1lbnQuIEluIGFkZGl0aW9uIHRvIHRoZSBt
ZXRob2RzIGJlbG93LCBieSBjb252ZW50aW9uIGNsaWVudHMKKyAgICBpbXBsZW1lbnQgcm91dGlu
ZXMgb2YgdGhlIHNpZ25hdHVyZSB0eXBlCisKKyAgICAgICAgaGFuZGxlX01FU1NBR0VfTkFNRShz
ZWxmLCBzcmMsIC4uLik6CisKKyAgICB3aGVyZSBNRVNTQUdFX05BTUUgbWF0Y2hlcyB0aGUgc3Ry
aW5nIHBhc3NlZCB0byBwb3N0X21lc3NhZ2UoKSwgYW5kCisgICAgc3JjIGluZGljYXRlcyB0aGUg
bmFtZSBvZiB0aGUgc2VuZGVyLiBJZiB0aGUgbWVzc2FnZSBjb250YWlucyB2YWx1ZXMgaW4KKyAg
ICB0aGUgbWVzc2FnZSBib2R5LCB0aG9zZSB3aWxsIGJlIHByb3ZpZGVkIGFzIG9wdHBhcmFtcy4i
IiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXJfY29ubmVjdGlvbiwgd29ya2VyX251
bWJlciwgb3B0aW9ucywgKiprd2FyZ3MpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVy
cm9yCisKKyAgICBkZWYgY2FuY2VsKHNlbGYpOgorICAgICAgICAiIiJDYWxsZWQgKGlmIHBvc3Np
YmxlKSB0byBub3RpZnkgdGhlIHdvcmtlciB0aGF0IGl0IGhhcyBiZWVuIGFib3J0ZWQuCisKKyAg
ICAgICAgT25seSB3b3JrZXJzIG5lZWQgaW1wbGVtZW50IHRoaXMgbWV0aG9kLiBXb3JrZXJzIGNh
bm5vdCByZWx5IG9uIHRoaXMKKyAgICAgICAgbWV0aG9kIGFsd2F5cyBiZWluZyBjYWxsZWQuIEZv
ciBleGFtcGxlLCB3b3JrZXJzIHJ1bm5pbmcgaW4gdGhlaXIKKyAgICAgICAgb3duIHByb2Nlc3Nl
cyBtYXkgYmUga2lsbGVkIGRpcmVjdGx5IGluc3RlYWQgb2YgaW52b2tpbmcgdGhpcyBtZXRob2QK
KyAgICAgICAgYW5kIHdhaXRpbmcgZm9yIHRoZSB0aGUgd29ya2VyIHRvIGV4aXQuIiIiCisgICAg
ICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBpc19kb25lKHNlbGYpOgor
ICAgICAgICAiIiJDYWxsZWQgZnJvbSBpbnNpZGUgcnVuX21lc3NhZ2VfbG9vcCgpIHRvIGluZGlj
YXRlIHdoZXRoZXIgdG8gZXhpdC4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJv
cgorCisgICAgZGVmIG5hbWUoc2VsZik6CisgICAgICAgICIiIlJldHVybiBhIG5hbWUgdGhhdCBp
ZGVudGlmaWVzIHRoZSB3b3JrZXIgb3IgbWFuYWdlci4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1w
bGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHJ1bihzZWxmLCBwb3J0KToKKyAgICAgICAgIiIiT25s
eSB3b3JrZXJzIG5lZWQgaW1wbGVtZW50IHRoaXMgbWV0aG9kLiIiIgorICAgICAgICByYWlzZSBO
b3RJbXBsZW1lbnRlZEVycm9yCisKKworZGVmIHJ1bnRpbWVfb3B0aW9ucygpOgorICAgICIiIlJl
dHVybiBhIGxpc3Qgb2Ygb3B0cGFyc2UuT3B0aW9uIG9iamVjdHMgZm9yIGFueSBydW50aW1lIHZh
bHVlcyB1c2VkCisgICAgYnkgdGhpcyBtZXRob2QuIiIiCisgICAgb3B0aW9ucyA9IFsKKyAgICAg
ICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0td29ya2VyLW1vZGVsIiwgYWN0aW9uPSJzdG9yZSIs
CisgICAgICAgICAgICBoZWxwPSgiY29udHJvbHMgd29ya2VyIG1vZGVsLiBWYWxpZCB2YWx1ZXMg
YXJlICIKKyAgICAgICAgICAgICInaW5saW5lJywgJ3RocmVhZHMnLCBhbmQgJ3Byb2Nlc3Nlcycu
IikpLAorICAgIF0KKyAgICByZXR1cm4gb3B0aW9ucworCisKK2NsYXNzIEJyb2tlcihvYmplY3Qp
OgorICAgICIiIlRoaXMgY2xhc3MgaW1wbGVtZW50cyBhIGdlbmVyaWMgbWVzc2FnZSBicm9rZXIu
IiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb3B0aW9ucywgcXVldWVfbWFrZXIpOgorICAg
ICAgICAiIiJSZXR1cm4gYSBtZXNzYWdlIGJyb2tlciBmb3IgbWFuYWdlci93b3JrZXIgY29tbXVu
aWNhdGlvbi4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgb3B0aW9uczogYSBydW50aW1l
IG9wdGlvbiBjbGFzcyBmcm9tIG9wdHBhcnNlCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9v
cHRpb25zID0gb3B0aW9ucworICAgICAgICBzZWxmLl9xdWV1ZV9tYWtlciA9IHF1ZXVlX21ha2Vy
CisgICAgICAgIHNlbGYuX3RvcGljcyA9IHt9CisKKyAgICBkZWYgYWRkX3RvcGljKHNlbGYsIHRv
cGljX25hbWUpOgorICAgICAgICBpZiB0b3BpY19uYW1lIG5vdCBpbiBzZWxmLl90b3BpY3M6Cisg
ICAgICAgICAgICBzZWxmLl90b3BpY3NbdG9waWNfbmFtZV0gPSBzZWxmLl9xdWV1ZV9tYWtlcigp
CisKKyAgICBkZWYgX2ZpbmRfdG9waWMoc2VsZiwgdG9waWNfbmFtZSk6CisgICAgICAgIHJldHVy
biBzZWxmLl90b3BpY3NbdG9waWNfbmFtZV0KKworICAgIGRlZiBwb3N0X21lc3NhZ2Uoc2VsZiwg
Y2xpZW50LCB0b3BpY19uYW1lLCBtZXNzYWdlX25hbWUsICpvcHRhcmdzKToKKyAgICAgICAgIiIi
UG9zdCBhIG1lc3NhZ2UgdG8gdGhlIGFwcHJvcHJpYXRlIHRvcGljIHF1ZXVlLiIiIgorICAgICAg
ICBtZXNzYWdlID0gX01lc3NhZ2UoY2xpZW50Lm5hbWUoKSwgdG9waWNfbmFtZSwgbWVzc2FnZV9u
YW1lLCBvcHRhcmdzKQorICAgICAgICB0b3BpYyA9IHNlbGYuX2ZpbmRfdG9waWModG9waWNfbmFt
ZSkKKyAgICAgICAgdG9waWMucHV0KF9NZXNzYWdlLmR1bXBzKG1lc3NhZ2UpKQorCisgICAgZGVm
IHJ1bl9tZXNzYWdlX2xvb3Aoc2VsZiwgdG9waWNfbmFtZSwgY2xpZW50LCBkZWxheV9zZWNzPU5v
bmUpOgorICAgICAgICAiIiJMb29wIHByb2Nlc3NpbmcgbWVzc2FnZXMgdW50aWwgY2xpZW50Lmlz
X2RvbmUoKSBvciBkZWxheSBwYXNzZXMuIiIiCisgICAgICAgIGFzc2VydCBkZWxheV9zZWNzIGlz
IE5vbmUgb3IgZGVsYXlfc2VjcyA+IDAsICJydW5fbWVzc2FnZV9sb29wKCk6IGRlbGF5IG11c3Qg
YmUgTm9uZSBvciBhIHBvc2l0aXZlIG51bWJlciIKKyAgICAgICAgc2VsZi5fcnVuX2xvb3AodG9w
aWNfbmFtZSwgY2xpZW50LCBUcnVlLCBkZWxheV9zZWNzKQorCisgICAgZGVmIHJ1bl9hbGxfcGVu
ZGluZyhzZWxmLCB0b3BpY19uYW1lLCBjbGllbnQpOgorICAgICAgICAiIiJQcm9jZXNzIG1lc3Nh
Z2VzIHVudGlsIGNsaWVudC5pc19kb25lKCkgb3IgY2FsbGVyIHdvdWxkIGJsb2NrLiIiIgorICAg
ICAgICBzZWxmLl9ydW5fbG9vcCh0b3BpY19uYW1lLCBjbGllbnQsIGJsb2NrPUZhbHNlLCBkZWxh
eV9zZWNzPU5vbmUpCisKKyAgICBkZWYgX3J1bl9sb29wKHNlbGYsIHRvcGljX25hbWUsIGNsaWVu
dCwgYmxvY2ssIGRlbGF5X3NlY3MpOgorICAgICAgICB0b3BpYyA9IHNlbGYuX2ZpbmRfdG9waWMo
dG9waWNfbmFtZSkKKyAgICAgICAgd2hpbGUgbm90IGNsaWVudC5pc19kb25lKCk6CisgICAgICAg
ICAgICB0cnk6CisgICAgICAgICAgICAgICAgcyA9IHRvcGljLmdldChibG9jaywgZGVsYXlfc2Vj
cykKKyAgICAgICAgICAgIGV4Y2VwdCBRdWV1ZS5FbXB0eToKKyAgICAgICAgICAgICAgICByZXR1
cm4KKyAgICAgICAgICAgIG1zZyA9IF9NZXNzYWdlLmxvYWRzKHMpCisgICAgICAgICAgICBzZWxm
Ll9kaXNwYXRjaF9tZXNzYWdlKG1zZywgY2xpZW50KQorCisgICAgZGVmIF9kaXNwYXRjaF9tZXNz
YWdlKHNlbGYsIG1lc3NhZ2UsIGNsaWVudCk6CisgICAgICAgIGlmIG5vdCBoYXNhdHRyKGNsaWVu
dCwgJ2hhbmRsZV8nICsgbWVzc2FnZS5uYW1lKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJy
b3IoCisgICAgICAgICAgICAgICAiJXM6IHJlY2VpdmVkIG1lc3NhZ2UgJyVzJyBpdCBjb3VsZG4n
dCBoYW5kbGUiICUKKyAgICAgICAgICAgICAgIChjbGllbnQubmFtZSgpLCBtZXNzYWdlLm5hbWUp
KQorICAgICAgICBvcHRhcmdzID0gbWVzc2FnZS5ib2R5CisgICAgICAgIG1lc3NhZ2VfaGFuZGxl
ciA9IGdldGF0dHIoY2xpZW50LCAnaGFuZGxlXycgKyBtZXNzYWdlLm5hbWUpCisgICAgICAgIG1l
c3NhZ2VfaGFuZGxlcihtZXNzYWdlLnNyYywgKm9wdGFyZ3MpCisKKworY2xhc3MgX01lc3NhZ2Uo
b2JqZWN0KToKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGxvYWRzKHN0cik6CisgICAgICAg
IG9iaiA9IGNQaWNrbGUubG9hZHMoc3RyKQorICAgICAgICBhc3NlcnQoaXNpbnN0YW5jZShvYmos
IF9NZXNzYWdlKSkKKyAgICAgICAgcmV0dXJuIG9iagorCisgICAgZGVmIF9faW5pdF9fKHNlbGYs
IHNyYywgdG9waWNfbmFtZSwgbWVzc2FnZV9uYW1lLCBtZXNzYWdlX2JvZHkpOgorICAgICAgICBz
ZWxmLnNyYyA9IHNyYworICAgICAgICBzZWxmLnRvcGljX25hbWUgPSB0b3BpY19uYW1lCisgICAg
ICAgIHNlbGYubmFtZSA9IG1lc3NhZ2VfbmFtZQorICAgICAgICBzZWxmLmJvZHkgPSBtZXNzYWdl
X2JvZHkKKworICAgIGRlZiBkdW1wcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGNQaWNrbGUuZHVt
cHMoc2VsZikKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICgiX01l
c3NhZ2UoZnJvbT0nJXMnLCB0b3BpY19uYW1lPSclcycsIG1lc3NhZ2VfbmFtZT0nJXMnKSIgJQor
ICAgICAgICAgICAgICAgIChzZWxmLnNyYywgc2VsZi50b3BpY19uYW1lLCBzZWxmLm5hbWUpKQor
CisKK2NsYXNzIEJyb2tlckNvbm5lY3Rpb24ob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgYnJva2VyLCBydW5fdG9waWMsIHBvc3RfdG9waWMpOgorICAgICAgICBzZWxmLl9icm9rZXIg
PSBicm9rZXIKKyAgICAgICAgc2VsZi5fcG9zdF90b3BpYyA9IHBvc3RfdG9waWMKKyAgICAgICAg
c2VsZi5fcnVuX3RvcGljID0gcnVuX3RvcGljCisgICAgICAgIGJyb2tlci5hZGRfdG9waWMocnVu
X3RvcGljKQorICAgICAgICBicm9rZXIuYWRkX3RvcGljKHBvc3RfdG9waWMpCisKKyAgICBkZWYg
Y2xpZW50KHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBk
ZWYgcnVuX21lc3NhZ2VfbG9vcChzZWxmLCBkZWxheV9zZWNzPU5vbmUpOgorICAgICAgICBzZWxm
Ll9icm9rZXIucnVuX21lc3NhZ2VfbG9vcChzZWxmLl9ydW5fdG9waWMsIHNlbGYuY2xpZW50KCks
IGRlbGF5X3NlY3MpCisKKyAgICBkZWYgcG9zdF9tZXNzYWdlKHNlbGYsIG1lc3NhZ2VfbmFtZSwg
Km1lc3NhZ2VfYXJncyk6CisgICAgICAgIHNlbGYuX2Jyb2tlci5wb3N0X21lc3NhZ2Uoc2VsZi5j
bGllbnQoKSwgc2VsZi5fcG9zdF90b3BpYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtZXNzYWdlX25hbWUsICptZXNzYWdlX2FyZ3MpCmRpZmYgLS1naXQgYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tlcjJf
dW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRf
cGFja2FnZS9tZXNzYWdlX2Jyb2tlcjJfdW5pdHRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTk2ZjA1ZWM1
YzlhODE3YTQ2NWM2OTA1ZDc4ZGE0OGM3YzNlNThjMwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2VfYnJv
a2VyMl91bml0dGVzdC5weQpAQCAtMCwwICsxLDEwMiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
IyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2lt
cG9ydCBvcHRwYXJzZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBtZXNzYWdlX2Jyb2tlcjIK
KworCitjbGFzcyBGdW5jdGlvbnNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVz
dF9ydW50aW1lX29wdGlvbnMoc2VsZik6CisgICAgICAgIG9wdGlvbl9saXN0ID0gbWVzc2FnZV9i
cm9rZXIyLnJ1bnRpbWVfb3B0aW9ucygpCisgICAgICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlv
blBhcnNlcihvcHRpb25fbGlzdD1vcHRpb25fbGlzdCkKKyAgICAgICAgb3B0aW9ucywgYXJncyA9
IHBhcnNlci5wYXJzZV9hcmdzKFtdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3B0aW9ucykK
KworCitjbGFzcyBNZXNzYWdlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3Rf
X25vX2JvZHkoc2VsZik6CisgICAgICAgIG1zZyA9IG1lc3NhZ2VfYnJva2VyMi5fTWVzc2FnZSgn
c3JjJywgJ3RvcGljX25hbWUnLCAnbWVzc2FnZV9uYW1lJywgTm9uZSkKKyAgICAgICAgc2VsZi5h
c3NlcnRUcnVlKHJlcHIobXNnKSkKKyAgICAgICAgcyA9IG1zZy5kdW1wcygpCisgICAgICAgIG5l
d19tc2cgPSBtZXNzYWdlX2Jyb2tlcjIuX01lc3NhZ2UubG9hZHMocykKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChuZXdfbXNnLm5hbWUsICdtZXNzYWdlX25hbWUnKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKG5ld19tc2cuYm9keSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChu
ZXdfbXNnLnRvcGljX25hbWUsICd0b3BpY19uYW1lJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChuZXdfbXNnLnNyYywgJ3NyYycpCisKKyAgICBkZWYgdGVzdF9fYm9keShzZWxmKToKKyAgICAg
ICAgbXNnID0gbWVzc2FnZV9icm9rZXIyLl9NZXNzYWdlKCdzcmMnLCAndG9waWNfbmFtZScsICdt
ZXNzYWdlX25hbWUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2Jv
ZHknLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIobXNnKSkKKyAgICAgICAgcyA9
IG1zZy5kdW1wcygpCisgICAgICAgIG5ld19tc2cgPSBtZXNzYWdlX2Jyb2tlcjIuX01lc3NhZ2Uu
bG9hZHMocykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdfbXNnLm5hbWUsICdtZXNzYWdl
X25hbWUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld19tc2cuYm9keSwgKCdib2R5Jywg
MCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3X21zZy50b3BpY19uYW1lLCAndG9waWNf
bmFtZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3X21zZy5zcmMsICdzcmMnKQorCisK
K2NsYXNzIEludGVyZmFjZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVGhlc2UgdGVz
dHMgbW9zdGx5IGV4aXN0IHRvIHBhY2lmeSBjb3ZlcmFnZS4KKworICAgICMgRklYTUU6IFRoZXJl
IG11c3QgYmUgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMgYW5kIGFsc28gdmVyaWZ5CisgICAgIyB0
aGF0IGNsYXNzZXMgZG8gaW1wbGVtZW50IGV2ZXJ5IGFic3RyYWN0IG1ldGhvZCBpbiBhbiBpbnRl
cmZhY2UuCisKKyAgICBkZWYgdGVzdF9jbGllbnRpbnRlcmZhY2VfaXNfYWJzdHJhY3Qoc2VsZik6
CisgICAgICAgICMgVGVzdCB0aGF0IHdlIGNhbid0IGNyZWF0ZSBhbiBpbnN0YW5jZSBkaXJlY3Rs
eS4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgbWVzc2Fn
ZV9icm9rZXIyLkNsaWVudEludGVyZmFjZSwKKyAgICAgICAgICAgIE5vbmUsIE5vbmUsIE5vbmUp
CisKKyAgICAgICAgY2xhc3MgVGVzdENsaWVudChtZXNzYWdlX2Jyb2tlcjIuQ2xpZW50SW50ZXJm
YWNlKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqb3B0YXJncyk6CisgICAgICAg
ICAgICAgICAgcGFzcworCisgICAgICAgICMgVGVzdCB0aGF0IGFsbCB0aGUgYmFzZSBjbGFzcyBt
ZXRob2RzIGFyZSBhYnN0cmFjdCBhbmQgaGF2ZSB0aGUKKyAgICAgICAgIyBzaWduYXR1cmUgd2Ug
ZXhwZWN0LgorICAgICAgICBvYmogPSBUZXN0Q2xpZW50KCkKKyAgICAgICAgc2VsZi5hc3NlcnRS
YWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgb2JqLmNhbmNlbCkKKyAgICAgICAgc2VsZi5hc3Nl
cnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgb2JqLmlzX2RvbmUpCisgICAgICAgIHNlbGYu
YXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIG9iai5uYW1lKQorICAgICAgICBzZWxm
LmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBvYmoucnVuLCBOb25lKQorCisgICAg
ZGVmIHRlc3RfYnJva2VyY29ubmVjdGlvbl9pc19hYnN0cmFjdChzZWxmKToKKyAgICAgICAgY2xh
c3MgVGVzdEJyb2tlckNvbm5lY3Rpb24obWVzc2FnZV9icm9rZXIyLkJyb2tlckNvbm5lY3Rpb24p
OgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsICpvcHRhcmdzKToKKyAgICAgICAgICAg
ICAgICBwYXNzCisKKyAgICAgICAgIyBUZXN0IHRoYXQgYWxsIHRoZSBiYXNlIGNsYXNzIG1ldGhv
ZHMgYXJlIGFic3RyYWN0IGFuZCBoYXZlIHRoZQorICAgICAgICAjIHNpZ25hdHVyZSB3ZSBleHBl
Y3QuCisgICAgICAgIGJyb2tlciA9IG1lc3NhZ2VfYnJva2VyMi5Ccm9rZXIoTm9uZSwgTm9uZSkK
KyAgICAgICAgb2JqID0gVGVzdEJyb2tlckNvbm5lY3Rpb24oYnJva2VyLCAiZm9vIiwgImJhciIp
CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIG9iai5jbGll
bnQpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL3Rlc3RfcnVubmVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9ydW5uZXIucHkKaW5kZXggNWIwMmEwMDZkOThjNTA0MjRm
YjU3NzQ5OWI5MTAzODY4ODk5OTU5YS4uYzNjNjVhZTc2NmRkMTgxM2E3YWNjYjFmZmRjNmQ1OWY2
MDA1ZGI3MSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bGF5b3V0X3BhY2thZ2UvdGVzdF9ydW5uZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9ydW5uZXIucHkKQEAgLTcyNSwyOCAr
NzI1LDMxIEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICAgICBleGNlcHQgUXVldWUuRW1w
dHk6CiAgICAgICAgICAgICAgICAgcmV0dXJuCiAKLSAgICAgICAgICAgIGV4cGVjdGVkID0gc2Vs
Zi5fZXhwZWN0YXRpb25zLm1hdGNoZXNfYW5fZXhwZWN0ZWRfcmVzdWx0KAotICAgICAgICAgICAg
ICAgIHJlc3VsdC5maWxlbmFtZSwgcmVzdWx0LnR5cGUsIHNlbGYuX29wdGlvbnMucGl4ZWxfdGVz
dHMpCi0gICAgICAgICAgICByZXN1bHRfc3VtbWFyeS5hZGQocmVzdWx0LCBleHBlY3RlZCkKLSAg
ICAgICAgICAgIGV4cF9zdHIgPSBzZWxmLl9leHBlY3RhdGlvbnMuZ2V0X2V4cGVjdGF0aW9uc19z
dHJpbmcoCi0gICAgICAgICAgICAgICAgcmVzdWx0LmZpbGVuYW1lKQotICAgICAgICAgICAgZ290
X3N0ciA9IHNlbGYuX2V4cGVjdGF0aW9ucy5leHBlY3RhdGlvbl90b19zdHJpbmcocmVzdWx0LnR5
cGUpCi0gICAgICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3Rlc3RfcmVzdWx0KHJlc3VsdCwg
ZXhwZWN0ZWQsIGV4cF9zdHIsIGdvdF9zdHIpCi0gICAgICAgICAgICBzZWxmLl9wcmludGVyLnBy
aW50X3Byb2dyZXNzKHJlc3VsdF9zdW1tYXJ5LCBzZWxmLl9yZXRyeWluZywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVzdF9maWxlc19saXN0KQotCi0g
ICAgICAgICAgICBkZWYgaW50ZXJydXB0X2lmX2F0X2ZhaWx1cmVfbGltaXQobGltaXQsIGNvdW50
LCBtZXNzYWdlKToKLSAgICAgICAgICAgICAgICBpZiBsaW1pdCBhbmQgY291bnQgPj0gbGltaXQ6
Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIFRlc3RSdW5JbnRlcnJ1cHRlZEV4Y2VwdGlvbiht
ZXNzYWdlICUgY291bnQpCi0KLSAgICAgICAgICAgIGludGVycnVwdF9pZl9hdF9mYWlsdXJlX2xp
bWl0KAotICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMuZXhpdF9hZnRlcl9uX2ZhaWx1cmVz
LAotICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5LnVuZXhwZWN0ZWRfZmFpbHVyZXMsCi0g
ICAgICAgICAgICAgICAgIkFib3J0aW5nIHJ1biBzaW5jZSAlZCBmYWlsdXJlcyB3ZXJlIHJlYWNo
ZWQiKQotICAgICAgICAgICAgaW50ZXJydXB0X2lmX2F0X2ZhaWx1cmVfbGltaXQoCi0gICAgICAg
ICAgICAgICAgc2VsZi5fb3B0aW9ucy5leGl0X2FmdGVyX25fY3Jhc2hlc19vcl90aW1lb3V0cywK
LSAgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeS51bmV4cGVjdGVkX2NyYXNoZXNfb3JfdGlt
ZW91dHMsCi0gICAgICAgICAgICAgICAgIkFib3J0aW5nIHJ1biBzaW5jZSAlZCBjcmFzaGVzIG9y
IHRpbWVvdXRzIHdlcmUgcmVhY2hlZCIpCisgICAgICAgICAgICBzZWxmLl91cGRhdGVfc3VtbWFy
eV93aXRoX3Jlc3VsdChyZXN1bHRfc3VtbWFyeSwgcmVzdWx0KQorCisgICAgZGVmIF91cGRhdGVf
c3VtbWFyeV93aXRoX3Jlc3VsdChzZWxmLCByZXN1bHRfc3VtbWFyeSwgcmVzdWx0KToKKyAgICAg
ICAgZXhwZWN0ZWQgPSBzZWxmLl9leHBlY3RhdGlvbnMubWF0Y2hlc19hbl9leHBlY3RlZF9yZXN1
bHQoCisgICAgICAgICAgICByZXN1bHQuZmlsZW5hbWUsIHJlc3VsdC50eXBlLCBzZWxmLl9vcHRp
b25zLnBpeGVsX3Rlc3RzKQorICAgICAgICByZXN1bHRfc3VtbWFyeS5hZGQocmVzdWx0LCBleHBl
Y3RlZCkKKyAgICAgICAgZXhwX3N0ciA9IHNlbGYuX2V4cGVjdGF0aW9ucy5nZXRfZXhwZWN0YXRp
b25zX3N0cmluZygKKyAgICAgICAgICAgIHJlc3VsdC5maWxlbmFtZSkKKyAgICAgICAgZ290X3N0
ciA9IHNlbGYuX2V4cGVjdGF0aW9ucy5leHBlY3RhdGlvbl90b19zdHJpbmcocmVzdWx0LnR5cGUp
CisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGVzdF9yZXN1bHQocmVzdWx0LCBleHBlY3Rl
ZCwgZXhwX3N0ciwgZ290X3N0cikKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF9wcm9ncmVz
cyhyZXN1bHRfc3VtbWFyeSwgc2VsZi5fcmV0cnlpbmcsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2VsZi5fdGVzdF9maWxlc19saXN0KQorCisgICAgICAgIGRlZiBp
bnRlcnJ1cHRfaWZfYXRfZmFpbHVyZV9saW1pdChsaW1pdCwgY291bnQsIG1lc3NhZ2UpOgorICAg
ICAgICAgICAgaWYgbGltaXQgYW5kIGNvdW50ID49IGxpbWl0OgorICAgICAgICAgICAgICAgIHJh
aXNlIFRlc3RSdW5JbnRlcnJ1cHRlZEV4Y2VwdGlvbihtZXNzYWdlICUgY291bnQpCisKKyAgICAg
ICAgaW50ZXJydXB0X2lmX2F0X2ZhaWx1cmVfbGltaXQoCisgICAgICAgICAgICBzZWxmLl9vcHRp
b25zLmV4aXRfYWZ0ZXJfbl9mYWlsdXJlcywKKyAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5LnVu
ZXhwZWN0ZWRfZmFpbHVyZXMsCisgICAgICAgICAgICAiQWJvcnRpbmcgcnVuIHNpbmNlICVkIGZh
aWx1cmVzIHdlcmUgcmVhY2hlZCIpCisgICAgICAgIGludGVycnVwdF9pZl9hdF9mYWlsdXJlX2xp
bWl0KAorICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5leGl0X2FmdGVyX25fY3Jhc2hlc19vcl90
aW1lb3V0cywKKyAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5LnVuZXhwZWN0ZWRfY3Jhc2hlc19v
cl90aW1lb3V0cywKKyAgICAgICAgICAgICJBYm9ydGluZyBydW4gc2luY2UgJWQgY3Jhc2hlcyBv
ciB0aW1lb3V0cyB3ZXJlIHJlYWNoZWQiKQogCiAgICAgZGVmIF9jbG9iYmVyX29sZF9yZXN1bHRz
KHNlbGYpOgogICAgICAgICAjIEp1c3QgY2xvYmJlciB0aGUgYWN0dWFsIHRlc3QgcmVzdWx0cyBk
aXJlY3RvcmllcyBzaW5jZSB0aGUgb3RoZXIKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfcnVubmVyMi5weSBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfcnVubmVy
Mi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi43YjBiYTY3NjBmYjZjYWNlZmI2YzM5Mzc1MDMxNTYzZGE4ZGY2ZTJk
Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bGF5b3V0X3BhY2thZ2UvdGVzdF9ydW5uZXIyLnB5CkBAIC0wLDAgKzEsMjE4IEBACisjIS91c3Iv
YmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMK
KyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
IyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
IyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiIKK1RoZSBUZXN0UnVubmVyIGNs
YXNzIHJ1bnMgYSBzZXJpZXMgb2YgdGVzdHMgKFRlc3RUeXBlIGludGVyZmFjZSkgYWdhaW5zdCBh
IHNldAorb2YgdGVzdCBmaWxlcy4gIElmIGEgdGVzdCBmaWxlIGZhaWxzIGEgVGVzdFR5cGUsIGl0
IHJldHVybnMgYSBsaXN0IFRlc3RGYWlsdXJlCitvYmplY3RzIHRvIHRoZSBUZXN0UnVubmVyLiAg
VGhlIFRlc3RSdW5uZXIgdGhlbiBhZ2dyZWdhdGVzIHRoZSBUZXN0RmFpbHVyZXMgdG8KK2NyZWF0
ZSBhIGZpbmFsIHJlcG9ydC4KKyIiIgorCitpbXBvcnQgdGltZQorCitmcm9tIHdlYmtpdHB5LnRv
b2wgaW1wb3J0IGdyYW1tYXIKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBtYW5hZ2VyX3dvcmtl
cl9icm9rZXIKK2ltcG9ydCB0ZXN0X3J1bm5lcgoraW1wb3J0IHdvcmtlcgorCitfbG9nID0gbG9n
Z2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisKKworY2xhc3MgX1dvcmtlclN0YXRlKG9iamVjdCk6
CisgICAgIiIiQSBjbGFzcyBmb3IgdGhlIFRlc3RSdW5uZXIvbWFuYWdlciB0byB1c2UgdG8gdHJh
Y2sgdGhlIGN1cnJlbnQgc3RhdGUKKyAgICBvZiB0aGUgd29ya2Vycy4iIiIKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgbnVtYmVyLCB3b3JrZXIpOgorICAgICAgICBzZWxmLndvcmtlciA9IHdvcmtl
cgorICAgICAgICBzZWxmLm51bWJlciA9IG51bWJlcgorICAgICAgICBzZWxmLmRvbmUgPSBGYWxz
ZQorICAgICAgICBzZWxmLm5leHRfdGltZW91dCA9IE5vbmUKKyAgICAgICAgc2VsZi53ZWRnZWQg
PSBGYWxzZQorICAgICAgICBzZWxmLnN0YXRzID0ge30KKyAgICAgICAgc2VsZi5zdGF0c1snbmFt
ZSddID0gd29ya2VyLm5hbWUKKyAgICAgICAgc2VsZi5zdGF0c1snbnVtX3Rlc3RzJ10gPSAwCisg
ICAgICAgIHNlbGYuc3RhdHNbJ3RvdGFsX3RpbWUnXSA9IDAKKworICAgIGRlZiBfX3JlcHJfXyhz
ZWxmKToKKyAgICAgICAgcmV0dXJuICJfV29ya2VyU3RhdGUoIiArIHN0cihzZWxmLl9fZGljdF9f
KSArICIpIgorCisKK2NsYXNzIFRlc3RSdW5uZXIyKHRlc3RfcnVubmVyLlRlc3RSdW5uZXIpOgor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zLCBwcmludGVyKToKKyAgICAgICAg
dGVzdF9ydW5uZXIuVGVzdFJ1bm5lci5fX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zLCBwcmlu
dGVyKQorICAgICAgICBzZWxmLl9tZXNzYWdlX2Jyb2tlciA9IE5vbmUKKworICAgICAgICAjIFRo
aXMgbWFwcyB3b3JrZXIgbmFtZXMgdG8gdGhlIHN0YXRlIHdlIGFyZSB0cmFja2luZyBmb3IgZWFj
aCBvZiB0aGVtLgorICAgICAgICBzZWxmLl93b3JrZXJzID0ge30KKworICAgIGRlZiBpc19kb25l
KHNlbGYpOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBuYW1lKHNlbGYpOgorICAg
ICAgICByZXR1cm4gJ1Rlc3RSdW5uZXIyJworCisgICAgZGVmIF9ydW5fdGVzdHMoc2VsZiwgZmls
ZV9saXN0LCByZXN1bHRfc3VtbWFyeSk6CisgICAgICAgICIiIlJ1bnMgdGhlIHRlc3RzIGluIHRo
ZSBmaWxlX2xpc3QuCisKKyAgICAgICAgUmV0dXJuOiBBIHR1cGxlIChrZXlib2FyZF9pbnRlcnJ1
cHRlZCwgdGhyZWFkX3RpbWluZ3MsIHRlc3RfdGltaW5ncywKKyAgICAgICAgICAgIGluZGl2aWR1
YWxfdGVzdF90aW1pbmdzKQorICAgICAgICAgICAga2V5Ym9hcmRfaW50ZXJydXB0ZWQgaXMgd2hl
dGhlciBzb21lb25lIHR5cGVkIEN0cmxeQworICAgICAgICAgICAgdGhyZWFkX3RpbWluZ3MgaXMg
YSBsaXN0IG9mIGRpY3RzIHdpdGggdGhlIHRvdGFsIHJ1bnRpbWUKKyAgICAgICAgICAgICAgb2Yg
ZWFjaCB0aHJlYWQgd2l0aCAnbmFtZScsICdudW1fdGVzdHMnLCAndG90YWxfdGltZScgcHJvcGVy
dGllcworICAgICAgICAgICAgdGVzdF90aW1pbmdzIGlzIGEgbGlzdCBvZiB0aW1pbmdzIGZvciBl
YWNoIHNoYXJkZWQgc3ViZGlyZWN0b3J5CisgICAgICAgICAgICAgIG9mIHRoZSBmb3JtIFt0aW1l
LCBkaXJlY3RvcnlfbmFtZSwgbnVtX3Rlc3RzXQorICAgICAgICAgICAgaW5kaXZpZHVhbF90ZXN0
X3RpbWluZ3MgaXMgYSBsaXN0IG9mIHJ1biB0aW1lcyBmb3IgZWFjaCB0ZXN0CisgICAgICAgICAg
ICAgIGluIHRoZSBmb3JtIHtmaWxlbmFtZTpmaWxlbmFtZSwgdGVzdF9ydW5fdGltZTp0ZXN0X3J1
bl90aW1lfQorICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnk6IHN1bW1hcnkgb2JqZWN0IHRvIHBv
cHVsYXRlIHdpdGggdGhlIHJlc3VsdHMKKyAgICAgICAgIiIiCisgICAgICAgIG51bV93b3JrZXJz
ID0gc2VsZi5fbnVtX3dvcmtlcnMoKQorCisgICAgICAgIHNlbGYuX2N1cnJlbnRfZmlsZV9saXN0
ID0gZmlsZV9saXN0CisgICAgICAgIHNlbGYuX2N1cnJlbnRfcmVzdWx0X3N1bW1hcnkgPSByZXN1
bHRfc3VtbWFyeQorCisgICAgICAgIHNlbGYuX2FsbF9yZXN1bHRzID0gW10KKyAgICAgICAgc2Vs
Zi5fZ3JvdXBfc3RhdHMgPSB7fQorICAgICAgICBzZWxmLl93b3JrZXJzID0ge30KKworICAgICAg
ICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgnU2hhcmRpbmcgdGVzdHMgLi4uJykKKyAgICAg
ICAgdGVzdF9saXN0cyA9IHNlbGYuX3NoYXJkX3Rlc3RzKGZpbGVfbGlzdCwKKyAgICAgICAgICAg
IG51bV93b3JrZXJzID4gMSBhbmQgbm90IHNlbGYuX29wdGlvbnMuZXhwZXJpbWVudGFsX2Z1bGx5
X3BhcmFsbGVsKQorICAgICAgICBfbG9nLmRlYnVnKCJVc2luZyAlZCBzaGFyZHMiICUgbGVuKHRl
c3RfbGlzdHMpKQorCisgICAgICAgIGJyb2tlciA9IG1hbmFnZXJfd29ya2VyX2Jyb2tlci5nZXQo
c2VsZi5fcG9ydCwgc2VsZi5fb3B0aW9ucywgc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB3b3JrZXIuV29ya2VyKQorCisgICAgICAgIHNlbGYuX3ByaW50
ZXIucHJpbnRfdXBkYXRlKCdTdGFydGluZyAlcyAuLi4nICUKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ3JhbW1hci5wbHVyYWxpemUoJ3dvcmtlcicsIG51bV93b3JrZXJzKSkK
KyAgICAgICAgZm9yIHdvcmtlcl9udW1iZXIgaW4geHJhbmdlKG51bV93b3JrZXJzKToKKyAgICAg
ICAgICAgIHcgPSBicm9rZXIuc3RhcnRfd29ya2VyKHdvcmtlcl9udW1iZXIpCisgICAgICAgICAg
ICB3cyA9IF9Xb3JrZXJTdGF0ZSh3b3JrZXJfbnVtYmVyLCB3KQorICAgICAgICAgICAgc2VsZi5f
d29ya2Vyc1t3Lm5hbWVdID0gd3MKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4xKQorCisgICAg
ICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCJTdGFydGluZyB0ZXN0aW5nIC4uLiIpCisg
ICAgICAgIGZvciB0ZXN0X2xpc3QgaW4gdGVzdF9saXN0czoKKyAgICAgICAgICAgIGJyb2tlci5w
b3N0X21lc3NhZ2UoJ3Rlc3RfbGlzdCcsIHRlc3RfbGlzdFswXSwgdGVzdF9saXN0WzFdKQorCisg
ICAgICAgICMgVGVsbCB0aGUgd29ya2VycyB0byBzaHV0IGRvd24gYWZ0ZXIgdGhleSdyZSBkb25l
IHJ1bm5pbmcgYWxsIHRoZQorICAgICAgICAjIHRlc3RzLgorICAgICAgICBmb3IgaSBpbiB4cmFu
Z2UobnVtX3dvcmtlcnMpOgorICAgICAgICAgICAgYnJva2VyLnBvc3RfbWVzc2FnZSgnc3RvcCcp
CisKKyAgICAgICAgaW50ZXJydXB0ZWQgPSBGYWxzZQorICAgICAgICBrZXlib2FyZF9pbnRlcnJ1
cHRlZCA9IEZhbHNlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9vcHRp
b25zLmRyeV9ydW46CisgICAgICAgICAgICAgICAgd2hpbGUgbm90IHNlbGYuX2NoZWNrX2lmX2Rv
bmUoKToKKyAgICAgICAgICAgICAgICAgICAgYnJva2VyLnJ1bl9tZXNzYWdlX2xvb3AoZGVsYXlf
c2Vjcz0xLjApCisKKyAgICAgICAgICAgICAgICBmb3IgdyBpbiBzZWxmLl93b3JrZXJzLnZhbHVl
cygpOgorICAgICAgICAgICAgICAgICAgICBpZiBub3Qgdy53ZWRnZWQgYW5kIHcud29ya2VyLmlz
X2FsaXZlKCk6CisgICAgICAgICAgICAgICAgICAgICAgICB3Lndvcmtlci5qb2luKDAuNSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCBub3Qgdy53b3JrZXIuaXNfYWxpdmUoKQorCisg
ICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgIF9sb2cuaW5mbygi
SW50ZXJydXB0ZWQsIGV4aXRpbmciKQorICAgICAgICAgICAgZm9yIHcgaW4gc2VsZi5fd29ya2Vy
cy52YWx1ZXMoKToKKyAgICAgICAgICAgICAgICB3Lndvcmtlci5jYW5jZWwoKQorICAgICAgICAg
ICAga2V5Ym9hcmRfaW50ZXJydXB0ZWQgPSBUcnVlCisgICAgICAgIGV4Y2VwdCB0ZXN0X3J1bm5l
ci5UZXN0UnVuSW50ZXJydXB0ZWRFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBfbG9nLmluZm8o
ZS5yZWFzb24pCisgICAgICAgICAgICBicm9rZXIuY2FuY2VsX3dvcmtlcnMoKQorICAgICAgICAg
ICAgaW50ZXJydXB0ZWQgPSBUcnVlCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICMgVW5l
eHBlY3RlZCBleGNlcHRpb247IGRvbid0IHRyeSB0byBjbGVhbiB1cCB3b3JrZXJzLgorICAgICAg
ICAgICAgX2xvZy5pbmZvKCJFeGNlcHRpb24gcmFpc2VkLCBleGl0aW5nIikKKyAgICAgICAgICAg
IHJhaXNlCisKKyAgICAgICAgdGhyZWFkX3RpbWluZ3MgPSBbdy5zdGF0cyBmb3IgdyBpbiBzZWxm
Ll93b3JrZXJzLnZhbHVlcygpXQorICAgICAgICByZXR1cm4gKGludGVycnVwdGVkLCBrZXlib2Fy
ZF9pbnRlcnJ1cHRlZCwgdGhyZWFkX3RpbWluZ3MsCisgICAgICAgICAgICAgICAgc2VsZi5fZ3Jv
dXBfc3RhdHMsIHNlbGYuX2FsbF9yZXN1bHRzKQorCisgICAgZGVmIF9jaGVja19pZl9kb25lKHNl
bGYpOgorICAgICAgICAiIiJSZXR1cm5zIHRydWUgaWZmIGFsbCB0aGUgd29ya2VycyBoYXZlIGVp
dGhlciBjb21wbGV0ZWQgb3Igd2VkZ2VkLiIiIgorICAgICAgICBkb25lID0gVHJ1ZQorICAgICAg
ICB0ID0gdGltZS50aW1lKCkKKyAgICAgICAgZm9yIHcgaW4gc2VsZi5fd29ya2Vycy52YWx1ZXMo
KToKKyAgICAgICAgICAgIGlmIG5vdCB3LmRvbmUgYW5kIG5vdCB3LndlZGdlZDoKKyAgICAgICAg
ICAgICAgICBuZXh0X3RpbWVvdXQgPSB3Lm5leHRfdGltZW91dAorICAgICAgICAgICAgICAgIFdF
REdFX1BBRERJTkcgPSA0MC4wCisgICAgICAgICAgICAgICAgaWYgbmV4dF90aW1lb3V0IGFuZCB0
ID4gbmV4dF90aW1lb3V0ICsgV0VER0VfUEFERElORzoKKyAgICAgICAgICAgICAgICAgICAgX2xv
Zy5lcnJvcignJykKKyAgICAgICAgICAgICAgICAgICAgdy53b3JrZXIubG9nX3dlZGdlZF93b3Jr
ZXIody5jdXJyZW50X3Rlc3RfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgX2xvZy5lcnJvcign
JykKKyAgICAgICAgICAgICAgICAgICAgdy53ZWRnZWQgPSBUcnVlCisgICAgICAgICAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZG9uZSA9IEZhbHNlCisKKyAgICAgICAgaWYgZG9u
ZToKKyAgICAgICAgICAgIGlmIGFueShbdy53ZWRnZWQgZm9yIHcgaW4gc2VsZi5fd29ya2Vycy52
YWx1ZXMoKV0pOgorICAgICAgICAgICAgICAgIF9sb2cuZXJyb3IoJycpCisgICAgICAgICAgICAg
ICAgX2xvZy5lcnJvcignUmVtYWluaW5nIHdvcmtlcnMgYXJlIHdlZGdlZCwgYmFpbGluZyBvdXQu
JykKKyAgICAgICAgICAgICAgICBfbG9nLmVycm9yKCcnKQorICAgICAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgICAgICBfbG9nLmRlYnVnKCdObyB3ZWRnZWQgdGhyZWFkcycpCisgICAgICAgIHJl
dHVybiBkb25lCisKKyAgICBkZWYgaGFuZGxlX3N0YXJ0ZWRfdGVzdChzZWxmLCBzcmMsIHRlc3Rf
aW5mbywgaGFuZ190aW1lb3V0KToKKyAgICAgICAgdyA9IHNlbGYuX3dvcmtlcnNbc3JjXQorICAg
ICAgICB3LmN1cnJlbnRfdGVzdF9uYW1lID0gc2VsZi5fcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVu
YW1lKAorICAgICAgICAgICAgdGVzdF9pbmZvLmZpbGVuYW1lKQorICAgICAgICB3Lm5leHRfdGlt
ZW91dCA9IHRpbWUudGltZSgpICsgaGFuZ190aW1lb3V0CisKKyAgICBkZWYgaGFuZGxlX2RvbmUo
c2VsZiwgc3JjKToKKyAgICAgICAgdyA9IHNlbGYuX3dvcmtlcnNbc3JjXQorICAgICAgICB3LmRv
bmUgPSBUcnVlCisKKyAgICBkZWYgaGFuZGxlX2ZpbmlzaGVkX3Rlc3Qoc2VsZiwgc3JjLCByZXN1
bHQsIGVsYXBzZWRfdGltZSk6CisgICAgICAgICIiIlVwZGF0ZSB0aGUgc3VtbWFyeSBhbmQgcHJp
bnQgcmVzdWx0cyB3aXRoIGFueSBjb21wbGV0ZWQgdGVzdHMuIiIiCisgICAgICAgIHcgPSBzZWxm
Ll93b3JrZXJzW3NyY10KKyAgICAgICAgdy5uZXh0X3RpbWVvdXQgPSBOb25lCisgICAgICAgIHcu
Y3VycmVudF90ZXN0ID0gTm9uZQorCisgICAgICAgIGlmIHcud2VkZ2VkOgorICAgICAgICAgICAg
IyBIbW0uIFRoaXMgc2hvdWxkbid0IGhhcHBlbiBpZiB3ZSBoYXZlIG91ciB0aW1lb3V0cworICAg
ICAgICAgICAgIyB0dW5lZCBwcm9wZXJseS4KKyAgICAgICAgICAgIF9sb2cuZXJyb3IoIiVzIHVu
d2VkZ2VkIiwgdy5uYW1lKQorCisgICAgICAgIHNlbGYuX3VwZGF0ZV93b3JrZXJfc3RhdHMoc3Jj
LCByZXN1bHQsIGVsYXBzZWRfdGltZSkKKworICAgICAgICBzZWxmLl91cGRhdGVfc3VtbWFyeV93
aXRoX3Jlc3VsdChzZWxmLl9jdXJyZW50X3Jlc3VsdF9zdW1tYXJ5LCByZXN1bHQpCisKKyAgICBk
ZWYgaGFuZGxlX2ZpbmlzaGVkX2xpc3Qoc2VsZiwgc3JjLCBsaXN0X25hbWUsIG51bV90ZXN0cywg
ZWxhcHNlZF90aW1lKToKKyAgICAgICAgc2VsZi5fZ3JvdXBfc3RhdHNbbGlzdF9uYW1lXSA9IChu
dW1fdGVzdHMsIGVsYXBzZWRfdGltZSkKKworICAgIGRlZiBoYW5kbGVfZXhjZXB0aW9uKHNlbGYs
IHNyYywgZXhjZXB0aW9uX2luZm8pOgorICAgICAgICByYWlzZSBleGNlcHRpb25faW5mbworCisg
ICAgZGVmIF91cGRhdGVfd29ya2VyX3N0YXRzKHNlbGYsIHNyYywgcmVzdWx0LCBlbGFwc2VkX3Rp
bWUpOgorICAgICAgICBzZWxmLl93b3JrZXJzW3NyY10uc3RhdHNbJ3RvdGFsX3RpbWUnXSArPSBl
bGFwc2VkX3RpbWUKKyAgICAgICAgc2VsZi5fd29ya2Vyc1tzcmNdLnN0YXRzWydudW1fdGVzdHMn
XSArPSAxCisgICAgICAgIHNlbGYuX2FsbF9yZXN1bHRzLmFwcGVuZChyZXN1bHQpCmRpZmYgLS1n
aXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS93
b3JrZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFj
a2FnZS93b3JrZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzA2NzZmNzliYjg2ZDRjZTVhNzg1YzE1ZDBiOWVj
YzdjNGYxODA4MgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3dvcmtlci5weQpAQCAtMCwwICsxLDQxMiBAQAorIyEv
dXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR2Fib3IgUmFwY3NhbnlpIChy
Z2Fib3JAaW5mLnUtc3plZ2VkLmh1KSwgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyMKKyMgUmVkaXN0
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
QU1BR0UuCisKKyIiIkEgVGhyZWFkIG9iamVjdCBmb3IgcnVubmluZyBEdW1wUmVuZGVyVHJlZSBh
bmQgcHJvY2Vzc2luZyBVUkxzIGZyb20gYQorc2hhcmVkIHF1ZXVlLgorCitFYWNoIHRocmVhZCBy
dW5zIGEgc2VwYXJhdGUgaW5zdGFuY2Ugb2YgdGhlIER1bXBSZW5kZXJUcmVlIGJpbmFyeSBhbmQg
dmFsaWRhdGVzCit0aGUgb3V0cHV0LiAgV2hlbiB0aGVyZSBhcmUgbm8gbW9yZSBVUkxzIHRvIHBy
b2Nlc3MgaW4gdGhlIHNoYXJlZCBxdWV1ZSwgdGhlCit0aHJlYWQgZXhpdHMuCisiIiIKKworZnJv
bSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudAorCitpbXBvcnQgY29kZWNzCitpbXBv
cnQgY29weQoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IHNpZ25hbAoraW1wb3J0
IHN5cworaW1wb3J0IHRocmVhZGluZworaW1wb3J0IHRpbWUKK2ltcG9ydCB0cmFjZWJhY2sKKwor
ZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMudGVzdF90eXBlcyBpbXBvcnQgaW1hZ2VfZGlmZgor
ZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMudGVzdF90eXBlcyBpbXBvcnQgdGVzdF90eXBlX2Jh
c2UKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnRlc3RfdHlwZXMgaW1wb3J0IHRleHRfZGlm
ZgorCitpbXBvcnQgbWVzc2FnZV9icm9rZXIyCitpbXBvcnQgdGVzdF9mYWlsdXJlcworaW1wb3J0
IHRlc3Rfb3V0cHV0CitpbXBvcnQgdGVzdF9yZXN1bHRzCisKK19sb2cgPSBsb2dnaW5nLmdldExv
Z2dlcihfX25hbWVfXykKKworCitjbGFzcyBXb3JrZXIobWVzc2FnZV9icm9rZXIyLkNsaWVudElu
dGVyZmFjZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb2tlciwgd29ya2VyX251bWJlciwg
b3B0aW9ucyk6CisgICAgICAgIHNlbGYuX2Jyb2tlciA9IGJyb2tlcgorICAgICAgICBzZWxmLl93
b3JrZXJfbnVtYmVyID0gd29ya2VyX251bWJlcgorICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0
aW9ucworICAgICAgICBzZWxmLl9uYW1lID0gJ3dvcmtlci8lZCcgJSB3b3JrZXJfbnVtYmVyCisg
ICAgICAgIHNlbGYuX2NhbmNlbGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5fZG9uZSA9IEZhbHNl
CisKKyAgICAgICAgc2VsZi5fcG9ydCA9IE5vbmUKKyAgICAgICAgc2VsZi5fYmF0Y2hfY291bnQg
PSAwCisgICAgICAgIHNlbGYuX2JhdGNoX3NpemUgPSAwCisgICAgICAgIHNlbGYuX2RyaXZlciA9
IE5vbmUKKyAgICAgICAgc2VsZi5faGF2ZV9odHRwX2xvY2sgPSBGYWxzZQorICAgICAgICBzZWxm
Ll90ZXN0X3R5cGVzID0gW10KKyAgICAgICAgc2VsZi5fdGVzdF9hcmdzID0gW10KKyAgICAgICAg
c2VsZi5fdGVzdHNfcnVuX2ZpbGUgPSBOb25lCisKKyAgICBkZWYgX2RlZmVycmVkX2luaXQoc2Vs
ZiwgcG9ydCk6CisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CisgICAgICAgIHNlbGYuX2JhdGNo
X3NpemUgPSBzZWxmLl9vcHRpb25zLmJhdGNoX3NpemUKKyAgICAgICAgZm9yIGNscyBpbiBzZWxm
Ll9nZXRfdGVzdF90eXBlX2NsYXNzZXMoKToKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RfdHlwZXMu
YXBwZW5kKGNscyhzZWxmLl9wb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGYuX29wdGlvbnMucmVzdWx0c19kaXJlY3RvcnkpKQorICAgICAgICBzZWxmLl90
ZXN0X2FyZ3MgPSBzZWxmLl9nZXRfdGVzdF9hcmdzKHNlbGYuX3dvcmtlcl9udW1iZXIpCisKKyAg
ICAgICAgIyBBcHBlbmQgdGVzdHMgd2UncmUgcnVubmluZyB0byB0aGUgZXhpc3RpbmcgdGVzdHNf
cnVuLnR4dCBmaWxlLgorICAgICAgICAjIFRoaXMgaXMgY3JlYXRlZCBpbiBydW5fd2Via2l0X3Rl
c3RzLnB5Ol9QcmVwYXJlTGlzdHNBbmRQcmludE91dHB1dC4KKyAgICAgICAgdGVzdHNfcnVuX2Zp
bGVuYW1lID0gb3MucGF0aC5qb2luKHNlbGYuX29wdGlvbnMucmVzdWx0c19kaXJlY3RvcnksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdHNfcnVuLnR4dCIp
CisgICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9maWxlID0gY29kZWNzLm9wZW4odGVzdHNfcnVuX2Zp
bGVuYW1lLCAiYSIsICJ1dGYtOCIpCisKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAg
c2VsZi5fY2xlYW51cCgpCisKKyAgICBkZWYgX2dldF90ZXN0X2FyZ3Moc2VsZiwgd29ya2VyX251
bWJlcik6CisgICAgICAgICIiIlJldHVybnMgdGhlIHR1cGxlIG9mIGFyZ3VtZW50cyBmb3IgdGVz
dHMgYW5kIGZvciBEdW1wUmVuZGVyVHJlZS4iIiIKKyAgICAgICAgdGVzdF9hcmdzID0gdGVzdF90
eXBlX2Jhc2UuVGVzdEFyZ3VtZW50cygpCisgICAgICAgIHRlc3RfYXJncy5uZXdfYmFzZWxpbmUg
PSBzZWxmLl9vcHRpb25zLm5ld19iYXNlbGluZQorICAgICAgICB0ZXN0X2FyZ3MucmVzZXRfcmVz
dWx0cyA9IHNlbGYuX29wdGlvbnMucmVzZXRfcmVzdWx0cworICAgICAgICByZXR1cm4gdGVzdF9h
cmdzCisKKyAgICBkZWYgX2dldF90ZXN0X3R5cGVfY2xhc3NlcyhzZWxmKToKKyAgICAgICAgY2xh
c3NlcyA9IFt0ZXh0X2RpZmYuVGVzdFRleHREaWZmXQorICAgICAgICBpZiBzZWxmLl9vcHRpb25z
LnBpeGVsX3Rlc3RzOgorICAgICAgICAgICAgY2xhc3Nlcy5hcHBlbmQoaW1hZ2VfZGlmZi5JbWFn
ZURpZmYpCisgICAgICAgIHJldHVybiBjbGFzc2VzCisKKyAgICBkZWYgY2FuY2VsKHNlbGYpOgor
ICAgICAgICAiIiJBdHRlbXB0IHRvIGFib3J0IHByb2Nlc3NpbmcgKGJlc3QgZWZmb3J0KS4iIiIK
KyAgICAgICAgc2VsZi5fY2FuY2VsZWQgPSBUcnVlCisKKyAgICBkZWYgaXNfZG9uZShzZWxmKToK
KyAgICAgICAgIyBUaGlzIGlzIHVzZWQgZm9yIGFzc2VydGlvbiBjaGVja2luZyBpbiB0aGUgbWFu
YWdlci4KKyAgICAgICAgcmV0dXJuIHNlbGYuX2RvbmUgb3Igc2VsZi5fY2FuY2VsZWQKKworICAg
IGRlZiBuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQorCisgICAgZGVmIHJ1
bihzZWxmLCBwb3J0KToKKyAgICAgICAgc2VsZi5fZGVmZXJyZWRfaW5pdChwb3J0KQorCisgICAg
ICAgIGV4Y2VwdGlvbl9tc2cgPSAiIgorICAgICAgICBfbG9nLmRlYnVnKCclcyBzdGFydGluZycg
JSBzZWxmLl9uYW1lKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX2Jyb2tlci5y
dW5fbWVzc2FnZV9sb29wKCkKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmlzX2RvbmUoKToKKyAg
ICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigiJXM6IHJhbiBvdXQgb2YgbWVzc2Fn
ZXMgaW4gd29ya2VyIHF1ZXVlLiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAlIHNlbGYuX25hbWUpCisgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAg
ICAgICAgIGV4Y2VwdGlvbl9tc2cgPSAiLCBpbnRlcnJ1cHRlZCIKKyAgICAgICAgZXhjZXB0Ogor
ICAgICAgICAgICAgZXhjZXB0aW9uX21zZyA9ICIsIGV4Y2VwdGlvbiByYWlzZWQiCisgICAgICAg
IGZpbmFsbHk6CisgICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyBkb25lJXMiICUgKHNlbGYuX25h
bWUsIGV4Y2VwdGlvbl9tc2cpKQorICAgICAgICAgICAgaWYgZXhjZXB0aW9uX21zZzoKKyAgICAg
ICAgICAgICAgICBleGNfaW5mbyA9IHN5cy5leGNfaW5mbygpCisgICAgICAgICAgICAgICAgc2Vs
Zi5fbG9nX3RyYWNlYmFjayhleGNfaW5mb1syXSkKKyAgICAgICAgICAgICAgICAjIEZJWE1FOiBG
aWd1cmUgb3V0IGhvdyB0byBzZW5kIGEgbWVzc2FnZSB3aXRoIGEgdHJhY2ViYWNrLgorICAgICAg
ICAgICAgICAgIHNlbGYuX2Jyb2tlci5wb3N0X21lc3NhZ2UoJ2V4Y2VwdGlvbicsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXhjX2luZm9bMF0sIGV4Y19pbmZv
WzFdLCBOb25lKSkKKyAgICAgICAgICAgIHNlbGYuX2Jyb2tlci5wb3N0X21lc3NhZ2UoJ2RvbmUn
KQorICAgICAgICAgICAgc2VsZi5fY2xlYW51cCgpCisKKyAgICBkZWYgX2xvZ190cmFjZWJhY2so
c2VsZiwgdGIpOgorICAgICAgICBzdGFjayA9IHRyYWNlYmFjay5leHRyYWN0X3RiKHRiKQorICAg
ICAgICBmb3IgZnJhbWVfc3RyIGluIHRyYWNlYmFjay5mb3JtYXRfbGlzdChzdGFjayk6CisgICAg
ICAgICAgICBmb3IgbGluZSBpbiBmcmFtZV9zdHIuc3BsaXQoJ1xuJyk6CisgICAgICAgICAgICAg
ICAgaWYgbGluZToKKyAgICAgICAgICAgICAgICAgICAgX2xvZy5lcnJvcigiICAlcyIgJSBsaW5l
KQorCisgICAgZGVmIF9jbGVhbnVwKHNlbGYpOgorICAgICAgICBzZWxmLl9raWxsX2R1bXBfcmVu
ZGVyX3RyZWUoKQorICAgICAgICBpZiBzZWxmLl9oYXZlX2h0dHBfbG9jazoKKyAgICAgICAgICAg
IHNlbGYuX3N0b3Bfc2VydmVyc193aXRoX2xvY2soKQorICAgICAgICBpZiBzZWxmLl90ZXN0c19y
dW5fZmlsZToKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9maWxlLmNsb3NlKCkKKyAgICAg
ICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9maWxlID0gTm9uZQorCisgICAgZGVmIGhhbmRsZV90ZXN0
X2xpc3Qoc2VsZiwgc3JjLCBsaXN0X25hbWUsIHRlc3RfbGlzdCk6CisgICAgICAgIGlmIGxpc3Rf
bmFtZSA9PSAidGVzdHNfdG9faHR0cF9sb2NrIiBhbmQgc2VsZi5fcG9ydC5sb2NrX3BvbGljeSgp
ID09ICJvbmUiOgorICAgICAgICAgICAgc2VsZi5fc3RhcnRfc2VydmVyc193aXRoX2xvY2soKQor
CisgICAgICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQorICAgICAgICBudW1fdGVzdHMgPSAw
CisgICAgICAgIGZvciB0ZXN0X2lucHV0IGluIHRlc3RfbGlzdDoKKyAgICAgICAgICAgIHNlbGYu
X3J1bl90ZXN0KHRlc3RfaW5wdXQpCisgICAgICAgICAgICBzZWxmLl9icm9rZXIueWllbGRfdG9f
YnJva2VyKCkKKyAgICAgICAgICAgIGlmIHNlbGYuX2NhbmNlbGVkOgorICAgICAgICAgICAgICAg
IGJyZWFrCisgICAgICAgICAgICBudW1fdGVzdHMgKz0gMQorCisgICAgICAgIGVsYXBzZWRfdGlt
ZSA9IHRpbWUudGltZSgpIC0gc3RhcnRfdGltZQorCisgICAgICAgIGlmIHNlbGYuX2hhdmVfaHR0
cF9sb2NrOgorICAgICAgICAgICAgc2VsZi5fc3RvcF9zZXJ2ZXJzX3dpdGhfbG9jaygpCisKKyAg
ICAgICAgc2VsZi5fYnJva2VyLnBvc3RfbWVzc2FnZSgnZmluaXNoZWRfbGlzdCcsIGxpc3RfbmFt
ZSwgbnVtX3Rlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsYXBzZWRf
dGltZSkKKworICAgIGRlZiBoYW5kbGVfc3RvcChzZWxmLCBzcmMpOgorICAgICAgICAiIiJTdG9w
IHJlY2VpdmVkIC0gbm8gbW9yZSB0ZXN0cyB0byBydW4uIiIiCisgICAgICAgIHNlbGYuX2RvbmUg
PSBUcnVlCisKKyAgICBkZWYgX3J1bl90ZXN0KHNlbGYsIHRlc3RfaW5wdXQpOgorICAgICAgICBz
ZWxmLl9zZXRfdXBfdGVzdCh0ZXN0X2lucHV0KQorCisgICAgICAgICMgV2UgY2FsY3VsYXRlIGhv
dyBsb25nIHdlIGV4cGVjdCB0aGUgdGVzdCB0byB0YWtlLgorICAgICAgICAjCisgICAgICAgICMg
VGhlIER1bXBSZW5kZXJUcmVlIHdhdGNoZG9nIHVzZXMgMi41eCB0aGUgdGltZW91dDsgd2Ugd2Fu
dCB0byBiZQorICAgICAgICAjIGxhcmdlciB0aGFuIHRoYXQuIFdlIGFsc28gYWRkIGEgbGl0dGxl
IG1vcmUgcGFkZGluZyBpZiB3ZSdyZQorICAgICAgICAjIHJ1bm5pbmcgdGVzdHMgaW4gYSBzZXBh
cmF0ZSB0aHJlYWQuCisgICAgICAgICMKKyAgICAgICAgIyBOb3RlIHRoYXQgd2UgbmVlZCB0byBj
b252ZXJ0IHRoZSB0ZXN0IHRpbWVvdXQgZnJvbSBhCisgICAgICAgICMgc3RyaW5nIHZhbHVlIGlu
IG1pbGxpc2Vjb25kcyB0byBhIGZsb2F0IGZvciBQeXRob24uCisgICAgICAgIGRyaXZlcl90aW1l
b3V0X3NlYyA9IDMuMCAqIGZsb2F0KHRlc3RfaW5wdXQudGltZW91dCkgLyAxMDAwLjAKKyAgICAg
ICAgdGhyZWFkX3BhZGRpbmdfc2VjID0gMS4wCisgICAgICAgIHRocmVhZF90aW1lb3V0X3NlYyA9
IGRyaXZlcl90aW1lb3V0X3NlYyArIHRocmVhZF9wYWRkaW5nX3NlYworICAgICAgICBpZiBzZWxm
Ll9vcHRpb25zLnJ1bl9zaW5nbHk6CisgICAgICAgICAgICB0ZXN0X3RpbWVvdXRfc2VjID0gdGhy
ZWFkX3RpbWVvdXRfc2VjCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0ZXN0X3RpbWVvdXRf
c2VjID0gZHJpdmVyX3RpbWVvdXRfc2VjCisKKyAgICAgICAgc3RhcnQgPSB0aW1lLnRpbWUoKQor
ICAgICAgICBzZWxmLl9icm9rZXIucG9zdF9tZXNzYWdlKCdzdGFydGVkX3Rlc3QnLCB0ZXN0X2lu
cHV0LCB0ZXN0X3RpbWVvdXRfc2VjKQorCisgICAgICAgIGlmIHNlbGYuX29wdGlvbnMucnVuX3Np
bmdseToKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuX3J1bl90ZXN0X2luX2Fub3RoZXJfdGhy
ZWFkKHRlc3RfaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0aHJlYWRfdGltZW91dF9zZWMpCisgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICByZXN1bHQgPSBzZWxmLl9ydW5fdGVzdF9pbl90aGlzX3RocmVhZCh0ZXN0X2lucHV0KQor
CisgICAgICAgIHNlbGYuX3RlYXJfZG93bl90ZXN0KHRlc3RfaW5wdXQsIHJlc3VsdCwgdGltZS50
aW1lKCkgLSBzdGFydCkKKworICAgIGRlZiBfc2V0X3VwX3Rlc3Qoc2VsZiwgdGVzdF9pbnB1dCk6
CisgICAgICAgIHRlc3RfaW5wdXQudXJpID0gc2VsZi5fcG9ydC5maWxlbmFtZV90b191cmkodGVz
dF9pbnB1dC5maWxlbmFtZSkKKyAgICAgICAgaWYgc2VsZi5fc2hvdWxkX2ZldGNoX2V4cGVjdGVk
X2NoZWNrc3VtKCk6CisgICAgICAgICAgICB0ZXN0X2lucHV0LmltYWdlX2NoZWNrc3VtID0gc2Vs
Zi5fcG9ydC5leHBlY3RlZF9jaGVja3N1bSgKKyAgICAgICAgICAgICAgICB0ZXN0X2lucHV0LmZp
bGVuYW1lKQorCisgICAgZGVmIF9zaG91bGRfZmV0Y2hfZXhwZWN0ZWRfY2hlY2tzdW0oc2VsZik6
CisgICAgICAgIHJldHVybiAoc2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0cyBhbmQgbm90CisgICAg
ICAgICAgICAgICAgKHNlbGYuX29wdGlvbnMubmV3X2Jhc2VsaW5lIG9yIHNlbGYuX29wdGlvbnMu
cmVzZXRfcmVzdWx0cykpCisKKyAgICBkZWYgX3J1bl90ZXN0X2luX2Fub3RoZXJfdGhyZWFkKHNl
bGYsIHRlc3RfaW5wdXQsIHRocmVhZF90aW1lb3V0X3NlYyk6CisgICAgICAgICIiIlJ1biBhIHRl
c3QgaW4gYSBzZXBhcmF0ZSB0aHJlYWQsIGVuZm9yY2luZyBhIGhhcmQgdGltZSBsaW1pdC4KKwor
ICAgICAgICBTaW5jZSB3ZSBjYW4gb25seSBkZXRlY3QgdGhlIHRlcm1pbmF0aW9uIG9mIGEgdGhy
ZWFkLCBub3QgYW55IGludGVybmFsCisgICAgICAgIHN0YXRlIG9yIHByb2dyZXNzLCB3ZSBjYW4g
b25seSBydW4gcGVyLXRlc3QgdGltZW91dHMgd2hlbiBydW5uaW5nIHRlc3QKKyAgICAgICAgZmls
ZXMgc2luZ2x5LgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgdGVzdF9pbnB1dDogT2JqZWN0
IGNvbnRhaW5pbmcgdGhlIHRlc3QgZmlsZW5hbWUgYW5kIHRpbWVvdXQKKyAgICAgICAgICB0aHJl
YWRfdGltZW91dF9zZWM6IHRpbWUgdG8gd2FpdCBiZWZvcmUga2lsbGluZyB0aGUgZHJpdmVyIHBy
b2Nlc3MuCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgQSBUZXN0UmVzdWx0CisgICAgICAg
ICIiIgorICAgICAgICB3b3JrZXIgPSBzZWxmCisgICAgICAgIHJlc3VsdCA9IE5vbmUKKworICAg
ICAgICBkcml2ZXIgPSB3b3JrZXIuX3BvcnQuY3JlYXRlX2RyaXZlcih3b3JrZXIuX3dvcmtlcl9u
dW1iZXIpCisgICAgICAgIGRyaXZlci5zdGFydCgpCisKKyAgICAgICAgY2xhc3MgU2luZ2xlVGVz
dFRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKKyAgICAgICAgICAgIGRlZiBydW4oc2VsZik6Cisg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gd29ya2VyLl9ydW5fc2luZ2xlX3Rlc3QodGVzdF9pbnB1
dCwgZHJpdmVyKQorCisgICAgICAgIHRocmVhZCA9IFNpbmdsZVRlc3RUaHJlYWQoKQorICAgICAg
ICB0aHJlYWQuc3RhcnQoKQorICAgICAgICB0aHJlYWQuam9pbih0aHJlYWRfdGltZW91dF9zZWMp
CisgICAgICAgIGlmIHRocmVhZC5pc0FsaXZlKCk6CisgICAgICAgICAgICAjIElmIGpvaW4oKSBy
ZXR1cm5lZCB3aXRoIHRoZSB0aHJlYWQgc3RpbGwgcnVubmluZywgdGhlCisgICAgICAgICAgICAj
IER1bXBSZW5kZXJUcmVlIGlzIGNvbXBsZXRlbHkgaHVuZyBhbmQgdGhlcmUncyBub3RoaW5nCisg
ICAgICAgICAgICAjIG1vcmUgd2UgY2FuIGRvIHdpdGggaXQuICBXZSBoYXZlIHRvIGtpbGwgYWxs
IHRoZQorICAgICAgICAgICAgIyBEdW1wUmVuZGVyVHJlZXMgdG8gZnJlZSBpdCB1cC4gSWYgd2Un
cmUgcnVubmluZyBtb3JlIHRoYW4KKyAgICAgICAgICAgICMgb25lIER1bXBSZW5kZXJUcmVlIHRo
cmVhZCwgd2UnbGwgZW5kIHVwIGtpbGxpbmcgdGhlIG90aGVyCisgICAgICAgICAgICAjIER1bXBS
ZW5kZXJUcmVlcyB0b28sIGludHJvZHVjaW5nIHNwdXJpb3VzIGNyYXNoZXMuIFdlIGFjY2VwdAor
ICAgICAgICAgICAgIyB0aGF0IHRyYWRlb2ZmIGluIG9yZGVyIHRvIGF2b2lkIGxvc2luZyB0aGUg
cmVzdCBvZiB0aGlzCisgICAgICAgICAgICAjIHRocmVhZCdzIHJlc3VsdHMuCisgICAgICAgICAg
ICBfbG9nLmVycm9yKCdUZXN0IHRocmVhZCBodW5nOiBraWxsaW5nIGFsbCBEdW1wUmVuZGVyVHJl
ZXMnKQorCisgICAgICAgIGRyaXZlci5zdG9wKCkKKworICAgICAgICBpZiBub3QgcmVzdWx0Ogor
ICAgICAgICAgICAgcmVzdWx0ID0gdGVzdF9yZXN1bHRzLlRlc3RSZXN1bHQodGVzdF9pbnB1dC5m
aWxlbmFtZSwgZmFpbHVyZXM9W10sCisgICAgICAgICAgICAgICAgdGVzdF9ydW5fdGltZT0wLCB0
b3RhbF90aW1lX2Zvcl9hbGxfZGlmZnM9MCwgdGltZV9mb3JfZGlmZnM9e30pCisKKyAgICAgICAg
cmV0dXJuIHJlc3VsdAorCisgICAgZGVmIF9ydW5fdGVzdF9pbl90aGlzX3RocmVhZChzZWxmLCB0
ZXN0X2lucHV0KToKKyAgICAgICAgIiIiUnVuIGEgc2luZ2xlIHRlc3QgZmlsZSB1c2luZyBhIHNo
YXJlZCBEdW1wUmVuZGVyVHJlZSBwcm9jZXNzLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAg
dGVzdF9pbnB1dDogT2JqZWN0IGNvbnRhaW5pbmcgdGhlIHRlc3QgZmlsZW5hbWUsIHVyaSBhbmQg
dGltZW91dAorCisgICAgICAgIFJldHVybnM6IGEgVGVzdFJlc3VsdCBvYmplY3QuCisgICAgICAg
ICIiIgorICAgICAgICAjIHBvbGwoKSBpcyBub3QgdGhyZWFkc2FmZSBhbmQgY2FuIHRocm93IE9T
RXJyb3IgZHVlIHRvOgorICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxNzMx
NzE3CisgICAgICAgIGlmIG5vdCBzZWxmLl9kcml2ZXIgb3Igc2VsZi5fZHJpdmVyLnBvbGwoKSBp
cyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2RyaXZlciA9IHNlbGYuX3BvcnQuY3JlYXRl
X2RyaXZlcihzZWxmLl93b3JrZXJfbnVtYmVyKQorICAgICAgICAgICAgc2VsZi5fZHJpdmVyLnN0
YXJ0KCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9zaW5nbGVfdGVzdCh0ZXN0X2lucHV0LCBz
ZWxmLl9kcml2ZXIpCisKKyAgICBkZWYgX3J1bl9zaW5nbGVfdGVzdChzZWxmLCB0ZXN0X2lucHV0
LCBkcml2ZXIpOgorICAgICAgICAjIFRoZSBpbWFnZSBoYXNoIGlzIHVzZWQgdG8gYXZvaWQgZG9p
bmcgYW4gaW1hZ2UgZHVtcCBpZiB0aGUKKyAgICAgICAgIyBjaGVja3N1bXMgbWF0Y2gsIHNvIGl0
IHNob3VsZCBiZSBzZXQgdG8gYSBibGFuayB2YWx1ZSBpZiB3ZQorICAgICAgICAjIGFyZSBnZW5l
cmF0aW5nIGEgbmV3IGJhc2VsaW5lLiAgKE90aGVyd2lzZSwgYW4gaW1hZ2UgZnJvbSBhCisgICAg
ICAgICMgcHJldmlvdXMgcnVuIHdpbGwgYmUgY29waWVkIGludG8gdGhlIGJhc2VsaW5lLiIiIgor
ICAgICAgICBpZiBzZWxmLl9zaG91bGRfZmV0Y2hfZXhwZWN0ZWRfY2hlY2tzdW0oKToKKyAgICAg
ICAgICAgIHRlc3RfaW5wdXQuaW1hZ2VfaGFzaCA9IHNlbGYuX3BvcnQuZXhwZWN0ZWRfY2hlY2tz
dW0oCisgICAgICAgICAgICAgICAgdGVzdF9pbnB1dC5maWxlbmFtZSkKKyAgICAgICAgdGVzdF9v
dXRwdXQgPSBkcml2ZXIucnVuX3Rlc3QodGVzdF9pbnB1dCkKKyAgICAgICAgcmV0dXJuIHNlbGYu
X3Byb2Nlc3Nfb3V0cHV0KHRlc3RfaW5wdXQsIHRlc3Rfb3V0cHV0KQorCisgICAgZGVmIF9wcm9j
ZXNzX291dHB1dChzZWxmLCB0ZXN0X2lucHV0LCB0ZXN0X291dHB1dCk6CisgICAgICAgICIiIlJl
Y2VpdmVzIHRoZSBvdXRwdXQgZnJvbSBhIER1bXBSZW5kZXJUcmVlIHByb2Nlc3MsIHN1YmplY3Rz
IGl0IHRvIGEKKyAgICAgICAgbnVtYmVyIG9mIHRlc3RzLCBhbmQgcmV0dXJucyBhIGxpc3Qgb2Yg
ZmFpbHVyZSB0eXBlcyB0aGUgdGVzdCBwcm9kdWNlZC4KKworICAgICAgICBBcmdzOgorICAgICAg
ICB0ZXN0X2lucHV0OiBhIFRlc3RJbnB1dCBvYmplY3QKKyAgICAgICAgdGVzdF9vdXRwdXQ6IGEg
VGVzdE91dHB1dCBvYmplY3QgY29udGFpbmluZyB0aGUgb3V0cHV0IG9mIHRoZSB0ZXN0CisKKyAg
ICAgICAgUmV0dXJuczogYSBUZXN0UmVzdWx0IG9iamVjdAorICAgICAgICAiIiIKKyAgICAgICAg
ZmFpbHVyZXMgPSBbXQorICAgICAgICB0ZXN0X2ZpbGVuYW1lID0gdGVzdF9pbnB1dC5maWxlbmFt
ZQorCisgICAgICAgIGlmIHRlc3Rfb3V0cHV0LmNyYXNoOgorICAgICAgICAgICAgZmFpbHVyZXMu
YXBwZW5kKHRlc3RfZmFpbHVyZXMuRmFpbHVyZUNyYXNoKCkpCisgICAgICAgIGlmIHRlc3Rfb3V0
cHV0LnRpbWVvdXQ6CisgICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQodGVzdF9mYWlsdXJlcy5G
YWlsdXJlVGltZW91dCgpKQorCisgICAgICAgIHRlc3RfbmFtZSA9IHNlbGYuX3BvcnQucmVsYXRp
dmVfdGVzdF9maWxlbmFtZSh0ZXN0X2ZpbGVuYW1lKQorICAgICAgICBpZiB0ZXN0X291dHB1dC5j
cmFzaDoKKyAgICAgICAgICAgIF9sb2cuZGVidWcoIiVzIFN0YWNrdHJhY2UgZm9yICVzOlxuJXMi
ICUKKyAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuX25hbWUsIHRlc3RfbmFtZSwgdGVzdF9v
dXRwdXQuZXJyb3IpKQorICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi5f
b3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSwgdGVzdF9uYW1lKQorICAgICAgICAgICAgZmlsZW5h
bWUgPSBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKVswXSArICItc3RhY2sudHh0IgorICAgICAg
ICAgICAgc2VsZi5fcG9ydC5tYXliZV9tYWtlX2RpcmVjdG9yeShvcy5wYXRoLnNwbGl0KGZpbGVu
YW1lKVswXSkKKyAgICAgICAgICAgIHdpdGggY29kZWNzLm9wZW4oZmlsZW5hbWUsICJ3YiIsICJ1
dGYtOCIpIGFzIGZpbGU6CisgICAgICAgICAgICAgICAgZmlsZS53cml0ZSh0ZXN0X291dHB1dC5l
cnJvcikKKyAgICAgICAgZWxpZiB0ZXN0X291dHB1dC5lcnJvcjoKKyAgICAgICAgICAgIF9sb2cu
ZGVidWcoIiVzICVzIG91dHB1dCBzdGRlcnIgbGluZXM6XG4lcyIgJQorICAgICAgICAgICAgICAg
ICAgICAgICAoc2VsZi5fbmFtZSwgdGVzdF9uYW1lLCB0ZXN0X291dHB1dC5lcnJvcikpCisKKyAg
ICAgICAgZXhwZWN0ZWRfdGVzdF9vdXRwdXQgPSBzZWxmLl9leHBlY3RlZF90ZXN0X291dHB1dCh0
ZXN0X2ZpbGVuYW1lKQorCisgICAgICAgICMgQ2hlY2sgdGhlIG91dHB1dCBhbmQgc2F2ZSB0aGUg
cmVzdWx0cy4KKyAgICAgICAgc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCisgICAgICAgIHRpbWVf
Zm9yX2RpZmZzID0ge30KKyAgICAgICAgZm9yIHRlc3RfdHlwZSBpbiBzZWxmLl90ZXN0X3R5cGVz
OgorICAgICAgICAgICAgc3RhcnRfZGlmZl90aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgICAg
IG5ld19mYWlsdXJlcyA9IHRlc3RfdHlwZS5jb21wYXJlX291dHB1dChzZWxmLl9wb3J0LCB0ZXN0
X2lucHV0LmZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNlbGYuX3Rlc3RfYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X291dHB1dCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF90ZXN0X291dHB1dCkK
KyAgICAgICAgICAgICMgRG9uJ3QgYWRkIGFueSBtb3JlIGZhaWx1cmVzIGlmIHdlIGFscmVhZHkg
aGF2ZSBhIGNyYXNoLCBzbyB3ZQorICAgICAgICAgICAgIyBkb24ndCBkb3VibGUtcmVwb3J0IHRo
b3NlIHRlc3RzLiBXZSBkbyBkb3VibGUtcmVwb3J0IGZvciB0aW1lb3V0cworICAgICAgICAgICAg
IyBzaW5jZSB3ZSBzdGlsbCB3YW50IHRvIHNlZSB0aGUgdGV4dCBhbmQgaW1hZ2Ugb3V0cHV0Lgor
ICAgICAgICAgICAgaWYgbm90IHRlc3Rfb3V0cHV0LmNyYXNoOgorICAgICAgICAgICAgICAgIGZh
aWx1cmVzLmV4dGVuZChuZXdfZmFpbHVyZXMpCisgICAgICAgICAgICB0aW1lX2Zvcl9kaWZmc1t0
ZXN0X3R5cGUuX19jbGFzc19fLl9fbmFtZV9fXSA9ICgKKyAgICAgICAgICAgICAgICB0aW1lLnRp
bWUoKSAtIHN0YXJ0X2RpZmZfdGltZSkKKworICAgICAgICB0b3RhbF90aW1lX2Zvcl9hbGxfZGlm
ZnMgPSB0aW1lLnRpbWUoKSAtIHN0YXJ0X2RpZmZfdGltZQorICAgICAgICByZXR1cm4gdGVzdF9y
ZXN1bHRzLlRlc3RSZXN1bHQodGVzdF9maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZhaWx1cmVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGVzdF9vdXRwdXQudGVzdF90aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdG90YWxfdGltZV9mb3JfYWxsX2RpZmZzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGltZV9mb3JfZGlmZnMpCisKKyAgICBkZWYgX2V4cGVj
dGVkX3Rlc3Rfb3V0cHV0KHNlbGYsIGZpbGVuYW1lKToKKyAgICAgICAgIiIiUmV0dXJucyBhbiBl
eHBlY3RlZCBUZXN0T3V0cHV0IG9iamVjdC4iIiIKKyAgICAgICAgcmV0dXJuIHRlc3Rfb3V0cHV0
LlRlc3RPdXRwdXQoc2VsZi5fcG9ydC5leHBlY3RlZF90ZXh0KGZpbGVuYW1lKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQuZXhwZWN0ZWRfaW1hZ2UoZmls
ZW5hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5l
eHBlY3RlZF9jaGVja3N1bShmaWxlbmFtZSkpCisKKyAgICBkZWYgX3RlYXJfZG93bl90ZXN0KHNl
bGYsIHRlc3RfaW5wdXQsIHJlc3VsdCwgZWxhcHNlZF90aW1lKToKKyAgICAgICAgc2VsZi5fYmF0
Y2hfY291bnQgKz0gMQorICAgICAgICBzZWxmLl90ZXN0c19ydW5fZmlsZS53cml0ZSh0ZXN0X2lu
cHV0LmZpbGVuYW1lICsgIlxuIikKKyAgICAgICAgdGVzdF9uYW1lID0gc2VsZi5fcG9ydC5yZWxh
dGl2ZV90ZXN0X2ZpbGVuYW1lKHRlc3RfaW5wdXQuZmlsZW5hbWUpCisKKyAgICAgICAgaWYgcmVz
dWx0LmZhaWx1cmVzOgorICAgICAgICAgICAgIyBDaGVjayBhbmQga2lsbCBEdW1wUmVuZGVyVHJl
ZSBpZiB3ZSBuZWVkIHRvLgorICAgICAgICAgICAgaWYgYW55KFtmLnNob3VsZF9raWxsX2R1bXBf
cmVuZGVyX3RyZWUoKSBmb3IgZiBpbiByZXN1bHQuZmFpbHVyZXNdKToKKyAgICAgICAgICAgICAg
ICBzZWxmLl9raWxsX2R1bXBfcmVuZGVyX3RyZWUoKQorICAgICAgICAgICAgICAgICMgUmVzZXQg
dGhlIGJhdGNoIGNvdW50IHNpbmNlIHRoZSBzaGVsbCBqdXN0IGJvdW5jZWQuCisgICAgICAgICAg
ICAgICAgc2VsZi5fYmF0Y2hfY291bnQgPSAwCisKKyAgICAgICAgICAgICMgUHJpbnQgdGhlIGVy
cm9yIG1lc3NhZ2UocykuCisgICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyAlcyBmYWlsZWQ6IiAl
IChzZWxmLl9uYW1lLCB0ZXN0X25hbWUpKQorICAgICAgICAgICAgZm9yIGYgaW4gcmVzdWx0LmZh
aWx1cmVzOgorICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoIiVzICAlcyIgJSAoc2VsZi5fbmFt
ZSwgZi5tZXNzYWdlKCkpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgX2xvZy5kZWJ1Zygi
JXMgJXMgcGFzc2VkIiAlIChzZWxmLl9uYW1lLCB0ZXN0X25hbWUpKQorCisgICAgICAgIHNlbGYu
X2Jyb2tlci5wb3N0X21lc3NhZ2UoJ2ZpbmlzaGVkX3Rlc3QnLCByZXN1bHQsIGVsYXBzZWRfdGlt
ZSkKKworICAgICAgICBpZiBzZWxmLl9iYXRjaF9zaXplID4gMCBhbmQgc2VsZi5fYmF0Y2hfY291
bnQgPj0gc2VsZi5fYmF0Y2hfc2l6ZToKKyAgICAgICAgICAgICMgQm91bmNlIHRoZSBzaGVsbCBh
bmQgcmVzZXQgY291bnQuCisgICAgICAgICAgICBzZWxmLl9raWxsX2R1bXBfcmVuZGVyX3RyZWUo
KQorICAgICAgICAgICAgc2VsZi5fYmF0Y2hfY291bnQgPSAwCisKKyAgICBkZWYgX3N0YXJ0X3Nl
cnZlcnNfd2l0aF9sb2NrKHNlbGYpOgorICAgICAgICBfbG9nLmRlYnVnKCdBY3F1aXJpbmcgaHR0
cCBsb2NrIC4uLicpCisgICAgICAgIHNlbGYuX3BvcnQuYWNxdWlyZV9odHRwX2xvY2soKQorICAg
ICAgICBfbG9nLmRlYnVnKCdTdGFydGluZyBIVFRQIHNlcnZlciAuLi4nKQorICAgICAgICBzZWxm
Ll9wb3J0LnN0YXJ0X2h0dHBfc2VydmVyKCkKKyAgICAgICAgX2xvZy5kZWJ1ZygnU3RhcnRpbmcg
V2ViU29ja2V0IHNlcnZlciAuLi4nKQorICAgICAgICBzZWxmLl9wb3J0LnN0YXJ0X3dlYnNvY2tl
dF9zZXJ2ZXIoKQorICAgICAgICBzZWxmLl9oYXZlX2h0dHBfbG9jayA9IFRydWUKKworICAgIGRl
ZiBfc3RvcF9zZXJ2ZXJzX3dpdGhfbG9jayhzZWxmKToKKyAgICAgICAgIiIiU3RvcCB0aGUgc2Vy
dmVycyBhbmQgcmVsZWFzZSBodHRwIGxvY2suIiIiCisgICAgICAgIGlmIHNlbGYuX2hhdmVfaHR0
cF9sb2NrOgorICAgICAgICAgICAgX2xvZy5kZWJ1ZygnU3RvcHBpbmcgSFRUUCBzZXJ2ZXIgLi4u
JykKKyAgICAgICAgICAgIHNlbGYuX3BvcnQuc3RvcF9odHRwX3NlcnZlcigpCisgICAgICAgICAg
ICBfbG9nLmRlYnVnKCdTdG9wcGluZyBXZWJTb2NrZXQgc2VydmVyIC4uLicpCisgICAgICAgICAg
ICBzZWxmLl9wb3J0LnN0b3Bfd2Vic29ja2V0X3NlcnZlcigpCisgICAgICAgICAgICBfbG9nLmRl
YnVnKCdSZWxlYXNpbmcgc2VydmVyIGxvY2sgLi4uJykKKyAgICAgICAgICAgIHNlbGYuX3BvcnQu
cmVsZWFzZV9odHRwX2xvY2soKQorICAgICAgICAgICAgc2VsZi5faGF2ZV9odHRwX2xvY2sgPSBG
YWxzZQorCisgICAgZGVmIF9raWxsX2R1bXBfcmVuZGVyX3RyZWUoc2VsZik6CisgICAgICAgICIi
IktpbGwgdGhlIER1bXBSZW5kZXJUcmVlIHByb2Nlc3MgaWYgaXQncyBydW5uaW5nLiIiIgorICAg
ICAgICBpZiBzZWxmLl9kcml2ZXI6CisgICAgICAgICAgICBzZWxmLl9kcml2ZXIuc3RvcCgpCisg
ICAgICAgICAgICBzZWxmLl9kcml2ZXIgPSBOb25lCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkKaW5kZXggOTdiNTRjOTdkODFmZmY5Mzk5OTFl
NmFlYjJhMzMzMTYwODg4ODE1Mi4uMjViZjkzYjdjNjQ4MWM5N2Y1MTNmYThkMDhhOGYzMjUwYjdk
Yjg3ZSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9y
dC9iYXNlLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
YmFzZS5weQpAQCAtMTI3LDYgKzEyNyw5IEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAgICAgICAg
cG9ydC4iIiIKICAgICAgICAgcmV0dXJuIHNlbGYuX2V4ZWN1dGl2ZS5jcHVfY291bnQoKQogCisg
ICAgZGVmIGRlZmF1bHRfd29ya2VyX21vZGVsKHNlbGYpOgorICAgICAgICByZXR1cm4gJ29sZC10
aHJlYWRzJworCiAgICAgZGVmIGJhc2VsaW5lX3BhdGgoc2VsZik6CiAgICAgICAgICIiIlJldHVy
biB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5IHRvIHN0b3JlIG5ldyBiYXNlbGlu
ZXMKICAgICAgICAgaW4gZm9yIHRoaXMgcG9ydC4iIiIKZGlmZiAtLWdpdCBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fbWFjLnB5IGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9tYWMucHkKaW5kZXggZjYz
OGUwMTNjNjE5MjdhYmNhOGY2ZmVjNDNkZDYxYzllNDI3MjhiMC4uMmM2MmFhN2JlNzI4M2UxNTgz
MTBmYzJlMzQzZDc2YTJkMzBjMTViOCAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9tYWMucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9tYWMucHkKQEAgLTY5LDEzICs2OSwx
NiBAQCBjbGFzcyBDaHJvbWl1bU1hY1BvcnQoY2hyb21pdW0uQ2hyb21pdW1Qb3J0KToKICAgICAg
ICAgcmV0dXJuIHJlc3VsdAogCiAgICAgZGVmIGRlZmF1bHRfY2hpbGRfcHJvY2Vzc2VzKHNlbGYp
OgotICAgICAgICAjIEZJWE1FOiB3ZSBuZWVkIHRvIHJ1biBzaW5nbGUtdGhyZWFkZWQgZm9yIG5v
dy4gU2VlCi0gICAgICAgICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTM4NTUzLiBVbmZvcnR1bmF0ZWx5IHRoaXMKLSAgICAgICAgIyByb3V0aW5lIGlzIGNhbGxlZCBy
aWdodCBiZWZvcmUgdGhlIGxvZ2dlciBpcyBjb25maWd1cmVkLCBzbyBpZiB3ZQotICAgICAgICAj
IHRyeSB0byBfbG9nLndhcm5pbmcoKSwgaXQgZ2V0cyB0aHJvd24gYXdheS4KLSAgICAgICAgaW1w
b3J0IHN5cwotICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJEZWZhdWx0aW5nIHRvIG9uZSBjaGls
ZCAtIHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzg1NTNcbiIp
Ci0gICAgICAgIHJldHVybiAxCisgICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbignd29ya2VyX21v
ZGVsJykgPT0gJ29sZC10aHJlYWRzJzoKKyAgICAgICAgICAgICMgRklYTUU6IHdlIG5lZWQgdG8g
cnVuIHNpbmdsZS10aHJlYWRlZCBmb3Igbm93LiBTZWUKKyAgICAgICAgICAgICMgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4NTUzLiBVbmZvcnR1bmF0ZWx5IHRoaXMK
KyAgICAgICAgICAgICMgcm91dGluZSBpcyBjYWxsZWQgcmlnaHQgYmVmb3JlIHRoZSBsb2dnZXIg
aXMgY29uZmlndXJlZCwgc28gaWYgd2UKKyAgICAgICAgICAgICMgdHJ5IHRvIF9sb2cud2Fybmlu
ZygpLCBpdCBnZXRzIHRocm93biBhd2F5LgorICAgICAgICAgICAgaW1wb3J0IHN5cworICAgICAg
ICAgICAgc3lzLnN0ZGVyci53cml0ZSgiRGVmYXVsdGluZyB0byBvbmUgY2hpbGQgLSBzZWUgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4NTUzXG4iKQorICAgICAgICAg
ICAgcmV0dXJuIDEKKworICAgICAgICByZXR1cm4gY2hyb21pdW0uQ2hyb21pdW1Qb3J0LmRlZmF1
bHRfY2hpbGRfcHJvY2Vzc2VzKHNlbGYpCiAKICAgICBkZWYgZHJpdmVyX25hbWUoc2VsZik6CiAg
ICAgICAgICIiIm5hbWUgZm9yIHRoaXMgcG9ydCdzIGVxdWl2YWxlbnQgb2YgRHVtcFJlbmRlclRy
ZWUuIiIiCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L21hYy5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbWFj
LnB5CmluZGV4IDY5NmUzMzk4ZWE0YjI4YWM3NjIyNTkwN2RjMzYyZmZjM2ZiODZmOWUuLmRmMzQ4
YTY0ZGY4NWM5NDIyNWEyMmZiM2M5MGU1NTJkZGEyYmNjZGQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbWFjLnB5CisrKyBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbWFjLnB5CkBAIC01Miw3ICs1Miw3IEBAIGNs
YXNzIE1hY1BvcnQoV2ViS2l0UG9ydCk6CiAgICAgICAgICMgZm91ciB0aHJlYWRzIGluIHBhcmFs
bGVsLgogICAgICAgICAjIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MzY2MjIKICAgICAgICAgY2hpbGRfcHJvY2Vzc2VzID0gV2ViS2l0UG9ydC5kZWZhdWx0X2No
aWxkX3Byb2Nlc3NlcyhzZWxmKQotICAgICAgICBpZiBjaGlsZF9wcm9jZXNzZXMgPiA0OgorICAg
ICAgICBpZiBzZWxmLmdldF9vcHRpb24oJ3dvcmtlcl9tb2RlbCcpID09ICdvbGQtdGhyZWFkcycg
YW5kIGNoaWxkX3Byb2Nlc3NlcyA+IDQ6CiAgICAgICAgICAgICByZXR1cm4gNAogICAgICAgICBy
ZXR1cm4gY2hpbGRfcHJvY2Vzc2VzCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CmluZGV4IGM0MzE3NjVhZTJjZmQ5
YzcwNzEwZDgzYzlkNTk5YTk3OGI1MmUzMTYuLjYzZDgyYWQ5NGY5Zjk5MzJhZmU5MjMxNzc1ZDRm
MzMyYmVjODE0NDMgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3J1bl93ZWJraXRfdGVzdHMucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQpAQCAtNDIsNiArNDIsNyBAQCBpbXBvcnQgc3lz
CiAKIGZyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IHByaW50aW5nCiBmcm9tIGxheW91dF9wYWNr
YWdlIGltcG9ydCB0ZXN0X3J1bm5lcgorZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9y
dW5uZXIyCiAKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgdXNlcgogZnJvbSB3
ZWJraXRweS50aGlyZHBhcnR5IGltcG9ydCBzaW1wbGVqc29uCkBAIC05MCw3ICs5MSwxMSBAQCBk
ZWYgcnVuKHBvcnQsIG9wdGlvbnMsIGFyZ3MsIHJlZ3VsYXJfb3V0cHV0PXN5cy5zdGRlcnIsCiAg
ICAgIyBpbiBhIHRyeS9maW5hbGx5IHRvIGVuc3VyZSB0aGF0IHdlIGNsZWFuIHVwIHRoZSBsb2dn
aW5nIGNvbmZpZ3VyYXRpb24uCiAgICAgbnVtX3VuZXhwZWN0ZWRfcmVzdWx0cyA9IC0xCiAgICAg
dHJ5OgotICAgICAgICBydW5uZXIgPSB0ZXN0X3J1bm5lci5UZXN0UnVubmVyKHBvcnQsIG9wdGlv
bnMsIHByaW50ZXIpCisgICAgICAgIGlmIG9wdGlvbnMud29ya2VyX21vZGVsIGluICgnaW5saW5l
JywgJ3RocmVhZHMnLCAncHJvY2Vzc2VzJyk6CisgICAgICAgICAgICBydW5uZXIgPSB0ZXN0X3J1
bm5lcjIuVGVzdFJ1bm5lcjIocG9ydCwgb3B0aW9ucywgcHJpbnRlcikKKyAgICAgICAgZWxzZToK
KyAgICAgICAgICAgIHJ1bm5lciA9IHRlc3RfcnVubmVyLlRlc3RSdW5uZXIocG9ydCwgb3B0aW9u
cywgcHJpbnRlcikKKwogICAgICAgICBydW5uZXIuX3ByaW50X2NvbmZpZygpCiAKICAgICAgICAg
cHJpbnRlci5wcmludF91cGRhdGUoIkNvbGxlY3RpbmcgdGVzdHMgLi4uIikKQEAgLTEyOSw5ICsx
MzQsMTIgQEAgZGVmIF9zZXRfdXBfZGVyaXZlZF9vcHRpb25zKHBvcnRfb2JqLCBvcHRpb25zKToK
ICAgICAjIFdlIHJldHVybiBhIGxpc3Qgb2Ygd2FybmluZ3MgdG8gcHJpbnQgYWZ0ZXIgdGhlIHBy
aW50ZXIgaXMgaW5pdGlhbGl6ZWQuCiAgICAgd2FybmluZ3MgPSBbXQogCi0gICAgaWYgb3B0aW9u
cy53b3JrZXJfbW9kZWwgPT0gJ29sZC1pbmxpbmUnOgorICAgIGlmIG9wdGlvbnMud29ya2VyX21v
ZGVsIGlzIE5vbmU6CisgICAgICAgIG9wdGlvbnMud29ya2VyX21vZGVsID0gcG9ydF9vYmouZGVm
YXVsdF93b3JrZXJfbW9kZWwoKQorCisgICAgaWYgb3B0aW9ucy53b3JrZXJfbW9kZWwgaW4gKCdp
bmxpbmUnLCAnb2xkLWlubGluZScpOgogICAgICAgICBpZiBvcHRpb25zLmNoaWxkX3Byb2Nlc3Nl
cyBhbmQgaW50KG9wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKSA+IDE6Ci0gICAgICAgICAgICB3YXJu
aW5ncy5hcHBlbmQoIi0td29ya2VyLW1vZGVsPW9sZC1pbmxpbmUgb3ZlcnJpZGVzIC0tY2hpbGQt
cHJvY2Vzc2VzIikKKyAgICAgICAgICAgIHdhcm5pbmdzLmFwcGVuZCgiLS13b3JrZXItbW9kZWw9
JXMgb3ZlcnJpZGVzIC0tY2hpbGQtcHJvY2Vzc2VzIiAlIG9wdGlvbnMud29ya2VyX21vZGVsKQog
ICAgICAgICBvcHRpb25zLmNoaWxkX3Byb2Nlc3NlcyA9ICIxIgogICAgIGlmIG5vdCBvcHRpb25z
LmNoaWxkX3Byb2Nlc3NlczoKICAgICAgICAgb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMgPSBvcy5l
bnZpcm9uLmdldCgiV0VCS0lUX1RFU1RfQ0hJTERfUFJPQ0VTU0VTIiwKQEAgLTM2Miw4ICszNzAs
OCBAQCBkZWYgcGFyc2VfYXJncyhhcmdzPU5vbmUpOgogICAgICAgICAgICAgaGVscD0iTnVtYmVy
IG9mIER1bXBSZW5kZXJUcmVlcyB0byBydW4gaW4gcGFyYWxsZWwuIiksCiAgICAgICAgICMgRklY
TUU6IERpc3BsYXkgZGVmYXVsdCBudW1iZXIgb2YgY2hpbGQgcHJvY2Vzc2VzIHRoYXQgd2lsbCBy
dW4uCiAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXdvcmtlci1tb2RlbCIsIGFjdGlv
bj0ic3RvcmUiLAotICAgICAgICAgICAgZGVmYXVsdD0ib2xkLXRocmVhZHMiLCBoZWxwPSgiY29u
dHJvbHMgd29ya2VyIG1vZGVsLiBWYWxpZCB2YWx1ZXMgIgotICAgICAgICAgICAgImFyZSAnb2xk
LWlubGluZScsICdvbGQtdGhyZWFkcycuIikpLAorICAgICAgICAgICAgZGVmYXVsdD1Ob25lLCBo
ZWxwPSgiY29udHJvbHMgd29ya2VyIG1vZGVsLiBWYWxpZCB2YWx1ZXMgYXJlICdvbGQtaW5saW5l
JywgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJ29sZC10aHJlYWRzJywgJ2lu
bGluZScsICd0aHJlYWRzJywgYW5kICdwcm9jZXNzZXMnLiIpKSwKICAgICAgICAgb3B0cGFyc2Uu
bWFrZV9vcHRpb24oIi0tZXhwZXJpbWVudGFsLWZ1bGx5LXBhcmFsbGVsIiwKICAgICAgICAgICAg
IGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlZmF1bHQ9RmFsc2UsCiAgICAgICAgICAgICBoZWxwPSJy
dW4gYWxsIHRlc3RzIGluIHBhcmFsbGVsIiksCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>