<?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>77687</bug_id>
          
          <creation_ts>2012-02-02 15:38:45 -0800</creation_ts>
          <short_desc>test-webkitpy: rollup patch</short_desc>
          <delta_ts>2012-06-26 17:05:23 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Pranke">dpranke</reporter>
          <assigned_to name="Dirk Pranke">dpranke</assigned_to>
          <cc>abarth</cc>
    
    <cc>morrita</cc>
    
    <cc>ojan</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>548202</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-02-02 15:38:45 -0800</bug_when>
    <thetext>test-webkitpy: rollup patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548204</commentid>
    <comment_count>1</comment_count>
      <attachid>125202</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-02-02 15:39:50 -0800</bug_when>
    <thetext>Created attachment 125202
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549403</commentid>
    <comment_count>2</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-02-04 01:43:32 -0800</bug_when>
    <thetext>closing ... work has gone into bug 76765 and bug 77807.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553540</commentid>
    <comment_count>3</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-02-09 15:04:53 -0800</bug_when>
    <thetext>re-opening so I can track the additional rollup work for bug 76022.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553547</commentid>
    <comment_count>4</comment_count>
      <attachid>126382</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-02-09 15:10:21 -0800</bug_when>
    <thetext>Created attachment 126382
latest roll-up, includes parallel testing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553782</commentid>
    <comment_count>5</comment_count>
      <attachid>126446</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-02-09 20:52:47 -0800</bug_when>
    <thetext>Created attachment 126446
lots of cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562164</commentid>
    <comment_count>6</comment_count>
      <attachid>126446</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-02-22 11:10:55 -0800</bug_when>
    <thetext>Comment on attachment 126446
lots of cleanup

don&apos;t actually want this patch reviewed ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563283</commentid>
    <comment_count>7</comment_count>
      <attachid>128511</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-02-23 11:19:57 -0800</bug_when>
    <thetext>Created attachment 128511
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563290</commentid>
    <comment_count>8</comment_count>
      <attachid>128515</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-02-23 11:24:27 -0800</bug_when>
    <thetext>Created attachment 128515
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>564841</commentid>
    <comment_count>9</comment_count>
      <attachid>128843</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-02-24 20:12:56 -0800</bug_when>
    <thetext>Created attachment 128843
work in progress (does not include parallel testing)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658129</commentid>
    <comment_count>10</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-06-26 17:05:23 -0700</bug_when>
    <thetext>closing ... will file new bugs w/ patches for review.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125202</attachid>
            <date>2012-02-02 15:39:50 -0800</date>
            <delta_ts>2012-02-09 15:10:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77687-20120202153949.patch</filename>
            <type>text/plain</type>
            <size>29484</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2NTkyCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOWRjNzEyNDJhMWI3NzQ4MGQzY2I5ZTBmMDNmNjY3NDVl
YzNjMWNhMi4uNDM0OTgxODQ1MjIzOWNiYjY0YzZhYTRiOWMyMzg3MTVlMWQ1YjJiMSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDgw
IEBACiAyMDEyLTAyLTAyICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgogCisg
ICAgICAgIHRlc3Qtd2Via2l0cHk6IHJvbGx1cCBwYXRjaAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc2ODcKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlzIGEgcm9sbHVwIHBhdGNoIHRoYXQgYWRk
cyBhIGJ1bmNoIG9mIGZlYXR1cmVzIHRvCisgICAgICAgIHRlc3Qtd2Via2l0cHkgZm9yIHJ1bm5p
bmcgZGlmZmVyZW50IHN1YnNldHMgb2YgdGhlIHB5dGhvbiB0ZXN0cy4KKworICAgICAgICBUaGlz
IHBhdGNoIGlzIE5PVCBGT1IgTEFORElORy4KKworICAgICAgICAqIFNjcmlwdHMvdGVzdC13ZWJr
aXRweToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rlc3QvbWFpbi5weToKKyAgICAgICAg
KFRlc3RUcmVlKToKKyAgICAgICAgKFRlc3RUcmVlLl9faW5pdF9fKToKKyAgICAgICAgKFRlc3RU
cmVlLmNsZWFuKToKKyAgICAgICAgKFRlc3RUcmVlLmZpbmRfbW9kdWxlcyk6CisgICAgICAgIChM
b2FkZXJFcnJvcik6CisgICAgICAgIChUZXN0ZXIpOgorICAgICAgICAoVGVzdGVyLl9faW5pdF9f
KToKKyAgICAgICAgKFRlc3Rlci5wYXJzZV9hcmdzKToKKyAgICAgICAgKFRlc3Rlci5jb25maWd1
cmUpOgorICAgICAgICAoVGVzdGVyLmNvbmZpZ3VyZV9sb2dnaW5nKToKKyAgICAgICAgKFRlc3Rl
ci5hZGRfdHJlZSk6CisgICAgICAgIChUZXN0ZXIucnVuKToKKyAgICAgICAgKFRlc3Rlci5fZml4
X3BhdGgpOgorICAgICAgICAoVGVzdGVyLl9jbGVhbl90cmVlcyk6CisgICAgICAgIChUZXN0ZXIu
X3N0YXJ0X2NvdmVyYWdlKToKKyAgICAgICAgKFRlc3Rlci5fZmluZF9tb2R1bGVzKToKKyAgICAg
ICAgKFRlc3Rlci5fZGVmYXVsdF90ZXN0cyk6CisgICAgICAgIChUZXN0ZXIuX3NraXBfbW9kdWxl
cyk6CisgICAgICAgIChUZXN0ZXIuX2ZpbmRfdGVzdHNfZm9yKToKKyAgICAgICAgKFRlc3Rlci5f
dGVzdF9mcm9tX3BhdGgpOgorICAgICAgICAoVGVzdGVyLl9zdWl0ZV9mcm9tX25hbWUpOgorICAg
ICAgICAoVGVzdGVyLl9maW5kX3RyZWUpOgorICAgICAgICAoVGVzdGVyLl9pc19tb2R1bGUpOgor
ICAgICAgICAoVGVzdGVyLl9ydW5fdGVzdHMpOgorICAgICAgICAoVGVzdGVyLl9zdG9wX2NvdmVy
YWdlKToKKyAgICAgICAgKFRlc3Rlci5fbG9nX2V4Y2VwdGlvbik6CisgICAgICAgIChUZXN0TG9h
ZGVyKToKKyAgICAgICAgKFRlc3RMb2FkZXIuX19pbml0X18pOgorICAgICAgICAoVGVzdExvYWRl
ci5nZXRUZXN0Q2FzZU5hbWVzKToKKyAgICAgICAgKFRlc3RMb2FkZXIuZ2V0VGVzdENhc2VOYW1l
cy5pc1Rlc3RNZXRob2QpOgorICAgICAgICAoVGVzdFJlc3VsdCk6CisgICAgICAgIChUZXN0UmVz
dWx0Ll9faW5pdF9fKToKKyAgICAgICAgKFRlc3RSZXN1bHQuc3RhcnRUZXN0KToKKyAgICAgICAg
KFRlc3RSZXN1bHQuc3RvcFRlc3QpOgorICAgICAgICAoTGluZVdyaXRlcik6CisgICAgICAgIChM
aW5lV3JpdGVyLl9faW5pdF9fKToKKyAgICAgICAgKExpbmVXcml0ZXIud3JpdGUpOgorICAgICAg
ICAoTGluZVdyaXRlci53cml0ZWxuKToKKyAgICAgICAgKExpbmVXcml0ZXIuZmx1c2gpOgorICAg
ICAgICAoVGVzdFJ1bm5lcik6CisgICAgICAgIChUZXN0UnVubmVyLl9faW5pdF9fKToKKyAgICAg
ICAgKFRlc3RSdW5uZXIuX21ha2VSZXN1bHQpOgorICAgICAgICAoVGVzdFJ1bm5lci5ydW4pOgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGVzdC9tYWluX3VuaXR0ZXN0LnB5OiBBZGRlZC4K
KyAgICAgICAgKER1bW15UmVzdWx0KToKKyAgICAgICAgKER1bW15UnVubmVyKToKKyAgICAgICAg
KER1bW15UnVubmVyLl9faW5pdF9fKToKKyAgICAgICAgKER1bW15UnVubmVyLnJ1bik6CisgICAg
ICAgIChNYWluVGVzdCk6CisgICAgICAgIChNYWluVGVzdC5jbWQpOgorICAgICAgICAoTWFpblRl
c3QuaW50ZWdyYXRpb25fdGVzdF9wYWNrYWdlKToKKyAgICAgICAgKE1haW5UZXN0LmludGVncmF0
aW9uX3Rlc3RfbW9kdWxlKToKKyAgICAgICAgKE1haW5UZXN0LmludGVncmF0aW9uX3Rlc3RfY2xh
c3MpOgorICAgICAgICAoTWFpblRlc3QuaW50ZWdyYXRpb25fdGVzdF9tZXRob2QpOgorICAgICAg
ICAoTWFpblRlc3QuaW50ZWdyYXRpb25fdGVzdF9kaXJlY3RvcnkpOgorICAgICAgICAoTWFpblRl
c3QuaW50ZWdyYXRpb25fdGVzdF9jd2QpOgorICAgICAgICAoTWFpblRlc3QuaW50ZWdyYXRpb25f
dGVzdF9maWxlX2luX2N3ZCk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5
L19faW5pdF9fLnB5OgorICAgICAgICAoQXV0b2luc3RhbGxJbXBvcnRIb29rLmZpbmRfbW9kdWxl
KToKKyAgICAgICAgKEF1dG9pbnN0YWxsSW1wb3J0SG9vay5faW5zdGFsbF9jb3ZlcmFnZSk6CisK
KzIwMTItMDItMDIgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKICAgICAg
ICBucnd0IHNob3VsZG4ndCBibG93IHVwIHdoZW4gdGhlcmUgYXJlIGVycm9ycyBpbiB0ZXN0X2V4
cGVjdGF0aW9ucy50eHQKICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzM2MDMKIApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy90ZXN0LXdlYmtpdHB5IGIv
VG9vbHMvU2NyaXB0cy90ZXN0LXdlYmtpdHB5CmluZGV4IDQyOThmZWFlMjM3M2E3YjhhMzdjNDBm
YjljOGQwNTc0NjViZDk1NmEuLjAxZjEzMzA2MDU1MTU4YjlhZDljNGY4MTgyZjIyN2Y5NzI3MjQ0
ZWQgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvdGVzdC13ZWJraXRweQorKysgYi9Ub29scy9T
Y3JpcHRzL3Rlc3Qtd2Via2l0cHkKQEAgLTM3LDE4ICszNywxOCBAQCBpbXBvcnQgc3lzCiBmcm9t
IHdlYmtpdHB5LmNvbW1vbiBpbXBvcnQgdmVyc2lvbl9jaGVjawogZnJvbSB3ZWJraXRweS50ZXN0
IGltcG9ydCBtYWluCiAKLQotX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ0ZXN0LXdlYmtpdHB5
IikKLQorX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogCiBpZiBfX25hbWVfXyA9
PSAiX19tYWluX18iOgogICAgIHdlYmtpdF9yb290ID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGgu
ZGlybmFtZShvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSkpKQogCi0g
ICAgIyBGSVhNRTogV2Ugc2hvdWxkIHByb2JhYmx5IHRlc3QgZWFjaCBwYWNrYWdlIHNlcGFyYXRl
bHkgdG8gYXZvaWQgbmFtaW5nIGNvbmZsaWN0cy4KLSAgICBkaXJzID0gWwotICAgICAgICBvcy5w
YXRoLmpvaW4od2Via2l0X3Jvb3QsICdUb29scycsICdTY3JpcHRzJyksCi0gICAgICAgIG9zLnBh
dGguam9pbih3ZWJraXRfcm9vdCwgJ1NvdXJjZScsICdXZWJLaXQyJywgJ1NjcmlwdHMnKSwKLSAg
ICBdCisgICAgdGVzdGVyID0gbWFpbi5UZXN0ZXIoc3lzLnN0ZGVycikKKyAgICBvcHRpb25zLCBh
cmdzID0gdGVzdGVyLnBhcnNlX2FyZ3Moc3lzLmFyZ3ZbMTpdKQorICAgIHRlc3Rlci5jb25maWd1
cmUob3B0aW9ucykKKyAgICB0ZXN0ZXIuY29uZmlndXJlX2xvZ2dpbmcoKQorCisgICAgdGVzdGVy
LmFkZF90cmVlKG9zLnBhdGguam9pbih3ZWJraXRfcm9vdCwgJ1Rvb2xzJywgJ1NjcmlwdHMnKSwg
J3dlYmtpdHB5JykKKyAgICB0ZXN0ZXIuYWRkX3RyZWUob3MucGF0aC5qb2luKHdlYmtpdF9yb290
LCAnU291cmNlJywgJ1dlYktpdDInLCAnU2NyaXB0cycpLCAnd2Via2l0MicpCiAKICAgICAjIEZJ
WE1FOiBEbyB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gdGVzdCBRdWV1ZVN0YXR1c1NlcnZlciBvbiBX
aW5kb3dzIGFzIHdlbGw/CiAgICAgYXBwZW5naW5lX3Nka19wYXRoID0gJy91c3IvbG9jYWwvZ29v
Z2xlX2FwcGVuZ2luZScKQEAgLTU5LDE3ICs1OSw3IEBAIGlmIF9fbmFtZV9fID09ICJfX21haW5f
XyI6CiAgICAgICAgIGZyb20gZ29vZ2xlLmFwcGVuZ2luZS5kaXN0IGltcG9ydCB1c2VfbGlicmFy
eQogICAgICAgICB1c2VfbGlicmFyeSgnZGphbmdvJywgJzEuMicpCiAgICAgICAgIGRldl9hcHBz
ZXJ2ZXIuZml4X3N5c19wYXRoKCkKLSAgICAgICAgZGlycy5hcHBlbmQob3MucGF0aC5qb2luKHdl
YmtpdF9yb290LCAnVG9vbHMnLCAnUXVldWVTdGF0dXNTZXJ2ZXInKSkKKyAgICAgICAgdGVzdGVy
LmFkZF90cmVlKG9zLnBhdGguam9pbih3ZWJraXRfcm9vdCwgJ1Rvb2xzJywgJ1F1ZXVlU3RhdHVz
U2VydmVyJyksICcnKQogICAgIGVsc2U6CiAgICAgICAgIF9sb2cuaW5mbygnU2tpcHBpbmcgUXVl
dWVTdGF0dXNTZXJ2ZXIgdGVzdHM7IHRoZSBHb29nbGUgQXBwRW5naW5lIFB5dGhvbiBTREsgaXMg
bm90IGluc3RhbGxlZC4nKQotCi0gICAgbWFpbi5UZXN0ZXIuY2xlYW5fcGFja2FnZXMoZGlycykK
LQotICAgIHRlc3RlciA9IG1haW4uVGVzdGVyKCkKLSAgICBvcHRpb25zLCBhcmdzID0gdGVzdGVy
LnBhcnNlX2FyZ3Moc3lzLmFyZ3YpCi0gICAgdGVzdGVyLmNvbmZpZ3VyZShvcHRpb25zKQotCi0g
ICAgIyBNYWtlIHN1cmUgUFlUSE9OUEFUSCBpcyBzZXQgdXAgY29ycmVjdGx5IHNvIHRoYXQgYWxs
IG9mIHRoZSBpbXBvcnRzIHdpbGwgd29yay4KLSAgICBzeXMucGF0aCA9IFtkIGZvciBkIGluIGRp
cnMgaWYgZCBub3QgaW4gc3lzLnBhdGhdICsgc3lzLnBhdGgKLQotICAgIHN5cy5leGl0KG5vdCB0
ZXN0ZXIucnVuKGRpcnMsIGFyZ3MpKQorICAgIHN5cy5leGl0KG5vdCB0ZXN0ZXIucnVuKGFyZ3Mp
KQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90ZXN0L21haW4ucHkgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3QvbWFpbi5weQppbmRleCA3OGMzOWRiNTU3OTU3NmJmZjdl
MmIzNzczMzg5MjVhYWRhOTllZWNiLi41OTlkNjZmYzYxMGViNzEwMWNlNTZhMjg1YmI3ZTY4NDli
MTdiMzgwIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3QvbWFpbi5weQor
KysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3QvbWFpbi5weQpAQCAtMSwzICsxLDQgQEAK
KyMgQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAj
IENvcHlyaWdodCAoQykgMjAxMCBDaHJpcyBKZXJkb25layAoY2plcmRvbmVrQHdlYmtpdC5vcmcp
CiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dApAQCAtMjUsNiArMjYsNyBAQAogaW1wb3J0IGxvZ2dpbmcKIGltcG9y
dCBvcHRwYXJzZQogaW1wb3J0IG9zCitpbXBvcnQgcGRiCiBpbXBvcnQgU3RyaW5nSU8KIGltcG9y
dCBzeXMKIGltcG9ydCB0cmFjZWJhY2sKQEAgLTM1LDIzICszNyw1MCBAQCBpbXBvcnQgdW5pdHRl
c3QKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKIAogCi1jbGFzcyBUZXN0ZXIo
b2JqZWN0KToKLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGNsZWFuX3BhY2thZ2VzKGRpcnMp
OgotICAgICAgICAiIiJEZWxldGUgYWxsIC5weWMgZmlsZXMgdW5kZXIgZGlycyB0aGF0IGhhdmUg
bm8gLnB5IGZpbGUuIiIiCi0gICAgICAgIGZvciBkaXJfdG9fY2xlYW4gaW4gZGlyczoKLSAgICAg
ICAgICAgIF9sb2cuZGVidWcoIkNsZWFuaW5nIG9ycGhhbmVkICoucHljIGZpbGVzIGZyb206ICVz
IiAlIGRpcl90b19jbGVhbikKLSAgICAgICAgICAgIGZvciBkaXJfcGF0aCwgZGlyX25hbWVzLCBm
aWxlX25hbWVzIGluIG9zLndhbGsoZGlyX3RvX2NsZWFuKToKLSAgICAgICAgICAgICAgICBmb3Ig
ZmlsZV9uYW1lIGluIGZpbGVfbmFtZXM6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGZpbGVfbmFt
ZS5lbmRzd2l0aCgiLnB5YyIpIGFuZCBmaWxlX25hbWVbOi0xXSBub3QgaW4gZmlsZV9uYW1lczoK
LSAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihkaXJfcGF0
aCwgZmlsZV9uYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgX2xvZy5pbmZvKCJEZWxldGlu
ZyBvcnBoYW4gKi5weWMgZmlsZTogJXMiICUgZmlsZV9wYXRoKQotICAgICAgICAgICAgICAgICAg
ICAgICAgb3MucmVtb3ZlKGZpbGVfcGF0aCkKK2NsYXNzIFRlc3RUcmVlKG9iamVjdCk6CisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIHRvcF9kaXJlY3RvcnksIHN0YXJ0aW5nX3N1YmRpcmVjdG9yeT1O
b25lKToKKyAgICAgICAgc2VsZi50b3BfZGlyZWN0b3J5ID0gdG9wX2RpcmVjdG9yeQorICAgICAg
ICBzZWxmLnNlYXJjaF9kaXJlY3RvcnkgPSB0b3BfZGlyZWN0b3J5CisgICAgICAgIHNlbGYudG9w
X3BhY2thZ2UgPSAnJworICAgICAgICBpZiBzdGFydGluZ19zdWJkaXJlY3Rvcnk6CisgICAgICAg
ICAgICBzZWxmLnRvcF9wYWNrYWdlID0gc3RhcnRpbmdfc3ViZGlyZWN0b3J5LnJlcGxhY2Uob3Mu
c2VwLCAnLicpICsgJy4nCisgICAgICAgICAgICBzZWxmLnNlYXJjaF9kaXJlY3RvcnkgPSBvcy5w
YXRoLmpvaW4odG9wX2RpcmVjdG9yeSwgc3RhcnRpbmdfc3ViZGlyZWN0b3J5KQorCisgICAgZGVm
IGNsZWFuKHNlbGYpOgorICAgICAgICAiIiJEZWxldGUgYWxsIC5weWMgZmlsZXMgaW4gdGhlIHRy
ZWUgdGhhdCBoYXZlIG5vIG1hdGNoaW5nIC5weSBmaWxlLiIiIgorICAgICAgICBfbG9nLmRlYnVn
KCJDbGVhbmluZyBvcnBoYW5lZCAqLnB5YyBmaWxlcyBmcm9tOiAlcyIgJSBzZWxmLnNlYXJjaF9k
aXJlY3RvcnkpCisgICAgICAgIGZvciBkaXJfcGF0aCwgZGlyX25hbWVzLCBmaWxlX25hbWVzIGlu
IG9zLndhbGsoc2VsZi5zZWFyY2hfZGlyZWN0b3J5KToKKyAgICAgICAgICAgIGZvciBmaWxlX25h
bWUgaW4gZmlsZV9uYW1lczoKKyAgICAgICAgICAgICAgICBpZiBmaWxlX25hbWUuZW5kc3dpdGgo
Ii5weWMiKSBhbmQgZmlsZV9uYW1lWzotMV0gbm90IGluIGZpbGVfbmFtZXM6CisgICAgICAgICAg
ICAgICAgICAgIGZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihkaXJfcGF0aCwgZmlsZV9uYW1lKQor
ICAgICAgICAgICAgICAgICAgICBfbG9nLmluZm8oIkRlbGV0aW5nIG9ycGhhbiAqLnB5YyBmaWxl
OiAlcyIgJSBmaWxlX3BhdGgpCisgICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZShmaWxlX3Bh
dGgpCisKKyAgICBkZWYgZmluZF9tb2R1bGVzKHNlbGYsIGRpcl90b19zZWFyY2gsIHN1ZmZpeGVz
KToKKyAgICAgICAgbW9kdWxlcyA9IFtdCisgICAgICAgIGZvciBkaXJfcGF0aCwgXywgZmlsZW5h
bWVzIGluIG9zLndhbGsoZGlyX3RvX3NlYXJjaCk6CisgICAgICAgICAgICBkaXJfcGF0aCA9IG9z
LnBhdGguam9pbihkaXJfcGF0aCwgJycpCisgICAgICAgICAgICBwYWNrYWdlID0gZGlyX3BhdGgu
cmVwbGFjZShzZWxmLnRvcF9kaXJlY3RvcnkgKyBvcy5zZXAsICcnKS5yZXBsYWNlKG9zLnNlcCwg
Jy4nKQorICAgICAgICAgICAgZm9yIGYgaW4gZmlsZW5hbWVzOgorICAgICAgICAgICAgICAgIGlm
IGFueShmLmVuZHN3aXRoKHN1ZmZpeCkgZm9yIHN1ZmZpeCBpbiBzdWZmaXhlcyk6CisgICAgICAg
ICAgICAgICAgICAgIG1vZHVsZXMuYXBwZW5kKHBhY2thZ2UgKyBmLnJlcGxhY2UoJy5weScsICcn
KSkKKyAgICAgICAgcmV0dXJuIG1vZHVsZXMKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKwor
Y2xhc3MgTG9hZGVyRXJyb3IoRXhjZXB0aW9uKToKKyAgICBwYXNzCisKKworY2xhc3MgVGVzdGVy
KG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0ZGVycik6CiAgICAgICAgIHNlbGYu
X3ZlcmJvc2l0eSA9IDEKKyAgICAgICAgc2VsZi50cmVlcyA9IFtdCisgICAgICAgIHNlbGYubG9h
ZGVyID0gTm9uZQorICAgICAgICBzZWxmLnJ1bm5lciA9IE5vbmUKKyAgICAgICAgc2VsZi5fbG9n
X2xldmVsID0gbG9nZ2luZy5JTkZPCisgICAgICAgIHNlbGYuc3RkZXJyID0gc3RkZXJyCiAKLSAg
ICBkZWYgcGFyc2VfYXJncyhzZWxmLCBhcmd2KToKKyAgICBkZWYgcGFyc2VfYXJncyhzZWxmLCBh
cmd2PU5vbmUpOgogICAgICAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodXNhZ2U9
J3VzYWdlOiAlcHJvZyBbb3B0aW9uc10gW2FyZ3MuLi5dJykKICAgICAgICAgcGFyc2VyLmFkZF9v
cHRpb24oJy1hJywgJy0tYWxsJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncnVuIGFsbCB0aGUgdGVzdHMnKSwKQEAg
LTYxLDQ2ICs5MCw2MiBAQCBjbGFzcyBUZXN0ZXIob2JqZWN0KToKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaGVscD0ncnVuIHF1aWV0bHkgKGVycm9ycywgd2FybmluZ3MsIGFuZCBwcm9ncmVz
cyBvbmx5KScpLAogICAgICAgICBwYXJzZXIuYWRkX29wdGlvbignLXMnLCAnLS1zaWxlbnQnLCBh
Y3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBoZWxwPSdydW4gc2lsZW50bHkgKGVycm9ycyBhbmQgd2FybmluZ3Mgb25seSknKSwKKyAg
ICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy10JywgJy0tdGltaW5nJywgYWN0aW9uPSdzdG9yZV90
cnVlJywgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nc2hv
dyBob3cgbG9uZyBlYWNoIHRlc3QgdGFrZXMnKSwKICAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24o
Jy14JywgJy0teG1sJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaGVscD0nb3V0cHV0IHhVbml0LXN0eWxlIFhNTCBvdXRwdXQn
KQogICAgICAgICBwYXJzZXIuYWRkX29wdGlvbignLXYnLCAnLS12ZXJib3NlJywgYWN0aW9uPSdj
b3VudCcsIGRlZmF1bHQ9MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ndmVyYm9z
ZSBvdXRwdXQgKHNwZWNpZnkgb25jZSBmb3IgaW5kaXZpZHVhbCB0ZXN0IHJlc3VsdHMsIHR3aWNl
IGZvciBkZWJ1ZyBtZXNzYWdlcyknKQotICAgICAgICBwYXJzZXIuYWRkX29wdGlvbignLS1za2lw
LWludGVncmF0aW9udGVzdHMnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAor
CisgICAgICAgICMgRklYTUU6IFdlIG5lZWQgdG8gdW5pZnkgdGhlc2UgdHdvIHR5cGVzIG9mIHRl
c3RzIGFkIG1ha2UgdGhlbSBjb25zaXN0ZW50LgorICAgICAgICBwYXJzZXIuYWRkX29wdGlvbign
LS1za2lwLWludGVncmF0aW9udGVzdHMnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PVRy
dWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2RvIG5vdCBydW4gdGhlIGludGVn
cmF0aW9uIHRlc3RzJykKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1pJywgJy0tcnVuLXJl
YWwtaW50ZWdyYXRpb250ZXN0cycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2Us
CisgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2RvIG5vdCBydW4gdGhlIHJlYWwgaW50
ZWdyYXRpb24gdGVzdHMnKQogCiAgICAgICAgIHBhcnNlci5lcGlsb2cgPSAoJ1thcmdzLi4uXSBp
cyBhbiBvcHRpb25hbCBsaXN0IG9mIG1vZHVsZXMsIHRlc3RfY2xhc3Nlcywgb3IgaW5kaXZpZHVh
bCB0ZXN0cy4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICdJZiBubyBhcmdzIGFyZSBnaXZl
biwgYWxsIHRoZSB0ZXN0cyB3aWxsIGJlIHJ1bi4nKQogCi0gICAgICAgIHNlbGYucHJvZ05hbWUg
PSBvcy5wYXRoLmJhc2VuYW1lKGFyZ3ZbMF0pCi0gICAgICAgIHJldHVybiBwYXJzZXIucGFyc2Vf
YXJncyhhcmd2WzE6XSkKKyAgICAgICAgcmV0dXJuIHBhcnNlci5wYXJzZV9hcmdzKGFyZ3YpCiAK
ICAgICBkZWYgY29uZmlndXJlKHNlbGYsIG9wdGlvbnMpOgogICAgICAgICBzZWxmLl9vcHRpb25z
ID0gb3B0aW9ucwogCiAgICAgICAgIGlmIG9wdGlvbnMuc2lsZW50OgogICAgICAgICAgICAgc2Vs
Zi5fdmVyYm9zaXR5ID0gMAotICAgICAgICAgICAgc2VsZi5fY29uZmlndXJlX2xvZ2dpbmcobG9n
Z2luZy5XQVJOSU5HKQorICAgICAgICAgICAgc2VsZi5fbG9nX2xldmVsID0gbG9nZ2luZy5XQVJO
SU5HCiAgICAgICAgIGVsaWYgb3B0aW9ucy5xdWlldDoKICAgICAgICAgICAgIHNlbGYuX3ZlcmJv
c2l0eSA9IDEKLSAgICAgICAgICAgIHNlbGYuX2NvbmZpZ3VyZV9sb2dnaW5nKGxvZ2dpbmcuV0FS
TklORykKKyAgICAgICAgICAgIHNlbGYuX2xvZ19sZXZlbCA9IGxvZ2dpbmcuV0FSTklORwogICAg
ICAgICBlbGlmIG9wdGlvbnMudmVyYm9zZSA9PSAwOgogICAgICAgICAgICAgc2VsZi5fdmVyYm9z
aXR5ID0gMQotICAgICAgICAgICAgc2VsZi5fY29uZmlndXJlX2xvZ2dpbmcobG9nZ2luZy5JTkZP
KQorICAgICAgICAgICAgc2VsZi5fbG9nX2xldmVsID0gbG9nZ2luZy5JTkZPCiAgICAgICAgIGVs
aWYgb3B0aW9ucy52ZXJib3NlID09IDE6CiAgICAgICAgICAgICBzZWxmLl92ZXJib3NpdHkgPSAy
Ci0gICAgICAgICAgICBzZWxmLl9jb25maWd1cmVfbG9nZ2luZyhsb2dnaW5nLklORk8pCisgICAg
ICAgICAgICBzZWxmLl9sb2dfbGV2ZWwgPSBsb2dnaW5nLklORk8KICAgICAgICAgZWxpZiBvcHRp
b25zLnZlcmJvc2UgPT0gMjoKICAgICAgICAgICAgIHNlbGYuX3ZlcmJvc2l0eSA9IDIKLSAgICAg
ICAgICAgIHNlbGYuX2NvbmZpZ3VyZV9sb2dnaW5nKGxvZ2dpbmcuREVCVUcpCisgICAgICAgICAg
ICBzZWxmLl9sb2dfbGV2ZWwgPSBsb2dnaW5nLkRFQlVHCiAKLSAgICBkZWYgX2NvbmZpZ3VyZV9s
b2dnaW5nKHNlbGYsIGxvZ19sZXZlbCk6CisgICAgICAgIHNlbGYubG9hZGVyID0gVGVzdExvYWRl
cigpCisgICAgICAgIHNlbGYubG9hZGVyLnJ1bl9yZWFsX2ludGVncmF0aW9uX3Rlc3RzID0gb3B0
aW9ucy5ydW5fcmVhbF9pbnRlZ3JhdGlvbnRlc3RzCisgICAgICAgIGlmIHNlbGYuX29wdGlvbnMu
eG1sOgorICAgICAgICAgICAgZnJvbSB3ZWJraXRweS50aGlyZHBhcnR5LmF1dG9pbnN0YWxsZWQu
eG1scnVubmVyIGltcG9ydCBYTUxUZXN0UnVubmVyCisgICAgICAgICAgICBzZWxmLnJ1bm5lciA9
IFhNTFRlc3RSdW5uZXIob3V0cHV0PSd0ZXN0LXdlYmtpdHB5LXhtbC1yZXBvcnRzJykKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYucnVubmVyID0gdW5pdHRlc3QuVGV4dFRlc3RSdW5u
ZXIoc2VsZi5zdGRlcnIsIHZlcmJvc2l0eT1zZWxmLl92ZXJib3NpdHkpCisgICAgICAgICAgICAj
c2VsZi5ydW5uZXIgPSBUZXN0UnVubmVyKHNlbGYuc3RkZXJyLCBvcHRpb25zLCBzZWxmLl92ZXJi
b3NpdHkpCisgICAgICAgICAgICAjc2VsZi5ydW5uZXIubG9nX2xldmVsID0gc2VsZi5fbG9nX2xl
dmVsCisKKyAgICBkZWYgY29uZmlndXJlX2xvZ2dpbmcoc2VsZik6CiAgICAgICAgICIiIkNvbmZp
Z3VyZSB0aGUgcm9vdCBsb2dnZXIuCiAKICAgICAgICAgQ29uZmlndXJlIHRoZSByb290IGxvZ2dl
ciBub3QgdG8gbG9nIGFueSBtZXNzYWdlcyBmcm9tIHdlYmtpdHB5IC0tCiAgICAgICAgIGV4Y2Vw
dCBmb3IgbWVzc2FnZXMgZnJvbSB0aGUgYXV0b2luc3RhbGwgbW9kdWxlLiAgQWxzbyBzZXQgdGhl
CiAgICAgICAgIGxvZ2dpbmcgbGV2ZWwgYXMgZGVzY3JpYmVkIGJlbG93LgogICAgICAgICAiIiIK
LSAgICAgICAgaGFuZGxlciA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcihzeXMuc3RkZXJyKQorICAg
ICAgICBsb2dfbGV2ZWwgPSBzZWxmLl9sb2dfbGV2ZWwKKyAgICAgICAgaGFuZGxlciA9IGxvZ2dp
bmcuU3RyZWFtSGFuZGxlcihzZWxmLnN0ZGVycikKICAgICAgICAgIyBXZSBjb25zdHJhaW4gdGhl
IGxldmVsIG9uIHRoZSBoYW5kbGVyIHJhdGhlciB0aGFuIG9uIHRoZSByb290CiAgICAgICAgICMg
bG9nZ2VyIGl0c2VsZi4gIFRoaXMgaXMgcHJvYmFibHkgYmV0dGVyIGJlY2F1c2UgdGhlIGhhbmRs
ZXIgaXMKICAgICAgICAgIyBjb25maWd1cmVkIGFuZCBrbm93biBvbmx5IHRvIHRoaXMgbW9kdWxl
LCB3aGVyZWFzIHRoZSByb290IGxvZ2dlcgpAQCAtMTQxLDMyICsxODYsNzggQEAgY2xhc3MgVGVz
dGVyKG9iamVjdCk6CiAgICAgICAgIF9sb2cuaW5mbygiU3VwcHJlc3NpbmcgbW9zdCB3ZWJraXRw
eSBsb2dnaW5nIHdoaWxlIHJ1bm5pbmcgdW5pdCB0ZXN0cy4iKQogICAgICAgICBoYW5kbGVyLmFk
ZEZpbHRlcih0ZXN0aW5nX2ZpbHRlcikKIAotICAgIGRlZiBydW4oc2VsZiwgZGlycywgYXJncyk6
Ci0gICAgICAgIGFyZ3MgPSBhcmdzIG9yIHNlbGYuX2ZpbmRfbW9kdWxlcyhkaXJzKQotICAgICAg
ICByZXR1cm4gc2VsZi5fcnVuX3Rlc3RzKGRpcnMsIGFyZ3MpCisgICAgZGVmIGFkZF90cmVlKHNl
bGYsIHRvcF9kaXJlY3RvcnksIHN0YXJ0aW5nX3N1YmRpcmVjdG9yeT1Ob25lKToKKyAgICAgICAg
c2VsZi50cmVlcy5hcHBlbmQoVGVzdFRyZWUodG9wX2RpcmVjdG9yeSwgc3RhcnRpbmdfc3ViZGly
ZWN0b3J5KSkKIAotICAgIGRlZiBfZmluZF9tb2R1bGVzKHNlbGYsIGRpcnMpOgotICAgICAgICBt
b2R1bGVzID0gW10KLSAgICAgICAgZm9yIGRpcl90b19zZWFyY2ggaW4gZGlyczoKLSAgICAgICAg
ICAgIG1vZHVsZXMuZXh0ZW5kKHNlbGYuX2ZpbmRfbW9kdWxlc191bmRlcihkaXJfdG9fc2VhcmNo
LCAnX3VuaXR0ZXN0LnB5JykpCi0gICAgICAgICAgICBpZiBub3Qgc2VsZi5fb3B0aW9ucy5za2lw
X2ludGVncmF0aW9udGVzdHM6Ci0gICAgICAgICAgICAgICAgbW9kdWxlcy5leHRlbmQoc2VsZi5f
ZmluZF9tb2R1bGVzX3VuZGVyKGRpcl90b19zZWFyY2gsICdfaW50ZWdyYXRpb250ZXN0LnB5Jykp
Ci0gICAgICAgIG1vZHVsZXMuc29ydCgpCisgICAgZGVmIHJ1bihzZWxmLCBhcmdzKToKKyAgICAg
ICAgc2VsZi5fY2xlYW5fdHJlZXMoKQorICAgICAgICBzZWxmLl9maXhfcGF0aCgpCiAKLSAgICAg
ICAgZm9yIG1vZHVsZSBpbiBtb2R1bGVzOgotICAgICAgICAgICAgX2xvZy5kZWJ1ZygiRm91bmQ6
ICVzIiAlIG1vZHVsZSkKLQotICAgICAgICAjIEZJWE1FOiBGaWd1cmUgb3V0IGhvdyB0byBtb3Zl
IHRoaXMgdG8gdGVzdC13ZWJraXRweSBpbiBvcmRlciB0byB0byBtYWtlIHRoaXMgZmlsZSBtb3Jl
IGdlbmVyaWMuCi0gICAgICAgIGlmIG5vdCBzZWxmLl9vcHRpb25zLmFsbDoKLSAgICAgICAgICAg
IHNsb3dfdGVzdHMgPSAoJ3dlYmtpdHB5LmNvbW1vbi5jaGVja291dC5zY20uc2NtX3VuaXR0ZXN0
JywpCi0gICAgICAgICAgICBzZWxmLl9leGNsdWRlKG1vZHVsZXMsIHNsb3dfdGVzdHMsICdhcmUg
cmVhbGx5LCByZWFsbHkgc2xvdycsIDMxODE4KQotCi0gICAgICAgICAgICBpZiBzeXMucGxhdGZv
cm0gPT0gJ3dpbjMyJzoKLSAgICAgICAgICAgICAgICB3aW4zMl9ibGFja2xpc3QgPSAoJ3dlYmtp
dHB5LmNvbW1vbi5jaGVja291dCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICd3ZWJraXRweS5jb21tb24uY29uZmlnJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJ3dlYmtpdHB5LnRvb2wnKQotICAgICAgICAgICAgICAgIHNlbGYuX2V4Y2x1ZGUobW9k
dWxlcywgd2luMzJfYmxhY2tsaXN0LCAnZmFpbCBob3JyaWJseSBvbiB3aW4zMicsIDU0NTI2KQor
ICAgICAgICBpZiBzZWxmLl9vcHRpb25zLmNvdmVyYWdlOgorICAgICAgICAgICAgcmVzID0gc2Vs
Zi5fc3RhcnRfY292ZXJhZ2UoKQorICAgICAgICAgICAgaWYgbm90IHJlczoKKyAgICAgICAgICAg
ICAgICByZXR1cm4KKworICAgICAgICB0cnk6CisgICAgICAgICAgICBfbG9nLmRlYnVnKCJMb2Fk
aW5nIHRoZSB0ZXN0cy4uLiIpCisgICAgICAgICAgICBpZiBhcmdzOgorICAgICAgICAgICAgICAg
IHRlc3RzID0gW10KKyAgICAgICAgICAgICAgICBmb3IgYXJnIGluIGFyZ3M6CisgICAgICAgICAg
ICAgICAgICAgIHRlc3RzLmV4dGVuZChzZWxmLl9maW5kX3Rlc3RzX2ZvcihhcmcpKQorICAgICAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIEZJWE1FOiBDb25zaWRlciBydW5uaW5nIGVh
Y2ggdHJlZSBzZXBhcmF0ZWx5IHRvIGF2b2lkIG5hbWVzcGFjZSBjbGFzaGVzLgorICAgICAgICAg
ICAgICAgIHRlc3RzID0gc2VsZi5fZGVmYXVsdF90ZXN0cygpCisKKyAgICAgICAgICAgIHJlc3Vs
dCA9IHNlbGYuX3J1bl90ZXN0cyh0ZXN0cykKKyAgICAgICAgZXhjZXB0IExvYWRlckVycm9yLCBl
OgorICAgICAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5jb3ZlcmFnZToKKyAgICAgICAgICAgICAg
ICBzZWxmLl9zdG9wX2NvdmVyYWdlKCkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQogCisgICAg
ICAgIGlmIHNlbGYuX29wdGlvbnMuY292ZXJhZ2U6CisgICAgICAgICAgICBzZWxmLl9zdG9wX2Nv
dmVyYWdlKCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdC53YXNTdWNjZXNzZnVsCisKKyAgICBkZWYg
X2ZpeF9wYXRoKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSBQWVRIT05QQVRIIGlzIHNldCB1
cCBjb3JyZWN0bHkuCisgICAgICAgIHN5cy5wYXRoID0gW3RyZWUudG9wX2RpcmVjdG9yeSBmb3Ig
dHJlZSBpbiBzZWxmLnRyZWVzIGlmIHRyZWUudG9wX2RpcmVjdG9yeSBub3QgaW4gc3lzLnBhdGhd
ICsgc3lzLnBhdGgKKworICAgIGRlZiBfY2xlYW5fdHJlZXMoc2VsZik6CisgICAgICAgIGZvciB0
cmVlIGluIHNlbGYudHJlZXM6CisgICAgICAgICAgICB0cmVlLmNsZWFuKCkKKworICAgIGRlZiBf
c3RhcnRfY292ZXJhZ2Uoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGltcG9ydCB3
ZWJraXRweS50aGlyZHBhcnR5LmF1dG9pbnN0YWxsZWQuY292ZXJhZ2UgYXMgY292ZXJhZ2UKKyAg
ICAgICAgZXhjZXB0IEltcG9ydEVycm9yLCBlOgorICAgICAgICAgICAgX2xvZy5lcnJvcigiRmFp
bGVkIHRvIGltcG9ydCAnY292ZXJhZ2UnOyBjYW4ndCBnZW5lcmF0ZSBjb3ZlcmFnZSBudW1iZXJz
LiIpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgc2VsZi5jb3YgPSBjb3ZlcmFn
ZS5jb3ZlcmFnZSgpCisgICAgICAgIHNlbGYuY292LnN0YXJ0KCkKKyAgICAgICAgcmV0dXJuIFRy
dWUKKworICAgIGRlZiBfZmluZF9tb2R1bGVzKHNlbGYsIHRyZWUsIGRpcl90b19zZWFyY2gpOgor
ICAgICAgICBzdWZmaXhlcyA9ICgnX3VuaXR0ZXN0LnB5JywgJ19pbnRlZ3JhdGlvbnRlc3QucHkn
KQorICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnNraXBfaW50ZWdyYXRpb250ZXN0czoKKyAgICAg
ICAgICAgIHN1ZmZpeGVzID0gKCdfdW5pdHRlc3QucHknLCkKKyAgICAgICAgcmV0dXJuIHRyZWUu
ZmluZF9tb2R1bGVzKGRpcl90b19zZWFyY2gsIHN1ZmZpeGVzKQorCisgICAgZGVmIF9kZWZhdWx0
X3Rlc3RzKHNlbGYpOgorICAgICAgICB0ZXN0cyA9IFtdCisgICAgICAgIGZvciB0cmVlIGluIHNl
bGYudHJlZXM6CisgICAgICAgICAgICB0ZXN0cy5leHRlbmQoc2VsZi5fZmluZF9tb2R1bGVzKHRy
ZWUsIHRyZWUuc2VhcmNoX2RpcmVjdG9yeSkpCisgICAgICAgIHJldHVybiB0ZXN0cworCisgICAg
ZGVmIF9za2lwX21vZHVsZXMoc2VsZiwgbW9kdWxlcyk6CisgICAgICAgICMgRklYTUU6IFRoZXNl
IHNob3VsZCBiZSByZXBsYWNlZCB3LyBAc2xvdyBhbmQgQHNraXBfaWYgZGVjb3JhdG9ycworICAg
ICAgICBzbG93X3Rlc3RzID0gKCd3ZWJraXRweS5jb21tb24uY2hlY2tvdXQuc2NtLnNjbV91bml0
dGVzdCcsKQorICAgICAgICBzZWxmLl9leGNsdWRlKG1vZHVsZXMsIHNsb3dfdGVzdHMsICdhcmUg
cmVhbGx5LCByZWFsbHkgc2xvdycsIDMxODE4KQorCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9
PSAnd2luMzInOgorICAgICAgICAgICAgd2luMzJfYmxhY2tsaXN0ID0gKCd3ZWJraXRweS5jb21t
b24uY2hlY2tvdXQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2Via2l0cHku
Y29tbW9uLmNvbmZpZycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3ZWJraXRw
eS50b29sJykKKyAgICAgICAgICAgIHNlbGYuX2V4Y2x1ZGUobW9kdWxlcywgd2luMzJfYmxhY2ts
aXN0LCAnZmFpbCBob3JyaWJseSBvbiB3aW4zMicsIDU0NTI2KQogICAgICAgICByZXR1cm4gbW9k
dWxlcwogCiAgICAgZGVmIF9leGNsdWRlKHNlbGYsIG1vZHVsZXMsIG1vZHVsZV9wcmVmaXhlcywg
cmVhc29uLCBidWdpZCk6CkBAIC0xODEsNjYgKzI3MiwxNTMgQEAgY2xhc3MgVGVzdGVyKG9iamVj
dCk6CiAgICAgICAgIF9sb2cuaW5mbygnICAgIChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9JWQ7IHVzZSAtLWFsbCB0byBpbmNsdWRlKScgJSBidWdpZCkKICAgICAgICAg
X2xvZy5pbmZvKCcnKQogCi0gICAgZGVmIF9maW5kX21vZHVsZXNfdW5kZXIoc2VsZiwgZGlyX3Rv
X3NlYXJjaCwgc3VmZml4KToKLQotICAgICAgICBkZWYgdG9fcGFja2FnZShkaXJfcGF0aCk6Ci0g
ICAgICAgICAgICByZXR1cm4gZGlyX3BhdGgucmVwbGFjZShkaXJfdG9fc2VhcmNoICsgb3Muc2Vw
LCAnJykucmVwbGFjZShvcy5zZXAsICcuJykKLQotICAgICAgICBkZWYgdG9fbW9kdWxlKGZpbGVu
YW1lLCBwYWNrYWdlKToKLSAgICAgICAgICAgIHJldHVybiBwYWNrYWdlICsgJy4nICsgZmlsZW5h
bWUucmVwbGFjZSgnLnB5JywgJycpCi0KLSAgICAgICAgbW9kdWxlcyA9IFtdCi0gICAgICAgIGZv
ciBkaXJfcGF0aCwgXywgZmlsZW5hbWVzIGluIG9zLndhbGsoZGlyX3RvX3NlYXJjaCk6Ci0gICAg
ICAgICAgICBwYWNrYWdlID0gdG9fcGFja2FnZShkaXJfcGF0aCkKLSAgICAgICAgICAgIG1vZHVs
ZXMuZXh0ZW5kKHRvX21vZHVsZShmLCBwYWNrYWdlKSBmb3IgZiBpbiBmaWxlbmFtZXMgaWYgZi5l
bmRzd2l0aChzdWZmaXgpKQotICAgICAgICByZXR1cm4gbW9kdWxlcwotCi0gICAgZGVmIF9ydW5f
dGVzdHMoc2VsZiwgZGlycywgYXJncyk6Ci0gICAgICAgIGlmIHNlbGYuX29wdGlvbnMuY292ZXJh
Z2U6CisgICAgZGVmIF9maW5kX3Rlc3RzX2ZvcihzZWxmLCBuYW1lKToKKyAgICAgICAgKHRyZWUs
IHN0YXJ0aW5nX2RpcmVjdG9yeSkgPSBzZWxmLl9maW5kX3RyZWUobmFtZSkKKyAgICAgICAgaWYg
dHJlZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9maW5kX21vZHVsZXModHJlZSwgc3RhcnRp
bmdfZGlyZWN0b3J5KQorICAgICAgICBlbGlmIG9zLnBhdGguZXhpc3RzKG5hbWUpOgorICAgICAg
ICAgICAgcmV0dXJuIFtzZWxmLl90ZXN0X2Zyb21fcGF0aChuYW1lKV0KKyAgICAgICAgZWxzZToK
KyAgICAgICAgICAgIHJldHVybiBbbmFtZV0KKworICAgIGRlZiBfdGVzdF9mcm9tX3BhdGgoc2Vs
ZiwgbmFtZSk6CisgICAgICAgICMgRmlyc3QsIGNoZWNrIHRvIHNlZSBpZiB3ZSBjYW4gcmVzb2x2
ZSB0aGUgcGF0aCByZWxhdGl2ZSB0byB0aGUgY3dkLgorICAgICAgICBmdWxsX3BhdGggPSBvcy5w
YXRoLmFic3BhdGgobmFtZSkKKyAgICAgICAgZm9yIHRyZWUgaW4gc2VsZi50cmVlczoKKyAgICAg
ICAgICAgIGlmIGZ1bGxfcGF0aC5zdGFydHN3aXRoKHRyZWUudG9wX2RpcmVjdG9yeSk6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZ1bGxfcGF0aC5yZXBsYWNlKHRyZWUudG9wX2RpcmVjdG9yeSAr
IG9zLnNlcCwgJycpLnJlcGxhY2UoJy5weScsICcnKS5yZXBsYWNlKG9zLnNlcCwgJy4nKQorCisg
ICAgICAgICMgRklYTUU6IFRoZSBwYXRoIGlzIG91dHNpZGUgdGhlIGtub3duIHRyZWVzLiBTaG91
bGQgd2UgYWxsb3cgdGhpcz8KKyAgICAgICAgcmFpc2UgTG9hZGVyRXJyb3IoJyVzIGlzIG5vdCBp
biBvbmUgb2YgdGhlIFdlYktpdCBweXRob24gdHJlZXMnICUgbmFtZSkKKworICAgIGRlZiBfc3Vp
dGVfZnJvbV9uYW1lKHNlbGYsIG5hbWUpOgorICAgICAgICBpZiBzZWxmLl9pc19tb2R1bGUobmFt
ZSk6CisgICAgICAgICAgICAjIGltcG9ydCBtb2R1bGVzIGV4cGxpY2l0bHkgYmVmb3JlIGxvYWRp
bmcgdGhlaXIgdGVzdHMgYmVjYXVzZQorICAgICAgICAgICAgIyBsb2FkVGVzdHNGcm9tTmFtZSgp
IHByb2R1Y2VzIGxvdXN5IGVycm9yIG1lc3NhZ2VzIGZvciBiYWQgbW9kdWxlcy4KICAgICAgICAg
ICAgIHRyeToKLSAgICAgICAgICAgICAgICBpbXBvcnQgY292ZXJhZ2UKKyAgICAgICAgICAgICAg
ICBfX2ltcG9ydF9fKG5hbWUpCiAgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IsIGU6Ci0g
ICAgICAgICAgICAgICAgX2xvZy5lcnJvcigiRmFpbGVkIHRvIGltcG9ydCAnY292ZXJhZ2UnOyBj
YW4ndCBnZW5lcmF0ZSBjb3ZlcmFnZSBudW1iZXJzLiIpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IEZhbHNlCi0gICAgICAgICAgICBjb3YgPSBjb3ZlcmFnZS5jb3ZlcmFnZSgpCi0gICAgICAgICAg
ICBjb3Yuc3RhcnQoKQotCi0gICAgICAgIF9sb2cuZGVidWcoIkxvYWRpbmcgdGhlIHRlc3RzLi4u
IikKLQotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5kZWZhdWx0VGVzdExvYWRlcgotICAgICAg
ICBzdWl0ZXMgPSBbXQotICAgICAgICBmb3IgbmFtZSBpbiBhcmdzOgotICAgICAgICAgICAgaWYg
c2VsZi5faXNfbW9kdWxlKGRpcnMsIG5hbWUpOgotICAgICAgICAgICAgICAgICMgaW1wb3J0IG1v
ZHVsZXMgZXhwbGljaXRseSBiZWZvcmUgbG9hZGluZyB0aGVpciB0ZXN0cyBiZWNhdXNlCi0gICAg
ICAgICAgICAgICAgIyBsb2FkVGVzdHNGcm9tTmFtZSgpIHByb2R1Y2VzIGxvdXN5IGVycm9yIG1l
c3NhZ2VzIGZvciBiYWQgbW9kdWxlcy4KLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAg
ICAgICAgICAgIF9faW1wb3J0X18obmFtZSkKLSAgICAgICAgICAgICAgICBleGNlcHQgSW1wb3J0
RXJyb3IsIGU6Ci0gICAgICAgICAgICAgICAgICAgIF9sb2cuZmF0YWwoJ0ZhaWxlZCB0byBpbXBv
cnQgJXM6JyAlIG5hbWUpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2xvZ19leGNlcHRpb24o
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgICAgIHN1aXRlcy5h
cHBlbmQobG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKG5hbWUsIE5vbmUpKQorICAgICAgICAgICAg
ICAgIF9sb2cuZmF0YWwoJ0ZhaWxlZCB0byBpbXBvcnQgJXM6JyAlIG5hbWUpCisgICAgICAgICAg
ICAgICAgc2VsZi5fbG9nX2V4Y2VwdGlvbigpCisgICAgICAgICAgICAgICAgcmFpc2UgTG9hZGVy
RXJyb3IKKyAgICAgICAgcmV0dXJuIHNlbGYubG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKG5hbWUs
IE5vbmUpCisKKyAgICBkZWYgX2ZpbmRfdHJlZShzZWxmLCBuYW1lKToKKyAgICAgICAgIyBJcyB0
aGUgbmFtZSBhIHN1YmRpcmVjdG9yeSByZWxhdGl2ZSB0byB0aGUgY3VycmVudCB3b3JraW5nIGRp
cmVjdG9yeSBhbmQgaW4gYSB0cmVlPworICAgICAgICBmdWxsX3BhdGggPSBvcy5wYXRoLmFic3Bh
dGgobmFtZSkKKyAgICAgICAgZm9yIHRyZWUgaW4gc2VsZi50cmVlczoKKyAgICAgICAgICAgIGlm
IG9zLnBhdGguaXNkaXIoZnVsbF9wYXRoKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKHRyZWUs
IGZ1bGxfcGF0aCkKKworICAgICAgICAjIElzIHRoZSBuYW1lIGEgc3ViZGlyZWN0b3J5IG9mIGEg
dHJlZT8KKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNhYnMobmFtZSk6CisgICAgICAgICAgICBm
b3IgdHJlZSBpbiBzZWxmLnRyZWVzOgorICAgICAgICAgICAgICAgIGZ1bGxfcGF0aCA9IG9zLnBh
dGguYWJzcGF0aChvcy5wYXRoLmpvaW4odHJlZS50b3BfZGlyZWN0b3J5LCBuYW1lKSkKKyAgICAg
ICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGZ1bGxfcGF0aCk6CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAodHJlZSwgb3MucGF0aC5qb2luKHRyZWUudG9wX2RpcmVjdG9yeSwgbmFtZSkp
CisKKyAgICAgICAgIyBJcyB0aGUgbmFtZSBhIHBhY2thZ2U/CisgICAgICAgIHJlbHBhdGggPSBu
YW1lLnJlcGxhY2UoJy4nLCBvcy5zZXApCisgICAgICAgIGZvciB0cmVlIGluIHNlbGYudHJlZXM6
CisgICAgICAgICAgICBmdWxsX3BhdGggPSBvcy5wYXRoLmpvaW4odHJlZS50b3BfZGlyZWN0b3J5
LCByZWxwYXRoKQorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihmdWxsX3BhdGgpOgorICAg
ICAgICAgICAgICAgIHJldHVybiAodHJlZSwgZnVsbF9wYXRoKQorCisgICAgICAgIHJldHVybiAo
Tm9uZSwgTm9uZSkKKworICAgIGRlZiBfaXNfbW9kdWxlKHNlbGYsIG5hbWUpOgorICAgICAgICBy
ZWxwYXRoID0gbmFtZS5yZXBsYWNlKCcuJywgb3Muc2VwKSArICcucHknCisgICAgICAgIHJldHVy
biBhbnkob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHRyZWUudG9wX2RpcmVjdG9yeSwgcmVs
cGF0aCkpIGZvciB0cmVlIGluIHNlbGYudHJlZXMpCiAKLSAgICAgICAgdGVzdF9zdWl0ZSA9IHVu
aXR0ZXN0LlRlc3RTdWl0ZShzdWl0ZXMpCi0gICAgICAgIGlmIHNlbGYuX29wdGlvbnMueG1sOgot
ICAgICAgICAgICAgZnJvbSB3ZWJraXRweS50aGlyZHBhcnR5LmF1dG9pbnN0YWxsZWQueG1scnVu
bmVyIGltcG9ydCBYTUxUZXN0UnVubmVyCi0gICAgICAgICAgICB0ZXN0X3J1bm5lciA9IFhNTFRl
c3RSdW5uZXIob3V0cHV0PSd0ZXN0LXdlYmtpdHB5LXhtbC1yZXBvcnRzJykKLSAgICAgICAgZWxz
ZToKLSAgICAgICAgICAgIHRlc3RfcnVubmVyID0gdW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIodmVy
Ym9zaXR5PXNlbGYuX3ZlcmJvc2l0eSkKKyAgICBkZWYgX3J1bl90ZXN0cyhzZWxmLCB0ZXN0cyk6
CisgICAgICAgICMgU29ydCBhbmQgZGVkdXBsaWNhdGUgYWxsIG9mIHRoZSB0ZXN0cworICAgICAg
ICB0ZXN0cyA9IHNvcnRlZChbdGVzdCBmb3IgdGVzdCBpbiBzZXQodGVzdHMpXSkKIAorICAgICAg
ICBmb3IgdGVzdCBpbiB0ZXN0czoKKyAgICAgICAgICAgIF9sb2cuZGVidWcoIkZvdW5kOiAlcyIg
JSB0ZXN0KQorCisgICAgICAgIGlmIG5vdCBzZWxmLl9vcHRpb25zLmFsbDoKKyAgICAgICAgICAg
IHRlc3RzID0gc2VsZi5fc2tpcF9tb2R1bGVzKHRlc3RzKQorCisgICAgICAgIHN1aXRlcyA9IFtz
ZWxmLl9zdWl0ZV9mcm9tX25hbWUodGVzdCkgZm9yIHRlc3QgaW4gdGVzdHNdCiAgICAgICAgIF9s
b2cuZGVidWcoIlJ1bm5pbmcgdGhlIHRlc3RzLiIpCi0gICAgICAgIHJlc3VsdCA9IHRlc3RfcnVu
bmVyLnJ1bih0ZXN0X3N1aXRlKQotICAgICAgICBpZiBzZWxmLl9vcHRpb25zLmNvdmVyYWdlOgot
ICAgICAgICAgICAgY292LnN0b3AoKQotICAgICAgICAgICAgY292LnNhdmUoKQotICAgICAgICBy
ZXR1cm4gcmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKQorICAgICAgICB0ZXN0X3N1aXRlID0gdW5pdHRl
c3QuVGVzdFN1aXRlKHN1aXRlcykKKyAgICAgICAgcmV0dXJuIHNlbGYucnVubmVyLnJ1bih0ZXN0
X3N1aXRlKQogCi0gICAgZGVmIF9pc19tb2R1bGUoc2VsZiwgZGlycywgbmFtZSk6Ci0gICAgICAg
IHJlbHBhdGggPSBuYW1lLnJlcGxhY2UoJy4nLCBvcy5zZXApICsgJy5weScKLSAgICAgICAgcmV0
dXJuIGFueShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oZCwgcmVscGF0aCkpIGZvciBkIGlu
IGRpcnMpCisgICAgZGVmIF9zdG9wX2NvdmVyYWdlKHNlbGYpOgorICAgICAgICBzZWxmLmNvdi5z
dG9wKCkKKyAgICAgICAgc2VsZi5jb3Yuc2F2ZSgpCiAKICAgICBkZWYgX2xvZ19leGNlcHRpb24o
c2VsZik6CiAgICAgICAgIHMgPSBTdHJpbmdJTy5TdHJpbmdJTygpCiAgICAgICAgIHRyYWNlYmFj
ay5wcmludF9leGMoZmlsZT1zKQogICAgICAgICBmb3IgbCBpbiBzLmJ1Zmxpc3Q6CiAgICAgICAg
ICAgICBfbG9nLmVycm9yKCcgICcgKyBsLnJzdHJpcCgpKQorCisKK2NsYXNzIFRlc3RMb2FkZXIo
dW5pdHRlc3QuVGVzdExvYWRlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBz
ZWxmLnJ1bl9yZWFsX2ludGVncmF0aW9uX3Rlc3RzID0gRmFsc2UKKyAgICAgICAgc3VwZXIoVGVz
dExvYWRlciwgc2VsZikuX19pbml0X18oKQorCisgICAgZGVmIGdldFRlc3RDYXNlTmFtZXMoc2Vs
ZiwgdGVzdENhc2VDbGFzcyk6CisgICAgICAgIGRlZiBpc1Rlc3RNZXRob2QoYXR0cm5hbWUsIHRl
c3RDYXNlQ2xhc3M9dGVzdENhc2VDbGFzcyk6CisgICAgICAgICAgICBpZiBub3QgaGFzYXR0cihn
ZXRhdHRyKHRlc3RDYXNlQ2xhc3MsIGF0dHJuYW1lKSwgJ19fY2FsbF9fJyk6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICByZXR1cm4gKChhdHRybmFtZS5zdGFydHN3
aXRoKCd0ZXN0XycpKSBvcgorICAgICAgICAgICAgICAgICAgICAoc2VsZi5ydW5fcmVhbF9pbnRl
Z3JhdGlvbl90ZXN0cyBhbmQgYXR0cm5hbWUuc3RhcnRzd2l0aCgnaW50ZWdyYXRpb25fdGVzdF8n
KSkpCisgICAgICAgIHRlc3RGbk5hbWVzID0gZmlsdGVyKGlzVGVzdE1ldGhvZCwgZGlyKHRlc3RD
YXNlQ2xhc3MpKQorICAgICAgICB0ZXN0Rm5OYW1lcy5zb3J0KCkKKyAgICAgICAgcmV0dXJuIHRl
c3RGbk5hbWVzCisKKworY2xhc3MgVGVzdFJlc3VsdCh1bml0dGVzdC5fVGV4dFRlc3RSZXN1bHQp
OgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdHJlYW0sIG9wdGlvbnMsIHZlcmJvc2l0eSk6Cisg
ICAgICAgIHN1cGVyKFRlc3RSZXN1bHQsIHNlbGYpLl9faW5pdF9fKHN0cmVhbSwgW10sIHZlcmJv
c2l0eSkKKyAgICAgICAgc2VsZi5zdHJlYW0gPSBzdHJlYW0KKyAgICAgICAgc2VsZi5vcHRpb25z
ID0gb3B0aW9ucworICAgICAgICBzZWxmLmxvZ19sZXZlbCA9IGxvZ2dpbmcuSU5GTworICAgICAg
ICBzZWxmLnZlcmJvc2l0eSA9IHZlcmJvc2l0eQorCisgICAgZGVmIHN0YXJ0VGVzdChzZWxmLCB0
ZXN0KToKKyAgICAgICAgc3VwZXIoVGVzdFJlc3VsdCwgc2VsZikuc3RhcnRUZXN0KHRlc3QpCisg
ICAgICAgIGlmIHNlbGYub3B0aW9ucy50aW1pbmc6CisgICAgICAgICAgICBzZWxmLnN0YXJ0X3Rp
bWUgPSB0aW1lLnRpbWUoKQorCisgICAgZGVmIHN0b3BUZXN0KHNlbGYsIHRlc3QpOgorICAgICAg
ICBzdXBlcihUZXN0UmVzdWx0LCBzZWxmKS5zdG9wVGVzdCh0ZXN0KQorICAgICAgICBpZiBzZWxm
Lm9wdGlvbnMudGltaW5nOgorICAgICAgICAgICAgc2VsZi5zdG9wX3RpbWUgPSB0aW1lLnRpbWUo
KQorCisKK2NsYXNzIExpbmVXcml0ZXIob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
c3RyZWFtKToKKyAgICAgICAgc2VsZi5zdHJlYW0gPSBzdHJlYW0KKworICAgIGRlZiB3cml0ZShz
ZWxmLCBhcmcpOgorICAgICAgICBzZWxmLnN0cmVhbS53cml0ZShhcmcpCisKKyAgICBkZWYgd3Jp
dGVsbihzZWxmLCBhcmc9Tm9uZSk6CisgICAgICAgIGlmIGFyZzoKKyAgICAgICAgICAgIHNlbGYu
d3JpdGUoYXJnKQorICAgICAgICBzZWxmLnN0cmVhbS53cml0ZSgnXG4nKQorCisgICAgZGVmIGZs
dXNoKHNlbGYpOgorICAgICAgICBzZWxmLnN0cmVhbS5mbHVzaCgpCisKKworY2xhc3MgVGVzdFJ1
bm5lcih1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0
cmVhbSwgb3B0aW9ucywgdmVyYm9zaXR5KToKKyAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlv
bnMKKyAgICAgICAgc2VsZi5fdmVyYm9zaXR5ID0gdmVyYm9zaXR5CisgICAgICAgIHNlbGYuX3Jl
YWxfc3RyZWFtID0gTGluZVdyaXRlcihzdHJlYW0pCisgICAgICAgIHN0cmVhbSA9IExpbmVXcml0
ZXIoU3RyaW5nSU8uU3RyaW5nSU8oKSkKKyAgICAgICAgc3VwZXIoVGVzdFJ1bm5lciwgc2VsZiku
X19pbml0X18oc3RyZWFtLCB2ZXJib3NpdHk9dmVyYm9zaXR5KQorCisgICAgZGVmIF9tYWtlUmVz
dWx0KHNlbGYpOgorICAgICAgICByZXR1cm4gVGVzdFJlc3VsdChzZWxmLnN0cmVhbSwgc2VsZi5f
b3B0aW9ucywgc2VsZi5fdmVyYm9zaXR5KQorCisgICAgZGVmIHJ1bihzZWxmLCB0ZXN0KToKKyAg
ICAgICAgcmVzdWx0ID0gc3VwZXIoVGVzdFJ1bm5lciwgc2VsZikucnVuKHRlc3QpCisgICAgICAg
IHNlbGYuX3JlYWxfc3RyZWFtLndyaXRlKCJSYW4gJWQgdGVzdHMuXG4iICUgcmVzdWx0LnRlc3Rz
UnVuKQorICAgICAgICByZXR1cm4gcmVzdWx0CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L3Rlc3QvbWFpbl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVz
dC9tYWluX3VuaXR0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIwMjA3N2Q5NTAxZWM0NThjZjY5MGNmZTNi
Njk3ODVlZmEzZjc2ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3Rlc3QvbWFpbl91bml0dGVzdC5weQpAQCAtMCwwICsxLDk1IEBACisjIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgb3MKK2ltcG9ydCBwZGIKK2ltcG9ydCBj
U3RyaW5nSU8gYXMgU3RyaW5nSU8KK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAorCitmcm9t
IHdlYmtpdHB5LnRlc3QubWFpbiBpbXBvcnQgVGVzdGVyCisKKworY2xhc3MgRHVtbXlSZXN1bHQo
b2JqZWN0KToKKyAgICB3YXNTdWNjZXNzZnVsID0gVHJ1ZQorCisKK2NsYXNzIER1bW15UnVubmVy
KG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0cmVhbSwgKmFyZ3MsICoqa3dhcmdz
KToKKyAgICAgICAgc2VsZi5zdHJlYW0gPSBzdHJlYW0KKyAgICAgICAgcGFzcworCisgICAgZGVm
IHJ1bihzZWxmLCBzdWl0ZSk6CisgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKCdSYW4gJWQgdGVz
dHMuJyAlIHN1aXRlLmNvdW50VGVzdENhc2VzKCkpCisgICAgICAgIHJldHVybiBEdW1teVJlc3Vs
dCgpCisKKword2Via2l0X3Jvb3QgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG9z
LnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkp
KSkKKworCitjbGFzcyBNYWluVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIGNtZChz
ZWxmLCBhcmdzLCBjd2Q9Tm9uZSwgc3RkZXJyPU5vbmUsIHJldD1UcnVlLCBudW1fdGVzdHM9Tm9u
ZSk6CisgICAgICAgIG9sZGN3ZCA9IG9zLmdldGN3ZCgpCisgICAgICAgIGlmIG5vdCBjd2Q6Cisg
ICAgICAgICAgICBjd2QgPSAnL3NyYy93aycKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3Mu
Y2hkaXIoY3dkKQorICAgICAgICAgICAgZXJyID0gU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAg
ICAgICAgdGVzdGVyID0gVGVzdGVyKGVycikKKyAgICAgICAgICAgIG9wdGlvbnMsIGFyZ3MgPSB0
ZXN0ZXIucGFyc2VfYXJncyhhcmdzKQorICAgICAgICAgICAgdGVzdGVyLmNvbmZpZ3VyZShvcHRp
b25zKQorICAgICAgICAgICAgdGVzdGVyLmFkZF90cmVlKG9zLnBhdGguam9pbih3ZWJraXRfcm9v
dCwgJ1Rvb2xzJywgJ1NjcmlwdHMnKSwgJ3dlYmtpdHB5JykKKyAgICAgICAgICAgIHRlc3Rlci5y
dW5uZXIgPSBEdW1teVJ1bm5lcihlcnIpCisgICAgICAgICAgICByZXR1cm5jb2RlID0gdGVzdGVy
LnJ1bihhcmdzKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MuY2hkaXIob2xkY3dk
KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0LCByZXR1cm5jb2RlKQorICAgICAgICBh
Y3R1YWxfZXJyID0gZXJyLmdldHZhbHVlKCkKKyAgICAgICAgaWYgc3RkZXJyIGlzIG5vdCBOb25l
OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWxfZXJyLCBzdGRlcnIpCisgICAg
ICAgIGlmIG51bV90ZXN0cyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZSgoJ1JhbiAlZCB0ZXN0JyAlIG51bV90ZXN0cykgaW4gYWN0dWFsX2VyciwgYWN0dWFsX2VycikK
KworICAgIGRlZiBpbnRlZ3JhdGlvbl90ZXN0X3BhY2thZ2Uoc2VsZik6CisgICAgICAgIHNlbGYu
Y21kKFsnd2Via2l0cHkuY29tbW9uLndhdGNobGlzdCddLCBudW1fdGVzdHM9MzcpCisKKyAgICBk
ZWYgaW50ZWdyYXRpb25fdGVzdF9tb2R1bGUoc2VsZik6CisgICAgICAgIHNlbGYuY21kKFsnd2Vi
a2l0cHkuY29tbW9uLndhdGNobGlzdC53YXRjaGxpc3RfdW5pdHRlc3QnXSwgbnVtX3Rlc3RzPTEw
KQorCisgICAgZGVmIGludGVncmF0aW9uX3Rlc3RfY2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYu
Y21kKFsnd2Via2l0cHkuY29tbW9uLndhdGNobGlzdC53YXRjaGxpc3RfdW5pdHRlc3QuV2F0Y2hM
aXN0VGVzdCddLCBudW1fdGVzdHM9MTApCisKKyAgICBkZWYgaW50ZWdyYXRpb25fdGVzdF9tZXRo
b2Qoc2VsZik6CisgICAgICAgIHNlbGYuY21kKFsnd2Via2l0cHkuY29tbW9uLndhdGNobGlzdC53
YXRjaGxpc3RfdW5pdHRlc3QuV2F0Y2hMaXN0VGVzdC50ZXN0X2ZpbGVuYW1lX2RlZmluaXRpb24n
XSwgbnVtX3Rlc3RzPTEpCisKKyAgICBkZWYgaW50ZWdyYXRpb25fdGVzdF9kaXJlY3Rvcnkoc2Vs
Zik6CisgICAgICAgIHNlbGYuY21kKFsnd2Via2l0cHkvY29tbW9uL3dhdGNobGlzdCddLCBudW1f
dGVzdHM9MzcpCisKKyAgICBkZWYgaW50ZWdyYXRpb25fdGVzdF9jd2Qoc2VsZik6CisgICAgICAg
IHNlbGYuY21kKFsnLiddLCBjd2Q9Jy9zcmMvd2svVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vd2F0Y2hsaXN0JywgbnVtX3Rlc3RzPTM3KQorCisgICAgZGVmIGludGVncmF0aW9uX3Rlc3Rf
Y3dkKHNlbGYpOgorICAgICAgICBzZWxmLmNtZChbJ3dhdGNobGlzdCddLCBjd2Q9Jy9zcmMvd2sv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24nLCBudW1fdGVzdHM9MzcpCisKKyAgICBkZWYg
aW50ZWdyYXRpb25fdGVzdF9maWxlX2luX2N3ZChzZWxmKToKKyAgICAgICAgc2VsZi5jbWQoWyd3
YXRjaGxpc3Qvd2F0Y2hsaXN0X3VuaXR0ZXN0LnB5J10sIGN3ZD0nL3NyYy93ay9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbicsIG51bV90ZXN0cz0xMCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9fX2luaXRfXy5weSBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvdGhpcmRwYXJ0eS9fX2luaXRfXy5weQppbmRleCBlYWQ4OWZmZjAwNGU2NTU2YzY4NzU0
MmMyZmVlMDY4NDliMzAxZjYxLi41MTY2NjExMGMzMGJhNTYzMTcyYmRhZDkzNjA3ODEwYzVkMTBm
NTQ5IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvX19pbml0
X18ucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L19faW5pdF9fLnB5
CkBAIC04Miw2ICs4Miw4IEBAIGNsYXNzIEF1dG9pbnN0YWxsSW1wb3J0SG9vayhvYmplY3QpOgog
ICAgICAgICAgICAgc2VsZi5faW5zdGFsbF9weXdlYnNvY2tldCgpCiAgICAgICAgIGVsaWYgJy5i
dWlsZGJvdCcgaW4gZnVsbG5hbWU6CiAgICAgICAgICAgICBzZWxmLl9pbnN0YWxsX2J1aWxkYm90
KCkKKyAgICAgICAgZWxpZiAnLmNvdmVyYWdlJyBpbiBmdWxsbmFtZToKKyAgICAgICAgICAgIHNl
bGYuX2luc3RhbGxfY292ZXJhZ2UoKQogICAgICAgICBlbGlmICcueG1scnVubmVyJyBpbiBmdWxs
bmFtZToKICAgICAgICAgICAgIHNlbGYuX2luc3RhbGxfeG1scnVubmVyKCkKIApAQCAtMTA4LDYg
KzExMCwxMCBAQCBjbGFzcyBBdXRvaW5zdGFsbEltcG9ydEhvb2sob2JqZWN0KToKIAogICAgICAg
ICBzZWxmLl9pbnN0YWxsKCJodHRwOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2VzL3NvdXJjZS9i
L2J1aWxkYm90L2J1aWxkYm90LTAuOC40cDIudGFyLmd6I21kNT03NTk3ZDk0NTcyNGM4MGMwYWI0
NzZlODMzYTEwMjZjYiIsICJidWlsZGJvdC0wLjguNHAyL2J1aWxkYm90IikKIAorICAgIGRlZiBf
aW5zdGFsbF9jb3ZlcmFnZShzZWxmKToKKyAgICAgICAgaW5zdGFsbGVyID0gQXV0b0luc3RhbGxl
cih0YXJnZXRfZGlyPV9BVVRPSU5TVEFMTEVEX0RJUiwgYXBwZW5kX3RvX3NlYXJjaF9wYXRoPVRy
dWUpCisgICAgICAgIGluc3RhbGxlci5pbnN0YWxsKHVybD0iaHR0cDovL3B5cGkucHl0aG9uLm9y
Zy9wYWNrYWdlcy9zb3VyY2UvYy9jb3ZlcmFnZS9jb3ZlcmFnZS0zLjUuMS50YXIuZ3ojbWQ1PTQx
MGQ0YzgxNTVhNGRhYjIyMmYyYmM1MTIxMmQ0YTI0IiwgdXJsX3N1YnBhdGg9ImNvdmVyYWdlLTMu
NS4xL2NvdmVyYWdlIikKKwogICAgIGRlZiBfaW5zdGFsbF9lbGl6YShzZWxmKToKICAgICAgICAg
aW5zdGFsbGVyID0gQXV0b0luc3RhbGxlcih0YXJnZXRfZGlyPV9BVVRPSU5TVEFMTEVEX0RJUikK
ICAgICAgICAgaW5zdGFsbGVyLmluc3RhbGwodXJsPSJodHRwOi8vd3d3LmFkYW1iYXJ0aC5jb20v
d2Via2l0L2VsaXphIiwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126382</attachid>
            <date>2012-02-09 15:10:21 -0800</date>
            <delta_ts>2012-02-09 20:52:45 -0800</delta_ts>
            <desc>latest roll-up, includes parallel testing</desc>
            <filename>bug-77687-20120209151020.patch</filename>
            <type>text/plain</type>
            <size>80692</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3Mjk1CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3Rl
c3Qtd2Via2l0cHkgYi9Ub29scy9TY3JpcHRzL3Rlc3Qtd2Via2l0cHkKaW5kZXggNDI5OGZlYWUy
MzczYTdiOGEzN2M0MGZiOWM4ZDA1NzQ2NWJkOTU2YS4uNmMwZjkxZjM5MTdlZGFiMjMzZTdlNGZi
NjYwNGZkZjJkYjg1YWY4MyAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy90ZXN0LXdlYmtpdHB5
CisrKyBiL1Rvb2xzL1NjcmlwdHMvdGVzdC13ZWJraXRweQpAQCAtMzcsMTggKzM3LDIzIEBAIGlt
cG9ydCBzeXMKIGZyb20gd2Via2l0cHkuY29tbW9uIGltcG9ydCB2ZXJzaW9uX2NoZWNrCiBmcm9t
IHdlYmtpdHB5LnRlc3QgaW1wb3J0IG1haW4KIAotCi1fbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIo
InRlc3Qtd2Via2l0cHkiKQotCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCiAK
IGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgd2Via2l0X3Jvb3QgPSBvcy5wYXRoLmRp
cm5hbWUob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19m
aWxlX18pKSkpCiAKLSAgICAjIEZJWE1FOiBXZSBzaG91bGQgcHJvYmFibHkgdGVzdCBlYWNoIHBh
Y2thZ2Ugc2VwYXJhdGVseSB0byBhdm9pZCBuYW1pbmcgY29uZmxpY3RzLgotICAgIGRpcnMgPSBb
Ci0gICAgICAgIG9zLnBhdGguam9pbih3ZWJraXRfcm9vdCwgJ1Rvb2xzJywgJ1NjcmlwdHMnKSwK
LSAgICAgICAgb3MucGF0aC5qb2luKHdlYmtpdF9yb290LCAnU291cmNlJywgJ1dlYktpdDInLCAn
U2NyaXB0cycpLAotICAgIF0KKyAgICB0ZXN0ZXIgPSBtYWluLlRlc3RlcihzeXMuc3RkZXJyKQor
ICAgIG9wdGlvbnMsIGFyZ3MgPSB0ZXN0ZXIucGFyc2VfYXJncyhzeXMuYXJndlsxOl0pCisgICAg
dGVzdGVyLmNvbmZpZ3VyZShvcHRpb25zKQorICAgIHRlc3Rlci5jb25maWd1cmVfbG9nZ2luZygp
CisKKyAgICB0aGlyZHBhcnR5ID0gb3MucGF0aC5qb2luKCd3ZWJraXRweScsICd0aGlyZHBhcnR5
JykKKyAgICB0ZXN0ZXIuYWRkX3RyZWUob3MucGF0aC5qb2luKHdlYmtpdF9yb290LCAnVG9vbHMn
LCAnU2NyaXB0cycpLCAnd2Via2l0cHknLAorICAgICAgICAgICAgICAgICAgICBbb3MucGF0aC5q
b2luKHRoaXJkcGFydHksICdhdXRvaW5zdGFsbGVkJyksCisgICAgICAgICAgICAgICAgICAgICBv
cy5wYXRoLmpvaW4odGhpcmRwYXJ0eSwgJ3NpbXBsZWpzb24nKSwKKyAgICAgICAgICAgICAgICAg
ICAgIG9zLnBhdGguam9pbih0aGlyZHBhcnR5LCAnQmVhdXRpZnVsU291cC5weScpLAorICAgICAg
ICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHRoaXJkcGFydHksICdtb2NrLnB5JyldKQorICAg
IHRlc3Rlci5hZGRfdHJlZShvcy5wYXRoLmpvaW4od2Via2l0X3Jvb3QsICdTb3VyY2UnLCAnV2Vi
S2l0MicsICdTY3JpcHRzJyksICd3ZWJraXQyJykKIAogICAgICMgRklYTUU6IERvIHdlIG5lZWQg
dG8gYmUgYWJsZSB0byB0ZXN0IFF1ZXVlU3RhdHVzU2VydmVyIG9uIFdpbmRvd3MgYXMgd2VsbD8K
ICAgICBhcHBlbmdpbmVfc2RrX3BhdGggPSAnL3Vzci9sb2NhbC9nb29nbGVfYXBwZW5naW5lJwpA
QCAtNTksMTcgKzY0LDcgQEAgaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICAgICAgZnJv
bSBnb29nbGUuYXBwZW5naW5lLmRpc3QgaW1wb3J0IHVzZV9saWJyYXJ5CiAgICAgICAgIHVzZV9s
aWJyYXJ5KCdkamFuZ28nLCAnMS4yJykKICAgICAgICAgZGV2X2FwcHNlcnZlci5maXhfc3lzX3Bh
dGgoKQotICAgICAgICBkaXJzLmFwcGVuZChvcy5wYXRoLmpvaW4od2Via2l0X3Jvb3QsICdUb29s
cycsICdRdWV1ZVN0YXR1c1NlcnZlcicpKQorICAgICAgICB0ZXN0ZXIuYWRkX3RyZWUob3MucGF0
aC5qb2luKHdlYmtpdF9yb290LCAnVG9vbHMnLCAnUXVldWVTdGF0dXNTZXJ2ZXInKSwgJycpCiAg
ICAgZWxzZToKICAgICAgICAgX2xvZy5pbmZvKCdTa2lwcGluZyBRdWV1ZVN0YXR1c1NlcnZlciB0
ZXN0czsgdGhlIEdvb2dsZSBBcHBFbmdpbmUgUHl0aG9uIFNESyBpcyBub3QgaW5zdGFsbGVkLicp
Ci0KLSAgICBtYWluLlRlc3Rlci5jbGVhbl9wYWNrYWdlcyhkaXJzKQotCi0gICAgdGVzdGVyID0g
bWFpbi5UZXN0ZXIoKQotICAgIG9wdGlvbnMsIGFyZ3MgPSB0ZXN0ZXIucGFyc2VfYXJncyhzeXMu
YXJndikKLSAgICB0ZXN0ZXIuY29uZmlndXJlKG9wdGlvbnMpCi0KLSAgICAjIE1ha2Ugc3VyZSBQ
WVRIT05QQVRIIGlzIHNldCB1cCBjb3JyZWN0bHkgc28gdGhhdCBhbGwgb2YgdGhlIGltcG9ydHMg
d2lsbCB3b3JrLgotICAgIHN5cy5wYXRoID0gW2QgZm9yIGQgaW4gZGlycyBpZiBkIG5vdCBpbiBz
eXMucGF0aF0gKyBzeXMucGF0aAotCi0gICAgc3lzLmV4aXQobm90IHRlc3Rlci5ydW4oZGlycywg
YXJncykpCisgICAgc3lzLmV4aXQobm90IHRlc3Rlci5ydW4oYXJncykpCmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyLnB5
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdl
ci5weQppbmRleCA3MTEzYmNiNmEzZWFjYzFkY2RjOTEyNmFjZTE5NjVhOTJkNzRjYmI3Li4yNDcw
NWViNGM5ZTQyNzg0Nzg2ODhjNjI3M2NiZjQ4YzE0ODcwZWI3IDEwMDY0NAotLS0gYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyLnB5CisrKyBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXIu
cHkKQEAgLTc1MiwxNCArNzUyLDE2IEBAIGNsYXNzIE1hbmFnZXIob2JqZWN0KToKICAgICAgICAg
bnVtX3dvcmtlcnMgPSBtaW4oaW50KHNlbGYuX29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKSwgbGVu
KGFsbF9zaGFyZHMpKQogICAgICAgICBzZWxmLl9sb2dfbnVtX3dvcmtlcnMobnVtX3dvcmtlcnMs
IGxlbihhbGxfc2hhcmRzKSwgbGVuKGxvY2tlZF9zaGFyZHMpKQogCi0gICAgICAgIG1hbmFnZXJf
Y29ubmVjdGlvbiA9IG1hbmFnZXJfd29ya2VyX2Jyb2tlci5nZXQoc2VsZi5fcG9ydCwgc2VsZi5f
b3B0aW9ucywgc2VsZiwgd29ya2VyLldvcmtlcikKKyAgICAgICAgbWFuYWdlcl9jb25uZWN0aW9u
ID0gbWFuYWdlcl93b3JrZXJfYnJva2VyLmdldChzZWxmLl9vcHRpb25zLndvcmtlcl9tb2RlbCwg
c2VsZiwgd29ya2VyLldvcmtlcikKIAogICAgICAgICBpZiBzZWxmLl9vcHRpb25zLmRyeV9ydW46
CiAgICAgICAgICAgICByZXR1cm4gKGtleWJvYXJkX2ludGVycnVwdGVkLCBpbnRlcnJ1cHRlZCwg
dGhyZWFkX3RpbWluZ3MsIHNlbGYuX2dyb3VwX3N0YXRzLCBzZWxmLl9hbGxfcmVzdWx0cykKIAog
ICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgnU3RhcnRpbmcgJXMgLi4uJyAlIGdy
YW1tYXIucGx1cmFsaXplKCd3b3JrZXInLCBudW1fd29ya2VycykpCiAgICAgICAgIGZvciB3b3Jr
ZXJfbnVtYmVyIGluIHhyYW5nZShudW1fd29ya2Vycyk6Ci0gICAgICAgICAgICB3b3JrZXJfY29u
bmVjdGlvbiA9IG1hbmFnZXJfY29ubmVjdGlvbi5zdGFydF93b3JrZXIod29ya2VyX251bWJlciwg
c2VsZi5yZXN1bHRzX2RpcmVjdG9yeSgpKQorICAgICAgICAgICAgd29ya2VyX2Nvbm5lY3Rpb24g
PSBtYW5hZ2VyX2Nvbm5lY3Rpb24uc3RhcnRfd29ya2VyKHdvcmtlcl9udW1iZXIsIHBvcnQ9c2Vs
Zi5fcG9ydCwKKyAgICAgICAgICAgICAgICBvcHRpb25zPXNlbGYuX29wdGlvbnMsIHJlc3VsdHNf
ZGlyZWN0b3J5PXNlbGYucmVzdWx0c19kaXJlY3RvcnkoKSwKKyAgICAgICAgICAgICAgICByZWFs
X3BvcnRfbmFtZT1zZWxmLl9wb3J0LnJlYWxfbmFtZSgpKQogICAgICAgICAgICAgd29ya2VyX3N0
YXRlID0gX1dvcmtlclN0YXRlKHdvcmtlcl9udW1iZXIsIHdvcmtlcl9jb25uZWN0aW9uKQogICAg
ICAgICAgICAgc2VsZi5fd29ya2VyX3N0YXRlc1t3b3JrZXJfY29ubmVjdGlvbi5uYW1lXSA9IHdv
cmtlcl9zdGF0ZQogCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyX3dvcmtlcl9icm9rZXIucHkgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyX3dvcmtlcl9icm9rZXIu
cHkKaW5kZXggMzQxMzZmZjM3NzgxYzliODRhODlmZjEzMTY4MzhlY2IyYTNkYmE0Zi4uYzkxODUz
ZGNmZjY2YWFjYzNlNDk0MzA0YWU2MGU0MjMxNmVkMDhmYSAxMDA3NTUKLS0tIGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlcl93b3JrZXJfYnJv
a2VyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xs
ZXJzL21hbmFnZXJfd29ya2VyX2Jyb2tlci5weQpAQCAtMjYsNzAgKzI2LDYzIEBACiAjIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCi0iIiJNb2R1bGUgZm9yIGhhbmRsaW5nIG1lc3NhZ2Vz
IGFuZCBjb25jdXJyZW5jeSBmb3IgcnVuLXdlYmtpdC10ZXN0cy4KKyIiIk1vZHVsZSBmb3IgaGFu
ZGxpbmcgbWVzc2FnZXMgYW5kIGNvbmN1cnJlbmN5IGZvciB0ZXN0cy4KIAotVGhpcyBtb2R1bGUg
aW1wbGVtZW50cyBhIG1lc3NhZ2UgYnJva2VyIHRoYXQgY29ubmVjdHMgdGhlIG1hbmFnZXIgdG8g
dGhlCi13b3JrZXJzOiBpdCBwcm92aWRlcyBhIG1lc3NhZ2luZyBhYnN0cmFjdGlvbiBhbmQgbWVz
c2FnZSBsb29wcyAoYnVpbGRpbmcgb24KLXRvcCBvZiBtZXNzYWdlX2Jyb2tlciksIGFuZCBoYW5k
bGVzIHN0YXJ0aW5nIHdvcmtlcnMgYnkgbGF1bmNoaW5nIHByb2Nlc3Nlcy4KK1RoaXMgbW9kdWxl
IGltcGxlbWVudHMgYSBzaW1wbGUgbWVzc2FnZSBicm9rZXIgYWJzdHJhY3Rpb24gdGhhdCB3aWxs
IGJlCit1c2VkIHRvIGNvb3JkaW5hdGUgbWVzc2FnZXMgYmV0d2VlbiBhICJtYW5hZ2VyIiBhbmQg
dGhlIGluZGl2aWR1YWwgd29ya2Vycy4KKworTm90ZSB0aGF0IHRoZSBtYW5hZ2VyIGFuZCB3b3Jr
ZXJzIHdpbGwgdXN1YWxseSBiZSBpbiBkaWZmZXJlbnQgcHJvY2Vzc2VzLCBzbwordGhlIE1hbmFn
ZXIgYW5kIHdvcmtlcnMgbXVzdCBhc3N1bWUgdGhhdCB0aGV5IGhhdmUgbm8gc2hhcmVkIG1lbW9y
eSBhdmFpbGFibGUsCithbmQgbWVzc2FnZXMgbXVzdCBiZSBwaWNrbGVhYmxlLgorCitUaGUgbW9k
dWxlIGV4cG9ydHMgb25lIGZhY3RvcnkgZnVuY3Rpb24gKGdldCgpKSBhbmQgdHdvIGludGVyZmFj
ZSBjbGFzc2VzIC0KK0Jyb2tlckNsaWVudCBhbmQgQWJzdHJhY3RXb3JrZXIgKHdoaWNoIGltcGxl
bWVudHMgQnJva2VyQ2xpZW50IGFuZCBwcm92aWRlcyBzb21lCitkZWZhdWx0IGxvZ2ljKS4gQ2Fs
bGVycyBvZiB0aGlzIHBhY2thZ2UgbXVzdCBwcm92aWRlIGEgY2FsbGJhY2sKK29iamVjdCAodGhl
IG1hbmFnZXIpIHRoYXQgaW1wbGVtZW50cyB0aGUgQnJva2VyQ2xpZW50IGludGVyZmFjZSwgYW5k
CittdXN0IHByb3ZpZGUgYSBjbGFzcyBjb25zdHJ1Y3RvciAod2hpY2ggbm9ybWFsbHkgc3ViY2xh
c3NlcyBBYnN0cmFjdFdvcmtlcikgZm9yCit0aGUgd29ya2Vycy4KIAogVGhlcmUgYXJlIGEgbG90
IG9mIGNsYXNzZXMgYW5kIG9iamVjdHMgaW52b2x2ZWQgaW4gYSBmdWxseSBjb25uZWN0ZWQgc3lz
dGVtLgogVGhleSBpbnRlcmFjdCBtb3JlIG9yIGxlc3MgbGlrZToKIAotICBNYW5hZ2VyICAtLT4g
IF9JbmxpbmVNYW5hZ2VyIC0tLT4gX0lubGluZVdvcmtlciA8LT4gV29ya2VyCisgIE1hbmFnZXIg
IC0tPiAgX01hbmFnZXJDb25uZWN0aW9uIC0tLT4gX1dvcmtlckNvbm5lY3Rpb24gPC0+IFdvcmtl
cgogICAgICBeICAgICAgICAgICAgICAgICAgICBcICAgICAgICAgICAgICAgLyAgICAgICAgICAg
ICAgXgogICAgICB8ICAgICAgICAgICAgICAgICAgICAgdiAgICAgICAgICAgICB2ICAgICAgICAg
ICAgICAgfAotICAgICBcLS0tLS0tLS0tLS0tLS0tLS0tLS0gIE1lc3NhZ2VCcm9rZXIgICAtLS0t
LS0tLS0tLS0tLworICAgICBcLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICBCcm9rZXIgICAtLS0t
LS0tLS0tLS0tLS0tLwogIiIiCiAKK2ltcG9ydCBjUGlja2xlCiBpbXBvcnQgbG9nZ2luZwogaW1w
b3J0IG11bHRpcHJvY2Vzc2luZwogaW1wb3J0IG9wdHBhcnNlCiBpbXBvcnQgUXVldWUKIGltcG9y
dCBzeXMKLQotIyBUaGVzZSBhcmUgbmVlZGVkIHdoZW4gd29ya2VycyBhcmUgbGF1bmNoZWQgaW4g
bmV3IGNoaWxkIHByb2Nlc3Nlcy4KLWZyb20gd2Via2l0cHkuY29tbW9uLmhvc3QgaW1wb3J0IEhv
c3QKLWZyb20gd2Via2l0cHkuY29tbW9uLmhvc3RfbW9jayBpbXBvcnQgTW9ja0hvc3QKLQotZnJv
bSB3ZWJraXRweS5sYXlvdXRfdGVzdHMuY29udHJvbGxlcnMgaW1wb3J0IG1lc3NhZ2VfYnJva2Vy
Ci1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy52aWV3cyBpbXBvcnQgcHJpbnRpbmcKK2ltcG9y
dCB0cmFjZWJhY2sKIAogCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCiAKKwog
IwogIyBUb3BpYyBuYW1lcyBmb3IgTWFuYWdlciA8LT4gV29ya2VyIG1lc3NhZ2luZwogIwotTUFO
QUdFUl9UT1BJQyA9ICdtYW5hZ2VycycKLUFOWV9XT1JLRVJfVE9QSUMgPSAnd29ya2VycycKK19N
QU5BR0VSX1RPUElDID0gJ21hbmFnZXJzJworX0FOWV9XT1JLRVJfVE9QSUMgPSAnd29ya2VycycK
IAogCi1kZWYgcnVudGltZV9vcHRpb25zKCk6Ci0gICAgIiIiUmV0dXJuIGEgbGlzdCBvZiBvcHRw
YXJzZS5PcHRpb24gb2JqZWN0cyBmb3IgYW55IHJ1bnRpbWUgdmFsdWVzIHVzZWQKLSAgICBieSB0
aGlzIG1vZHVsZS4iIiIKLSAgICBvcHRpb25zID0gWwotICAgICAgICBvcHRwYXJzZS5tYWtlX29w
dGlvbigiLS13b3JrZXItbW9kZWwiLCBhY3Rpb249InN0b3JlIiwKLSAgICAgICAgICAgIGhlbHA9
KCJjb250cm9scyB3b3JrZXIgbW9kZWwuIFZhbGlkIHZhbHVlcyBhcmUgIgotICAgICAgICAgICAg
IidpbmxpbmUnIGFuZCAncHJvY2Vzc2VzJy4iKSksCi0gICAgXQotICAgIHJldHVybiBvcHRpb25z
Ci0KLQotZGVmIGdldChwb3J0LCBvcHRpb25zLCBjbGllbnQsIHdvcmtlcl9jbGFzcyk6CitkZWYg
Z2V0KHdvcmtlcl9tb2RlbCwgY2xpZW50LCB3b3JrZXJfY2xhc3MpOgogICAgICIiIlJldHVybiBh
IGNvbm5lY3Rpb24gdG8gYSBtYW5hZ2VyL3dvcmtlciBtZXNzYWdlX2Jyb2tlcgogCiAgICAgQXJn
czoKLSAgICAgICAgcG9ydCAtIGhhbmRsZSB0byBsYXlvdXRfdGVzdHMvcG9ydCBvYmplY3QgZm9y
IHBvcnQtc3BlY2lmaWMgc3R1ZmYKLSAgICAgICAgb3B0aW9ucyAtIG9wdHBhcnNlIGFyZ3VtZW50
IGZvciBjb21tYW5kLWxpbmUgb3B0aW9ucworICAgICAgICB3b3JrZXJfbW9kZWwgLSB0eXBlIG9m
IHdvcmtlcnMgdG8gdXNlCiAgICAgICAgIGNsaWVudCAtIG1lc3NhZ2VfYnJva2VyLkJyb2tlckNs
aWVudCBpbXBsZW1lbnRhdGlvbiB0byBkaXNwYXRjaAogICAgICAgICAgICAgcmVwbGllcyB0by4K
LSAgICAgICAgd29ya2VyX2NsYXNzIC0gdHlwZSBvZiB3b3JrZXJzIHRvIGNyZWF0ZS4gVGhpcyBj
bGFzcyBtdXN0IGltcGxlbWVudAorICAgICAgICB3b3JrZXJfY2xhc3MgLSB0eXBlIG9mIHdvcmtl
cnMgdG8gY3JlYXRlLiBUaGlzIGNsYXNzIHNob3VsZCBvdmVycmlkZQogICAgICAgICAgICAgdGhl
IG1ldGhvZHMgaW4gQWJzdHJhY3RXb3JrZXIuCiAgICAgUmV0dXJuczoKICAgICAgICAgQSBoYW5k
bGUgdG8gYW4gb2JqZWN0IHRoYXQgd2lsbCB0YWxrIHRvIGEgbWVzc2FnZSBicm9rZXIgY29uZmln
dXJlZAogICAgICAgICBmb3IgdGhlIG5vcm1hbCBtYW5hZ2VyL3dvcmtlciBjb21tdW5pY2F0aW9u
LgogICAgICIiIgotICAgIHdvcmtlcl9tb2RlbCA9IG9wdGlvbnMud29ya2VyX21vZGVsCiAgICAg
aWYgd29ya2VyX21vZGVsID09ICdpbmxpbmUnOgogICAgICAgICBxdWV1ZV9jbGFzcyA9IFF1ZXVl
LlF1ZXVlCiAgICAgICAgIG1hbmFnZXJfY2xhc3MgPSBfSW5saW5lTWFuYWdlcgpAQCAtOTksMTIg
KzkyLDE0MyBAQCBkZWYgZ2V0KHBvcnQsIG9wdGlvbnMsIGNsaWVudCwgd29ya2VyX2NsYXNzKToK
ICAgICBlbHNlOgogICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bnN1cHBvcnRlZCB2YWx1ZSBm
b3IgLS13b3JrZXItbW9kZWw6ICVzIiAlIHdvcmtlcl9tb2RlbCkKIAotICAgIGJyb2tlciA9IG1l
c3NhZ2VfYnJva2VyLkJyb2tlcihvcHRpb25zLCBxdWV1ZV9jbGFzcykKLSAgICByZXR1cm4gbWFu
YWdlcl9jbGFzcyhicm9rZXIsIHBvcnQsIG9wdGlvbnMsIGNsaWVudCwgd29ya2VyX2NsYXNzKQor
ICAgIGJyb2tlciA9IF9Ccm9rZXIocXVldWVfY2xhc3MpCisgICAgcmV0dXJuIG1hbmFnZXJfY2xh
c3MoYnJva2VyLCBjbGllbnQsIHdvcmtlcl9jbGFzcykKKworCitjbGFzcyBCcm9rZXJDbGllbnQo
b2JqZWN0KToKKyAgICAiIiJBYnN0cmFjdCBiYXNlIGNsYXNzIC8gaW50ZXJmYWNlIHRoYXQgYWxs
IG1lc3NhZ2UgYnJva2VyIGNsaWVudHMgbXVzdAorICAgIGltcGxlbWVudC4gSW4gYWRkaXRpb24g
dG8gdGhlIG1ldGhvZHMgYmVsb3csIGJ5IGNvbnZlbnRpb24gY2xpZW50cworICAgIGltcGxlbWVu
dCByb3V0aW5lcyBvZiB0aGUgc2lnbmF0dXJlIHR5cGUKKworICAgICAgICBoYW5kbGVfTUVTU0FH
RV9OQU1FKHNlbGYsIHNyYywgLi4uKToKKworICAgIHdoZXJlIE1FU1NBR0VfTkFNRSBtYXRjaGVz
IHRoZSBzdHJpbmcgcGFzc2VkIHRvIHBvc3RfbWVzc2FnZSgpLCBhbmQKKyAgICBzcmMgaW5kaWNh
dGVzIHRoZSBuYW1lIG9mIHRoZSBzZW5kZXIuIElmIHRoZSBtZXNzYWdlIGNvbnRhaW5zIHZhbHVl
cyBpbgorICAgIHRoZSBtZXNzYWdlIGJvZHksIHRob3NlIHdpbGwgYmUgcHJvdmlkZWQgYXMgb3B0
cGFyYW1zLiIiIgorCisgICAgZGVmIGlzX2RvbmUoc2VsZik6CisgICAgICAgICIiIkNhbGxlZCBm
cm9tIGluc2lkZSBydW5fbWVzc2FnZV9sb29wKCkgdG8gaW5kaWNhdGUgd2hldGhlciB0byBleGl0
LiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgbmFtZShz
ZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIGEgbmFtZSB0aGF0IGlkZW50aWZpZXMgdGhlIGNsaWVu
dC4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisKK2NsYXNzIF9Ccm9r
ZXIob2JqZWN0KToKKyAgICAiIiJCcm9rZXJzIHByb3ZpZGUgdGhlIGJhc2ljIG1vZGVsIG9mIGEg
c2V0IG9mIHRvcGljcy4gQ2xpZW50cyBjYW4gcG9zdCBhCisgICAgbWVzc2FnZSB0byBhbnkgdG9w
aWMgdXNpbmcgcG9zdF9tZXNzYWdlKCksIGFuZCBjYW4gcHJvY2VzcyBtZXNzYWdlcyBvbiBvbmUK
KyAgICB0b3BpYyBhdCBhIHRpbWUgdXNpbmcgcnVuX21lc3NhZ2VfbG9vcCgpLiIiIgogCisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIHF1ZXVlX21ha2VyKToKKyAgICAgICAgIiIiQXJnczoKKyAgICAg
ICAgICAgIHF1ZXVlX21ha2VyOiBhIGZhY3RvcnkgbWV0aG9kIHRoYXQgcmV0dXJucyBvYmplY3Rz
IGltcGxlbWVudGluZyBhCisgICAgICAgICAgICAgICAgUXVldWUgaW50ZXJmYWNlIChwdXQoKS9n
ZXQoKSkuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9xdWV1ZV9tYWtlciA9IHF1ZXVlX21h
a2VyCisgICAgICAgIHNlbGYuX3RvcGljcyA9IHt9CisKKyAgICBkZWYgYWRkX3RvcGljKHNlbGYs
IHRvcGljX25hbWUpOgorICAgICAgICBpZiB0b3BpY19uYW1lIG5vdCBpbiBzZWxmLl90b3BpY3M6
CisgICAgICAgICAgICBzZWxmLl90b3BpY3NbdG9waWNfbmFtZV0gPSBzZWxmLl9xdWV1ZV9tYWtl
cigpCisKKyAgICBkZWYgX2dldF9xdWV1ZV9mb3JfdG9waWMoc2VsZiwgdG9waWNfbmFtZSk6Cisg
ICAgICAgIHJldHVybiBzZWxmLl90b3BpY3NbdG9waWNfbmFtZV0KKworICAgIGRlZiBwb3N0X21l
c3NhZ2Uoc2VsZiwgY2xpZW50LCB0b3BpY19uYW1lLCBtZXNzYWdlX25hbWUsICptZXNzYWdlX2Fy
Z3MpOgorICAgICAgICAiIiJQb3N0IGEgbWVzc2FnZSB0byB0aGUgYXBwcm9wcmlhdGUgdG9waWMg
bmFtZS4KKworICAgICAgICBNZXNzYWdlcyBoYXZlIGEgbmFtZSBhbmQgYSB0dXBsZSBvZiBvcHRp
b25hbCBhcmd1bWVudHMuIEJvdGggbXVzdCBiZSBwaWNrbGFibGUuIiIiCisgICAgICAgIG1lc3Nh
Z2UgPSBfTWVzc2FnZShjbGllbnQubmFtZSgpLCB0b3BpY19uYW1lLCBtZXNzYWdlX25hbWUsIG1l
c3NhZ2VfYXJncykKKyAgICAgICAgcXVldWUgPSBzZWxmLl9nZXRfcXVldWVfZm9yX3RvcGljKHRv
cGljX25hbWUpCisgICAgICAgIHF1ZXVlLnB1dChfTWVzc2FnZS5kdW1wcyhtZXNzYWdlKSkKKwor
ICAgIGRlZiBydW5fbWVzc2FnZV9sb29wKHNlbGYsIHRvcGljX25hbWUsIGNsaWVudCwgZGVsYXlf
c2Vjcz1Ob25lKToKKyAgICAgICAgIiIiTG9vcCBwcm9jZXNzaW5nIG1lc3NhZ2VzIHVudGlsIGNs
aWVudC5pc19kb25lKCkgb3IgZGVsYXkgcGFzc2VzLgorCisgICAgICAgIFRvIHJ1biBpbmRlZmlu
aXRlbHksIHNldCBkZWxheV9zZWNzIHRvIE5vbmUuIiIiCisgICAgICAgIGFzc2VydCBkZWxheV9z
ZWNzIGlzIE5vbmUgb3IgZGVsYXlfc2VjcyA+IDAKKyAgICAgICAgc2VsZi5fcnVuX2xvb3AodG9w
aWNfbmFtZSwgY2xpZW50LCBibG9jaz1UcnVlLCBkZWxheV9zZWNzPWRlbGF5X3NlY3MpCisKKyAg
ICBkZWYgcnVuX2FsbF9wZW5kaW5nKHNlbGYsIHRvcGljX25hbWUsIGNsaWVudCk6CisgICAgICAg
ICIiIlByb2Nlc3MgbWVzc2FnZXMgdW50aWwgY2xpZW50LmlzX2RvbmUoKSBvciBjYWxsZXIgd291
bGQgYmxvY2suIiIiCisgICAgICAgIHNlbGYuX3J1bl9sb29wKHRvcGljX25hbWUsIGNsaWVudCwg
YmxvY2s9RmFsc2UsIGRlbGF5X3NlY3M9Tm9uZSkKKworICAgIGRlZiBfcnVuX2xvb3Aoc2VsZiwg
dG9waWNfbmFtZSwgY2xpZW50LCBibG9jaywgZGVsYXlfc2Vjcyk6CisgICAgICAgIHF1ZXVlID0g
c2VsZi5fZ2V0X3F1ZXVlX2Zvcl90b3BpYyh0b3BpY19uYW1lKQorICAgICAgICB3aGlsZSBub3Qg
Y2xpZW50LmlzX2RvbmUoKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzID0g
cXVldWUuZ2V0KGJsb2NrLCBkZWxheV9zZWNzKQorICAgICAgICAgICAgZXhjZXB0IFF1ZXVlLkVt
cHR5OgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgbXNnID0gX01lc3NhZ2Uu
bG9hZHMocykKKyAgICAgICAgICAgIHNlbGYuX2Rpc3BhdGNoX21lc3NhZ2UobXNnLCBjbGllbnQp
CisKKyAgICBkZWYgX2Rpc3BhdGNoX21lc3NhZ2Uoc2VsZiwgbWVzc2FnZSwgY2xpZW50KToKKyAg
ICAgICAgaWYgbm90IGhhc2F0dHIoY2xpZW50LCAnaGFuZGxlXycgKyBtZXNzYWdlLm5hbWUpOgor
ICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICIlczogcmVjZWl2
ZWQgbWVzc2FnZSAnJXMnIGl0IGNvdWxkbid0IGhhbmRsZSIgJQorICAgICAgICAgICAgICAgKGNs
aWVudC5uYW1lKCksIG1lc3NhZ2UubmFtZSkpCisgICAgICAgIG9wdGFyZ3MgPSBtZXNzYWdlLmFy
Z3MKKyAgICAgICAgbWVzc2FnZV9oYW5kbGVyID0gZ2V0YXR0cihjbGllbnQsICdoYW5kbGVfJyAr
IG1lc3NhZ2UubmFtZSkKKyAgICAgICAgbWVzc2FnZV9oYW5kbGVyKG1lc3NhZ2Uuc3JjLCAqb3B0
YXJncykKKworCitjbGFzcyBfTWVzc2FnZShvYmplY3QpOgorICAgIEBzdGF0aWNtZXRob2QKKyAg
ICBkZWYgbG9hZHMoc3RyaW5nX3ZhbHVlKToKKyAgICAgICAgb2JqID0gY1BpY2tsZS5sb2Fkcyhz
dHJpbmdfdmFsdWUpCisgICAgICAgIGFzc2VydChpc2luc3RhbmNlKG9iaiwgX01lc3NhZ2UpKQor
ICAgICAgICByZXR1cm4gb2JqCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3JjLCB0b3BpY19u
YW1lLCBtZXNzYWdlX25hbWUsIG1lc3NhZ2VfYXJncyk6CisgICAgICAgIHNlbGYuc3JjID0gc3Jj
CisgICAgICAgIHNlbGYudG9waWNfbmFtZSA9IHRvcGljX25hbWUKKyAgICAgICAgc2VsZi5uYW1l
ID0gbWVzc2FnZV9uYW1lCisgICAgICAgIHNlbGYuYXJncyA9IG1lc3NhZ2VfYXJncworCisgICAg
ZGVmIGR1bXBzKHNlbGYpOgorICAgICAgICByZXR1cm4gY1BpY2tsZS5kdW1wcyhzZWxmKQorCisg
ICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gKCJfTWVzc2FnZShmcm9tPScl
cycsIHRvcGljX25hbWU9JyVzJywgbWVzc2FnZV9uYW1lPSclcycpIiAlCisgICAgICAgICAgICAg
ICAgKHNlbGYuc3JjLCBzZWxmLnRvcGljX25hbWUsIHNlbGYubmFtZSkpCisKKworY2xhc3MgX0Jy
b2tlckNvbm5lY3Rpb24ob2JqZWN0KToKKyAgICAiIiJCcm9rZXJDb25uZWN0aW9uIHByb3ZpZGVz
IGEgY29ubmVjdGlvbi1vcmllbnRlZCBmYWNhZGUgb24gdG9wIG9mIGEKKyAgICBCcm9rZXIsIHNv
IHRoYXQgY2FsbGVycyBkb24ndCBoYXZlIHRvIHJlcGVhdGVkbHkgcGFzcyB0aGUgc2FtZSB0b3Bp
YworICAgIG5hbWVzIG92ZXIgYW5kIG92ZXIuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
YnJva2VyLCBjbGllbnQsIHJ1bl90b3BpYywgcG9zdF90b3BpYyk6CisgICAgICAgICIiIkNyZWF0
ZSBhIF9Ccm9rZXJDb25uZWN0aW9uIG9uIHRvcCBvZiBhIEJyb2tlci4gTm90ZSB0aGF0IHRoZSBf
QnJva2VyCisgICAgICAgIGlzIHBhc3NlZCBpbiByYXRoZXIgdGhhbiBjcmVhdGVkIHNvIHRoYXQg
YSBzaW5nbGUgX0Jyb2tlciBjYW4gYmUgdXNlZAorICAgICAgICBieSBtdWx0aXBsZSBfQnJva2Vy
Q29ubmVjdGlvbnMuIiIiCisgICAgICAgIHNlbGYuX2Jyb2tlciA9IGJyb2tlcgorICAgICAgICBz
ZWxmLl9jbGllbnQgPSBjbGllbnQKKyAgICAgICAgc2VsZi5fcG9zdF90b3BpYyA9IHBvc3RfdG9w
aWMKKyAgICAgICAgc2VsZi5fcnVuX3RvcGljID0gcnVuX3RvcGljCisgICAgICAgIGJyb2tlci5h
ZGRfdG9waWMocnVuX3RvcGljKQorICAgICAgICBicm9rZXIuYWRkX3RvcGljKHBvc3RfdG9waWMp
CisKKyAgICBkZWYgcnVuX21lc3NhZ2VfbG9vcChzZWxmLCBkZWxheV9zZWNzPU5vbmUpOgorICAg
ICAgICBzZWxmLl9icm9rZXIucnVuX21lc3NhZ2VfbG9vcChzZWxmLl9ydW5fdG9waWMsIHNlbGYu
X2NsaWVudCwgZGVsYXlfc2VjcykKKworICAgIGRlZiBwb3N0X21lc3NhZ2Uoc2VsZiwgbWVzc2Fn
ZV9uYW1lLCAqbWVzc2FnZV9hcmdzKToKKyAgICAgICAgc2VsZi5fYnJva2VyLnBvc3RfbWVzc2Fn
ZShzZWxmLl9jbGllbnQsIHNlbGYuX3Bvc3RfdG9waWMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbWVzc2FnZV9uYW1lLCAqbWVzc2FnZV9hcmdzKQogCi1jbGFzcyBBYnN0cmFj
dFdvcmtlcihtZXNzYWdlX2Jyb2tlci5Ccm9rZXJDbGllbnQpOgotICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCB3b3JrZXJfY29ubmVjdGlvbiwgd29ya2VyX251bWJlciwgcmVzdWx0c19kaXJlY3Rvcnks
IG9wdGlvbnMpOgorICAgIGRlZiByYWlzZV9leGNlcHRpb24oc2VsZiwgZXhjX2luZm8pOgorICAg
ICAgICAjIFNpbmNlIHRyYWNlYmFja3MgYXJlbid0IHBpY2tsYWJsZSwgc2VuZCB0aGUgZXh0cmFj
dGVkIHN0YWNrIGluc3RlYWQuCisgICAgICAgIGV4Y2VwdGlvbl90eXBlLCBleGNlcHRpb25fdmFs
dWUsIGV4Y2VwdGlvbl90cmFjZWJhY2sgPSBzeXMuZXhjX2luZm8oKQorICAgICAgICBzdGFja191
dGlscy5sb2dfdHJhY2ViYWNrKF9sb2cuZGVidWcsIGV4Y2VwdGlvbl90cmFjZWJhY2spCisgICAg
ICAgIHN0YWNrID0gdHJhY2ViYWNrLmV4dHJhY3RfdGIoZXhjZXB0aW9uX3RyYWNlYmFjaykKKyAg
ICAgICAgc2VsZi5fYnJva2VyLnBvc3RfbWVzc2FnZShzZWxmLl9jbGllbnQsIHNlbGYuX3Bvc3Rf
dG9waWMsICdleGNlcHRpb24nLCBleGNlcHRpb25fdHlwZSwgZXhjZXB0aW9uX3ZhbHVlLCBzdGFj
aykKKworCitjbGFzcyBBYnN0cmFjdFdvcmtlcihCcm9rZXJDbGllbnQpOgorICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCB3b3JrZXJfY29ubmVjdGlvbiwgd29ya2VyX251bWJlcik6CiAgICAgICAgICIi
IlRoZSBjb25zdHJ1Y3RvciBzaG91bGQgYmUgdXNlZCB0byBkbyBhbnkgc2ltcGxlIGluaXRpYWxp
emF0aW9uCiAgICAgICAgIG5lY2Vzc2FyeSwgYnV0IHNob3VsZCBub3QgZG8gYW55dGhpbmcgdGhh
dCBjcmVhdGVzIGRhdGEgc3RydWN0dXJlcwogICAgICAgICB0aGF0IGNhbm5vdCBiZSBQaWNrbGVk
IG9yIHNlbnQgYWNyb3NzIHByb2Nlc3NlcyAobGlrZSBvcGVuaW5nCkBAIC0xMTQsODYgKzIzOCwx
MDMgQEAgY2xhc3MgQWJzdHJhY3RXb3JrZXIobWVzc2FnZV9icm9rZXIuQnJva2VyQ2xpZW50KToK
ICAgICAgICAgQXJnczoKICAgICAgICAgICAgIHdvcmtlcl9jb25uZWN0aW9uIC0gaGFuZGxlIHRv
IHRoZSBCcm9rZXJDb25uZWN0aW9uIG9iamVjdCBjcmVhdGluZwogICAgICAgICAgICAgICAgIHRo
ZSB3b3JrZXIgYW5kIHRoYXQgY2FuIGJlIHVzZWQgZm9yIG1lc3NhZ2luZy4KLSAgICAgICAgICAg
IHdvcmtlcl9udW1iZXIgLSBpZGVudGlmaWVyIGZvciB0aGlzIHBhcnRpY3VsYXIgd29ya2VyCi0g
ICAgICAgICAgICBvcHRpb25zIC0gY29tbWFuZC1saW5lIGFyZ3VtZW50IG9iamVjdCBmcm9tIG9w
dHBhcnNlIiIiCi0gICAgICAgIG1lc3NhZ2VfYnJva2VyLkJyb2tlckNsaWVudC5fX2luaXRfXyhz
ZWxmKQorICAgICAgICAgICAgd29ya2VyX251bWJlciAtIGlkZW50aWZpZXIgZm9yIHRoaXMgcGFy
dGljdWxhciB3b3JrZXIiIiIKKyAgICAgICAgQnJva2VyQ2xpZW50Ll9faW5pdF9fKHNlbGYpCiAg
ICAgICAgIHNlbGYuX3dvcmtlcl9jb25uZWN0aW9uID0gd29ya2VyX2Nvbm5lY3Rpb24KLSAgICAg
ICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKICAgICAgICAgc2VsZi5fd29ya2VyX251bWJlciA9
IHdvcmtlcl9udW1iZXIKICAgICAgICAgc2VsZi5fbmFtZSA9ICd3b3JrZXIvJWQnICUgd29ya2Vy
X251bWJlcgotICAgICAgICBzZWxmLl9yZXN1bHRzX2RpcmVjdG9yeSA9IHJlc3VsdHNfZGlyZWN0
b3J5CisgICAgICAgIHNlbGYuX2NhbmNlbGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5fZG9uZSA9
IEZhbHNlCisKKyAgICBkZWYgbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX25hbWUK
IAotICAgIGRlZiBydW4oc2VsZiwgcG9ydCk6CisgICAgZGVmIHN0b3BfaGFuZGxpbmdfbWVzc2Fn
ZXMoc2VsZik6CisgICAgICAgIHNlbGYuX2RvbmUgPSBUcnVlCisKKyAgICBkZWYgcnVuKHNlbGYs
IHBvcnQ9Tm9uZSk6CiAgICAgICAgICIiIkNhbGxiYWNrIGZvciB0aGUgd29ya2VyIHRvIHN0YXJ0
IGV4ZWN1dGluZy4gVHlwaWNhbGx5IGRvZXMgYW55CiAgICAgICAgIHJlbWFpbmluZyBpbml0aWFs
aXphdGlvbiBhbmQgdGhlbiBjYWxscyBicm9rZXJfY29ubmVjdGlvbi5ydW5fbWVzc2FnZV9sb29w
KCkuIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKyAgICAgICAgZXhjZXB0
aW9uX21zZyA9ICcnCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3dvcmtlcl9jb25u
ZWN0aW9uLnJ1bl9tZXNzYWdlX2xvb3AoKQorICAgICAgICAgICAgaWYgbm90IHNlbGYuaXNfZG9u
ZSgpOgorICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCIlczogcmFuIG91dCBv
ZiBtZXNzYWdlcyBpbiB3b3JrZXIgcXVldWUuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICUgc2VsZi5fbmFtZSkKKyAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0
OgorICAgICAgICAgICAgZXhjZXB0aW9uX21zZyA9ICIsIGludGVycnVwdGVkIgorICAgICAgICAg
ICAgc2VsZi5fd29ya2VyX2Nvbm5lY3Rpb24ucmFpc2VfZXhjZXB0aW9uKHN5cy5leGNfaW5mbygp
KQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBleGNlcHRpb25fbXNnID0gIiwgZXhjZXB0
aW9uIHJhaXNlZCIKKyAgICAgICAgICAgIHNlbGYuX3dvcmtlcl9jb25uZWN0aW9uLnJhaXNlX2V4
Y2VwdGlvbihzeXMuZXhjX2luZm8oKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIF9s
b2cuZGVidWcoIiVzIGRvbmUgd2l0aCBtZXNzYWdlIGxvb3AlcyIgJSAoc2VsZi5fbmFtZSwgZXhj
ZXB0aW9uX21zZykpCisKKyAgICBkZWYgaXNfZG9uZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNl
bGYuX2RvbmUgb3Igc2VsZi5fY2FuY2VsZWQKIAogICAgIGRlZiBjYW5jZWwoc2VsZik6CiAgICAg
ICAgICIiIkNhbGxlZCB3aGVuIHBvc3NpYmxlIHRvIGluZGljYXRlIHRvIHRoZSB3b3JrZXIgdG8g
c3RvcCBwcm9jZXNzaW5nCiAgICAgICAgIG1lc3NhZ2VzIGFuZCBzaHV0IGRvd24uIE5vdGUgdGhh
dCB3b3JrZXJzIG1heSBiZSBzdG9wcGVkIHdpdGhvdXQgdGhpcwogICAgICAgICBtZXRob2QgYmVp
bmcgY2FsbGVkLCBzbyBjbGllbnRzIHNob3VsZCBub3QgcmVseSBzb2xlbHkgb24gdGhpcy4iIiIK
LSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorICAgICAgICBzZWxmLl9jYW5jZWxl
ZCA9IFRydWUKIAogCi1jbGFzcyBfTWFuYWdlckNvbm5lY3Rpb24obWVzc2FnZV9icm9rZXIuQnJv
a2VyQ29ubmVjdGlvbik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb2tlciwgb3B0aW9ucywg
Y2xpZW50LCB3b3JrZXJfY2xhc3MpOgorY2xhc3MgX01hbmFnZXJDb25uZWN0aW9uKF9Ccm9rZXJD
b25uZWN0aW9uKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCBjbGllbnQsIHdvcmtl
cl9jbGFzcyk6CiAgICAgICAgICIiIkJhc2UgaW5pdGlhbGl6YXRpb24gZm9yIGFsbCBNYW5hZ2Vy
IG9iamVjdHMuCiAKICAgICAgICAgQXJnczoKICAgICAgICAgICAgIGJyb2tlcjogaGFuZGxlIHRv
IHRoZSBtZXNzYWdlX2Jyb2tlciBvYmplY3QKLSAgICAgICAgICAgIG9wdGlvbnM6IGNvbW1hbmQg
bGluZSBvcHRpb25zIG9iamVjdAogICAgICAgICAgICAgY2xpZW50OiBjYWxsYmFjayBvYmplY3Qg
KHRoZSBjYWxsZXIpCiAgICAgICAgICAgICB3b3JrZXJfY2xhc3M6IGNsYXNzIG9iamVjdCB0byB1
c2UgdG8gY3JlYXRlIHdvcmtlcnMuCiAgICAgICAgICIiIgotICAgICAgICBtZXNzYWdlX2Jyb2tl
ci5Ccm9rZXJDb25uZWN0aW9uLl9faW5pdF9fKHNlbGYsIGJyb2tlciwgY2xpZW50LAotICAgICAg
ICAgICAgTUFOQUdFUl9UT1BJQywgQU5ZX1dPUktFUl9UT1BJQykKLSAgICAgICAgc2VsZi5fb3B0
aW9ucyA9IG9wdGlvbnMKKyAgICAgICAgX0Jyb2tlckNvbm5lY3Rpb24uX19pbml0X18oc2VsZiwg
YnJva2VyLCBjbGllbnQsIF9NQU5BR0VSX1RPUElDLCBfQU5ZX1dPUktFUl9UT1BJQykKICAgICAg
ICAgc2VsZi5fd29ya2VyX2NsYXNzID0gd29ya2VyX2NsYXNzCiAKLSAgICBkZWYgc3RhcnRfd29y
a2VyKHNlbGYsIHdvcmtlcl9udW1iZXIsIHJlc3VsdHNfZGlyZWN0b3J5KToKKyAgICBkZWYgc3Rh
cnRfd29ya2VyKHNlbGYsIHdvcmtlcl9udW1iZXIsICoqd29ya2VyX2FyZ3MpOgogICAgICAgICBy
YWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCiAKIAogY2xhc3MgX0lubGluZU1hbmFnZXIoX01hbmFn
ZXJDb25uZWN0aW9uKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCBwb3J0LCBvcHRp
b25zLCBjbGllbnQsIHdvcmtlcl9jbGFzcyk6Ci0gICAgICAgIF9NYW5hZ2VyQ29ubmVjdGlvbi5f
X2luaXRfXyhzZWxmLCBicm9rZXIsIG9wdGlvbnMsIGNsaWVudCwgd29ya2VyX2NsYXNzKQotICAg
ICAgICBzZWxmLl9wb3J0ID0gcG9ydAorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXIsIGNs
aWVudCwgd29ya2VyX2NsYXNzKToKKyAgICAgICAgX01hbmFnZXJDb25uZWN0aW9uLl9faW5pdF9f
KHNlbGYsIGJyb2tlciwgY2xpZW50LCB3b3JrZXJfY2xhc3MpCiAgICAgICAgIHNlbGYuX2lubGlu
ZV93b3JrZXIgPSBOb25lCiAKLSAgICBkZWYgc3RhcnRfd29ya2VyKHNlbGYsIHdvcmtlcl9udW1i
ZXIsIHJlc3VsdHNfZGlyZWN0b3J5KToKLSAgICAgICAgc2VsZi5faW5saW5lX3dvcmtlciA9IF9J
bmxpbmVXb3JrZXJDb25uZWN0aW9uKHNlbGYuX2Jyb2tlciwgc2VsZi5fcG9ydCwKLSAgICAgICAg
ICAgIHNlbGYuX2NsaWVudCwgc2VsZi5fd29ya2VyX2NsYXNzLCB3b3JrZXJfbnVtYmVyLCByZXN1
bHRzX2RpcmVjdG9yeSwgc2VsZi5fb3B0aW9ucykKKyAgICAjIEZJWE1FOiBXZSBpbmNsdWRlIHRo
ZSAncG9ydCcgc28gdGhhdCB3ZSBjYW4gc2hhcmUgYSBzaW5nbGUgcG9ydCBvYmplY3QKKyAgICAj
IGJldHdlZW4gbWFuYWdlciBhbmQgd29ya2VyIGZvciB0aGUgdGVzdHMgaW4gcnVuX3dlYmtpdF90
ZXN0c19pbnRlZ3JhdGlvbnRlc3QuCisgICAgIyBUaGVzZSB0ZXN0cyBzaG91bGQgbm90IGJlIGFs
bG93ZWQgdG8gZG8gdGhhdCBhbmQgbmVlZCB0byBiZSBmaXhlZCAoYnVnIDc4MTY4KS4KKyAgICBk
ZWYgc3RhcnRfd29ya2VyKHNlbGYsIHdvcmtlcl9udW1iZXIsIHBvcnQ9Tm9uZSwgKip3b3JrZXJf
YXJncyk6CisgICAgICAgIHNlbGYuX2lubGluZV93b3JrZXIgPSBfSW5saW5lV29ya2VyQ29ubmVj
dGlvbihzZWxmLl9icm9rZXIsCisgICAgICAgICAgICBzZWxmLl9jbGllbnQsIHNlbGYuX3dvcmtl
cl9jbGFzcywgd29ya2VyX251bWJlciwgcG9ydCwgKip3b3JrZXJfYXJncykKKwogICAgICAgICBy
ZXR1cm4gc2VsZi5faW5saW5lX3dvcmtlcgogCiAgICAgZGVmIHJ1bl9tZXNzYWdlX2xvb3Aoc2Vs
ZiwgZGVsYXlfc2Vjcz1Ob25lKToKICAgICAgICAgIyBOb3RlIHRoYXQgZGVsYXlfc2VjcyBpcyBp
Z25vcmVkIGluIHRoaXMgY2FzZSBzaW5jZSB3ZSBjYW4ndCBlYXNpbHkKICAgICAgICAgIyBpbXBs
ZW1lbnQgaXQuCiAgICAgICAgIHNlbGYuX2lubGluZV93b3JrZXIucnVuKCkKLSAgICAgICAgc2Vs
Zi5fYnJva2VyLnJ1bl9hbGxfcGVuZGluZyhNQU5BR0VSX1RPUElDLCBzZWxmLl9jbGllbnQpCisg
ICAgICAgIHNlbGYuX2Jyb2tlci5ydW5fYWxsX3BlbmRpbmcoX01BTkFHRVJfVE9QSUMsIHNlbGYu
X2NsaWVudCkKIAogCiBjbGFzcyBfTXVsdGlQcm9jZXNzTWFuYWdlcihfTWFuYWdlckNvbm5lY3Rp
b24pOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXIsIHBvcnQsIG9wdGlvbnMsIGNsaWVu
dCwgd29ya2VyX2NsYXNzKToKLSAgICAgICAgIyBOb3RlIHRoYXQgdGhpcyBjbGFzcyBkb2VzIG5v
dCBrZWVwIGEgaGFuZGxlIHRvIHRoZSBhY3R1YWwgcG9ydAotICAgICAgICAjIG9iamVjdCwgYmVj
YXVzZSBpdCBpc24ndCBQaWNrbGFibGUuIEluc3RlYWQgaXQga2VlcHMgdGhlIHBvcnQKLSAgICAg
ICAgIyBuYW1lIGFuZCByZWNyZWF0ZXMgdGhlIHBvcnQgaW4gdGhlIGNoaWxkIHByb2Nlc3MgZnJv
bSB0aGUgbmFtZQotICAgICAgICAjIGFuZCBvcHRpb25zLgotICAgICAgICBfTWFuYWdlckNvbm5l
Y3Rpb24uX19pbml0X18oc2VsZiwgYnJva2VyLCBvcHRpb25zLCBjbGllbnQsIHdvcmtlcl9jbGFz
cykKLSAgICAgICAgc2VsZi5fcGxhdGZvcm1fbmFtZSA9IHBvcnQucmVhbF9uYW1lKCkKLQotICAg
IGRlZiBzdGFydF93b3JrZXIoc2VsZiwgd29ya2VyX251bWJlciwgcmVzdWx0c19kaXJlY3Rvcnkp
OgotICAgICAgICB3b3JrZXJfY29ubmVjdGlvbiA9IF9NdWx0aVByb2Nlc3NXb3JrZXJDb25uZWN0
aW9uKHNlbGYuX2Jyb2tlciwgc2VsZi5fcGxhdGZvcm1fbmFtZSwKLSAgICAgICAgICAgIHNlbGYu
X3dvcmtlcl9jbGFzcywgd29ya2VyX251bWJlciwgcmVzdWx0c19kaXJlY3RvcnksIHNlbGYuX29w
dGlvbnMpCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb2tlciwgY2xpZW50LCB3b3JrZXJfY2xh
c3MpOgorICAgICAgICBfTWFuYWdlckNvbm5lY3Rpb24uX19pbml0X18oc2VsZiwgYnJva2VyLCBj
bGllbnQsIHdvcmtlcl9jbGFzcykKKworICAgIGRlZiBzdGFydF93b3JrZXIoc2VsZiwgd29ya2Vy
X251bWJlciwgcG9ydD1Ob25lLCAqKndvcmtlcl9hcmdzKToKKyAgICAgICAgIyBXZSBkb24ndCBz
dG9yZSB0aGUgcG9ydCBiZWNhdXNlIHdvcmtlcnMgcnVuIGluIHNlcGFyYXRlIHByb2Nlc3NlcyBh
bmQKKyAgICAgICAgIyB3ZSBjYW4ndCByZXF1aXJlIHRoZSBwYXJlbnQncyBwb3J0IHRvIGJlIHBp
Y2tsZWFibGUgYW5kIHNoYXJlZCB3aXRoIHRoZSBjaGlsZC4KKyAgICAgICAgd29ya2VyX2Nvbm5l
Y3Rpb24gPSBfTXVsdGlQcm9jZXNzV29ya2VyQ29ubmVjdGlvbihzZWxmLl9icm9rZXIsCisgICAg
ICAgICAgICBzZWxmLl93b3JrZXJfY2xhc3MsIHdvcmtlcl9udW1iZXIsICoqd29ya2VyX2FyZ3Mp
CiAgICAgICAgIHdvcmtlcl9jb25uZWN0aW9uLnN0YXJ0KCkKICAgICAgICAgcmV0dXJuIHdvcmtl
cl9jb25uZWN0aW9uCiAKIAotY2xhc3MgX1dvcmtlckNvbm5lY3Rpb24obWVzc2FnZV9icm9rZXIu
QnJva2VyQ29ubmVjdGlvbik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb2tlciwgd29ya2Vy
X2NsYXNzLCB3b3JrZXJfbnVtYmVyLCByZXN1bHRzX2RpcmVjdG9yeSwgb3B0aW9ucyk6Ci0gICAg
ICAgIHNlbGYuX2NsaWVudCA9IHdvcmtlcl9jbGFzcyhzZWxmLCB3b3JrZXJfbnVtYmVyLCByZXN1
bHRzX2RpcmVjdG9yeSwgb3B0aW9ucykKK2NsYXNzIF9Xb3JrZXJDb25uZWN0aW9uKF9Ccm9rZXJD
b25uZWN0aW9uKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCB3b3JrZXJfY2xhc3Ms
IHdvcmtlcl9udW1iZXIsICoqd29ya2VyX2FyZ3MpOgorICAgICAgICBzZWxmLl9jbGllbnQgPSB3
b3JrZXJfY2xhc3Moc2VsZiwgd29ya2VyX251bWJlciwgKip3b3JrZXJfYXJncykKICAgICAgICAg
c2VsZi5uYW1lID0gc2VsZi5fY2xpZW50Lm5hbWUoKQotICAgICAgICBtZXNzYWdlX2Jyb2tlci5C
cm9rZXJDb25uZWN0aW9uLl9faW5pdF9fKHNlbGYsIGJyb2tlciwgc2VsZi5fY2xpZW50LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFOWV9XT1JLRVJf
VE9QSUMsIE1BTkFHRVJfVE9QSUMpCisgICAgICAgIF9Ccm9rZXJDb25uZWN0aW9uLl9faW5pdF9f
KHNlbGYsIGJyb2tlciwgc2VsZi5fY2xpZW50LCBfQU5ZX1dPUktFUl9UT1BJQywgX01BTkFHRVJf
VE9QSUMpCiAKICAgICBkZWYgY2FuY2VsKHNlbGYpOgogICAgICAgICByYWlzZSBOb3RJbXBsZW1l
bnRlZEVycm9yCkBAIC0yMDksMTAgKzM1MCwxMiBAQCBjbGFzcyBfV29ya2VyQ29ubmVjdGlvbiht
ZXNzYWdlX2Jyb2tlci5Ccm9rZXJDb25uZWN0aW9uKToKIAogCiBjbGFzcyBfSW5saW5lV29ya2Vy
Q29ubmVjdGlvbihfV29ya2VyQ29ubmVjdGlvbik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGJy
b2tlciwgcG9ydCwgbWFuYWdlcl9jbGllbnQsIHdvcmtlcl9jbGFzcywgd29ya2VyX251bWJlciwg
cmVzdWx0c19kaXJlY3RvcnksIG9wdGlvbnMpOgotICAgICAgICBfV29ya2VyQ29ubmVjdGlvbi5f
X2luaXRfXyhzZWxmLCBicm9rZXIsIHdvcmtlcl9jbGFzcywgd29ya2VyX251bWJlciwgcmVzdWx0
c19kaXJlY3RvcnksIG9wdGlvbnMpCi0gICAgICAgIHNlbGYuX2FsaXZlID0gRmFsc2UKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCBtYW5hZ2VyX2NsaWVudCwgd29ya2VyX2NsYXNzLCB3
b3JrZXJfbnVtYmVyLCBwb3J0LCAqKndvcmtlcl9hcmdzKToKKyAgICAgICAgX1dvcmtlckNvbm5l
Y3Rpb24uX19pbml0X18oc2VsZiwgYnJva2VyLCB3b3JrZXJfY2xhc3MsIHdvcmtlcl9udW1iZXIs
ICoqd29ya2VyX2FyZ3MpCisKKyAgICAgICAgIyBTZWUgY29tbWVudCBpbiBJbmxpbmVXb3JrZXJC
cm9rZXIuc3RhcnRfd29ya2VyKCkgZm9yIHdoeSB3ZSBoYXZlIHBvcnQgaGVyZS4KICAgICAgICAg
c2VsZi5fcG9ydCA9IHBvcnQKKyAgICAgICAgc2VsZi5fYWxpdmUgPSBGYWxzZQogICAgICAgICBz
ZWxmLl9tYW5hZ2VyX2NsaWVudCA9IG1hbmFnZXJfY2xpZW50CiAKICAgICBkZWYgY2FuY2VsKHNl
bGYpOgpAQCAtMjMwLDcgKzM3Myw3IEBAIGNsYXNzIF9JbmxpbmVXb3JrZXJDb25uZWN0aW9uKF9X
b3JrZXJDb25uZWN0aW9uKToKICAgICAgICAgc2VsZi5fYWxpdmUgPSBGYWxzZQogCiAgICAgZGVm
IHlpZWxkX3RvX2Jyb2tlcihzZWxmKToKLSAgICAgICAgc2VsZi5fYnJva2VyLnJ1bl9hbGxfcGVu
ZGluZyhNQU5BR0VSX1RPUElDLCBzZWxmLl9tYW5hZ2VyX2NsaWVudCkKKyAgICAgICAgc2VsZi5f
YnJva2VyLnJ1bl9hbGxfcGVuZGluZyhfTUFOQUdFUl9UT1BJQywgc2VsZi5fbWFuYWdlcl9jbGll
bnQpCiAKICAgICBkZWYgcmFpc2VfZXhjZXB0aW9uKHNlbGYsIGV4Y19pbmZvKToKICAgICAgICAg
IyBTaW5jZSB0aGUgd29ya2VyIGlzIGluIHRoZSBzYW1lIHByb2Nlc3MgYXMgdGhlIG1hbmFnZXIs
IHdlIGNhbgpAQCAtMjQwLDQzICszODMsMTkgQEAgY2xhc3MgX0lubGluZVdvcmtlckNvbm5lY3Rp
b24oX1dvcmtlckNvbm5lY3Rpb24pOgogCiAKIGNsYXNzIF9Qcm9jZXNzKG11bHRpcHJvY2Vzc2lu
Zy5Qcm9jZXNzKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgd29ya2VyX2Nvbm5lY3Rpb24sIHBs
YXRmb3JtX25hbWUsIG9wdGlvbnMsIGNsaWVudCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdv
cmtlcl9jb25uZWN0aW9uLCBjbGllbnQpOgogICAgICAgICBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vz
cy5fX2luaXRfXyhzZWxmKQogICAgICAgICBzZWxmLl93b3JrZXJfY29ubmVjdGlvbiA9IHdvcmtl
cl9jb25uZWN0aW9uCi0gICAgICAgIHNlbGYuX3BsYXRmb3JtX25hbWUgPSBwbGF0Zm9ybV9uYW1l
Ci0gICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCiAgICAgICAgIHNlbGYuX2NsaWVudCA9
IGNsaWVudAogCiAgICAgZGVmIHJ1bihzZWxmKToKLSAgICAgICAgIyBXZSBuZWVkIHRvIGNyZWF0
ZSBhIG5ldyBIb3N0IG9iamVjdCBoZXJlIGJlY2F1c2UgdGhpcyBpcwotICAgICAgICAjIHJ1bm5p
bmcgaW4gYSBuZXcgcHJvY2VzcyBhbmQgd2UgY2FuJ3QgcmVxdWlyZSB0aGUgcGFyZW50J3MKLSAg
ICAgICAgIyBIb3N0IHRvIGJlIHBpY2tsZWFibGUgYW5kIHBhc3NlZCB0byB0aGUgY2hpbGQuCi0g
ICAgICAgIGlmIHNlbGYuX3BsYXRmb3JtX25hbWUuc3RhcnRzd2l0aCgndGVzdCcpOgotICAgICAg
ICAgICAgaG9zdCA9IE1vY2tIb3N0KCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGhvc3Qg
PSBIb3N0KCkKLSAgICAgICAgaG9zdC5faW5pdGlhbGl6ZV9zY20oKQotCi0gICAgICAgIG9wdGlv
bnMgPSBzZWxmLl9vcHRpb25zCi0gICAgICAgIHBvcnRfb2JqID0gaG9zdC5wb3J0X2ZhY3Rvcnku
Z2V0KHNlbGYuX3BsYXRmb3JtX25hbWUsIG9wdGlvbnMpCi0KLSAgICAgICAgIyBUaGUgdW5peCBt
dWx0aXByb2Nlc3NpbmcgaW1wbGVtZW50YXRpb24gY2xvbmVzIHRoZQotICAgICAgICAjIGxvZyBo
YW5kbGVyIGNvbmZpZ3VyYXRpb24gaW50byB0aGUgY2hpbGQgcHJvY2Vzc2VzLAotICAgICAgICAj
IGJ1dCB0aGUgd2luIGltcGxlbWVudGF0aW9uIGRvZXNuJ3QuCi0gICAgICAgIGNvbmZpZ3VyZV9s
b2dnaW5nID0gKHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInKQotCi0gICAgICAgICMgRklYTUU6IHRo
aXMgd29uJ3Qgd29yayBpZiB0aGUgY2FsbGluZyBwcm9jZXNzIGlzIGxvZ2dpbmcKLSAgICAgICAg
IyBzb21ld2hlcmUgb3RoZXIgdGhhbiBzeXMuc3RkZXJyIGFuZCBzeXMuc3Rkb3V0LCBidXQgSSdt
IG5vdCBzdXJlCi0gICAgICAgICMgaWYgdGhpcyB3aWxsIGJlIGFuIGlzc3VlIGluIHByYWN0aWNl
LgotICAgICAgICBwcmludGVyID0gcHJpbnRpbmcuUHJpbnRlcihwb3J0X29iaiwgb3B0aW9ucywg
c3lzLnN0ZGVyciwgc3lzLnN0ZG91dCwgY29uZmlndXJlX2xvZ2dpbmcpCi0gICAgICAgIHNlbGYu
X2NsaWVudC5ydW4ocG9ydF9vYmopCi0gICAgICAgIHByaW50ZXIuY2xlYW51cCgpCisgICAgICAg
IHNlbGYuX2NsaWVudC5ydW4oKQogCiAKIGNsYXNzIF9NdWx0aVByb2Nlc3NXb3JrZXJDb25uZWN0
aW9uKF9Xb3JrZXJDb25uZWN0aW9uKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCBw
bGF0Zm9ybV9uYW1lLCB3b3JrZXJfY2xhc3MsIHdvcmtlcl9udW1iZXIsIHJlc3VsdHNfZGlyZWN0
b3J5LCBvcHRpb25zKToKLSAgICAgICAgX1dvcmtlckNvbm5lY3Rpb24uX19pbml0X18oc2VsZiwg
YnJva2VyLCB3b3JrZXJfY2xhc3MsIHdvcmtlcl9udW1iZXIsIHJlc3VsdHNfZGlyZWN0b3J5LCBv
cHRpb25zKQotICAgICAgICBzZWxmLl9wcm9jID0gX1Byb2Nlc3Moc2VsZiwgcGxhdGZvcm1fbmFt
ZSwgb3B0aW9ucywgc2VsZi5fY2xpZW50KQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXIs
IHdvcmtlcl9jbGFzcywgd29ya2VyX251bWJlciwgKip3b3JrZXJfYXJncyk6CisgICAgICAgIF9X
b3JrZXJDb25uZWN0aW9uLl9faW5pdF9fKHNlbGYsIGJyb2tlciwgd29ya2VyX2NsYXNzLCB3b3Jr
ZXJfbnVtYmVyLCAqKndvcmtlcl9hcmdzKQorICAgICAgICBzZWxmLl9wcm9jID0gX1Byb2Nlc3Mo
c2VsZiwgc2VsZi5fY2xpZW50KQogCiAgICAgZGVmIGNhbmNlbChzZWxmKToKICAgICAgICAgcmV0
dXJuIHNlbGYuX3Byb2MudGVybWluYXRlKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXJfd29ya2VyX2Jyb2tlcl91bml0
dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJz
L21hbmFnZXJfd29ya2VyX2Jyb2tlcl91bml0dGVzdC5weQppbmRleCBlNDFlMjJjYTY4MjY0ZDEy
NTE2NDg3NzMyYmQ3YWExNmQ1ZTdhZTg4Li4zOGRlMTY0ZmY2YzYyNjZmZjUwN2FlZDdmYzkyZTg5
MTRiNDNmOWRmIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9jb250cm9sbGVycy9tYW5hZ2VyX3dvcmtlcl9icm9rZXJfdW5pdHRlc3QucHkKKysrIGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlcl93b3Jr
ZXJfYnJva2VyX3VuaXR0ZXN0LnB5CkBAIC0zMiwxMCArMzIsOCBAQCBpbXBvcnQgc3lzCiBpbXBv
cnQgdW5pdHRlc3QKIAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBvdXRwdXRj
YXB0dXJlCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5ob3N0X21vY2sgaW1wb3J0IE1vY2tIb3N0Ci1m
cm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cyBpbXBvcnQgcG9ydAorCiBmcm9tIHdlYmtpdHB5Lmxh
eW91dF90ZXN0cy5jb250cm9sbGVycyBpbXBvcnQgbWFuYWdlcl93b3JrZXJfYnJva2VyCi1mcm9t
IHdlYmtpdHB5LmxheW91dF90ZXN0cy5jb250cm9sbGVycyBpbXBvcnQgbWVzc2FnZV9icm9rZXIK
IGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnZpZXdzIGltcG9ydCBwcmludGluZwogCiAKQEAg
LTUzLDE2ICs1MSwxMiBAQCBkZWYgbWFrZV9icm9rZXIobWFuYWdlciwgd29ya2VyX21vZGVsLCBz
dGFydF9xdWV1ZT1Ob25lLCBzdG9wX3F1ZXVlPU5vbmUpOgogICAgIGdsb2JhbCBzdG9wcGluZ19x
dWV1ZQogICAgIHN0YXJ0aW5nX3F1ZXVlID0gc3RhcnRfcXVldWUKICAgICBzdG9wcGluZ19xdWV1
ZSA9IHN0b3BfcXVldWUKLSAgICBvcHRpb25zID0gZ2V0X29wdGlvbnMod29ya2VyX21vZGVsKQot
ICAgIGhvc3QgPSBNb2NrSG9zdCgpCi0gICAgdGVzdF9wb3J0ID0gaG9zdC5wb3J0X2ZhY3Rvcnku
Z2V0KCJ0ZXN0IikKLSAgICByZXR1cm4gbWFuYWdlcl93b3JrZXJfYnJva2VyLmdldCh0ZXN0X3Bv
cnQsIG9wdGlvbnMsIG1hbmFnZXIsIF9UZXN0V29ya2VyKQorICAgIHJldHVybiBtYW5hZ2VyX3dv
cmtlcl9icm9rZXIuZ2V0KHdvcmtlcl9tb2RlbCwgbWFuYWdlciwgX1Rlc3RXb3JrZXIpCiAKIAog
Y2xhc3MgX1Rlc3RXb3JrZXIobWFuYWdlcl93b3JrZXJfYnJva2VyLkFic3RyYWN0V29ya2VyKToK
LSAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyX2Nvbm5lY3Rpb24sIHdvcmtlcl9udW1iZXIs
IHJlc3VsdHNfZGlyZWN0b3J5LCBvcHRpb25zKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYnJv
a2VyX2Nvbm5lY3Rpb24sIHdvcmtlcl9udW1iZXIsICoqd29ya2VyX2FyZ3MpOgogICAgICAgICBz
ZWxmLl9icm9rZXJfY29ubmVjdGlvbiA9IGJyb2tlcl9jb25uZWN0aW9uCi0gICAgICAgIHNlbGYu
X29wdGlvbnMgPSBvcHRpb25zCiAgICAgICAgIHNlbGYuX3dvcmtlcl9udW1iZXIgPSB3b3JrZXJf
bnVtYmVyCiAgICAgICAgIHNlbGYuX25hbWUgPSAnVGVzdFdvcmtlci8lZCcgJSB3b3JrZXJfbnVt
YmVyCiAgICAgICAgIHNlbGYuX3N0b3BwZWQgPSBGYWxzZQpAQCAtODcsNyArODEsNyBAQCBjbGFz
cyBfVGVzdFdvcmtlcihtYW5hZ2VyX3dvcmtlcl9icm9rZXIuQWJzdHJhY3RXb3JrZXIpOgogICAg
IGRlZiBjYW5jZWwoc2VsZik6CiAgICAgICAgIHNlbGYuX2NhbmNlbGVkID0gVHJ1ZQogCi0gICAg
ZGVmIHJ1bihzZWxmLCBwb3J0KToKKyAgICBkZWYgcnVuKHNlbGYsIHBvcnQ9Tm9uZSk6CiAgICAg
ICAgIGlmIHNlbGYuX3N0YXJ0aW5nX3F1ZXVlOgogICAgICAgICAgICAgc2VsZi5fc3RhcnRpbmdf
cXVldWUucHV0KCcnKQogCkBAIC0xMDEsMTcgKzk1LDYgQEAgY2xhc3MgX1Rlc3RXb3JrZXIobWFu
YWdlcl93b3JrZXJfYnJva2VyLkFic3RyYWN0V29ya2VyKToKICAgICAgICAgICAgIHNlbGYuX2Jy
b2tlcl9jb25uZWN0aW9uLnBvc3RfbWVzc2FnZSgnZXhjZXB0aW9uJywgKHR5cGUoZSksIHN0cihl
KSwgTm9uZSkpCiAKIAotZGVmIGdldF9vcHRpb25zKHdvcmtlcl9tb2RlbCk6Ci0gICAgb3B0aW9u
X2xpc3QgPSAobWFuYWdlcl93b3JrZXJfYnJva2VyLnJ1bnRpbWVfb3B0aW9ucygpICsKLSAgICAg
ICAgICAgICAgICAgICBwcmludGluZy5wcmludF9vcHRpb25zKCkgKwotICAgICAgICAgICAgICAg
ICAgIFtvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1leHBlcmltZW50YWwtZnVsbHktcGFyYWxsZWwi
LCBkZWZhdWx0PUZhbHNlKSwKLSAgICAgICAgICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRp
b24oIi0tY2hpbGQtcHJvY2Vzc2VzIiwgZGVmYXVsdD0nMicpXSkKLSAgICBwYXJzZXIgPSBvcHRw
YXJzZS5PcHRpb25QYXJzZXIob3B0aW9uX2xpc3Q9b3B0aW9uX2xpc3QpCi0gICAgb3B0aW9ucywg
YXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3M9WyctLXdvcmtlci1tb2RlbCcsIHdvcmtlcl9t
b2RlbF0pCi0gICAgcmV0dXJuIG9wdGlvbnMKLQotCi0KIGNsYXNzIEZ1bmN0aW9uVGVzdHModW5p
dHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X2dldF9faW5saW5lKHNlbGYpOgogICAgICAg
ICBzZWxmLmFzc2VydFRydWUobWFrZV9icm9rZXIoc2VsZiwgJ2lubGluZScpIGlzIG5vdCBOb25l
KQpAQCAtMTYxLDcgKzE0NCw3IEBAIGNsYXNzIF9UZXN0c01peGluKG9iamVjdCk6CiAKICAgICBk
ZWYgdGVzdF9jYW5jZWwoc2VsZik6CiAgICAgICAgIHNlbGYubWFrZV9icm9rZXIoKQotICAgICAg
ICB3b3JrZXIgPSBzZWxmLl9icm9rZXIuc3RhcnRfd29ya2VyKDAsIE5vbmUpCisgICAgICAgIHdv
cmtlciA9IHNlbGYuX2Jyb2tlci5zdGFydF93b3JrZXIoMCkKICAgICAgICAgd29ya2VyLmNhbmNl
bCgpCiAgICAgICAgIHNlbGYuX2Jyb2tlci5wb3N0X21lc3NhZ2UoJ3Rlc3QnLCAxLCAnaGVsbG8s
IHdvcmxkJykKICAgICAgICAgd29ya2VyLmpvaW4oMC41KQpAQCAtMTY5LDcgKzE1Miw3IEBAIGNs
YXNzIF9UZXN0c01peGluKG9iamVjdCk6CiAKICAgICBkZWYgdGVzdF9kb25lKHNlbGYpOgogICAg
ICAgICBzZWxmLm1ha2VfYnJva2VyKCkKLSAgICAgICAgd29ya2VyID0gc2VsZi5fYnJva2VyLnN0
YXJ0X3dvcmtlcigwLCBOb25lKQorICAgICAgICB3b3JrZXIgPSBzZWxmLl9icm9rZXIuc3RhcnRf
d29ya2VyKDApCiAgICAgICAgIHNlbGYuX2Jyb2tlci5wb3N0X21lc3NhZ2UoJ3Rlc3QnLCAxLCAn
aGVsbG8sIHdvcmxkJykKICAgICAgICAgc2VsZi5fYnJva2VyLnBvc3RfbWVzc2FnZSgnc3RvcCcp
CiAgICAgICAgIHNlbGYuX2Jyb2tlci5ydW5fbWVzc2FnZV9sb29wKCkKQEAgLTE4MSw3ICsxNjQs
NyBAQCBjbGFzcyBfVGVzdHNNaXhpbihvYmplY3QpOgogCiAgICAgZGVmIHRlc3RfdW5rbm93bl9t
ZXNzYWdlKHNlbGYpOgogICAgICAgICBzZWxmLm1ha2VfYnJva2VyKCkKLSAgICAgICAgd29ya2Vy
ID0gc2VsZi5fYnJva2VyLnN0YXJ0X3dvcmtlcigwLCBOb25lKQorICAgICAgICB3b3JrZXIgPSBz
ZWxmLl9icm9rZXIuc3RhcnRfd29ya2VyKDApCiAgICAgICAgIHNlbGYuX2Jyb2tlci5wb3N0X21l
c3NhZ2UoJ3Vua25vd24nKQogICAgICAgICBzZWxmLl9icm9rZXIucnVuX21lc3NhZ2VfbG9vcCgp
CiAgICAgICAgIHdvcmtlci5qb2luKDAuNSkKQEAgLTE5NCw3ICsxNzcsNyBAQCBjbGFzcyBfVGVz
dHNNaXhpbihvYmplY3QpOgogCiAKICMgRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD01NDUyMC4KLWlmIHN5cy5wbGF0Zm9ybSBub3QgaW4gKCdjeWd3aW4nLCAn
d2luMzInKToKK2lmIEZhbHNlIGFuZCBzeXMucGxhdGZvcm0gbm90IGluICgnY3lnd2luJywgJ3dp
bjMyJyk6CiAKICAgICBjbGFzcyBNdWx0aVByb2Nlc3NCcm9rZXJUZXN0cyhfVGVzdHNNaXhpbiwg
dW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBkZWYgc2V0VXAoc2VsZik6CkBAIC0yMDIsMzUg
KzE4NSw1NyBAQCBpZiBzeXMucGxhdGZvcm0gbm90IGluICgnY3lnd2luJywgJ3dpbjMyJyk6CiAg
ICAgICAgICAgICBzZWxmLl93b3JrZXJfbW9kZWwgPSAncHJvY2Vzc2VzJwogCiAKLWNsYXNzIEZ1
bmN0aW9uc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiB0ZXN0X3J1bnRpbWVfb3B0
aW9ucyhzZWxmKToKLSAgICAgICAgb3B0aW9uX2xpc3QgPSBtYW5hZ2VyX3dvcmtlcl9icm9rZXIu
cnVudGltZV9vcHRpb25zKCkKLSAgICAgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2Vy
KG9wdGlvbl9saXN0PW9wdGlvbl9saXN0KQotICAgICAgICBvcHRpb25zLCBhcmdzID0gcGFyc2Vy
LnBhcnNlX2FyZ3MoW10pCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcHRpb25zKQotCi0KIGNs
YXNzIEludGVyZmFjZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICMgVGhlc2UgdGVzdHMg
bW9zdGx5IGV4aXN0IHRvIHBhY2lmeSBjb3ZlcmFnZS4KIAogICAgICMgRklYTUU6IFRoZXJlIG11
c3QgYmUgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMgYW5kIGFsc28gdmVyaWZ5CiAgICAgIyB0aGF0
IGNsYXNzZXMgZG8gaW1wbGVtZW50IGV2ZXJ5IGFic3RyYWN0IG1ldGhvZCBpbiBhbiBpbnRlcmZh
Y2UuCisgICAgZGVmIHRlc3RfYnJva2VyY2xpZW50X2lzX2Fic3RyYWN0KHNlbGYpOgorICAgICAg
ICAjIFRlc3QgdGhhdCBhbGwgdGhlIGJhc2UgY2xhc3MgbWV0aG9kcyBhcmUgYWJzdHJhY3QgYW5k
IGhhdmUgdGhlCisgICAgICAgICMgc2lnbmF0dXJlIHdlIGV4cGVjdC4KKyAgICAgICAgb2JqID0g
bWFuYWdlcl93b3JrZXJfYnJva2VyLkJyb2tlckNsaWVudCgpCisgICAgICAgIHNlbGYuYXNzZXJ0
UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIG9iai5pc19kb25lKQorICAgICAgICBzZWxmLmFz
c2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBvYmoubmFtZSkKKwogICAgIGRlZiB0ZXN0
X21hbmFnZXJjb25uZWN0aW9uX2lzX2Fic3RyYWN0KHNlbGYpOgogICAgICAgICAjIFRlc3QgdGhh
dCBhbGwgdGhlIGJhc2UgY2xhc3MgbWV0aG9kcyBhcmUgYWJzdHJhY3QgYW5kIGhhdmUgdGhlCiAg
ICAgICAgICMgc2lnbmF0dXJlIHdlIGV4cGVjdC4KICAgICAgICAgYnJva2VyID0gbWFrZV9icm9r
ZXIoc2VsZiwgJ2lubGluZScpCi0gICAgICAgIG9iaiA9IG1hbmFnZXJfd29ya2VyX2Jyb2tlci5f
TWFuYWdlckNvbm5lY3Rpb24oYnJva2VyLl9icm9rZXIsIE5vbmUsIHNlbGYsIE5vbmUpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIG9iai5zdGFydF93b3Jr
ZXIsIDAsIE5vbmUpCisgICAgICAgIG9iaiA9IG1hbmFnZXJfd29ya2VyX2Jyb2tlci5fTWFuYWdl
ckNvbm5lY3Rpb24oYnJva2VyLl9icm9rZXIsIE5vbmUsIHNlbGYpCisgICAgICAgIHNlbGYuYXNz
ZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIG9iai5zdGFydF93b3JrZXIsIDApCiAKICAg
ICBkZWYgdGVzdF93b3JrZXJjb25uZWN0aW9uX2lzX2Fic3RyYWN0KHNlbGYpOgogICAgICAgICAj
IFRlc3QgdGhhdCBhbGwgdGhlIGJhc2UgY2xhc3MgbWV0aG9kcyBhcmUgYWJzdHJhY3QgYW5kIGhh
dmUgdGhlCiAgICAgICAgICMgc2lnbmF0dXJlIHdlIGV4cGVjdC4KICAgICAgICAgYnJva2VyID0g
bWFrZV9icm9rZXIoc2VsZiwgJ2lubGluZScpCi0gICAgICAgIG9iaiA9IG1hbmFnZXJfd29ya2Vy
X2Jyb2tlci5fV29ya2VyQ29ubmVjdGlvbihicm9rZXIuX2Jyb2tlciwgX1Rlc3RXb3JrZXIsIDAs
IE5vbmUsIE5vbmUpCisgICAgICAgIG9iaiA9IG1hbmFnZXJfd29ya2VyX2Jyb2tlci5fV29ya2Vy
Q29ubmVjdGlvbihicm9rZXIuX2Jyb2tlciwgX1Rlc3RXb3JrZXIsIDApCiAgICAgICAgIHNlbGYu
YXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIG9iai5jYW5jZWwpCiAgICAgICAgIHNl
bGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIG9iai5pc19hbGl2ZSkKICAgICAg
ICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgb2JqLmpvaW4sIE5vbmUp
CiAKIAorY2xhc3MgTWVzc2FnZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0
X19ub19ib2R5KHNlbGYpOgorICAgICAgICBtc2cgPSBtYW5hZ2VyX3dvcmtlcl9icm9rZXIuX01l
c3NhZ2UoJ3NyYycsICd0b3BpY19uYW1lJywgJ21lc3NhZ2VfbmFtZScsIE5vbmUpCisgICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZShyZXByKG1zZykpCisgICAgICAgIHMgPSBtc2cuZHVtcHMoKQorICAg
ICAgICBuZXdfbXNnID0gbWFuYWdlcl93b3JrZXJfYnJva2VyLl9NZXNzYWdlLmxvYWRzKHMpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3X21zZy5uYW1lLCAnbWVzc2FnZV9uYW1lJykKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdfbXNnLmFyZ3MsIE5vbmUpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwobmV3X21zZy50b3BpY19uYW1lLCAndG9waWNfbmFtZScpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwobmV3X21zZy5zcmMsICdzcmMnKQorCisgICAgZGVmIHRlc3RfX2JvZHko
c2VsZik6CisgICAgICAgIG1zZyA9IG1hbmFnZXJfd29ya2VyX2Jyb2tlci5fTWVzc2FnZSgnc3Jj
JywgJ3RvcGljX25hbWUnLCAnbWVzc2FnZV9uYW1lJywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKCdib2R5JywgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXBy
KG1zZykpCisgICAgICAgIHMgPSBtc2cuZHVtcHMoKQorICAgICAgICBuZXdfbXNnID0gbWFuYWdl
cl93b3JrZXJfYnJva2VyLl9NZXNzYWdlLmxvYWRzKHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwobmV3X21zZy5uYW1lLCAnbWVzc2FnZV9uYW1lJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChuZXdfbXNnLmFyZ3MsICgnYm9keScsIDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5l
d19tc2cudG9waWNfbmFtZSwgJ3RvcGljX25hbWUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KG5ld19tc2cuc3JjLCAnc3JjJykKKworCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAg
IHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvY29udHJvbGxlcnMvbWVzc2FnZV9icm9rZXIucHkgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tZXNzYWdlX2Jyb2tlci5weQpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDU4YTZjZDExYmI4ODM0ZmY0ZWJlYmQwMTczZDE0ZjYz
NzkzMWZkZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tZXNzYWdlX2Jy
b2tlci5weQorKysgL2Rldi9udWxsCkBAIC0xLDIwMiArMCwwIEBACi0jIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
IyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LQotIiIiTW9kdWxlIGZvciBoYW5kbGluZyBtZXNzYWdpbmcgZm9yIHJ1bi13ZWJraXQtdGVzdHMu
Ci0KLVRoaXMgbW9kdWxlIGltcGxlbWVudHMgYSBzaW1wbGUgbWVzc2FnZSBicm9rZXIgYWJzdHJh
Y3Rpb24gdGhhdCB3aWxsIGJlCi11c2VkIHRvIGNvb3JkaW5hdGUgbWVzc2FnZXMgYmV0d2VlbiB0
aGUgbWFpbiBydW4td2Via2l0LXRlc3RzIHRocmVhZAotKGFrYSBUZXN0UnVubmVyKSBhbmQgdGhl
IGluZGl2aWR1YWwgd29ya2VyIHRocmVhZHMgKHByZXZpb3VzbHkga25vd24gYXMKLWR1bXBfcmVu
ZGVyX3RyZWVfdGhyZWFkcykuCi0KLVRoZSBicm9rZXIgc2ltcGx5IGRpc3RyaWJ1dGVzIG1lc3Nh
Z2VzIG9udG8gdG9waWNzIChuYW1lZCBxdWV1ZXMpOyB0aGUgYWN0dWFsCi1xdWV1ZXMgdGhlbXNl
bHZlcyBhcmUgcHJvdmlkZWQgYnkgdGhlIGNhbGxlciwgYXMgdGhlIHF1ZXVlJ3MgaW1wbGVtZW50
YXRpb24KLXJlcXVpcmVtZW50cyB2YXJpZXMgdmFyeSBkZXBlbmRpbmcgb24gdGhlIGRlc2lyZWQg
Y29uY3VycmVuY3kgbW9kZWwKLShub25lL3RocmVhZHMvcHJvY2Vzc2VzKS4KLQotSW4gb3JkZXIg
Zm9yIHNoYXJlZC1ub3RoaW5nIG1lc3NhZ2luZyBiZXR3ZWVuIHByb2Nlc3NpbmcgdG8gYmUgcG9z
c2libGUsCi1NZXNzYWdlcyBtdXN0IGJlIHBpY2tsYWJsZS4KLQotVGhlIG1vZHVsZSBkZWZpbmVz
IG9uZSBpbnRlcmZhY2UgYW5kIHR3byBjbGFzc2VzLiBDYWxsZXJzIG9mIHRoaXMgcGFja2FnZQot
bXVzdCBpbXBsZW1lbnQgdGhlIEJyb2tlckNsaWVudCBpbnRlcmZhY2UsIGFuZCBtb3N0IGNhbGxl
cnMgd2lsbCBjcmVhdGUKLUJyb2tlckNvbm5lY3Rpb25zIGFzIHdlbGwgYXMgQnJva2Vycy4KLQot
VGhlIGNsYXNzZXMgcmVsYXRlIHRvIGVhY2ggb3RoZXIgYXM6Ci0KLSAgICBCcm9rZXJDbGllbnQg
ICAtLS0tLS0+ICAgIEJyb2tlckNvbm5lY3Rpb24KLSAgICAgICAgIF4gICAgICAgICAgICAgICAg
ICAgICAgICAgfAotICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB2Ci0gICAgICAg
ICBcLS0tLS0tLS0tLS0tLS0tLSAgICAgIEJyb2tlcgotCi0oVGhlIEJyb2tlckNsaWVudCBuZXZl
ciBjYWxscyBicm9rZXIgZGlyZWN0bHkgYWZ0ZXIgaXQgaXMgY3JlYXRlZCwgb25seQotQnJva2Vy
Q29ubmVjdGlvbi4gIEJyb2tlckNvbm5lY3Rpb24gcGFzc2VzIGEgcmVmZXJlbmNlIHRvIEJyb2tl
ckNsaWVudCB0bwotQnJva2VyLCBhbmQgQnJva2VyIG9ubHkgaW52b2tlcyB0aGF0IHJlZmVyZW5j
ZSwgbmV2ZXIgdGFsa2luZyBkaXJlY3RseSB0bwotQnJva2VyQ29ubmVjdGlvbikuCi0iIiIKLWlt
cG9ydCBzeXMKLWltcG9ydCB0cmFjZWJhY2sKLQotaW1wb3J0IGNQaWNrbGUKLWltcG9ydCBsb2dn
aW5nCi1pbXBvcnQgUXVldWUKLQotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBz
dGFja191dGlscwotCi1fbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCi0KLQotY2xh
c3MgQnJva2VyQ2xpZW50KG9iamVjdCk6Ci0gICAgIiIiQWJzdHJhY3QgYmFzZSBjbGFzcyAvIGlu
dGVyZmFjZSB0aGF0IGFsbCBtZXNzYWdlIGJyb2tlciBjbGllbnRzIG11c3QKLSAgICBpbXBsZW1l
bnQuIEluIGFkZGl0aW9uIHRvIHRoZSBtZXRob2RzIGJlbG93LCBieSBjb252ZW50aW9uIGNsaWVu
dHMKLSAgICBpbXBsZW1lbnQgcm91dGluZXMgb2YgdGhlIHNpZ25hdHVyZSB0eXBlCi0KLSAgICAg
ICAgaGFuZGxlX01FU1NBR0VfTkFNRShzZWxmLCBzcmMsIC4uLik6Ci0KLSAgICB3aGVyZSBNRVNT
QUdFX05BTUUgbWF0Y2hlcyB0aGUgc3RyaW5nIHBhc3NlZCB0byBwb3N0X21lc3NhZ2UoKSwgYW5k
Ci0gICAgc3JjIGluZGljYXRlcyB0aGUgbmFtZSBvZiB0aGUgc2VuZGVyLiBJZiB0aGUgbWVzc2Fn
ZSBjb250YWlucyB2YWx1ZXMgaW4KLSAgICB0aGUgbWVzc2FnZSBib2R5LCB0aG9zZSB3aWxsIGJl
IHByb3ZpZGVkIGFzIG9wdHBhcmFtcy4iIiIKLQotICAgIGRlZiBpc19kb25lKHNlbGYpOgotICAg
ICAgICAiIiJDYWxsZWQgZnJvbSBpbnNpZGUgcnVuX21lc3NhZ2VfbG9vcCgpIHRvIGluZGljYXRl
IHdoZXRoZXIgdG8gZXhpdC4iIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgot
Ci0gICAgZGVmIG5hbWUoc2VsZik6Ci0gICAgICAgICIiIlJldHVybiBhIG5hbWUgdGhhdCBpZGVu
dGlmaWVzIHRoZSBjbGllbnQuIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IK
LQotCi1jbGFzcyBCcm9rZXIob2JqZWN0KToKLSAgICAiIiJCcm9rZXJzIHByb3ZpZGUgdGhlIGJh
c2ljIG1vZGVsIG9mIGEgc2V0IG9mIHRvcGljcy4gQ2xpZW50cyBjYW4gcG9zdCBhCi0gICAgbWVz
c2FnZSB0byBhbnkgdG9waWMgdXNpbmcgcG9zdF9tZXNzYWdlKCksIGFuZCBjYW4gcHJvY2VzcyBt
ZXNzYWdlcyBvbiBvbmUKLSAgICB0b3BpYyBhdCBhIHRpbWUgdXNpbmcgcnVuX21lc3NhZ2VfbG9v
cCgpLiIiIgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG9wdGlvbnMsIHF1ZXVlX21ha2VyKToK
LSAgICAgICAgIiIiQXJnczoKLSAgICAgICAgICAgIG9wdGlvbnM6IGEgcnVudGltZSBvcHRpb24g
Y2xhc3MgZnJvbSBvcHRwYXJzZQotICAgICAgICAgICAgcXVldWVfbWFrZXI6IGEgZmFjdG9yeSBt
ZXRob2QgdGhhdCByZXR1cm5zIG9iamVjdHMgaW1wbGVtZW50aW5nIGEKLSAgICAgICAgICAgICAg
ICBRdWV1ZSBpbnRlcmZhY2UgKHB1dCgpL2dldCgpKS4KLSAgICAgICAgIiIiCi0gICAgICAgIHNl
bGYuX29wdGlvbnMgPSBvcHRpb25zCi0gICAgICAgIHNlbGYuX3F1ZXVlX21ha2VyID0gcXVldWVf
bWFrZXIKLSAgICAgICAgc2VsZi5fdG9waWNzID0ge30KLQotICAgIGRlZiBhZGRfdG9waWMoc2Vs
ZiwgdG9waWNfbmFtZSk6Ci0gICAgICAgIGlmIHRvcGljX25hbWUgbm90IGluIHNlbGYuX3RvcGlj
czoKLSAgICAgICAgICAgIHNlbGYuX3RvcGljc1t0b3BpY19uYW1lXSA9IHNlbGYuX3F1ZXVlX21h
a2VyKCkKLQotICAgIGRlZiBfZ2V0X3F1ZXVlX2Zvcl90b3BpYyhzZWxmLCB0b3BpY19uYW1lKToK
LSAgICAgICAgcmV0dXJuIHNlbGYuX3RvcGljc1t0b3BpY19uYW1lXQotCi0gICAgZGVmIHBvc3Rf
bWVzc2FnZShzZWxmLCBjbGllbnQsIHRvcGljX25hbWUsIG1lc3NhZ2VfbmFtZSwgKm1lc3NhZ2Vf
YXJncyk6Ci0gICAgICAgICIiIlBvc3QgYSBtZXNzYWdlIHRvIHRoZSBhcHByb3ByaWF0ZSB0b3Bp
YyBuYW1lLgotCi0gICAgICAgIE1lc3NhZ2VzIGhhdmUgYSBuYW1lIGFuZCBhIHR1cGxlIG9mIG9w
dGlvbmFsIGFyZ3VtZW50cy4gQm90aCBtdXN0IGJlIHBpY2tsYWJsZS4iIiIKLSAgICAgICAgbWVz
c2FnZSA9IF9NZXNzYWdlKGNsaWVudC5uYW1lKCksIHRvcGljX25hbWUsIG1lc3NhZ2VfbmFtZSwg
bWVzc2FnZV9hcmdzKQotICAgICAgICBxdWV1ZSA9IHNlbGYuX2dldF9xdWV1ZV9mb3JfdG9waWMo
dG9waWNfbmFtZSkKLSAgICAgICAgcXVldWUucHV0KF9NZXNzYWdlLmR1bXBzKG1lc3NhZ2UpKQot
Ci0gICAgZGVmIHJ1bl9tZXNzYWdlX2xvb3Aoc2VsZiwgdG9waWNfbmFtZSwgY2xpZW50LCBkZWxh
eV9zZWNzPU5vbmUpOgotICAgICAgICAiIiJMb29wIHByb2Nlc3NpbmcgbWVzc2FnZXMgdW50aWwg
Y2xpZW50LmlzX2RvbmUoKSBvciBkZWxheSBwYXNzZXMuCi0KLSAgICAgICAgVG8gcnVuIGluZGVm
aW5pdGVseSwgc2V0IGRlbGF5X3NlY3MgdG8gTm9uZS4iIiIKLSAgICAgICAgYXNzZXJ0IGRlbGF5
X3NlY3MgaXMgTm9uZSBvciBkZWxheV9zZWNzID4gMAotICAgICAgICBzZWxmLl9ydW5fbG9vcCh0
b3BpY19uYW1lLCBjbGllbnQsIGJsb2NrPVRydWUsIGRlbGF5X3NlY3M9ZGVsYXlfc2VjcykKLQot
ICAgIGRlZiBydW5fYWxsX3BlbmRpbmcoc2VsZiwgdG9waWNfbmFtZSwgY2xpZW50KToKLSAgICAg
ICAgIiIiUHJvY2VzcyBtZXNzYWdlcyB1bnRpbCBjbGllbnQuaXNfZG9uZSgpIG9yIGNhbGxlciB3
b3VsZCBibG9jay4iIiIKLSAgICAgICAgc2VsZi5fcnVuX2xvb3AodG9waWNfbmFtZSwgY2xpZW50
LCBibG9jaz1GYWxzZSwgZGVsYXlfc2Vjcz1Ob25lKQotCi0gICAgZGVmIF9ydW5fbG9vcChzZWxm
LCB0b3BpY19uYW1lLCBjbGllbnQsIGJsb2NrLCBkZWxheV9zZWNzKToKLSAgICAgICAgcXVldWUg
PSBzZWxmLl9nZXRfcXVldWVfZm9yX3RvcGljKHRvcGljX25hbWUpCi0gICAgICAgIHdoaWxlIG5v
dCBjbGllbnQuaXNfZG9uZSgpOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHMg
PSBxdWV1ZS5nZXQoYmxvY2ssIGRlbGF5X3NlY3MpCi0gICAgICAgICAgICBleGNlcHQgUXVldWUu
RW1wdHk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICBtc2cgPSBfTWVzc2Fn
ZS5sb2FkcyhzKQotICAgICAgICAgICAgc2VsZi5fZGlzcGF0Y2hfbWVzc2FnZShtc2csIGNsaWVu
dCkKLQotICAgIGRlZiBfZGlzcGF0Y2hfbWVzc2FnZShzZWxmLCBtZXNzYWdlLCBjbGllbnQpOgot
ICAgICAgICBpZiBub3QgaGFzYXR0cihjbGllbnQsICdoYW5kbGVfJyArIG1lc3NhZ2UubmFtZSk6
Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAotICAgICAgICAgICAgICAgIiVzOiByZWNl
aXZlZCBtZXNzYWdlICclcycgaXQgY291bGRuJ3QgaGFuZGxlIiAlCi0gICAgICAgICAgICAgICAo
Y2xpZW50Lm5hbWUoKSwgbWVzc2FnZS5uYW1lKSkKLSAgICAgICAgb3B0YXJncyA9IG1lc3NhZ2Uu
YXJncwotICAgICAgICBtZXNzYWdlX2hhbmRsZXIgPSBnZXRhdHRyKGNsaWVudCwgJ2hhbmRsZV8n
ICsgbWVzc2FnZS5uYW1lKQotICAgICAgICBtZXNzYWdlX2hhbmRsZXIobWVzc2FnZS5zcmMsICpv
cHRhcmdzKQotCi0KLWNsYXNzIF9NZXNzYWdlKG9iamVjdCk6Ci0gICAgQHN0YXRpY21ldGhvZAot
ICAgIGRlZiBsb2FkcyhzdHJpbmdfdmFsdWUpOgotICAgICAgICBvYmogPSBjUGlja2xlLmxvYWRz
KHN0cmluZ192YWx1ZSkKLSAgICAgICAgYXNzZXJ0KGlzaW5zdGFuY2Uob2JqLCBfTWVzc2FnZSkp
Ci0gICAgICAgIHJldHVybiBvYmoKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzcmMsIHRvcGlj
X25hbWUsIG1lc3NhZ2VfbmFtZSwgbWVzc2FnZV9hcmdzKToKLSAgICAgICAgc2VsZi5zcmMgPSBz
cmMKLSAgICAgICAgc2VsZi50b3BpY19uYW1lID0gdG9waWNfbmFtZQotICAgICAgICBzZWxmLm5h
bWUgPSBtZXNzYWdlX25hbWUKLSAgICAgICAgc2VsZi5hcmdzID0gbWVzc2FnZV9hcmdzCi0KLSAg
ICBkZWYgZHVtcHMoc2VsZik6Ci0gICAgICAgIHJldHVybiBjUGlja2xlLmR1bXBzKHNlbGYpCi0K
LSAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAoIl9NZXNzYWdlKGZyb209
JyVzJywgdG9waWNfbmFtZT0nJXMnLCBtZXNzYWdlX25hbWU9JyVzJykiICUKLSAgICAgICAgICAg
ICAgICAoc2VsZi5zcmMsIHNlbGYudG9waWNfbmFtZSwgc2VsZi5uYW1lKSkKLQotCi1jbGFzcyBC
cm9rZXJDb25uZWN0aW9uKG9iamVjdCk6Ci0gICAgIiIiQnJva2VyQ29ubmVjdGlvbiBwcm92aWRl
cyBhIGNvbm5lY3Rpb24tb3JpZW50ZWQgZmFjYWRlIG9uIHRvcCBvZiBhCi0gICAgQnJva2VyLCBz
byB0aGF0IGNhbGxlcnMgZG9uJ3QgaGF2ZSB0byByZXBlYXRlZGx5IHBhc3MgdGhlIHNhbWUgdG9w
aWMKLSAgICBuYW1lcyBvdmVyIGFuZCBvdmVyLiIiIgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYs
IGJyb2tlciwgY2xpZW50LCBydW5fdG9waWMsIHBvc3RfdG9waWMpOgotICAgICAgICAiIiJDcmVh
dGUgYSBCcm9rZXJDb25uZWN0aW9uIG9uIHRvcCBvZiBhIEJyb2tlci4gTm90ZSB0aGF0IHRoZSBC
cm9rZXIKLSAgICAgICAgaXMgcGFzc2VkIGluIHJhdGhlciB0aGFuIGNyZWF0ZWQgc28gdGhhdCBh
IHNpbmdsZSBCcm9rZXIgY2FuIGJlIHVzZWQKLSAgICAgICAgYnkgbXVsdGlwbGUgQnJva2VyQ29u
bmVjdGlvbnMuIiIiCi0gICAgICAgIHNlbGYuX2Jyb2tlciA9IGJyb2tlcgotICAgICAgICBzZWxm
Ll9jbGllbnQgPSBjbGllbnQKLSAgICAgICAgc2VsZi5fcG9zdF90b3BpYyA9IHBvc3RfdG9waWMK
LSAgICAgICAgc2VsZi5fcnVuX3RvcGljID0gcnVuX3RvcGljCi0gICAgICAgIGJyb2tlci5hZGRf
dG9waWMocnVuX3RvcGljKQotICAgICAgICBicm9rZXIuYWRkX3RvcGljKHBvc3RfdG9waWMpCi0K
LSAgICBkZWYgcnVuX21lc3NhZ2VfbG9vcChzZWxmLCBkZWxheV9zZWNzPU5vbmUpOgotICAgICAg
ICBzZWxmLl9icm9rZXIucnVuX21lc3NhZ2VfbG9vcChzZWxmLl9ydW5fdG9waWMsIHNlbGYuX2Ns
aWVudCwgZGVsYXlfc2VjcykKLQotICAgIGRlZiBwb3N0X21lc3NhZ2Uoc2VsZiwgbWVzc2FnZV9u
YW1lLCAqbWVzc2FnZV9hcmdzKToKLSAgICAgICAgc2VsZi5fYnJva2VyLnBvc3RfbWVzc2FnZShz
ZWxmLl9jbGllbnQsIHNlbGYuX3Bvc3RfdG9waWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWVzc2FnZV9uYW1lLCAqbWVzc2FnZV9hcmdzKQotCi0gICAgZGVmIHJhaXNlX2V4
Y2VwdGlvbihzZWxmLCBleGNfaW5mbyk6Ci0gICAgICAgICMgU2luY2UgdHJhY2ViYWNrcyBhcmVu
J3QgcGlja2xhYmxlLCBzZW5kIHRoZSBleHRyYWN0ZWQgc3RhY2sgaW5zdGVhZC4KLSAgICAgICAg
ZXhjZXB0aW9uX3R5cGUsIGV4Y2VwdGlvbl92YWx1ZSwgZXhjZXB0aW9uX3RyYWNlYmFjayA9IHN5
cy5leGNfaW5mbygpCi0gICAgICAgIHN0YWNrX3V0aWxzLmxvZ190cmFjZWJhY2soX2xvZy5kZWJ1
ZywgZXhjZXB0aW9uX3RyYWNlYmFjaykKLSAgICAgICAgc3RhY2sgPSB0cmFjZWJhY2suZXh0cmFj
dF90YihleGNlcHRpb25fdHJhY2ViYWNrKQotICAgICAgICBzZWxmLl9icm9rZXIucG9zdF9tZXNz
YWdlKHNlbGYuX2NsaWVudCwgc2VsZi5fcG9zdF90b3BpYywgJ2V4Y2VwdGlvbicsIGV4Y2VwdGlv
bl90eXBlLCBleGNlcHRpb25fdmFsdWUsIHN0YWNrKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWVzc2FnZV9icm9rZXJfdW5pdHRl
c3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9t
ZXNzYWdlX2Jyb2tlcl91bml0dGVzdC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
Y2I4ZDhlNmY5N2E2ZTEzYjE3ZTFiZGExODZiN2NkODBiN2MyNDU2Ny4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9jb250cm9sbGVycy9tZXNzYWdlX2Jyb2tlcl91bml0dGVzdC5weQorKysgL2Rl
di9udWxsCkBAIC0xLDc2ICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0j
IG1ldDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
LSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1pbXBvcnQgdW5pdHRl
c3QKLQotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMuY29udHJvbGxlcnMgaW1wb3J0IG1lc3Nh
Z2VfYnJva2VyCi0KLSMgVGhpcyBmaWxlIGV4aXN0cyB0byB0ZXN0IHJvdXRpbmVzIHRoYXQgYXJl
bid0IG5lY2Vzc2FyaWx5IGNvdmVyZWQgZWxzZXdoZXJlOwotIyBtb3N0IG9mIHRoZSB0ZXN0aW5n
IG9mIG1lc3NhZ2VfYnJva2VyIHdpbGwgYmUgY292ZXJlZCB1bmRlciB0aGUgdGVzdHMgaW4KLSMg
dGhlIG1hbmFnZXJfd29ya2VyX2Jyb2tlciBtb2R1bGUuCi0KLQotY2xhc3MgTWVzc2FnZVRlc3Qo
dW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiB0ZXN0X19ub19ib2R5KHNlbGYpOgotICAgICAg
ICBtc2cgPSBtZXNzYWdlX2Jyb2tlci5fTWVzc2FnZSgnc3JjJywgJ3RvcGljX25hbWUnLCAnbWVz
c2FnZV9uYW1lJywgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIobXNnKSkKLSAg
ICAgICAgcyA9IG1zZy5kdW1wcygpCi0gICAgICAgIG5ld19tc2cgPSBtZXNzYWdlX2Jyb2tlci5f
TWVzc2FnZS5sb2FkcyhzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld19tc2cubmFtZSwg
J21lc3NhZ2VfbmFtZScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3X21zZy5hcmdzLCBO
b25lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld19tc2cudG9waWNfbmFtZSwgJ3RvcGlj
X25hbWUnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld19tc2cuc3JjLCAnc3JjJykKLQot
ICAgIGRlZiB0ZXN0X19ib2R5KHNlbGYpOgotICAgICAgICBtc2cgPSBtZXNzYWdlX2Jyb2tlci5f
TWVzc2FnZSgnc3JjJywgJ3RvcGljX25hbWUnLCAnbWVzc2FnZV9uYW1lJywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdib2R5JywgMCkpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0VHJ1ZShyZXByKG1zZykpCi0gICAgICAgIHMgPSBtc2cuZHVtcHMoKQotICAgICAgICBuZXdf
bXNnID0gbWVzc2FnZV9icm9rZXIuX01lc3NhZ2UubG9hZHMocykKLSAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChuZXdfbXNnLm5hbWUsICdtZXNzYWdlX25hbWUnKQotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKG5ld19tc2cuYXJncywgKCdib2R5JywgMCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwobmV3X21zZy50b3BpY19uYW1lLCAndG9waWNfbmFtZScpCi0gICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwobmV3X21zZy5zcmMsICdzcmMnKQotCi0KLWNsYXNzIEludGVyZmFjZVRlc3QodW5pdHRl
c3QuVGVzdENhc2UpOgotICAgICMgVGhlc2UgdGVzdHMgbW9zdGx5IGV4aXN0IHRvIHBhY2lmeSBj
b3ZlcmFnZS4KLQotICAgICMgRklYTUU6IFRoZXJlIG11c3QgYmUgYSBiZXR0ZXIgd2F5IHRvIGRv
IHRoaXMgYW5kIGFsc28gdmVyaWZ5Ci0gICAgIyB0aGF0IGNsYXNzZXMgZG8gaW1wbGVtZW50IGV2
ZXJ5IGFic3RyYWN0IG1ldGhvZCBpbiBhbiBpbnRlcmZhY2UuCi0KLSAgICBkZWYgdGVzdF9icm9r
ZXJjbGllbnRfaXNfYWJzdHJhY3Qoc2VsZik6Ci0gICAgICAgICMgVGVzdCB0aGF0IGFsbCB0aGUg
YmFzZSBjbGFzcyBtZXRob2RzIGFyZSBhYnN0cmFjdCBhbmQgaGF2ZSB0aGUKLSAgICAgICAgIyBz
aWduYXR1cmUgd2UgZXhwZWN0LgotICAgICAgICBvYmogPSBtZXNzYWdlX2Jyb2tlci5Ccm9rZXJD
bGllbnQoKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBv
YmouaXNfZG9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJv
ciwgb2JqLm5hbWUpCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB1bml0dGVz
dC5tYWluKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L2NvbnRyb2xsZXJzL3dvcmtlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2NvbnRyb2xsZXJzL3dvcmtlci5weQppbmRleCBmYzc4MzFkZmI2N2M2MmQyY2U1OTFiZTEy
YTc1ODYxYzgyOWM4NGNmLi5hNjdiMTljZWViNDg1NmJhMTdhODBhOGFjNmZlMmZkY2NiYTE3MTdh
IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9s
bGVycy93b3JrZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
Y29udHJvbGxlcnMvd29ya2VyLnB5CkBAIC0zMyw3NSArMzMsNzMgQEAgaW1wb3J0IHN5cwogaW1w
b3J0IHRocmVhZGluZwogaW1wb3J0IHRpbWUKIAorIyBUaGVzZSBhcmUgbmVlZGVkIHdoZW4gd29y
a2VycyBhcmUgbGF1bmNoZWQgaW4gbmV3IGNoaWxkIHByb2Nlc3Nlcy4KK2Zyb20gd2Via2l0cHku
Y29tbW9uLmhvc3QgaW1wb3J0IEhvc3QKK2Zyb20gd2Via2l0cHkuY29tbW9uLmhvc3RfbW9jayBp
bXBvcnQgTW9ja0hvc3QKKwogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMuY29udHJvbGxlcnMg
aW1wb3J0IG1hbmFnZXJfd29ya2VyX2Jyb2tlcgogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMu
Y29udHJvbGxlcnMgaW1wb3J0IHNpbmdsZV90ZXN0X3J1bm5lcgogZnJvbSB3ZWJraXRweS5sYXlv
dXRfdGVzdHMubW9kZWxzIGltcG9ydCB0ZXN0X2V4cGVjdGF0aW9ucwogZnJvbSB3ZWJraXRweS5s
YXlvdXRfdGVzdHMubW9kZWxzIGltcG9ydCB0ZXN0X3Jlc3VsdHMKK2Zyb20gd2Via2l0cHkubGF5
b3V0X3Rlc3RzLnZpZXdzIGltcG9ydCBwcmludGluZwogCiAKIF9sb2cgPSBsb2dnaW5nLmdldExv
Z2dlcihfX25hbWVfXykKIAogCiBjbGFzcyBXb3JrZXIobWFuYWdlcl93b3JrZXJfYnJva2VyLkFi
c3RyYWN0V29ya2VyKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgd29ya2VyX2Nvbm5lY3Rpb24s
IHdvcmtlcl9udW1iZXIsIHJlc3VsdHNfZGlyZWN0b3J5LCBvcHRpb25zKToKLSAgICAgICAgbWFu
YWdlcl93b3JrZXJfYnJva2VyLkFic3RyYWN0V29ya2VyLl9faW5pdF9fKHNlbGYsIHdvcmtlcl9j
b25uZWN0aW9uLCB3b3JrZXJfbnVtYmVyLCByZXN1bHRzX2RpcmVjdG9yeSwgb3B0aW9ucykKLSAg
ICAgICAgc2VsZi5fZG9uZSA9IEZhbHNlCi0gICAgICAgIHNlbGYuX2NhbmNlbGVkID0gRmFsc2UK
LSAgICAgICAgc2VsZi5fcG9ydCA9IE5vbmUKLSAgICAgICAgc2VsZi5fYmF0Y2hfc2l6ZSA9IE5v
bmUKLSAgICAgICAgc2VsZi5fYmF0Y2hfY291bnQgPSBOb25lCi0gICAgICAgIHNlbGYuX2ZpbGVz
eXN0ZW0gPSBOb25lCi0gICAgICAgIHNlbGYuX2RyaXZlciA9IE5vbmUKLSAgICAgICAgc2VsZi5f
dGVzdHNfcnVuX2ZpbGUgPSBOb25lCi0gICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9maWxlbmFtZSA9
IE5vbmUKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd29ya2VyX2Nvbm5lY3Rpb24sIHdvcmtlcl9u
dW1iZXIsIHJlc3VsdHNfZGlyZWN0b3J5PU5vbmUsIG9wdGlvbnM9Tm9uZSwgcmVhbF9wb3J0X25h
bWU9Tm9uZSk6CisgICAgICAgIG1hbmFnZXJfd29ya2VyX2Jyb2tlci5BYnN0cmFjdFdvcmtlci5f
X2luaXRfXyhzZWxmLCB3b3JrZXJfY29ubmVjdGlvbiwgd29ya2VyX251bWJlcikKKyAgICAgICAg
c2VsZi5fcmVzdWx0c19kaXJlY3RvcnkgPSByZXN1bHRzX2RpcmVjdG9yeQorICAgICAgICBzZWxm
Ll9vcHRpb25zID0gb3B0aW9ucworICAgICAgICBzZWxmLl9yZWFsX3BvcnRfbmFtZSA9IHJlYWxf
cG9ydF9uYW1lCiAKICAgICBkZWYgX19kZWxfXyhzZWxmKToKICAgICAgICAgc2VsZi5jbGVhbnVw
KCkKIAotICAgIGRlZiBzYWZlX2luaXQoc2VsZiwgcG9ydCk6CisgICAgZGVmIF9maW5pc2hfaW5p
dGlhbGl6aW5nKHNlbGYsIHBvcnQpOgogICAgICAgICAiIiJUaGlzIG1ldGhvZCBzaG91bGQgb25s
eSBiZSBjYWxsZWQgd2hlbiBpdCBpcyBpcyBzYWZlIGZvciB0aGUgbWl4aW4KICAgICAgICAgdG8g
Y3JlYXRlIHN0YXRlIHRoYXQgY2FuJ3QgYmUgUGlja2xlZC4KIAogICAgICAgICBUaGlzIHJvdXRp
bmUgZXhpc3RzIHNvIHRoYXQgdGhlIG1peGluIGNhbiBiZSBjcmVhdGVkIGFuZCB0aGVuIG1hcnNo
YWxlZAogICAgICAgICBhY3Jvc3MgaW50byBhIGNoaWxkIHByb2Nlc3MuIiIiCisgICAgICAgIGlm
IG5vdCBwb3J0OgorICAgICAgICAgICAgaWYgJ3Rlc3QnIGluIHNlbGYuX3JlYWxfcG9ydF9uYW1l
OgorICAgICAgICAgICAgICAgIGhvc3QgPSBNb2NrSG9zdCgpCisgICAgICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgICAgIGhvc3QgPSBIb3N0KCkKKyAgICAgICAgICAgIGhvc3QuX2luaXRpYWxp
emVfc2NtKCkKKyAgICAgICAgICAgIHBvcnQgPSBob3N0LnBvcnRfZmFjdG9yeS5nZXQoc2VsZi5f
cmVhbF9wb3J0X25hbWUsIHNlbGYuX29wdGlvbnMpCisKICAgICAgICAgc2VsZi5fcG9ydCA9IHBv
cnQKKworICAgICAgICAjIFRoZSB1bml4IG11bHRpcHJvY2Vzc2luZyBpbXBsZW1lbnRhdGlvbiBj
bG9uZXMgdGhlCisgICAgICAgICMgbG9nIGhhbmRsZXIgY29uZmlndXJhdGlvbiBpbnRvIHRoZSBj
aGlsZCBwcm9jZXNzZXMsCisgICAgICAgICMgYnV0IHRoZSB3aW4gaW1wbGVtZW50YXRpb24gZG9l
c24ndC4KKyAgICAgICAgY29uZmlndXJlX2xvZ2dpbmcgPSAoc3lzLnBsYXRmb3JtID09ICd3aW4z
MicpCisKKyAgICAgICAgIyBGSVhNRTogdGhpcyB3b24ndCB3b3JrIGlmIHRoZSBjYWxsaW5nIHBy
b2Nlc3MgaXMgbG9nZ2luZworICAgICAgICAjIHNvbWV3aGVyZSBvdGhlciB0aGFuIHN5cy5zdGRl
cnIgYW5kIHN5cy5zdGRvdXQsIGJ1dCBJJ20gbm90IHN1cmUKKyAgICAgICAgIyBpZiB0aGlzIHdp
bGwgYmUgYW4gaXNzdWUgaW4gcHJhY3RpY2UuCisgICAgICAgIHNlbGYuX3ByaW50ZXIgPSBwcmlu
dGluZy5QcmludGVyKHBvcnQsIHNlbGYuX29wdGlvbnMsIHN5cy5zdGRlcnIsIHN5cy5zdGRvdXQs
IGNvbmZpZ3VyZV9sb2dnaW5nKQorCiAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0gPSBwb3J0Lmhv
c3QuZmlsZXN5c3RlbQogICAgICAgICBzZWxmLl9iYXRjaF9jb3VudCA9IDAKICAgICAgICAgc2Vs
Zi5fYmF0Y2hfc2l6ZSA9IHNlbGYuX29wdGlvbnMuYmF0Y2hfc2l6ZSBvciAwCiAgICAgICAgIHRl
c3RzX3J1bl9maWxlbmFtZSA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLl9yZXN1bHRzX2Rp
cmVjdG9yeSwgInRlc3RzX3J1biVkLnR4dCIgJSBzZWxmLl93b3JrZXJfbnVtYmVyKQogICAgICAg
ICBzZWxmLl90ZXN0c19ydW5fZmlsZSA9IHNlbGYuX2ZpbGVzeXN0ZW0ub3Blbl90ZXh0X2ZpbGVf
Zm9yX3dyaXRpbmcodGVzdHNfcnVuX2ZpbGVuYW1lKQorICAgICAgICBzZWxmLl9kcml2ZXIgPSBO
b25lCiAKLSAgICBkZWYgY2FuY2VsKHNlbGYpOgotICAgICAgICAiIiJBdHRlbXB0IHRvIGFib3J0
IHByb2Nlc3NpbmcgKGJlc3QgZWZmb3J0KS4iIiIKLSAgICAgICAgc2VsZi5fY2FuY2VsZWQgPSBU
cnVlCi0KLSAgICBkZWYgaXNfZG9uZShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2RvbmUg
b3Igc2VsZi5fY2FuY2VsZWQKLQotICAgIGRlZiBuYW1lKHNlbGYpOgotICAgICAgICByZXR1cm4g
c2VsZi5fbmFtZQotCi0gICAgZGVmIHJ1bihzZWxmLCBwb3J0KToKLSAgICAgICAgc2VsZi5zYWZl
X2luaXQocG9ydCkKKyAgICBkZWYgcnVuKHNlbGYsIHBvcnQ9Tm9uZSk6CisgICAgICAgIHNlbGYu
X2ZpbmlzaF9pbml0aWFsaXppbmcocG9ydCkKIAotICAgICAgICBleGNlcHRpb25fbXNnID0gIiIK
ICAgICAgICAgX2xvZy5kZWJ1ZygiJXMgc3RhcnRpbmciICUgc2VsZi5fbmFtZSkKLQogICAgICAg
ICB0cnk6Ci0gICAgICAgICAgICBzZWxmLl93b3JrZXJfY29ubmVjdGlvbi5ydW5fbWVzc2FnZV9s
b29wKCkKLSAgICAgICAgICAgIGlmIG5vdCBzZWxmLmlzX2RvbmUoKToKLSAgICAgICAgICAgICAg
ICByYWlzZSBBc3NlcnRpb25FcnJvcigiJXM6IHJhbiBvdXQgb2YgbWVzc2FnZXMgaW4gd29ya2Vy
IHF1ZXVlLiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIHNlbGYuX25h
bWUpCi0gICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKLSAgICAgICAgICAgIGV4Y2Vw
dGlvbl9tc2cgPSAiLCBpbnRlcnJ1cHRlZCIKLSAgICAgICAgICAgIHNlbGYuX3dvcmtlcl9jb25u
ZWN0aW9uLnJhaXNlX2V4Y2VwdGlvbihzeXMuZXhjX2luZm8oKSkKLSAgICAgICAgZXhjZXB0Ogot
ICAgICAgICAgICAgZXhjZXB0aW9uX21zZyA9ICIsIGV4Y2VwdGlvbiByYWlzZWQiCi0gICAgICAg
ICAgICBzZWxmLl93b3JrZXJfY29ubmVjdGlvbi5yYWlzZV9leGNlcHRpb24oc3lzLmV4Y19pbmZv
KCkpCisgICAgICAgICAgICBzdXBlcihXb3JrZXIsIHNlbGYpLnJ1bigpCiAgICAgICAgIGZpbmFs
bHk6Ci0gICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyBkb25lIHdpdGggbWVzc2FnZSBsb29wJXMi
ICUgKHNlbGYuX25hbWUsIGV4Y2VwdGlvbl9tc2cpKQogICAgICAgICAgICAgc2VsZi5fd29ya2Vy
X2Nvbm5lY3Rpb24ucG9zdF9tZXNzYWdlKCdkb25lJykKICAgICAgICAgICAgIHNlbGYuY2xlYW51
cCgpCisgICAgICAgICAgICBzZWxmLl9wcmludGVyLmNsZWFudXAoKQogICAgICAgICAgICAgX2xv
Zy5kZWJ1ZygiJXMgZXhpdGluZyIgJSBzZWxmLl9uYW1lKQogCiAgICAgZGVmIGhhbmRsZV90ZXN0
X2xpc3Qoc2VsZiwgc3JjLCBsaXN0X25hbWUsIHRlc3RfbGlzdCk6CkBAIC0xMTksNyArMTE3LDcg
QEAgY2xhc3MgV29ya2VyKG1hbmFnZXJfd29ya2VyX2Jyb2tlci5BYnN0cmFjdFdvcmtlcik6CiAg
ICAgICAgIHNlbGYuX3dvcmtlcl9jb25uZWN0aW9uLnBvc3RfbWVzc2FnZSgnZmluaXNoZWRfbGlz
dCcsIGxpc3RfbmFtZSwgbnVtX3Rlc3RzLCBlbGFwc2VkX3RpbWUpCiAKICAgICBkZWYgaGFuZGxl
X3N0b3Aoc2VsZiwgc3JjKToKLSAgICAgICAgc2VsZi5fZG9uZSA9IFRydWUKKyAgICAgICAgc2Vs
Zi5zdG9wX2hhbmRsaW5nX21lc3NhZ2VzKCkKIAogICAgIGRlZiBfcnVuX3Rlc3Qoc2VsZiwgdGVz
dF9pbnB1dCk6CiAgICAgICAgIHRlc3RfdGltZW91dF9zZWMgPSBzZWxmLnRpbWVvdXQodGVzdF9p
bnB1dCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1
bl93ZWJraXRfdGVzdHNfaW50ZWdyYXRpb250ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c19pbnRlZ3JhdGlvbnRlc3QucHkKaW5kZXgg
ODc5M2YzNzI3NDE1YmVkMzMxZDIzYmM4MGRlNTI3NTM2YjYwMzIxMi4uNDdkMzRkYjcwYjY3M2Rj
NGJjNTA4YWY2NzcwY2Y0ZmQ0OGVkNzM1NyAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c19pbnRlZ3JhdGlvbnRlc3QucHkKKysr
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c19p
bnRlZ3JhdGlvbnRlc3QucHkKQEAgLTQ1LDcgKzQ1LDcgQEAgZnJvbSB3ZWJraXRweS5jb21tb24u
c3lzdGVtIGltcG9ydCBwYXRoCiAKICMgRklYTUU6IHJlbW92ZSB0aGlzIHdoZW4gd2UgZml4IHRl
c3Qtd2Via2l0cHkgdG8gd29yayBwcm9wZXJseSBvbiBjeWd3aW4KICMgKGJ1ZyA2Mzg0NikuCi1T
SE9VTERfVEVTVF9QUk9DRVNTRVMgPSBzeXMucGxhdGZvcm0gbm90IGluICgnY3lnd2luJywgJ3dp
bjMyJykKK1NIT1VMRF9URVNUX1BST0NFU1NFUyA9IEZhbHNlIGFuZCBzeXMucGxhdGZvcm0gbm90
IGluICgnY3lnd2luJywgJ3dpbjMyJykKIAogZnJvbSB3ZWJraXRweS5jb21tb24gaW1wb3J0IGFy
cmF5X3N0cmVhbQogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBvdXRwdXRjYXB0
dXJlCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3QvbWFpbi5weSBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9tYWluLnB5CmluZGV4IDc4YzM5ZGI1NTc5NTc2YmZm
N2UyYjM3NzMzODkyNWFhZGE5OWVlY2IuLjA5NWE1Y2RlMjZlMGI5ODM2Njg5MDc2ZDk4ZjZhNTc5
YjgzYjA2MGEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9tYWluLnB5
CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9tYWluLnB5CkBAIC0xLDMgKzEsNCBA
QAorIyBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICMgQ29weXJpZ2h0IChDKSAyMDEwIENocmlzIEplcmRvbmVrIChjamVyZG9uZWtAd2Via2l0Lm9y
ZykKICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CkBAIC0yNSw4MiArMjYsMTMzIEBACiBpbXBvcnQgbG9nZ2luZwog
aW1wb3J0IG9wdHBhcnNlCiBpbXBvcnQgb3MKK2ltcG9ydCBwZGIKK2ltcG9ydCByZQogaW1wb3J0
IFN0cmluZ0lPCiBpbXBvcnQgc3lzCitpbXBvcnQgdGltZQogaW1wb3J0IHRyYWNlYmFjawogaW1w
b3J0IHVuaXR0ZXN0CiAKICMgTk9URTogV2UgaW50ZW50aW9uYWxseSBkbyBub3QgZGVwZW5kIG9u
IGFueXRoaW5nIGVsc2UgaW4gd2Via2l0cHkgaGVyZSB0byBhdm9pZCBicmVha2luZyB0ZXN0LXdl
YmtpdHB5LgorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMuY29udHJvbGxlcnMgaW1wb3J0IG1h
bmFnZXJfd29ya2VyX2Jyb2tlcgogCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18p
CiAKIAotY2xhc3MgVGVzdGVyKG9iamVjdCk6Ci0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBj
bGVhbl9wYWNrYWdlcyhkaXJzKToKLSAgICAgICAgIiIiRGVsZXRlIGFsbCAucHljIGZpbGVzIHVu
ZGVyIGRpcnMgdGhhdCBoYXZlIG5vIC5weSBmaWxlLiIiIgotICAgICAgICBmb3IgZGlyX3RvX2Ns
ZWFuIGluIGRpcnM6Ci0gICAgICAgICAgICBfbG9nLmRlYnVnKCJDbGVhbmluZyBvcnBoYW5lZCAq
LnB5YyBmaWxlcyBmcm9tOiAlcyIgJSBkaXJfdG9fY2xlYW4pCi0gICAgICAgICAgICBmb3IgZGly
X3BhdGgsIGRpcl9uYW1lcywgZmlsZV9uYW1lcyBpbiBvcy53YWxrKGRpcl90b19jbGVhbik6Ci0g
ICAgICAgICAgICAgICAgZm9yIGZpbGVfbmFtZSBpbiBmaWxlX25hbWVzOgotICAgICAgICAgICAg
ICAgICAgICBpZiBmaWxlX25hbWUuZW5kc3dpdGgoIi5weWMiKSBhbmQgZmlsZV9uYW1lWzotMV0g
bm90IGluIGZpbGVfbmFtZXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3BhdGggPSBv
cy5wYXRoLmpvaW4oZGlyX3BhdGgsIGZpbGVfbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IF9sb2cuaW5mbygiRGVsZXRpbmcgb3JwaGFuICoucHljIGZpbGU6ICVzIiAlIGZpbGVfcGF0aCkK
LSAgICAgICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZShmaWxlX3BhdGgpCitjbGFzcyBUZXN0
VHJlZShvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0b3BfZGlyZWN0b3J5LCBzdGFy
dGluZ19zdWJkaXJlY3RvcnksIGlnbm9yZV9saXN0KToKKyAgICAgICAgc2VsZi50b3BfZGlyZWN0
b3J5ID0gb3MucGF0aC5yZWFscGF0aCh0b3BfZGlyZWN0b3J5KQorICAgICAgICBzZWxmLnNlYXJj
aF9kaXJlY3RvcnkgPSBzZWxmLnRvcF9kaXJlY3RvcnkKKyAgICAgICAgc2VsZi5pZ25vcmVfbGlz
dCA9IFtvcy5wYXRoLmpvaW4oc2VsZi50b3BfZGlyZWN0b3J5LCB4KSBmb3IgeCBpbiBpZ25vcmVf
bGlzdF0KKyAgICAgICAgc2VsZi50b3BfcGFja2FnZSA9ICcnCisgICAgICAgIGlmIHN0YXJ0aW5n
X3N1YmRpcmVjdG9yeToKKyAgICAgICAgICAgIHNlbGYudG9wX3BhY2thZ2UgPSBzdGFydGluZ19z
dWJkaXJlY3RvcnkucmVwbGFjZShvcy5zZXAsICcuJykgKyAnLicKKyAgICAgICAgICAgIHNlbGYu
c2VhcmNoX2RpcmVjdG9yeSA9IG9zLnBhdGguam9pbihzZWxmLnRvcF9kaXJlY3RvcnksIHN0YXJ0
aW5nX3N1YmRpcmVjdG9yeSkKKworICAgIGRlZiBjbGVhbihzZWxmKToKKyAgICAgICAgIiIiRGVs
ZXRlIGFsbCAucHljIGZpbGVzIGluIHRoZSB0cmVlIHRoYXQgaGF2ZSBubyBtYXRjaGluZyAucHkg
ZmlsZS4iIiIKKyAgICAgICAgX2xvZy5kZWJ1ZygiQ2xlYW5pbmcgb3JwaGFuZWQgKi5weWMgZmls
ZXMgZnJvbTogJXMiICUgc2VsZi5zZWFyY2hfZGlyZWN0b3J5KQorICAgICAgICBmb3IgZGlyX3Bh
dGgsIGRpcl9uYW1lcywgZmlsZV9uYW1lcyBpbiBvcy53YWxrKHNlbGYuc2VhcmNoX2RpcmVjdG9y
eSk6CisgICAgICAgICAgICAjIEZJWE1FOiBTaG91bGQgd2UgYmUgY2xlYW5pbmcgdGhlIGlnbm9y
ZWQgc3ViZGlyZWN0b3JpZXMgYXMgd2VsbD8KKyAgICAgICAgICAgIGZvciBmaWxlX25hbWUgaW4g
ZmlsZV9uYW1lczoKKyAgICAgICAgICAgICAgICBpZiBmaWxlX25hbWUuZW5kc3dpdGgoIi5weWMi
KSBhbmQgZmlsZV9uYW1lWzotMV0gbm90IGluIGZpbGVfbmFtZXM6CisgICAgICAgICAgICAgICAg
ICAgIGZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihkaXJfcGF0aCwgZmlsZV9uYW1lKQorICAgICAg
ICAgICAgICAgICAgICBfbG9nLmluZm8oIkRlbGV0aW5nIG9ycGhhbiAqLnB5YyBmaWxlOiAlcyIg
JSBmaWxlX3BhdGgpCisgICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZShmaWxlX3BhdGgpCisK
KyAgICBkZWYgZmluZF9tb2R1bGVzKHNlbGYsIGRpcl90b19zZWFyY2gsIHN1ZmZpeGVzKToKKyAg
ICAgICAgbW9kdWxlcyA9IFtdCisgICAgICAgIGZvciBkaXJfcGF0aCwgXywgZmlsZW5hbWVzIGlu
IG9zLndhbGsoZGlyX3RvX3NlYXJjaCk6CisgICAgICAgICAgICBkaXJfcGF0aCA9IG9zLnBhdGgu
am9pbihkaXJfcGF0aCwgJycpCisgICAgICAgICAgICBwYWNrYWdlID0gZGlyX3BhdGgucmVwbGFj
ZShzZWxmLnRvcF9kaXJlY3RvcnkgKyBvcy5zZXAsICcnKS5yZXBsYWNlKG9zLnNlcCwgJy4nKQor
ICAgICAgICAgICAgZm9yIGYgaW4gZmlsZW5hbWVzOgorICAgICAgICAgICAgICAgIGlmIGFueShm
LmVuZHN3aXRoKHN1ZmZpeCkgZm9yIHN1ZmZpeCBpbiBzdWZmaXhlcyk6CisgICAgICAgICAgICAg
ICAgICAgIG1vZHVsZXMuYXBwZW5kKHBhY2thZ2UgKyBmLnJlcGxhY2UoJy5weScsICcnKSkKKyAg
ICAgICAgcmV0dXJuIG1vZHVsZXMKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKworY2xhc3Mg
TG9hZGVyRXJyb3IoRXhjZXB0aW9uKToKKyAgICBwYXNzCisKKworY2xhc3MgVGVzdGVyKG9iamVj
dCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0ZGVycik6CiAgICAgICAgIHNlbGYuX3ZlcmJv
c2l0eSA9IDEKKyAgICAgICAgc2VsZi50cmVlcyA9IFtdCisgICAgICAgIHNlbGYubG9hZGVyID0g
Tm9uZQorICAgICAgICBzZWxmLnJ1bm5lciA9IE5vbmUKKyAgICAgICAgc2VsZi5fbG9nX2xldmVs
ID0gbG9nZ2luZy5JTkZPCisgICAgICAgIHNlbGYuc3RkZXJyID0gc3RkZXJyCiAKLSAgICBkZWYg
cGFyc2VfYXJncyhzZWxmLCBhcmd2KToKKyAgICBkZWYgcGFyc2VfYXJncyhzZWxmLCBhcmd2PU5v
bmUpOgogICAgICAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodXNhZ2U9J3VzYWdl
OiAlcHJvZyBbb3B0aW9uc10gW2FyZ3MuLi5dJykKICAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24o
Jy1hJywgJy0tYWxsJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaGVscD0ncnVuIGFsbCB0aGUgdGVzdHMnKSwKICAgICAgICAg
cGFyc2VyLmFkZF9vcHRpb24oJy1jJywgJy0tY292ZXJhZ2UnLCBhY3Rpb249J3N0b3JlX3RydWUn
LCBkZWZhdWx0PUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdnZW5lcmF0
ZSBjb2RlIGNvdmVyYWdlIGluZm8gKHJlcXVpcmVzIGh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlw
aS9jb3ZlcmFnZSknKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nZ2VuZXJhdGUg
Y29kZSBjb3ZlcmFnZSByZXBvcnQgKHJlcXVpcmVzIGh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlw
aS9jb3ZlcmFnZSknKSwKICAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1xJywgJy0tcXVpZXQn
LCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICBoZWxwPSdydW4gcXVpZXRseSAoZXJyb3JzLCB3YXJuaW5ncywgYW5kIHByb2dyZXNz
IG9ubHkpJyksCiAgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCctcycsICctLXNpbGVudCcsIGFj
dGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGhlbHA9J3J1biBzaWxlbnRseSAoZXJyb3JzIGFuZCB3YXJuaW5ncyBvbmx5KScpLAorICAg
ICAgICBwYXJzZXIuYWRkX29wdGlvbignLXQnLCAnLS10aW1pbmcnLCBhY3Rpb249J3N0b3JlX3Ry
dWUnLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdkaXNw
bGF5IHBlci10ZXN0IHRpbWluZyBpbmZvJyksCiAgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCct
eCcsICctLXhtbCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGhlbHA9J291dHB1dCB4VW5pdC1zdHlsZSBYTUwgb3V0cHV0JykK
ICAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy12JywgJy0tdmVyYm9zZScsIGFjdGlvbj0nY291
bnQnLCBkZWZhdWx0PTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3ZlcmJvc2Ug
b3V0cHV0IChzcGVjaWZ5IG9uY2UgZm9yIGluZGl2aWR1YWwgdGVzdCByZXN1bHRzLCB0d2ljZSBm
b3IgZGVidWcgbWVzc2FnZXMpJykKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1qJywgJy0t
am9icycsIGFjdGlvbj0nc3RvcmUnLCB0eXBlPSdpbnQnLCBkZWZhdWx0PU5vbmUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIGhlbHA9J251bWJlciBvZiB3b3JrZXJzIHRvIHJ1biBpbiBwYXJh
bGxlbCcpCisKKyAgICAgICAgIyBGSVhNRTogV2UgbmVlZCB0byB1bmlmeSB0aGVzZSB0d28gdHlw
ZXMgb2YgdGVzdHMgYW5kIG1ha2UgdGhlbSBjb25zaXN0ZW50LgogICAgICAgICBwYXJzZXIuYWRk
X29wdGlvbignLS1za2lwLWludGVncmF0aW9udGVzdHMnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBk
ZWZhdWx0PUZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdkbyBub3QgcnVu
IHRoZSBpbnRlZ3JhdGlvbiB0ZXN0cycpCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCctaScs
ICctLXJ1bi1yZWFsLWludGVncmF0aW9udGVzdHMnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZh
dWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdkbyBub3QgcnVuIHRo
ZSByZWFsIGludGVncmF0aW9uIHRlc3RzJykKIAogICAgICAgICBwYXJzZXIuZXBpbG9nID0gKCdb
YXJncy4uLl0gaXMgYW4gb3B0aW9uYWwgbGlzdCBvZiBtb2R1bGVzLCB0ZXN0X2NsYXNzZXMsIG9y
IGluZGl2aWR1YWwgdGVzdHMuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAnSWYgbm8gYXJn
cyBhcmUgZ2l2ZW4sIGFsbCB0aGUgdGVzdHMgd2lsbCBiZSBydW4uJykKIAotICAgICAgICBzZWxm
LnByb2dOYW1lID0gb3MucGF0aC5iYXNlbmFtZShhcmd2WzBdKQotICAgICAgICByZXR1cm4gcGFy
c2VyLnBhcnNlX2FyZ3MoYXJndlsxOl0pCisgICAgICAgIHJldHVybiBwYXJzZXIucGFyc2VfYXJn
cyhhcmd2KQogCiAgICAgZGVmIGNvbmZpZ3VyZShzZWxmLCBvcHRpb25zKToKICAgICAgICAgc2Vs
Zi5fb3B0aW9ucyA9IG9wdGlvbnMKIAotICAgICAgICBpZiBvcHRpb25zLnNpbGVudDoKKyAgICAg
ICAgaWYgb3B0aW9ucy5zaWxlbnQgYW5kIG5vdCBvcHRpb25zLnZlcmJvc2U6CiAgICAgICAgICAg
ICBzZWxmLl92ZXJib3NpdHkgPSAwCiAgICAgICAgICAgICBzZWxmLl9jb25maWd1cmVfbG9nZ2lu
Zyhsb2dnaW5nLldBUk5JTkcpCi0gICAgICAgIGVsaWYgb3B0aW9ucy5xdWlldDoKKyAgICAgICAg
ZWxpZiBvcHRpb25zLnF1aWV0IGFuZCBub3Qgb3B0aW9ucy52ZXJib3NlOgogICAgICAgICAgICAg
c2VsZi5fdmVyYm9zaXR5ID0gMQotICAgICAgICAgICAgc2VsZi5fY29uZmlndXJlX2xvZ2dpbmco
bG9nZ2luZy5XQVJOSU5HKQorICAgICAgICAgICAgc2VsZi5fbG9nX2xldmVsID0gbG9nZ2luZy5X
QVJOSU5HCiAgICAgICAgIGVsaWYgb3B0aW9ucy52ZXJib3NlID09IDA6CiAgICAgICAgICAgICBz
ZWxmLl92ZXJib3NpdHkgPSAxCi0gICAgICAgICAgICBzZWxmLl9jb25maWd1cmVfbG9nZ2luZyhs
b2dnaW5nLklORk8pCisgICAgICAgICAgICBzZWxmLl9sb2dfbGV2ZWwgPSBsb2dnaW5nLklORk8K
ICAgICAgICAgZWxpZiBvcHRpb25zLnZlcmJvc2UgPT0gMToKICAgICAgICAgICAgIHNlbGYuX3Zl
cmJvc2l0eSA9IDIKLSAgICAgICAgICAgIHNlbGYuX2NvbmZpZ3VyZV9sb2dnaW5nKGxvZ2dpbmcu
SU5GTykKKyAgICAgICAgICAgIHNlbGYuX2xvZ19sZXZlbCA9IGxvZ2dpbmcuSU5GTwogICAgICAg
ICBlbGlmIG9wdGlvbnMudmVyYm9zZSA9PSAyOgogICAgICAgICAgICAgc2VsZi5fdmVyYm9zaXR5
ID0gMgotICAgICAgICAgICAgc2VsZi5fY29uZmlndXJlX2xvZ2dpbmcobG9nZ2luZy5ERUJVRykK
KyAgICAgICAgICAgIHNlbGYuX2xvZ19sZXZlbCA9IGxvZ2dpbmcuREVCVUcKKworICAgICAgICBz
ZWxmLmxvYWRlciA9IFRlc3RMb2FkZXIoKQorICAgICAgICBzZWxmLmxvYWRlci5ydW5fcmVhbF9p
bnRlZ3JhdGlvbl90ZXN0cyA9IG9wdGlvbnMucnVuX3JlYWxfaW50ZWdyYXRpb250ZXN0cworICAg
ICAgICBpZiBzZWxmLl9vcHRpb25zLnhtbDoKKyAgICAgICAgICAgIGZyb20gd2Via2l0cHkudGhp
cmRwYXJ0eS5hdXRvaW5zdGFsbGVkLnhtbHJ1bm5lciBpbXBvcnQgWE1MVGVzdFJ1bm5lcgorICAg
ICAgICAgICAgc2VsZi5ydW5uZXIgPSBYTUxUZXN0UnVubmVyKG91dHB1dD0ndGVzdC13ZWJraXRw
eS14bWwtcmVwb3J0cycpCisgICAgICAgIGVsaWYgc2VsZi5fb3B0aW9ucy5qb2JzIGlzIG5vdCBO
b25lOgorICAgICAgICAgICAgc2VsZi5ydW5uZXIgPSBQYXJhbGxlbFJ1bm5lcihzZWxmLnN0ZGVy
ciwgdmVyYm9zaXR5PXNlbGYuX3ZlcmJvc2l0eSwgdGltaW5nPXNlbGYuX29wdGlvbnMudGltaW5n
LCBqb2JzPXNlbGYuX29wdGlvbnMuam9icywgc3RhcnQ9dGltZS50aW1lKCkpCisgICAgICAgIGVs
c2U6CisgICAgICAgICAgICBzZWxmLnJ1bm5lciA9IFRlc3RSdW5uZXIoc2VsZi5zdGRlcnIsIHZl
cmJvc2l0eT1zZWxmLl92ZXJib3NpdHksIHRpbWluZz1zZWxmLl9vcHRpb25zLnRpbWluZywgc3Rh
cnQ9dGltZS50aW1lKCkpCiAKLSAgICBkZWYgX2NvbmZpZ3VyZV9sb2dnaW5nKHNlbGYsIGxvZ19s
ZXZlbCk6CisgICAgZGVmIGNvbmZpZ3VyZV9sb2dnaW5nKHNlbGYpOgogICAgICAgICAiIiJDb25m
aWd1cmUgdGhlIHJvb3QgbG9nZ2VyLgogCiAgICAgICAgIENvbmZpZ3VyZSB0aGUgcm9vdCBsb2dn
ZXIgbm90IHRvIGxvZyBhbnkgbWVzc2FnZXMgZnJvbSB3ZWJraXRweSAtLQogICAgICAgICBleGNl
cHQgZm9yIG1lc3NhZ2VzIGZyb20gdGhlIGF1dG9pbnN0YWxsIG1vZHVsZS4gIEFsc28gc2V0IHRo
ZQogICAgICAgICBsb2dnaW5nIGxldmVsIGFzIGRlc2NyaWJlZCBiZWxvdy4KICAgICAgICAgIiIi
Ci0gICAgICAgIGhhbmRsZXIgPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoc3lzLnN0ZGVycikKKyAg
ICAgICAgbG9nX2xldmVsID0gc2VsZi5fbG9nX2xldmVsCisgICAgICAgIGhhbmRsZXIgPSBsb2dn
aW5nLlN0cmVhbUhhbmRsZXIoc2VsZi5zdGRlcnIpCiAgICAgICAgICMgV2UgY29uc3RyYWluIHRo
ZSBsZXZlbCBvbiB0aGUgaGFuZGxlciByYXRoZXIgdGhhbiBvbiB0aGUgcm9vdAogICAgICAgICAj
IGxvZ2dlciBpdHNlbGYuICBUaGlzIGlzIHByb2JhYmx5IGJldHRlciBiZWNhdXNlIHRoZSBoYW5k
bGVyIGlzCiAgICAgICAgICMgY29uZmlndXJlZCBhbmQga25vd24gb25seSB0byB0aGlzIG1vZHVs
ZSwgd2hlcmVhcyB0aGUgcm9vdCBsb2dnZXIKQEAgLTE0MSwzMiArMTkzLDg0IEBAIGNsYXNzIFRl
c3RlcihvYmplY3QpOgogICAgICAgICBfbG9nLmluZm8oIlN1cHByZXNzaW5nIG1vc3Qgd2Via2l0
cHkgbG9nZ2luZyB3aGlsZSBydW5uaW5nIHVuaXQgdGVzdHMuIikKICAgICAgICAgaGFuZGxlci5h
ZGRGaWx0ZXIodGVzdGluZ19maWx0ZXIpCiAKLSAgICBkZWYgcnVuKHNlbGYsIGRpcnMsIGFyZ3Mp
OgotICAgICAgICBhcmdzID0gYXJncyBvciBzZWxmLl9maW5kX21vZHVsZXMoZGlycykKLSAgICAg
ICAgcmV0dXJuIHNlbGYuX3J1bl90ZXN0cyhkaXJzLCBhcmdzKQotCi0gICAgZGVmIF9maW5kX21v
ZHVsZXMoc2VsZiwgZGlycyk6Ci0gICAgICAgIG1vZHVsZXMgPSBbXQotICAgICAgICBmb3IgZGly
X3RvX3NlYXJjaCBpbiBkaXJzOgotICAgICAgICAgICAgbW9kdWxlcy5leHRlbmQoc2VsZi5fZmlu
ZF9tb2R1bGVzX3VuZGVyKGRpcl90b19zZWFyY2gsICdfdW5pdHRlc3QucHknKSkKLSAgICAgICAg
ICAgIGlmIG5vdCBzZWxmLl9vcHRpb25zLnNraXBfaW50ZWdyYXRpb250ZXN0czoKLSAgICAgICAg
ICAgICAgICBtb2R1bGVzLmV4dGVuZChzZWxmLl9maW5kX21vZHVsZXNfdW5kZXIoZGlyX3RvX3Nl
YXJjaCwgJ19pbnRlZ3JhdGlvbnRlc3QucHknKSkKLSAgICAgICAgbW9kdWxlcy5zb3J0KCkKLQot
ICAgICAgICBmb3IgbW9kdWxlIGluIG1vZHVsZXM6Ci0gICAgICAgICAgICBfbG9nLmRlYnVnKCJG
b3VuZDogJXMiICUgbW9kdWxlKQotCi0gICAgICAgICMgRklYTUU6IEZpZ3VyZSBvdXQgaG93IHRv
IG1vdmUgdGhpcyB0byB0ZXN0LXdlYmtpdHB5IGluIG9yZGVyIHRvIHRvIG1ha2UgdGhpcyBmaWxl
IG1vcmUgZ2VuZXJpYy4KLSAgICAgICAgaWYgbm90IHNlbGYuX29wdGlvbnMuYWxsOgotICAgICAg
ICAgICAgc2xvd190ZXN0cyA9ICgnd2Via2l0cHkuY29tbW9uLmNoZWNrb3V0LnNjbS5zY21fdW5p
dHRlc3QnLCkKLSAgICAgICAgICAgIHNlbGYuX2V4Y2x1ZGUobW9kdWxlcywgc2xvd190ZXN0cywg
J2FyZSByZWFsbHksIHJlYWxseSBzbG93JywgMzE4MTgpCi0KLSAgICAgICAgICAgIGlmIHN5cy5w
bGF0Zm9ybSA9PSAnd2luMzInOgotICAgICAgICAgICAgICAgIHdpbjMyX2JsYWNrbGlzdCA9ICgn
d2Via2l0cHkuY29tbW9uLmNoZWNrb3V0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJ3dlYmtpdHB5LmNvbW1vbi5jb25maWcnLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnd2Via2l0cHkudG9vbCcpCi0gICAgICAgICAgICAgICAgc2VsZi5fZXhjbHVk
ZShtb2R1bGVzLCB3aW4zMl9ibGFja2xpc3QsICdmYWlsIGhvcnJpYmx5IG9uIHdpbjMyJywgNTQ1
MjYpCi0KKyAgICBkZWYgYWRkX3RyZWUoc2VsZiwgdG9wX2RpcmVjdG9yeSwgc3RhcnRpbmdfc3Vi
ZGlyZWN0b3J5PU5vbmUsIGlnbm9yZV9saXN0PU5vbmUpOgorICAgICAgICBzZWxmLnRyZWVzLmFw
cGVuZChUZXN0VHJlZSh0b3BfZGlyZWN0b3J5LCBzdGFydGluZ19zdWJkaXJlY3RvcnksIGlnbm9y
ZV9saXN0IG9yIFtdKSkKKworICAgIGRlZiBydW4oc2VsZiwgYXJncyk6CisgICAgICAgIHNlbGYu
X2NsZWFuX3RyZWVzKCkKKyAgICAgICAgc2VsZi5fZml4X3BhdGgoKQorCisgICAgICAgIHRyeToK
KyAgICAgICAgICAgIGNvdiA9IE5vbmUKKyAgICAgICAgICAgIGlmIHNlbGYuX29wdGlvbnMuY292
ZXJhZ2U6CisgICAgICAgICAgICAgICAgY292ID0gc2VsZi5fY292ZXJhZ2Vfb2JqZWN0KCkKKyAg
ICAgICAgICAgICAgICBjb3Yuc3RhcnQoKQorCisgICAgICAgICAgICBfbG9nLmRlYnVnKCJMb2Fk
aW5nIHRoZSB0ZXN0cy4uLiIpCisgICAgICAgICAgICBpZiBhcmdzOgorICAgICAgICAgICAgICAg
IHRlc3RzID0gW10KKyAgICAgICAgICAgICAgICBmb3IgYXJnIGluIGFyZ3M6CisgICAgICAgICAg
ICAgICAgICAgIHRlc3RzLmV4dGVuZChzZWxmLl9maW5kX3Rlc3RzX2ZvcihhcmcpKQorICAgICAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIEZJWE1FOiBDb25zaWRlciBydW5uaW5nIGVh
Y2ggdHJlZSBzZXBhcmF0ZWx5IHRvIGF2b2lkIG5hbWVzcGFjZSBjbGFzaGVzLgorICAgICAgICAg
ICAgICAgIHRlc3RzID0gc2VsZi5fZGVmYXVsdF90ZXN0cygpCisKKyAgICAgICAgICAgIHJlc3Vs
dCA9IHNlbGYuX3J1bl90ZXN0cyh0ZXN0cykKKyAgICAgICAgICAgIGlmIGNvdjoKKyAgICAgICAg
ICAgICAgICBjb3Yuc3RvcCgpCisgICAgICAgICAgICAgICAgY292LnJlcG9ydChzaG93X21pc3Np
bmc9RmFsc2UpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0Lndhc1N1Y2Nlc3NmdWwKKworICAg
ICAgICBleGNlcHQgTG9hZGVyRXJyb3IsIGU6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKwor
ICAgIGRlZiBfZml4X3BhdGgoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIFBZVEhPTlBBVEgg
aXMgc2V0IHVwIGNvcnJlY3RseS4KKyAgICAgICAgc3lzLnBhdGggPSBbdHJlZS50b3BfZGlyZWN0
b3J5IGZvciB0cmVlIGluIHNlbGYudHJlZXMgaWYgdHJlZS50b3BfZGlyZWN0b3J5IG5vdCBpbiBz
eXMucGF0aF0gKyBzeXMucGF0aAorCisgICAgZGVmIF9jbGVhbl90cmVlcyhzZWxmKToKKyAgICAg
ICAgZm9yIHRyZWUgaW4gc2VsZi50cmVlczoKKyAgICAgICAgICAgIHRyZWUuY2xlYW4oKQorCisg
ICAgZGVmIF9jb3ZlcmFnZV9vYmplY3Qoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAg
IGltcG9ydCB3ZWJraXRweS50aGlyZHBhcnR5LmF1dG9pbnN0YWxsZWQuY292ZXJhZ2UgYXMgY292
ZXJhZ2UKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yLCBlOgorICAgICAgICAgICAgX2xvZy5l
cnJvcigiRmFpbGVkIHRvIGltcG9ydCAnY292ZXJhZ2UnOyBjYW4ndCBnZW5lcmF0ZSBjb3ZlcmFn
ZSBudW1iZXJzLiIpCisgICAgICAgICAgICByYWlzZSBMb2FkZXJFcnJvcigpCisKKyAgICAgICAg
aW5jbHVkZSA9IFtvcy5wYXRoLmpvaW4odHJlZS5zZWFyY2hfZGlyZWN0b3J5LCAnKicpIGZvciB0
cmVlIGluIHNlbGYudHJlZXNdCisgICAgICAgIG9taXQgPSBbXQorICAgICAgICBmb3IgdHJlZSBp
biBzZWxmLnRyZWVzOgorICAgICAgICAgICAgZm9yIHBhdGggaW4gdHJlZS5pZ25vcmVfbGlzdDoK
KyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHBhdGgpOgorICAgICAgICAgICAgICAg
ICAgICBvbWl0LmFwcGVuZChvcy5wYXRoLmpvaW4ocGF0aCwgJyonKSkKKyAgICAgICAgICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBvbWl0LmFwcGVuZChwYXRoKQorICAgICAgICBy
ZXR1cm4gY292ZXJhZ2UuY292ZXJhZ2UoaW5jbHVkZT1pbmNsdWRlLCBvbWl0PW9taXQpCisKKyAg
ICBkZWYgX2ZpbmRfbW9kdWxlcyhzZWxmLCB0cmVlLCBkaXJfdG9fc2VhcmNoKToKKyAgICAgICAg
c3VmZml4ZXMgPSAoJ191bml0dGVzdC5weScsICdfaW50ZWdyYXRpb250ZXN0LnB5JykKKyAgICAg
ICAgaWYgc2VsZi5fb3B0aW9ucy5za2lwX2ludGVncmF0aW9udGVzdHM6CisgICAgICAgICAgICBz
dWZmaXhlcyA9ICgnX3VuaXR0ZXN0LnB5JywpCisgICAgICAgIHJldHVybiB0cmVlLmZpbmRfbW9k
dWxlcyhkaXJfdG9fc2VhcmNoLCBzdWZmaXhlcykKKworICAgIGRlZiBfZGVmYXVsdF90ZXN0cyhz
ZWxmKToKKyAgICAgICAgdGVzdHMgPSBbXQorICAgICAgICBmb3IgdHJlZSBpbiBzZWxmLnRyZWVz
OgorICAgICAgICAgICAgdGVzdHMuZXh0ZW5kKHNlbGYuX2ZpbmRfbW9kdWxlcyh0cmVlLCB0cmVl
LnNlYXJjaF9kaXJlY3RvcnkpKQorICAgICAgICByZXR1cm4gdGVzdHMKKworICAgIGRlZiBfc2tp
cF9tb2R1bGVzKHNlbGYsIG1vZHVsZXMpOgorICAgICAgICAjIEZJWE1FOiBUaGVzZSBzaG91bGQg
YmUgcmVwbGFjZWQgdy8gQHNsb3cgYW5kIEBza2lwX2lmIGRlY29yYXRvcnMKKyAgICAgICAgc2xv
d190ZXN0cyA9ICgnd2Via2l0cHkuY29tbW9uLmNoZWNrb3V0LnNjbS5zY21fdW5pdHRlc3QnLCkK
KyAgICAgICAgc2VsZi5fZXhjbHVkZShtb2R1bGVzLCBzbG93X3Rlc3RzLCAnYXJlIHJlYWxseSwg
cmVhbGx5IHNsb3cnLCAzMTgxOCkKKworICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMy
JzoKKyAgICAgICAgICAgIHdpbjMyX2JsYWNrbGlzdCA9ICgnd2Via2l0cHkuY29tbW9uLmNoZWNr
b3V0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dlYmtpdHB5LmNvbW1vbi5j
b25maWcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2Via2l0cHkudG9vbCcp
CisgICAgICAgICAgICBzZWxmLl9leGNsdWRlKG1vZHVsZXMsIHdpbjMyX2JsYWNrbGlzdCwgJ2Zh
aWwgaG9ycmlibHkgb24gd2luMzInLCA1NDUyNikKICAgICAgICAgcmV0dXJuIG1vZHVsZXMKIAog
ICAgIGRlZiBfZXhjbHVkZShzZWxmLCBtb2R1bGVzLCBtb2R1bGVfcHJlZml4ZXMsIHJlYXNvbiwg
YnVnaWQpOgpAQCAtMTgxLDY2ICsyODUsMzExIEBAIGNsYXNzIFRlc3RlcihvYmplY3QpOgogICAg
ICAgICBfbG9nLmluZm8oJyAgICAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPSVkOyB1c2UgLS1hbGwgdG8gaW5jbHVkZSknICUgYnVnaWQpCiAgICAgICAgIF9sb2cuaW5m
bygnJykKIAotICAgIGRlZiBfZmluZF9tb2R1bGVzX3VuZGVyKHNlbGYsIGRpcl90b19zZWFyY2gs
IHN1ZmZpeCk6Ci0KLSAgICAgICAgZGVmIHRvX3BhY2thZ2UoZGlyX3BhdGgpOgotICAgICAgICAg
ICAgcmV0dXJuIGRpcl9wYXRoLnJlcGxhY2UoZGlyX3RvX3NlYXJjaCArIG9zLnNlcCwgJycpLnJl
cGxhY2Uob3Muc2VwLCAnLicpCisgICAgZGVmIF9maW5kX3Rlc3RzX2ZvcihzZWxmLCBuYW1lKToK
KyAgICAgICAgKHRyZWUsIHN0YXJ0aW5nX2RpcmVjdG9yeSkgPSBzZWxmLl9maW5kX3RyZWUobmFt
ZSkKKyAgICAgICAgaWYgdHJlZSBhbmQgbm90IG9zLnBhdGguaXNmaWxlKHN0YXJ0aW5nX2RpcmVj
dG9yeSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZmluZF9tb2R1bGVzKHRyZWUsIHN0YXJ0
aW5nX2RpcmVjdG9yeSkKKyAgICAgICAgZWxpZiBvcy5wYXRoLmV4aXN0cyhuYW1lKToKKyAgICAg
ICAgICAgIHJldHVybiBbc2VsZi5fdGVzdF9mcm9tX3BhdGgobmFtZSldCisgICAgICAgIGVsc2U6
CisgICAgICAgICAgICByZXR1cm4gW25hbWVdCisKKyAgICBkZWYgX3Rlc3RfZnJvbV9wYXRoKHNl
bGYsIG5hbWUpOgorICAgICAgICAjIEZpcnN0LCBjaGVjayB0byBzZWUgaWYgd2UgY2FuIHJlc29s
dmUgdGhlIHBhdGggcmVsYXRpdmUgdG8gdGhlIGN3ZC4KKyAgICAgICAgZnVsbF9wYXRoID0gb3Mu
cGF0aC5yZWFscGF0aChuYW1lKQorICAgICAgICBmb3IgdHJlZSBpbiBzZWxmLnRyZWVzOgorICAg
ICAgICAgICAgIyBGSVhNRTogRG8gd2UgbmVlZCB0byB3b3JyeSBhYm91dCBjYXNlLWluc2Vuc2l0
aXZpdHkgaGVyZT8KKyAgICAgICAgICAgIGlmIGZ1bGxfcGF0aC5zdGFydHN3aXRoKHRyZWUudG9w
X2RpcmVjdG9yeSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bGxfcGF0aC5yZXBsYWNlKHRy
ZWUudG9wX2RpcmVjdG9yeSArIG9zLnNlcCwgJycpLnJlcGxhY2UoJy5weScsICcnKS5yZXBsYWNl
KG9zLnNlcCwgJy4nKQorCisgICAgICAgIGVyciA9ICclcyBpcyBub3QgaW4gb25lIG9mIHRoZSBX
ZWJLaXQgcHl0aG9uIHRyZWVzJyAlIG5hbWUKKyAgICAgICAgX2xvZy5mYXRhbChlcnIpCisgICAg
ICAgIHJhaXNlIExvYWRlckVycm9yKGVycikKKworICAgIGRlZiBfc3VpdGVfZnJvbV9uYW1lKHNl
bGYsIG5hbWUpOgorICAgICAgICBpZiBzZWxmLl9pc19tb2R1bGUobmFtZSk6CisgICAgICAgICAg
ICAjIGltcG9ydCBtb2R1bGVzIGV4cGxpY2l0bHkgYmVmb3JlIGxvYWRpbmcgdGhlaXIgdGVzdHMg
YmVjYXVzZQorICAgICAgICAgICAgIyBsb2FkVGVzdHNGcm9tTmFtZSgpIHByb2R1Y2VzIGxvdXN5
IGVycm9yIG1lc3NhZ2VzIGZvciBiYWQgbW9kdWxlcy4KKyAgICAgICAgICAgIHRyeToKKyAgICAg
ICAgICAgICAgICBfX2ltcG9ydF9fKG5hbWUpCisgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJy
b3IsIGU6CisgICAgICAgICAgICAgICAgX2xvZy5mYXRhbCgnRmFpbGVkIHRvIGltcG9ydCAlczon
ICUgbmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLl9sb2dfZXhjZXB0aW9uKCkKKyAgICAgICAg
ICAgICAgICByYWlzZSBMb2FkZXJFcnJvcigpCisgICAgICAgIHJldHVybiBzZWxmLmxvYWRlci5s
b2FkVGVzdHNGcm9tTmFtZShuYW1lLCBOb25lKQorCisgICAgZGVmIF9maW5kX3RyZWUoc2VsZiwg
bmFtZSk6CisgICAgICAgICMgSXMgdGhlIG5hbWUgYSBzdWJkaXJlY3RvcnkgcmVsYXRpdmUgdG8g
dGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgYW5kIGluIGEgdHJlZT8KKyAgICAgICAgaWYg
b3MucGF0aC5leGlzdHMobmFtZSk6CisgICAgICAgICAgICBmdWxsX3BhdGggPSBvcy5wYXRoLnJl
YWxwYXRoKG5hbWUpCisgICAgICAgICAgICBmb3IgdHJlZSBpbiBzZWxmLnRyZWVzOgorICAgICAg
ICAgICAgICAgIGlmIGZ1bGxfcGF0aC5zdGFydHN3aXRoKHRyZWUudG9wX2RpcmVjdG9yeSk6Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAodHJlZSwgZnVsbF9wYXRoKQorCisgICAgICAgICMg
SXMgdGhlIG5hbWUgYSBzdWJkaXJlY3Rvcnkgb2YgYSB0cmVlPworICAgICAgICBpZiBub3Qgb3Mu
cGF0aC5pc2FicyhuYW1lKToKKyAgICAgICAgICAgIGZvciB0cmVlIGluIHNlbGYudHJlZXM6Cisg
ICAgICAgICAgICAgICAgZnVsbF9wYXRoID0gb3MucGF0aC5yZWFscGF0aChvcy5wYXRoLmpvaW4o
dHJlZS50b3BfZGlyZWN0b3J5LCBuYW1lKSkKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlz
ZGlyKGZ1bGxfcGF0aCk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAodHJlZSwgb3MucGF0
aC5qb2luKHRyZWUudG9wX2RpcmVjdG9yeSwgbmFtZSkpCisKKyAgICAgICAgIyBJcyB0aGUgbmFt
ZSBhIHBhY2thZ2U/CisgICAgICAgIHJlbHBhdGggPSBuYW1lLnJlcGxhY2UoJy4nLCBvcy5zZXAp
CisgICAgICAgIGZvciB0cmVlIGluIHNlbGYudHJlZXM6CisgICAgICAgICAgICBmdWxsX3BhdGgg
PSBvcy5wYXRoLmpvaW4odHJlZS50b3BfZGlyZWN0b3J5LCByZWxwYXRoKQorICAgICAgICAgICAg
aWYgb3MucGF0aC5pc2RpcihmdWxsX3BhdGgpOgorICAgICAgICAgICAgICAgIHJldHVybiAodHJl
ZSwgZnVsbF9wYXRoKQorCisgICAgICAgIHJldHVybiAoTm9uZSwgTm9uZSkKKworICAgIGRlZiBf
aXNfbW9kdWxlKHNlbGYsIG5hbWUpOgorICAgICAgICByZWxwYXRoID0gbmFtZS5yZXBsYWNlKCcu
Jywgb3Muc2VwKSArICcucHknCisgICAgICAgIHJldHVybiBhbnkob3MucGF0aC5leGlzdHMob3Mu
cGF0aC5qb2luKHRyZWUudG9wX2RpcmVjdG9yeSwgcmVscGF0aCkpIGZvciB0cmVlIGluIHNlbGYu
dHJlZXMpCiAKLSAgICAgICAgZGVmIHRvX21vZHVsZShmaWxlbmFtZSwgcGFja2FnZSk6Ci0gICAg
ICAgICAgICByZXR1cm4gcGFja2FnZSArICcuJyArIGZpbGVuYW1lLnJlcGxhY2UoJy5weScsICcn
KQorICAgIGRlZiBfcnVuX3Rlc3RzKHNlbGYsIHRlc3RzKToKKyAgICAgICAgIyBTb3J0IGFuZCBk
ZWR1cGxpY2F0ZSBhbGwgb2YgdGhlIHRlc3RzCisgICAgICAgIHRlc3RzID0gc29ydGVkKFt0ZXN0
IGZvciB0ZXN0IGluIHNldCh0ZXN0cyldKQogCi0gICAgICAgIG1vZHVsZXMgPSBbXQotICAgICAg
ICBmb3IgZGlyX3BhdGgsIF8sIGZpbGVuYW1lcyBpbiBvcy53YWxrKGRpcl90b19zZWFyY2gpOgot
ICAgICAgICAgICAgcGFja2FnZSA9IHRvX3BhY2thZ2UoZGlyX3BhdGgpCi0gICAgICAgICAgICBt
b2R1bGVzLmV4dGVuZCh0b19tb2R1bGUoZiwgcGFja2FnZSkgZm9yIGYgaW4gZmlsZW5hbWVzIGlm
IGYuZW5kc3dpdGgoc3VmZml4KSkKLSAgICAgICAgcmV0dXJuIG1vZHVsZXMKKyAgICAgICAgZm9y
IHRlc3QgaW4gdGVzdHM6CisgICAgICAgICAgICBfbG9nLmRlYnVnKCJGb3VuZDogJXMiICUgdGVz
dCkKIAotICAgIGRlZiBfcnVuX3Rlc3RzKHNlbGYsIGRpcnMsIGFyZ3MpOgotICAgICAgICBpZiBz
ZWxmLl9vcHRpb25zLmNvdmVyYWdlOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAg
IGltcG9ydCBjb3ZlcmFnZQotICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yLCBlOgotICAg
ICAgICAgICAgICAgIF9sb2cuZXJyb3IoIkZhaWxlZCB0byBpbXBvcnQgJ2NvdmVyYWdlJzsgY2Fu
J3QgZ2VuZXJhdGUgY292ZXJhZ2UgbnVtYmVycy4iKQotICAgICAgICAgICAgICAgIHJldHVybiBG
YWxzZQotICAgICAgICAgICAgY292ID0gY292ZXJhZ2UuY292ZXJhZ2UoKQotICAgICAgICAgICAg
Y292LnN0YXJ0KCkKLQotICAgICAgICBfbG9nLmRlYnVnKCJMb2FkaW5nIHRoZSB0ZXN0cy4uLiIp
Ci0KLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuZGVmYXVsdFRlc3RMb2FkZXIKLSAgICAgICAg
c3VpdGVzID0gW10KLSAgICAgICAgZm9yIG5hbWUgaW4gYXJnczoKLSAgICAgICAgICAgIGlmIHNl
bGYuX2lzX21vZHVsZShkaXJzLCBuYW1lKToKLSAgICAgICAgICAgICAgICAjIGltcG9ydCBtb2R1
bGVzIGV4cGxpY2l0bHkgYmVmb3JlIGxvYWRpbmcgdGhlaXIgdGVzdHMgYmVjYXVzZQotICAgICAg
ICAgICAgICAgICMgbG9hZFRlc3RzRnJvbU5hbWUoKSBwcm9kdWNlcyBsb3VzeSBlcnJvciBtZXNz
YWdlcyBmb3IgYmFkIG1vZHVsZXMuCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAg
ICAgICAgICBfX2ltcG9ydF9fKG5hbWUpCi0gICAgICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVy
cm9yLCBlOgotICAgICAgICAgICAgICAgICAgICBfbG9nLmZhdGFsKCdGYWlsZWQgdG8gaW1wb3J0
ICVzOicgJSBuYW1lKQotICAgICAgICAgICAgICAgICAgICBzZWxmLl9sb2dfZXhjZXB0aW9uKCkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgICAgICBzdWl0ZXMuYXBw
ZW5kKGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZShuYW1lLCBOb25lKSkKLQotICAgICAgICB0ZXN0
X3N1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKHN1aXRlcykKLSAgICAgICAgaWYgc2VsZi5fb3B0
aW9ucy54bWw6Ci0gICAgICAgICAgICBmcm9tIHdlYmtpdHB5LnRoaXJkcGFydHkuYXV0b2luc3Rh
bGxlZC54bWxydW5uZXIgaW1wb3J0IFhNTFRlc3RSdW5uZXIKLSAgICAgICAgICAgIHRlc3RfcnVu
bmVyID0gWE1MVGVzdFJ1bm5lcihvdXRwdXQ9J3Rlc3Qtd2Via2l0cHkteG1sLXJlcG9ydHMnKQot
ICAgICAgICBlbHNlOgotICAgICAgICAgICAgdGVzdF9ydW5uZXIgPSB1bml0dGVzdC5UZXh0VGVz
dFJ1bm5lcih2ZXJib3NpdHk9c2VsZi5fdmVyYm9zaXR5KQorICAgICAgICBpZiBub3Qgc2VsZi5f
b3B0aW9ucy5hbGw6CisgICAgICAgICAgICB0ZXN0cyA9IHNlbGYuX3NraXBfbW9kdWxlcyh0ZXN0
cykKIAogICAgICAgICBfbG9nLmRlYnVnKCJSdW5uaW5nIHRoZSB0ZXN0cy4iKQotICAgICAgICBy
ZXN1bHQgPSB0ZXN0X3J1bm5lci5ydW4odGVzdF9zdWl0ZSkKLSAgICAgICAgaWYgc2VsZi5fb3B0
aW9ucy5jb3ZlcmFnZToKLSAgICAgICAgICAgIGNvdi5zdG9wKCkKLSAgICAgICAgICAgIGNvdi5z
YXZlKCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC53YXNTdWNjZXNzZnVsKCkKLQotICAgIGRlZiBf
aXNfbW9kdWxlKHNlbGYsIGRpcnMsIG5hbWUpOgotICAgICAgICByZWxwYXRoID0gbmFtZS5yZXBs
YWNlKCcuJywgb3Muc2VwKSArICcucHknCi0gICAgICAgIHJldHVybiBhbnkob3MucGF0aC5leGlz
dHMob3MucGF0aC5qb2luKGQsIHJlbHBhdGgpKSBmb3IgZCBpbiBkaXJzKQorICAgICAgICBpZiBz
ZWxmLl9vcHRpb25zLmpvYnMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5y
dW5uZXIucnVuX2luX3BhcmFsbGVsKHRlc3RzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
c3VpdGVzID0gW3NlbGYuX3N1aXRlX2Zyb21fbmFtZSh0ZXN0KSBmb3IgdGVzdCBpbiB0ZXN0c10K
KyAgICAgICAgICAgIHRlc3Rfc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoc3VpdGVzKQorICAg
ICAgICAgICAgcmV0dXJuIHNlbGYucnVubmVyLnJ1bih0ZXN0X3N1aXRlKQogCiAgICAgZGVmIF9s
b2dfZXhjZXB0aW9uKHNlbGYpOgogICAgICAgICBzID0gU3RyaW5nSU8uU3RyaW5nSU8oKQogICAg
ICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKGZpbGU9cykKICAgICAgICAgZm9yIGwgaW4gcy5idWZs
aXN0OgogICAgICAgICAgICAgX2xvZy5lcnJvcignICAnICsgbC5yc3RyaXAoKSkKKworCitjbGFz
cyBUZXN0TG9hZGVyKHVuaXR0ZXN0LlRlc3RMb2FkZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxm
KToKKyAgICAgICAgc2VsZi5ydW5fcmVhbF9pbnRlZ3JhdGlvbl90ZXN0cyA9IEZhbHNlCisgICAg
ICAgIHN1cGVyKFRlc3RMb2FkZXIsIHNlbGYpLl9faW5pdF9fKCkKKworICAgIGRlZiBnZXRUZXN0
Q2FzZU5hbWVzKHNlbGYsIHRlc3RDYXNlQ2xhc3MpOgorICAgICAgICBkZWYgaXNUZXN0TWV0aG9k
KGF0dHJuYW1lLCB0ZXN0Q2FzZUNsYXNzPXRlc3RDYXNlQ2xhc3MpOgorICAgICAgICAgICAgaWYg
bm90IGhhc2F0dHIoZ2V0YXR0cih0ZXN0Q2FzZUNsYXNzLCBhdHRybmFtZSksICdfX2NhbGxfXycp
OgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgcmV0dXJuICgoYXR0
cm5hbWUuc3RhcnRzd2l0aCgndGVzdCcpKSBvcgorICAgICAgICAgICAgICAgICAgICAoc2VsZi5y
dW5fcmVhbF9pbnRlZ3JhdGlvbl90ZXN0cyBhbmQgYXR0cm5hbWUuc3RhcnRzd2l0aCgnaW50ZWdy
YXRpb25fdGVzdF8nKSkpCisgICAgICAgIHRlc3RGbk5hbWVzID0gZmlsdGVyKGlzVGVzdE1ldGhv
ZCwgZGlyKHRlc3RDYXNlQ2xhc3MpKQorICAgICAgICB0ZXN0Rm5OYW1lcy5zb3J0KCkKKyAgICAg
ICAgcmV0dXJuIHRlc3RGbk5hbWVzCisKKworY2xhc3MgVGVzdFJ1bm5lcih1bml0dGVzdC5UZXh0
VGVzdFJ1bm5lcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0cmVhbSwgdmVyYm9zaXR5LCB0
aW1pbmcsIHN0YXJ0KToKKyAgICAgICAgc3VwZXIoVGVzdFJ1bm5lciwgc2VsZikuX19pbml0X18o
c3RyZWFtLCAxLCB2ZXJib3NpdHkpCisgICAgICAgIHNlbGYudGltaW5nID0gdGltaW5nCisgICAg
ICAgIHNlbGYuc3RhcnQgPSBzdGFydAorCisgICAgZGVmIHJ1bihzZWxmLCB0ZXN0KToKKyAgICAg
ICAgcmVzdWx0ID0gVGVzdFJlc3VsdChzZWxmLnN0cmVhbSwgc2VsZi52ZXJib3NpdHksIHNlbGYu
dGltaW5nLCB0ZXN0LmNvdW50VGVzdENhc2VzKCkpCisgICAgICAgIHRlc3QocmVzdWx0KQorICAg
ICAgICBzdG9wID0gdGltZS50aW1lKCkKKyAgICAgICAgc2VsZi5zdW1tYXJpemUocmVzdWx0LCBz
dG9wIC0gc2VsZi5zdGFydCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIHN1bW1h
cml6ZShzZWxmLCByZXN1bHQsIHRvdGFsX3Rlc3RfdGltZSk6CisgICAgICAgIGlmIHNlbGYudmVy
Ym9zaXR5ID09IDE6CisgICAgICAgICAgICByZXN1bHQuZXJhc2UoKQorICAgICAgICBlbGlmIHJl
c3VsdC5zaG93QWxsIG9yIHJlc3VsdC5udW1fZmFpbGVkOgorICAgICAgICAgICAgc2VsZi5zdHJl
YW0ud3JpdGVsbigpCisKKyAgICAgICAgdG90YWxfZGVsYXkgPSAnJS4zZiBzZWNvbmRzJyAlICh0
b3RhbF90ZXN0X3RpbWUpCisgICAgICAgIGlmIHJlc3VsdC5udW1fcnVuID4gMSBhbmQgcmVzdWx0
Lm51bV9mYWlsZWQ6CisgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZWxuKCclZCB0ZXN0cyBy
YW4gaW4gJXM7ICVkIGZhaWxlZC4nICUgKHJlc3VsdC5udW1fcnVuLCB0b3RhbF9kZWxheSwgcmVz
dWx0Lm51bV9mYWlsZWQpKQorICAgICAgICBlbGlmIHJlc3VsdC5udW1fcnVuID4gMToKKyAgICAg
ICAgICAgIHNlbGYuc3RyZWFtLndyaXRlbG4oJyVkIHRlc3RzIHJhbiBpbiAlczsgYWxsIHBhc3Nl
ZC4nICUgKHJlc3VsdC5udW1fcnVuLCB0b3RhbF9kZWxheSkpCisgICAgICAgIGVsaWYgcmVzdWx0
Lm51bV9mYWlsZWQ6CisgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZWxuKCcxIHRlc3QgcmFu
IGluICVzOyBpdCBmYWlsZWQuJyAlICh0b3RhbF9kZWxheSkpCisgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICBzZWxmLnN0cmVhbS53cml0ZWxuKCcxIHRlc3QgcmFuIGluICVzOyBpdCBwYXNzZWQu
JyAlICh0b3RhbF9kZWxheSkpCisKKworY2xhc3MgVGVzdFJlc3VsdCh1bml0dGVzdC5fVGV4dFRl
c3RSZXN1bHQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdHJlYW0sIHZlcmJvc2l0eSwgdGlt
aW5nLCBudW1fdGVzdHMpOgorICAgICAgICBzdXBlcihUZXN0UmVzdWx0LCBzZWxmKS5fX2luaXRf
XyhzdHJlYW0sIEZhbHNlLCB2ZXJib3NpdHkpCisgICAgICAgIHNlbGYudmVyYm9zaXR5ID0gdmVy
Ym9zaXR5CisgICAgICAgIHNlbGYudGltaW5nID0gdGltaW5nCisgICAgICAgIHNlbGYubnVtX3J1
biA9IDAKKyAgICAgICAgc2VsZi5udW1fcGFzc2VkID0gMAorICAgICAgICBzZWxmLm51bV9mYWls
ZWQgPSAwCisgICAgICAgIHNlbGYubnVtX3Rlc3RzID0gbnVtX3Rlc3RzCisgICAgICAgIHNlbGYu
c2hvd0FsbCA9IHNlbGYuc2hvd0FsbCBvciB0aW1pbmcKKyAgICAgICAgc2VsZi5kZXNjUmVnZXhw
ID0gcmUuY29tcGlsZSgiKFx3KykgXCgoW1x3Ll0rKVwpIikKKyAgICAgICAgc2VsZi5fYnVmZmVy
ID0gJycKKworICAgIGRlZiBnZXREZXNjcmlwdGlvbihzZWxmLCB0ZXN0KToKKyAgICAgICAgbSA9
IHNlbGYuZGVzY1JlZ2V4cC5tYXRjaChzdHIodGVzdCkpCisgICAgICAgIHJldHVybiAiJXMuJXMi
ICUgKG0uZ3JvdXAoMiksIG0uZ3JvdXAoMSkpCisKKyAgICBkZWYgX3dyaXRlX3N0YXR1cyhzZWxm
KToKKyAgICAgICAgcGVyY2VudF9jb21wbGV0ZSA9IDEwMCAqIChzZWxmLm51bV9ydW4pIC8gc2Vs
Zi5udW1fdGVzdHMKKyAgICAgICAgbnVtX3JlbWFpbmluZyA9IHNlbGYubnVtX3Rlc3RzIC0gc2Vs
Zi5udW1fcnVuCisgICAgICAgIHNlbGYuZXJhc2UoKQorICAgICAgICBzZWxmLl9idWZmZXIgPSAn
JTJkJSU6ICVkIHBhc3NlZCAlZCBmYWlsZWQgJWQgbGVmdCcgJSAoCisgICAgICAgICAgICBwZXJj
ZW50X2NvbXBsZXRlLCBzZWxmLm51bV9wYXNzZWQsIHNlbGYubnVtX2ZhaWxlZCwgbnVtX3JlbWFp
bmluZykKKyAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGUoc2VsZi5fYnVmZmVyKQorICAgICAgICBz
ZWxmLnN0cmVhbS5mbHVzaCgpCisKKyAgICBkZWYgZXJhc2Uoc2VsZik6CisgICAgICAgIGlmIHNl
bGYuX2J1ZmZlcjoKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKCdcYicgKiBsZW4oc2Vs
Zi5fYnVmZmVyKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAnICogbGVuKHNlbGYu
X2J1ZmZlcikgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcYicgKiBsZW4oc2VsZi5f
YnVmZmVyKSkKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtLl9idWZmZXIgPSAnJworCisgICAgZGVm
IF93cml0ZV9yZXN1bHQoc2VsZiwgdGVzdF9uYW1lLCB0ZXN0X3RpbWUsIGVycj1Ob25lKToKKyAg
ICAgICAgc2VsZi5udW1fcnVuICs9IDEKKyAgICAgICAgaWYgc2VsZi50aW1pbmcgYW5kIGVycjoK
KyAgICAgICAgICAgIG1zZyA9ICdmYWlsZWQgJS41ZnMnICUgdGVzdF90aW1lCisgICAgICAgIGVs
aWYgc2VsZi50aW1pbmc6CisgICAgICAgICAgICBtc2cgPSAncGFzc2VkICUuNWZzJyAlIHRlc3Rf
dGltZQorICAgICAgICBlbGlmIGVycjoKKyAgICAgICAgICAgIG1zZyA9ICdmYWlsZWQnCisgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICBtc2cgPSAncGFzc2VkJworCisgICAgICAgIGlmIGVycjoK
KyAgICAgICAgICAgIGlmIG5vdCBzZWxmLnNob3dBbGw6CisgICAgICAgICAgICAgICAgc2VsZi5l
cmFzZSgpCisgICAgICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGUodGVzdF9uYW1lICsgJyAu
Li4gJykKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlbG4obXNnKQorICAgICAgICAgICAg
Zm9yIGxpbmUgaW4gZXJyLnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgICAgICBzZWxmLnN0cmVh
bS53cml0ZWxuKCcgICAgJyArIGxpbmUpCisgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZWxu
KCkKKyAgICAgICAgZWxpZiBzZWxmLnNob3dBbGw6CisgICAgICAgICAgICBzZWxmLnN0cmVhbS53
cml0ZWxuKG1zZykKKyAgICAgICAgZWxpZiBzZWxmLmRvdHM6CisgICAgICAgICAgICBzZWxmLl93
cml0ZV9zdGF0dXMoKQorCisgICAgZGVmIHN0YXJ0VGVzdChzZWxmLCB0ZXN0KToKKyAgICAgICAg
aWYgc2VsZi5zaG93QWxsOgorICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGUoc2VsZi5nZXRE
ZXNjcmlwdGlvbih0ZXN0KSkKKyAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9ICcgLi4uICcKKyAg
ICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKHNlbGYuX2J1ZmZlcikKKyAgICAgICAgc2VsZi5z
dGFydCA9IHRpbWUudGltZSgpCisKKyAgICBkZWYgYWRkU3VjY2VzcyhzZWxmLCB0ZXN0KToKKyAg
ICAgICAgc2VsZi5udW1fcGFzc2VkICs9IDEKKyAgICAgICAgc2VsZi5fd3JpdGVfcmVzdWx0KHNl
bGYuZ2V0RGVzY3JpcHRpb24odGVzdCksIHRpbWUudGltZSgpIC0gc2VsZi5zdGFydCkKKworICAg
IGRlZiBhZGRFcnJvcihzZWxmLCB0ZXN0LCBlcnIpOgorICAgICAgICBzZWxmLm51bV9mYWlsZWQg
Kz0gMQorICAgICAgICBzZWxmLl93cml0ZV9yZXN1bHQoc2VsZi5nZXREZXNjcmlwdGlvbih0ZXN0
KSwgdGltZS50aW1lKCkgLSBzZWxmLnN0YXJ0LCBzZWxmLl9leGNfaW5mb190b19zdHJpbmcoZXJy
LCB0ZXN0KSkKKworICAgIGRlZiBhZGRGYWlsdXJlKHNlbGYsIHRlc3QsIGVycik6CisgICAgICAg
IHNlbGYuYWRkRXJyb3IodGVzdCwgZXJyKQorCisKK2NsYXNzIFBhcmFsbGVsUnVubmVyKG1hbmFn
ZXJfd29ya2VyX2Jyb2tlci5Ccm9rZXJDbGllbnQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBz
dHJlYW0sIHZlcmJvc2l0eSwgdGltaW5nLCBqb2JzLCBzdGFydCk6CisgICAgICAgIHN1cGVyKFBh
cmFsbGVsUnVubmVyLCBzZWxmKS5fX2luaXRfXygpCisgICAgICAgIHNlbGYucnVubmVyID0gVGVz
dFJ1bm5lcihzdHJlYW0sIHZlcmJvc2l0eSwgdGltaW5nLCBzdGFydCkKKyAgICAgICAgc2VsZi53
b3JrZXJzID0ge30KKyAgICAgICAgc2VsZi5qb2JzID0gam9icworICAgICAgICBzZWxmLnJlc3Vs
dCA9IE5vbmUKKworICAgIGRlZiBuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gJ21hbmFnZXIn
CisKKyAgICBkZWYgYWxsX3Rlc3RfbmFtZXMoc2VsZiwgdGVzdCk6CisgICAgICAgIG5hbWVzID0g
W10KKyAgICAgICAgaWYgaGFzYXR0cih0ZXN0LCAnX3Rlc3RzJyk6CisgICAgICAgICAgICBmb3Ig
dCBpbiB0ZXN0Ll90ZXN0czoKKyAgICAgICAgICAgICAgICBuYW1lcy5leHRlbmQoc2VsZi5hbGxf
dGVzdF9uYW1lcyh0KSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG5hbWVzLmFwcGVuZChz
dHIodGVzdCkpCisgICAgICAgIHJldHVybiBuYW1lcworCisgICAgZGVmIHJ1bl9pbl9wYXJhbGxl
bChzZWxmLCB0ZXN0cyk6CisgICAgICAgIGlmIHNlbGYuam9iczoKKyAgICAgICAgICAgIHdvcmtl
cl9tb2RlbCA9ICdwcm9jZXNzZXMnCisgICAgICAgICAgICBudW1fd29ya2VycyA9IHNlbGYuam9i
cworICAgICAgICAgICAgaWYgc2VsZi5qb2JzID4gMToKKyAgICAgICAgICAgICAgICBfbG9nLmlu
Zm8oJ1J1bm5pbmcgdXAgdG8gJWQgdGVzdHMgaW4gcGFyYWxsZWwuJyAlIG51bV93b3JrZXJzKQor
ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBfbG9nLmluZm8oJ1J1bm5pbmcgdGVz
dHMgaW4gYSBzaW5nbGUgc3VicHJvY2Vzcy4nKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
d29ya2VyX21vZGVsID0gJ2lubGluZScKKyAgICAgICAgICAgIG51bV93b3JrZXJzID0gMQorICAg
ICAgICAgICAgX2xvZy5pbmZvKCdSdW5uaW5nIHRlc3RzIGlubGluZS4nKQorCisgICAgICAgIGJy
b2tlciA9IG1hbmFnZXJfd29ya2VyX2Jyb2tlci5nZXQod29ya2VyX21vZGVsLCBzZWxmLCBQYXJh
bGxlbFdvcmtlcikKKyAgICAgICAgbnVtX3Rlc3RzID0gMAorICAgICAgICBsb2FkZXIgPSBUZXN0
TG9hZGVyKCkKKyAgICAgICAgYWxsX3Rlc3RzID0gW10KKyAgICAgICAgZm9yIHQgaW4gdGVzdHM6
CisgICAgICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSh0LCBOb25lKQor
ICAgICAgICAgICAgYWxsX3Rlc3RzLmV4dGVuZChzZWxmLmFsbF90ZXN0X25hbWVzKHN1aXRlKSkK
KworICAgICAgICBzZWxmLnJlc3VsdCA9IFRlc3RSZXN1bHQoc2VsZi5ydW5uZXIuc3RyZWFtLCBz
ZWxmLnJ1bm5lci52ZXJib3NpdHksIHNlbGYucnVubmVyLnRpbWluZywgbGVuKGFsbF90ZXN0cykp
CisgICAgICAgIGFsbF90ZXN0cyA9IG1hcChzZWxmLnJlc3VsdC5nZXREZXNjcmlwdGlvbiwgYWxs
X3Rlc3RzKQorCisgICAgICAgICMgRklYTUU6IGdldCBwcm9wZXIgbnVtX3dvcmtlcnMgdmFsdWUK
KyAgICAgICAgbWlkZGxlID0gdGltZS50aW1lKCkKKworICAgICAgICBmb3IgaSBpbiByYW5nZShu
dW1fd29ya2Vycyk6CisgICAgICAgICAgICB3b3JrZXIgPSBicm9rZXIuc3RhcnRfd29ya2VyKGlu
dChpKSArIDEsICcuJykKKyAgICAgICAgICAgIHNlbGYud29ya2Vyc1t3b3JrZXIubmFtZV0gPSB3
b3JrZXIKKworICAgICAgICBmb3IgdCBpbiBhbGxfdGVzdHM6CisgICAgICAgICAgICBicm9rZXIu
cG9zdF9tZXNzYWdlKCd0ZXN0X3N1aXRlJywgdCkKKworICAgICAgICBmb3IgaSBpbiByYW5nZShu
dW1fd29ya2Vycyk6CisgICAgICAgICAgICBicm9rZXIucG9zdF9tZXNzYWdlKCdzdG9wJykKKwor
ICAgICAgICBicm9rZXIucnVuX21lc3NhZ2VfbG9vcCgpCisgICAgICAgIHN0b3AgPSB0aW1lLnRp
bWUoKQorICAgICAgICBzZWxmLnJ1bm5lci5zdW1tYXJpemUoc2VsZi5yZXN1bHQsIHN0b3AgLSBz
ZWxmLnJ1bm5lci5zdGFydCkKKyAgICAgICAgX2xvZy5kZWJ1Zygnc2VyaWFsIHBhcnQ6ICUuM2Yg
c2Vjb25kcycgJSAobWlkZGxlIC0gc2VsZi5ydW5uZXIuc3RhcnQpKQorCisgICAgICAgIHJldHVy
biBzZWxmLnJlc3VsdAorCisgICAgZGVmIGlzX2RvbmUoc2VsZik6CisgICAgICAgIHJldHVybiBu
b3Qgc2VsZi53b3JrZXJzCisKKyAgICBkZWYgaGFuZGxlX2ZpbmlzaGVkX3Rlc3Qoc2VsZiwgc3Jj
LCB0ZXN0X25hbWUsIHRlc3RfdGltZSwgZXJyKToKKyAgICAgICAgc2VsZi5yZXN1bHQuX3dyaXRl
X3Jlc3VsdCh0ZXN0X25hbWUsIHRlc3RfdGltZSwgZXJyKQorCisgICAgZGVmIGhhbmRsZV9kb25l
KHNlbGYsIHNyYyk6CisgICAgICAgIF9sb2cuZGVidWcoJyVzIGRvbmUnICUgc3JjKQorICAgICAg
ICBkZWwgc2VsZi53b3JrZXJzW3NyY10KKworCitjbGFzcyBQYXJhbGxlbFdvcmtlcihtYW5hZ2Vy
X3dvcmtlcl9icm9rZXIuQWJzdHJhY3RXb3JrZXIpOgorICAgIGRlZiBydW4oc2VsZiwgcG9ydD1O
b25lKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3VwZXIoUGFyYWxsZWxXb3JrZXIsIHNl
bGYpLnJ1bihwb3J0KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fd29ya2Vy
X2Nvbm5lY3Rpb24ucG9zdF9tZXNzYWdlKCdkb25lJykKKworICAgIGRlZiBoYW5kbGVfdGVzdF9z
dWl0ZShzZWxmLCBzcmMsIHRlc3Rfc3VpdGVfbmFtZSk6CisgICAgICAgIGxvYWRlciA9IFRlc3RM
b2FkZXIoKQorICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSh0ZXN0X3N1
aXRlX25hbWUsIE5vbmUpCisgICAgICAgIHJlc3VsdCA9IFdvcmtlclRlc3RSZXN1bHQoc2VsZi5f
d29ya2VyX2Nvbm5lY3Rpb24pCisgICAgICAgIHN1aXRlLnJ1bihyZXN1bHQpCisKKyAgICBkZWYg
aGFuZGxlX3N0b3Aoc2VsZiwgc3JjKToKKyAgICAgICAgc2VsZi5zdG9wX2hhbmRsaW5nX21lc3Nh
Z2VzKCkKKworCitjbGFzcyBXb3JrZXJUZXN0UmVzdWx0KFRlc3RSZXN1bHQpOgorICAgIGRlZiBf
X2luaXRfXyhzZWxmLCB3b3JrZXJfY29ubmVjdGlvbik6CisgICAgICAgIHNlbGYuX3N0ZGVycl9i
dWZmZXIgPSBTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgIHN1cGVyKFdvcmtlclRlc3RSZXN1
bHQsIHNlbGYpLl9faW5pdF9fKHNlbGYuX3N0ZGVycl9idWZmZXIsIDAsIFRydWUsIDApCisgICAg
ICAgIHNlbGYuX3dvcmtlcl9jb25uZWN0aW9uID0gd29ya2VyX2Nvbm5lY3Rpb24KKworICAgIGRl
ZiBfd3JpdGVfcmVzdWx0KHNlbGYsIHRlc3RfbmFtZSwgdGVzdF90aW1lLCBlcnI9Tm9uZSk6Cisg
ICAgICAgIHNlbGYuX3dvcmtlcl9jb25uZWN0aW9uLnBvc3RfbWVzc2FnZSgnZmluaXNoZWRfdGVz
dCcsIHRlc3RfbmFtZSwgdGVzdF90aW1lLCBlcnIpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3Rlc3QvbWFpbl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
dGVzdC9tYWluX3VuaXR0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE0MDU4ODk3M2FlYWFkZTNkMDJjNmJm
MDI1Y2RhODMyOTZkZDBmNGUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3Rlc3QvbWFpbl91bml0dGVzdC5weQpAQCAtMCwwICsxLDk0IEBACisjIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgor
IyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgb3MKK2ltcG9ydCBwZGIKK2ltcG9y
dCBjU3RyaW5nSU8gYXMgU3RyaW5nSU8KK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAorCitm
cm9tIHdlYmtpdHB5LnRlc3QubWFpbiBpbXBvcnQgVGVzdGVyCisKKworY2xhc3MgRHVtbXlSZXN1
bHQob2JqZWN0KToKKyAgICB3YXNTdWNjZXNzZnVsID0gVHJ1ZQorCisKK2NsYXNzIER1bW15UnVu
bmVyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0cmVhbSwgKmFyZ3MsICoqa3dh
cmdzKToKKyAgICAgICAgc2VsZi5zdHJlYW0gPSBzdHJlYW0KKyAgICAgICAgcGFzcworCisgICAg
ZGVmIHJ1bihzZWxmLCBzdWl0ZSk6CisgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKCdSYW4gJWQg
dGVzdHMuJyAlIHN1aXRlLmNvdW50VGVzdENhc2VzKCkpCisgICAgICAgIHJldHVybiBEdW1teVJl
c3VsdCgpCisKK3dlYmtpdF9yb290ID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShv
cy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykp
KSkpCisKKworY2xhc3MgTWFpblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBjbWQo
c2VsZiwgYXJncywgY3dkPU5vbmUsIHN0ZGVycj1Ob25lLCByZXQ9VHJ1ZSwgbnVtX3Rlc3RzPU5v
bmUpOgorICAgICAgICBvbGRjd2QgPSBvcy5nZXRjd2QoKQorICAgICAgICBpZiBub3QgY3dkOgor
ICAgICAgICAgICAgY3dkID0gJy9zcmMvd2snCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9z
LmNoZGlyKGN3ZCkKKyAgICAgICAgICAgIGVyciA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAg
ICAgICAgIHRlc3RlciA9IFRlc3RlcihlcnIpCisgICAgICAgICAgICBvcHRpb25zLCBhcmdzID0g
dGVzdGVyLnBhcnNlX2FyZ3MoYXJncykKKyAgICAgICAgICAgIHRlc3Rlci5jb25maWd1cmUob3B0
aW9ucykKKyAgICAgICAgICAgIHRlc3Rlci5hZGRfdHJlZShvcy5wYXRoLmpvaW4od2Via2l0X3Jv
b3QsICdUb29scycsICdTY3JpcHRzJyksICd3ZWJraXRweScpCisgICAgICAgICAgICB0ZXN0ZXIu
cnVubmVyID0gRHVtbXlSdW5uZXIoZXJyKQorICAgICAgICAgICAgcmV0dXJuY29kZSA9IHRlc3Rl
ci5ydW4oYXJncykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNoZGlyKG9sZGN3
ZCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldCwgcmV0dXJuY29kZSkKKyAgICAgICAg
YWN0dWFsX2VyciA9IGVyci5nZXR2YWx1ZSgpCisgICAgICAgIGlmIHN0ZGVyciBpcyBub3QgTm9u
ZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsX2Vyciwgc3RkZXJyKQorICAg
ICAgICBpZiBudW1fdGVzdHMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRy
dWUoKCdSYW4gJWQgdGVzdCcgJSBudW1fdGVzdHMpIGluIGFjdHVhbF9lcnIsIGFjdHVhbF9lcnIp
CisKKyAgICBkZWYgaW50ZWdyYXRpb25fdGVzdF9wYWNrYWdlKHNlbGYpOgorICAgICAgICBzZWxm
LmNtZChbJ3dlYmtpdHB5LmNvbW1vbi53YXRjaGxpc3QnXSwgbnVtX3Rlc3RzPTM3KQorCisgICAg
ZGVmIGludGVncmF0aW9uX3Rlc3RfbW9kdWxlKHNlbGYpOgorICAgICAgICBzZWxmLmNtZChbJ3dl
YmtpdHB5LmNvbW1vbi53YXRjaGxpc3Qud2F0Y2hsaXN0X3VuaXR0ZXN0J10sIG51bV90ZXN0cz0x
MCkKKworICAgIGRlZiBpbnRlZ3JhdGlvbl90ZXN0X2NsYXNzKHNlbGYpOgorICAgICAgICBzZWxm
LmNtZChbJ3dlYmtpdHB5LmNvbW1vbi53YXRjaGxpc3Qud2F0Y2hsaXN0X3VuaXR0ZXN0LldhdGNo
TGlzdFRlc3QnXSwgbnVtX3Rlc3RzPTEwKQorCisgICAgZGVmIGludGVncmF0aW9uX3Rlc3RfbWV0
aG9kKHNlbGYpOgorICAgICAgICBzZWxmLmNtZChbJ3dlYmtpdHB5LmNvbW1vbi53YXRjaGxpc3Qu
d2F0Y2hsaXN0X3VuaXR0ZXN0LldhdGNoTGlzdFRlc3QudGVzdF9maWxlbmFtZV9kZWZpbml0aW9u
J10sIG51bV90ZXN0cz0xKQorCisgICAgZGVmIGludGVncmF0aW9uX3Rlc3RfZGlyZWN0b3J5KHNl
bGYpOgorICAgICAgICBzZWxmLmNtZChbJ3dlYmtpdHB5L2NvbW1vbi93YXRjaGxpc3QnXSwgbnVt
X3Rlc3RzPTM3KQorCisgICAgZGVmIGludGVncmF0aW9uX3Rlc3RfY3dkKHNlbGYpOgorICAgICAg
ICBzZWxmLmNtZChbJy4nXSwgY3dkPScvc3JjL3drL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29t
bW9uL3dhdGNobGlzdCcsIG51bV90ZXN0cz0zNykKKworICAgIGRlZiBpbnRlZ3JhdGlvbl90ZXN0
X2N3ZChzZWxmKToKKyAgICAgICAgc2VsZi5jbWQoWyd3YXRjaGxpc3QnXSwgY3dkPScvc3JjL3dr
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uJywgbnVtX3Rlc3RzPTM3KQorCisgICAgZGVm
IGludGVncmF0aW9uX3Rlc3RfZmlsZV9pbl9jd2Qoc2VsZik6CisgICAgICAgIHNlbGYuY21kKFsn
d2F0Y2hsaXN0L3dhdGNobGlzdF91bml0dGVzdC5weSddLCBjd2Q9Jy9zcmMvd2svVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24nLCBudW1fdGVzdHM9MTApCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126446</attachid>
            <date>2012-02-09 20:52:47 -0800</date>
            <delta_ts>2012-02-23 11:19:54 -0800</delta_ts>
            <desc>lots of cleanup</desc>
            <filename>bug-77687-20120209205246.patch</filename>
            <type>text/plain</type>
            <size>80137</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3Mjk1CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3Rl
c3Qtd2Via2l0cHkgYi9Ub29scy9TY3JpcHRzL3Rlc3Qtd2Via2l0cHkKaW5kZXggNDI5OGZlYWUy
MzczYTdiOGEzN2M0MGZiOWM4ZDA1NzQ2NWJkOTU2YS4uZTk1YTMwZGJkM2FiOGI5NjNlNzViOGI4
MzE1ZjUzNjA3MDA2OWYyNCAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy90ZXN0LXdlYmtpdHB5
CisrKyBiL1Rvb2xzL1NjcmlwdHMvdGVzdC13ZWJraXRweQpAQCAtMzcsMTggKzM3LDIzIEBAIGlt
cG9ydCBzeXMKIGZyb20gd2Via2l0cHkuY29tbW9uIGltcG9ydCB2ZXJzaW9uX2NoZWNrCiBmcm9t
IHdlYmtpdHB5LnRlc3QgaW1wb3J0IG1haW4KIAotCi1fbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIo
InRlc3Qtd2Via2l0cHkiKQotCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCiAK
IGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgd2Via2l0X3Jvb3QgPSBvcy5wYXRoLmRp
cm5hbWUob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19m
aWxlX18pKSkpCiAKLSAgICAjIEZJWE1FOiBXZSBzaG91bGQgcHJvYmFibHkgdGVzdCBlYWNoIHBh
Y2thZ2Ugc2VwYXJhdGVseSB0byBhdm9pZCBuYW1pbmcgY29uZmxpY3RzLgotICAgIGRpcnMgPSBb
Ci0gICAgICAgIG9zLnBhdGguam9pbih3ZWJraXRfcm9vdCwgJ1Rvb2xzJywgJ1NjcmlwdHMnKSwK
LSAgICAgICAgb3MucGF0aC5qb2luKHdlYmtpdF9yb290LCAnU291cmNlJywgJ1dlYktpdDInLCAn
U2NyaXB0cycpLAotICAgIF0KKyAgICB0ZXN0ZXIgPSBtYWluLlRlc3RlcihzeXMuc3RkZXJyKQor
ICAgIG9wdGlvbnMsIGFyZ3MgPSB0ZXN0ZXIucGFyc2VfYXJncyhzeXMuYXJndlsxOl0pCisgICAg
dGVzdGVyLmNvbmZpZ3VyZShvcHRpb25zKQorICAgIHRlc3Rlci5jb25maWd1cmVfbG9nZ2luZygp
CisKKyAgICB0aGlyZHBhcnR5ID0gb3MucGF0aC5qb2luKCd3ZWJraXRweScsICd0aGlyZHBhcnR5
JykKKyAgICB0ZXN0ZXIuYWRkX3RyZWUob3MucGF0aC5qb2luKHdlYmtpdF9yb290LCAnVG9vbHMn
LCAnU2NyaXB0cycpLCAnd2Via2l0cHknLAorICAgICAgICAgICAgICAgICAgICBbb3MucGF0aC5q
b2luKHRoaXJkcGFydHksICdhdXRvaW5zdGFsbGVkJyksCisgICAgICAgICAgICAgICAgICAgICBv
cy5wYXRoLmpvaW4odGhpcmRwYXJ0eSwgJ3NpbXBsZWpzb24nKSwKKyAgICAgICAgICAgICAgICAg
ICAgIG9zLnBhdGguam9pbih0aGlyZHBhcnR5LCAnQmVhdXRpZnVsU291cC5weScpLAorICAgICAg
ICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHRoaXJkcGFydHksICdtb2NrLnB5JyldKQorICAg
IHRlc3Rlci5hZGRfdHJlZShvcy5wYXRoLmpvaW4od2Via2l0X3Jvb3QsICdTb3VyY2UnLCAnV2Vi
S2l0MicsICdTY3JpcHRzJyksICd3ZWJraXQyJykKIAogICAgICMgRklYTUU6IERvIHdlIG5lZWQg
dG8gYmUgYWJsZSB0byB0ZXN0IFF1ZXVlU3RhdHVzU2VydmVyIG9uIFdpbmRvd3MgYXMgd2VsbD8K
ICAgICBhcHBlbmdpbmVfc2RrX3BhdGggPSAnL3Vzci9sb2NhbC9nb29nbGVfYXBwZW5naW5lJwpA
QCAtNTksMTcgKzY0LDEyIEBAIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgICAgIGZy
b20gZ29vZ2xlLmFwcGVuZ2luZS5kaXN0IGltcG9ydCB1c2VfbGlicmFyeQogICAgICAgICB1c2Vf
bGlicmFyeSgnZGphbmdvJywgJzEuMicpCiAgICAgICAgIGRldl9hcHBzZXJ2ZXIuZml4X3N5c19w
YXRoKCkKLSAgICAgICAgZGlycy5hcHBlbmQob3MucGF0aC5qb2luKHdlYmtpdF9yb290LCAnVG9v
bHMnLCAnUXVldWVTdGF0dXNTZXJ2ZXInKSkKKyAgICAgICAgdGVzdGVyLmFkZF90cmVlKG9zLnBh
dGguam9pbih3ZWJraXRfcm9vdCwgJ1Rvb2xzJywgJ1F1ZXVlU3RhdHVzU2VydmVyJyksICcnKQog
ICAgIGVsc2U6CiAgICAgICAgIF9sb2cuaW5mbygnU2tpcHBpbmcgUXVldWVTdGF0dXNTZXJ2ZXIg
dGVzdHM7IHRoZSBHb29nbGUgQXBwRW5naW5lIFB5dGhvbiBTREsgaXMgbm90IGluc3RhbGxlZC4n
KQogCi0gICAgbWFpbi5UZXN0ZXIuY2xlYW5fcGFja2FnZXMoZGlycykKLQotICAgIHRlc3RlciA9
IG1haW4uVGVzdGVyKCkKLSAgICBvcHRpb25zLCBhcmdzID0gdGVzdGVyLnBhcnNlX2FyZ3Moc3lz
LmFyZ3YpCi0gICAgdGVzdGVyLmNvbmZpZ3VyZShvcHRpb25zKQotCi0gICAgIyBNYWtlIHN1cmUg
UFlUSE9OUEFUSCBpcyBzZXQgdXAgY29ycmVjdGx5IHNvIHRoYXQgYWxsIG9mIHRoZSBpbXBvcnRz
IHdpbGwgd29yay4KLSAgICBzeXMucGF0aCA9IFtkIGZvciBkIGluIGRpcnMgaWYgZCBub3QgaW4g
c3lzLnBhdGhdICsgc3lzLnBhdGgKLQotICAgIHN5cy5leGl0KG5vdCB0ZXN0ZXIucnVuKGRpcnMs
IGFyZ3MpKQorICAgIHRyeToKKyAgICAgICAgc3lzLmV4aXQobm90IHRlc3Rlci5ydW4oYXJncykp
CisgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICBzeXMuc3RkZXJyLndyaXRl
KCdJbnRlcnJ1cHRlZCwgZXhpdGluZ1xuJykKKyAgICAgICAgc3lzLmV4aXQoMSkKZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFn
ZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9t
YW5hZ2VyLnB5CmluZGV4IDcxMTNiY2I2YTNlYWNjMWRjZGM5MTI2YWNlMTk2NWE5MmQ3NGNiYjcu
LjI0NzA1ZWI0YzllNDI3ODQ3ODY4OGM2MjczY2JmNDhjMTQ4NzBlYjcgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXIucHkK
KysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFu
YWdlci5weQpAQCAtNzUyLDE0ICs3NTIsMTYgQEAgY2xhc3MgTWFuYWdlcihvYmplY3QpOgogICAg
ICAgICBudW1fd29ya2VycyA9IG1pbihpbnQoc2VsZi5fb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMp
LCBsZW4oYWxsX3NoYXJkcykpCiAgICAgICAgIHNlbGYuX2xvZ19udW1fd29ya2VycyhudW1fd29y
a2VycywgbGVuKGFsbF9zaGFyZHMpLCBsZW4obG9ja2VkX3NoYXJkcykpCiAKLSAgICAgICAgbWFu
YWdlcl9jb25uZWN0aW9uID0gbWFuYWdlcl93b3JrZXJfYnJva2VyLmdldChzZWxmLl9wb3J0LCBz
ZWxmLl9vcHRpb25zLCBzZWxmLCB3b3JrZXIuV29ya2VyKQorICAgICAgICBtYW5hZ2VyX2Nvbm5l
Y3Rpb24gPSBtYW5hZ2VyX3dvcmtlcl9icm9rZXIuZ2V0KHNlbGYuX29wdGlvbnMud29ya2VyX21v
ZGVsLCBzZWxmLCB3b3JrZXIuV29ya2VyKQogCiAgICAgICAgIGlmIHNlbGYuX29wdGlvbnMuZHJ5
X3J1bjoKICAgICAgICAgICAgIHJldHVybiAoa2V5Ym9hcmRfaW50ZXJydXB0ZWQsIGludGVycnVw
dGVkLCB0aHJlYWRfdGltaW5ncywgc2VsZi5fZ3JvdXBfc3RhdHMsIHNlbGYuX2FsbF9yZXN1bHRz
KQogCiAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCdTdGFydGluZyAlcyAuLi4n
ICUgZ3JhbW1hci5wbHVyYWxpemUoJ3dvcmtlcicsIG51bV93b3JrZXJzKSkKICAgICAgICAgZm9y
IHdvcmtlcl9udW1iZXIgaW4geHJhbmdlKG51bV93b3JrZXJzKToKLSAgICAgICAgICAgIHdvcmtl
cl9jb25uZWN0aW9uID0gbWFuYWdlcl9jb25uZWN0aW9uLnN0YXJ0X3dvcmtlcih3b3JrZXJfbnVt
YmVyLCBzZWxmLnJlc3VsdHNfZGlyZWN0b3J5KCkpCisgICAgICAgICAgICB3b3JrZXJfY29ubmVj
dGlvbiA9IG1hbmFnZXJfY29ubmVjdGlvbi5zdGFydF93b3JrZXIod29ya2VyX251bWJlciwgcG9y
dD1zZWxmLl9wb3J0LAorICAgICAgICAgICAgICAgIG9wdGlvbnM9c2VsZi5fb3B0aW9ucywgcmVz
dWx0c19kaXJlY3Rvcnk9c2VsZi5yZXN1bHRzX2RpcmVjdG9yeSgpLAorICAgICAgICAgICAgICAg
IHJlYWxfcG9ydF9uYW1lPXNlbGYuX3BvcnQucmVhbF9uYW1lKCkpCiAgICAgICAgICAgICB3b3Jr
ZXJfc3RhdGUgPSBfV29ya2VyU3RhdGUod29ya2VyX251bWJlciwgd29ya2VyX2Nvbm5lY3Rpb24p
CiAgICAgICAgICAgICBzZWxmLl93b3JrZXJfc3RhdGVzW3dvcmtlcl9jb25uZWN0aW9uLm5hbWVd
ID0gd29ya2VyX3N0YXRlCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXJfd29ya2VyX2Jyb2tlci5weSBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXJfd29ya2VyX2Jy
b2tlci5weQppbmRleCAzNDEzNmZmMzc3ODFjOWI4NGE4OWZmMTMxNjgzOGVjYjJhM2RiYTRmLi5h
NDhjMjkwMjE0ZWZlMTQ4Yjk4M2IxNGIyM2VlNGMzMjIwZDM3MTBmIDEwMDc1NQotLS0gYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyX3dvcmtl
cl9icm9rZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29u
dHJvbGxlcnMvbWFuYWdlcl93b3JrZXJfYnJva2VyLnB5CkBAIC0yNiw3MCArMjYsNjUgQEAKICMg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKLSIiIk1vZHVsZSBmb3IgaGFuZGxpbmcgbWVz
c2FnZXMgYW5kIGNvbmN1cnJlbmN5IGZvciBydW4td2Via2l0LXRlc3RzLgorIiIiTW9kdWxlIGZv
ciBoYW5kbGluZyBtZXNzYWdlcyBhbmQgY29uY3VycmVuY3kgZm9yIHRlc3RzLgogCi1UaGlzIG1v
ZHVsZSBpbXBsZW1lbnRzIGEgbWVzc2FnZSBicm9rZXIgdGhhdCBjb25uZWN0cyB0aGUgbWFuYWdl
ciB0byB0aGUKLXdvcmtlcnM6IGl0IHByb3ZpZGVzIGEgbWVzc2FnaW5nIGFic3RyYWN0aW9uIGFu
ZCBtZXNzYWdlIGxvb3BzIChidWlsZGluZyBvbgotdG9wIG9mIG1lc3NhZ2VfYnJva2VyKSwgYW5k
IGhhbmRsZXMgc3RhcnRpbmcgd29ya2VycyBieSBsYXVuY2hpbmcgcHJvY2Vzc2VzLgorVGhpcyBt
b2R1bGUgaW1wbGVtZW50cyBhIHNpbXBsZSBtZXNzYWdlIGJyb2tlciBhYnN0cmFjdGlvbiB0aGF0
IHdpbGwgYmUKK3VzZWQgdG8gY29vcmRpbmF0ZSBtZXNzYWdlcyBiZXR3ZWVuIGEgIm1hbmFnZXIi
IGFuZCB0aGUgaW5kaXZpZHVhbCB3b3JrZXJzLgorCitOb3RlIHRoYXQgdGhlIG1hbmFnZXIgYW5k
IHdvcmtlcnMgd2lsbCB1c3VhbGx5IGJlIGluIGRpZmZlcmVudCBwcm9jZXNzZXMsIHNvCit0aGUg
TWFuYWdlciBhbmQgd29ya2VycyBtdXN0IGFzc3VtZSB0aGF0IHRoZXkgaGF2ZSBubyBzaGFyZWQg
bWVtb3J5IGF2YWlsYWJsZSwKK2FuZCBtZXNzYWdlcyBtdXN0IGJlIHBpY2tsZWFibGUuCisKK1Ro
ZSBtb2R1bGUgZXhwb3J0cyBvbmUgZmFjdG9yeSBmdW5jdGlvbiAoZ2V0KCkpIGFuZCB0d28gaW50
ZXJmYWNlIGNsYXNzZXMgLQorQnJva2VyQ2xpZW50IGFuZCBBYnN0cmFjdFdvcmtlciAod2hpY2gg
aW1wbGVtZW50cyBCcm9rZXJDbGllbnQgYW5kIHByb3ZpZGVzIHNvbWUKK2RlZmF1bHQgbG9naWMp
LiBDYWxsZXJzIG9mIHRoaXMgcGFja2FnZSBtdXN0IHByb3ZpZGUgYSBjYWxsYmFjaworb2JqZWN0
ICh0aGUgbWFuYWdlcikgdGhhdCBpbXBsZW1lbnRzIHRoZSBCcm9rZXJDbGllbnQgaW50ZXJmYWNl
LCBhbmQKK211c3QgcHJvdmlkZSBhIGNsYXNzIGNvbnN0cnVjdG9yICh3aGljaCBub3JtYWxseSBz
dWJjbGFzc2VzIEFic3RyYWN0V29ya2VyKSBmb3IKK3RoZSB3b3JrZXJzLgogCiBUaGVyZSBhcmUg
YSBsb3Qgb2YgY2xhc3NlcyBhbmQgb2JqZWN0cyBpbnZvbHZlZCBpbiBhIGZ1bGx5IGNvbm5lY3Rl
ZCBzeXN0ZW0uCiBUaGV5IGludGVyYWN0IG1vcmUgb3IgbGVzcyBsaWtlOgogCi0gIE1hbmFnZXIg
IC0tPiAgX0lubGluZU1hbmFnZXIgLS0tPiBfSW5saW5lV29ya2VyIDwtPiBXb3JrZXIKKyAgTWFu
YWdlciAgLS0+ICBfTWFuYWdlckNvbm5lY3Rpb24gLS0tPiBfV29ya2VyQ29ubmVjdGlvbiA8LT4g
V29ya2VyCiAgICAgIF4gICAgICAgICAgICAgICAgICAgIFwgICAgICAgICAgICAgICAvICAgICAg
ICAgICAgICBeCiAgICAgIHwgICAgICAgICAgICAgICAgICAgICB2ICAgICAgICAgICAgIHYgICAg
ICAgICAgICAgICB8Ci0gICAgIFwtLS0tLS0tLS0tLS0tLS0tLS0tLSAgTWVzc2FnZUJyb2tlciAg
IC0tLS0tLS0tLS0tLS0vCisgICAgIFwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgIEJyb2tlciAg
IC0tLS0tLS0tLS0tLS0tLS0vCiAiIiIKIAoraW1wb3J0IGNQaWNrbGUKIGltcG9ydCBsb2dnaW5n
CiBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nCiBpbXBvcnQgb3B0cGFyc2UKIGltcG9ydCBRdWV1ZQog
aW1wb3J0IHN5cworaW1wb3J0IHRyYWNlYmFjawogCi0jIFRoZXNlIGFyZSBuZWVkZWQgd2hlbiB3
b3JrZXJzIGFyZSBsYXVuY2hlZCBpbiBuZXcgY2hpbGQgcHJvY2Vzc2VzLgotZnJvbSB3ZWJraXRw
eS5jb21tb24uaG9zdCBpbXBvcnQgSG9zdAotZnJvbSB3ZWJraXRweS5jb21tb24uaG9zdF9tb2Nr
IGltcG9ydCBNb2NrSG9zdAogCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5jb250cm9sbGVy
cyBpbXBvcnQgbWVzc2FnZV9icm9rZXIKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnZpZXdz
IGltcG9ydCBwcmludGluZworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogCiAK
LV9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKK2Zyb20gd2Via2l0cHkuY29tbW9u
LnN5c3RlbSBpbXBvcnQgc3RhY2tfdXRpbHMKIAogIwogIyBUb3BpYyBuYW1lcyBmb3IgTWFuYWdl
ciA8LT4gV29ya2VyIG1lc3NhZ2luZwogIwotTUFOQUdFUl9UT1BJQyA9ICdtYW5hZ2VycycKLUFO
WV9XT1JLRVJfVE9QSUMgPSAnd29ya2VycycKLQorX01BTkFHRVJfVE9QSUMgPSAnbWFuYWdlcnMn
CitfQU5ZX1dPUktFUl9UT1BJQyA9ICd3b3JrZXJzJwogCi1kZWYgcnVudGltZV9vcHRpb25zKCk6
Ci0gICAgIiIiUmV0dXJuIGEgbGlzdCBvZiBvcHRwYXJzZS5PcHRpb24gb2JqZWN0cyBmb3IgYW55
IHJ1bnRpbWUgdmFsdWVzIHVzZWQKLSAgICBieSB0aGlzIG1vZHVsZS4iIiIKLSAgICBvcHRpb25z
ID0gWwotICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS13b3JrZXItbW9kZWwiLCBhY3Rp
b249InN0b3JlIiwKLSAgICAgICAgICAgIGhlbHA9KCJjb250cm9scyB3b3JrZXIgbW9kZWwuIFZh
bGlkIHZhbHVlcyBhcmUgIgotICAgICAgICAgICAgIidpbmxpbmUnIGFuZCAncHJvY2Vzc2VzJy4i
KSksCi0gICAgXQotICAgIHJldHVybiBvcHRpb25zCiAKLQotZGVmIGdldChwb3J0LCBvcHRpb25z
LCBjbGllbnQsIHdvcmtlcl9jbGFzcyk6CitkZWYgZ2V0KHdvcmtlcl9tb2RlbCwgY2xpZW50LCB3
b3JrZXJfY2xhc3MpOgogICAgICIiIlJldHVybiBhIGNvbm5lY3Rpb24gdG8gYSBtYW5hZ2VyL3dv
cmtlciBtZXNzYWdlX2Jyb2tlcgogCiAgICAgQXJnczoKLSAgICAgICAgcG9ydCAtIGhhbmRsZSB0
byBsYXlvdXRfdGVzdHMvcG9ydCBvYmplY3QgZm9yIHBvcnQtc3BlY2lmaWMgc3R1ZmYKLSAgICAg
ICAgb3B0aW9ucyAtIG9wdHBhcnNlIGFyZ3VtZW50IGZvciBjb21tYW5kLWxpbmUgb3B0aW9ucwor
ICAgICAgICB3b3JrZXJfbW9kZWwgLSB0eXBlIG9mIHdvcmtlcnMgdG8gdXNlCiAgICAgICAgIGNs
aWVudCAtIG1lc3NhZ2VfYnJva2VyLkJyb2tlckNsaWVudCBpbXBsZW1lbnRhdGlvbiB0byBkaXNw
YXRjaAogICAgICAgICAgICAgcmVwbGllcyB0by4KLSAgICAgICAgd29ya2VyX2NsYXNzIC0gdHlw
ZSBvZiB3b3JrZXJzIHRvIGNyZWF0ZS4gVGhpcyBjbGFzcyBtdXN0IGltcGxlbWVudAorICAgICAg
ICB3b3JrZXJfY2xhc3MgLSB0eXBlIG9mIHdvcmtlcnMgdG8gY3JlYXRlLiBUaGlzIGNsYXNzIHNo
b3VsZCBvdmVycmlkZQogICAgICAgICAgICAgdGhlIG1ldGhvZHMgaW4gQWJzdHJhY3RXb3JrZXIu
CiAgICAgUmV0dXJuczoKICAgICAgICAgQSBoYW5kbGUgdG8gYW4gb2JqZWN0IHRoYXQgd2lsbCB0
YWxrIHRvIGEgbWVzc2FnZSBicm9rZXIgY29uZmlndXJlZAogICAgICAgICBmb3IgdGhlIG5vcm1h
bCBtYW5hZ2VyL3dvcmtlciBjb21tdW5pY2F0aW9uLgogICAgICIiIgotICAgIHdvcmtlcl9tb2Rl
bCA9IG9wdGlvbnMud29ya2VyX21vZGVsCiAgICAgaWYgd29ya2VyX21vZGVsID09ICdpbmxpbmUn
OgogICAgICAgICBxdWV1ZV9jbGFzcyA9IFF1ZXVlLlF1ZXVlCiAgICAgICAgIG1hbmFnZXJfY2xh
c3MgPSBfSW5saW5lTWFuYWdlcgpAQCAtOTksMTIgKzk0LDE0OCBAQCBkZWYgZ2V0KHBvcnQsIG9w
dGlvbnMsIGNsaWVudCwgd29ya2VyX2NsYXNzKToKICAgICBlbHNlOgogICAgICAgICByYWlzZSBW
YWx1ZUVycm9yKCJ1bnN1cHBvcnRlZCB2YWx1ZSBmb3IgLS13b3JrZXItbW9kZWw6ICVzIiAlIHdv
cmtlcl9tb2RlbCkKIAotICAgIGJyb2tlciA9IG1lc3NhZ2VfYnJva2VyLkJyb2tlcihvcHRpb25z
LCBxdWV1ZV9jbGFzcykKLSAgICByZXR1cm4gbWFuYWdlcl9jbGFzcyhicm9rZXIsIHBvcnQsIG9w
dGlvbnMsIGNsaWVudCwgd29ya2VyX2NsYXNzKQorICAgIGJyb2tlciA9IF9Ccm9rZXIocXVldWVf
Y2xhc3MpCisgICAgcmV0dXJuIG1hbmFnZXJfY2xhc3MoYnJva2VyLCBjbGllbnQsIHdvcmtlcl9j
bGFzcykKKworCitjbGFzcyBCcm9rZXJDbGllbnQob2JqZWN0KToKKyAgICAiIiJBYnN0cmFjdCBi
YXNlIGNsYXNzIC8gaW50ZXJmYWNlIHRoYXQgYWxsIG1lc3NhZ2UgYnJva2VyIGNsaWVudHMgbXVz
dAorICAgIGltcGxlbWVudC4gSW4gYWRkaXRpb24gdG8gdGhlIG1ldGhvZHMgYmVsb3csIGJ5IGNv
bnZlbnRpb24gY2xpZW50cworICAgIGltcGxlbWVudCByb3V0aW5lcyBvZiB0aGUgc2lnbmF0dXJl
IHR5cGUKKworICAgICAgICBoYW5kbGVfTUVTU0FHRV9OQU1FKHNlbGYsIHNyYywgLi4uKToKKwor
ICAgIHdoZXJlIE1FU1NBR0VfTkFNRSBtYXRjaGVzIHRoZSBzdHJpbmcgcGFzc2VkIHRvIHBvc3Rf
bWVzc2FnZSgpLCBhbmQKKyAgICBzcmMgaW5kaWNhdGVzIHRoZSBuYW1lIG9mIHRoZSBzZW5kZXIu
IElmIHRoZSBtZXNzYWdlIGNvbnRhaW5zIHZhbHVlcyBpbgorICAgIHRoZSBtZXNzYWdlIGJvZHks
IHRob3NlIHdpbGwgYmUgcHJvdmlkZWQgYXMgb3B0cGFyYW1zLiIiIgogCisgICAgZGVmIGlzX2Rv
bmUoc2VsZik6CisgICAgICAgICIiIkNhbGxlZCBmcm9tIGluc2lkZSBydW5fbWVzc2FnZV9sb29w
KCkgdG8gaW5kaWNhdGUgd2hldGhlciB0byBleGl0LiIiIgorICAgICAgICByYWlzZSBOb3RJbXBs
ZW1lbnRlZEVycm9yCisKKyAgICBkZWYgbmFtZShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIGEg
bmFtZSB0aGF0IGlkZW50aWZpZXMgdGhlIGNsaWVudC4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1w
bGVtZW50ZWRFcnJvcgorCisKK2NsYXNzIF9Ccm9rZXIob2JqZWN0KToKKyAgICAiIiJCcm9rZXJz
IHByb3ZpZGUgdGhlIGJhc2ljIG1vZGVsIG9mIGEgc2V0IG9mIHRvcGljcy4gQ2xpZW50cyBjYW4g
cG9zdCBhCisgICAgbWVzc2FnZSB0byBhbnkgdG9waWMgdXNpbmcgcG9zdF9tZXNzYWdlKCksIGFu
ZCBjYW4gcHJvY2VzcyBtZXNzYWdlcyBvbiBvbmUKKyAgICB0b3BpYyBhdCBhIHRpbWUgdXNpbmcg
cnVuX21lc3NhZ2VfbG9vcCgpLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHF1ZXVlX21h
a2VyKToKKyAgICAgICAgIiIiQXJnczoKKyAgICAgICAgICAgIHF1ZXVlX21ha2VyOiBhIGZhY3Rv
cnkgbWV0aG9kIHRoYXQgcmV0dXJucyBvYmplY3RzIGltcGxlbWVudGluZyBhCisgICAgICAgICAg
ICAgICAgUXVldWUgaW50ZXJmYWNlIChwdXQoKS9nZXQoKSkuCisgICAgICAgICIiIgorICAgICAg
ICBzZWxmLl9xdWV1ZV9tYWtlciA9IHF1ZXVlX21ha2VyCisgICAgICAgIHNlbGYuX3RvcGljcyA9
IHt9CisKKyAgICBkZWYgYWRkX3RvcGljKHNlbGYsIHRvcGljX25hbWUpOgorICAgICAgICBpZiB0
b3BpY19uYW1lIG5vdCBpbiBzZWxmLl90b3BpY3M6CisgICAgICAgICAgICBzZWxmLl90b3BpY3Nb
dG9waWNfbmFtZV0gPSBzZWxmLl9xdWV1ZV9tYWtlcigpCisKKyAgICBkZWYgX2dldF9xdWV1ZV9m
b3JfdG9waWMoc2VsZiwgdG9waWNfbmFtZSk6CisgICAgICAgIHJldHVybiBzZWxmLl90b3BpY3Nb
dG9waWNfbmFtZV0KKworICAgIGRlZiBwb3N0X21lc3NhZ2Uoc2VsZiwgY2xpZW50LCB0b3BpY19u
YW1lLCBtZXNzYWdlX25hbWUsICptZXNzYWdlX2FyZ3MpOgorICAgICAgICAiIiJQb3N0IGEgbWVz
c2FnZSB0byB0aGUgYXBwcm9wcmlhdGUgdG9waWMgbmFtZS4KKworICAgICAgICBNZXNzYWdlcyBo
YXZlIGEgbmFtZSBhbmQgYSB0dXBsZSBvZiBvcHRpb25hbCBhcmd1bWVudHMuIEJvdGggbXVzdCBi
ZSBwaWNrbGFibGUuIiIiCisgICAgICAgIG1lc3NhZ2UgPSBfTWVzc2FnZShjbGllbnQubmFtZSgp
LCB0b3BpY19uYW1lLCBtZXNzYWdlX25hbWUsIG1lc3NhZ2VfYXJncykKKyAgICAgICAgcXVldWUg
PSBzZWxmLl9nZXRfcXVldWVfZm9yX3RvcGljKHRvcGljX25hbWUpCisgICAgICAgIHF1ZXVlLnB1
dChfTWVzc2FnZS5kdW1wcyhtZXNzYWdlKSkKKworICAgIGRlZiBydW5fbWVzc2FnZV9sb29wKHNl
bGYsIHRvcGljX25hbWUsIGNsaWVudCwgZGVsYXlfc2Vjcz1Ob25lLCBpZGxlcj1Ob25lKToKKyAg
ICAgICAgIiIiTG9vcCBwcm9jZXNzaW5nIG1lc3NhZ2VzIHVudGlsIGNsaWVudC5pc19kb25lKCkg
b3IgZGVsYXkgcGFzc2VzLgorCisgICAgICAgIFRvIHJ1biBpbmRlZmluaXRlbHksIHNldCBkZWxh
eV9zZWNzIHRvIE5vbmUuIiIiCisgICAgICAgIGFzc2VydCBkZWxheV9zZWNzIGlzIE5vbmUgb3Ig
ZGVsYXlfc2VjcyA+IDAKKyAgICAgICAgc2VsZi5fcnVuX2xvb3AodG9waWNfbmFtZSwgY2xpZW50
LCBibG9jaz1UcnVlLCBkZWxheV9zZWNzPWRlbGF5X3NlY3MsIGlkbGVyPWlkbGVyKQorCisgICAg
ZGVmIHJ1bl9hbGxfcGVuZGluZyhzZWxmLCB0b3BpY19uYW1lLCBjbGllbnQsIGlkbGVyPU5vbmUp
OgorICAgICAgICAiIiJQcm9jZXNzIG1lc3NhZ2VzIHVudGlsIGNsaWVudC5pc19kb25lKCkgb3Ig
Y2FsbGVyIHdvdWxkIGJsb2NrLiIiIgorICAgICAgICBpZGxlciA9IGlkbGVyIG9yIChsYW1iZGE6
IE5vbmUpCisgICAgICAgIHNlbGYuX3J1bl9sb29wKHRvcGljX25hbWUsIGNsaWVudCwgYmxvY2s9
RmFsc2UsIGRlbGF5X3NlY3M9Tm9uZSwgaWRsZXI9aWRsZXIpCisKKyAgICBkZWYgX3J1bl9sb29w
KHNlbGYsIHRvcGljX25hbWUsIGNsaWVudCwgYmxvY2ssIGRlbGF5X3NlY3MsIGlkbGVyKToKKyAg
ICAgICAgcXVldWUgPSBzZWxmLl9nZXRfcXVldWVfZm9yX3RvcGljKHRvcGljX25hbWUpCisgICAg
ICAgIHdoaWxlIG5vdCBjbGllbnQuaXNfZG9uZSgpOgorICAgICAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgICAgIHMgPSBxdWV1ZS5nZXQoYmxvY2ssIGRlbGF5X3NlY3MpCisgICAgICAgICAgICBl
eGNlcHQgUXVldWUuRW1wdHk6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBt
c2cgPSBfTWVzc2FnZS5sb2FkcyhzKQorICAgICAgICAgICAgc2VsZi5fZGlzcGF0Y2hfbWVzc2Fn
ZShtc2csIGNsaWVudCkKKyAgICAgICAgICAgIGlkbGVyKCkKKworICAgIGRlZiBfZGlzcGF0Y2hf
bWVzc2FnZShzZWxmLCBtZXNzYWdlLCBjbGllbnQpOgorICAgICAgICBpZiBub3QgaGFzYXR0cihj
bGllbnQsICdoYW5kbGVfJyArIG1lc3NhZ2UubmFtZSk6CisgICAgICAgICAgICByYWlzZSBWYWx1
ZUVycm9yKAorICAgICAgICAgICAgICAgIiVzOiByZWNlaXZlZCBtZXNzYWdlICclcycgaXQgY291
bGRuJ3QgaGFuZGxlIiAlCisgICAgICAgICAgICAgICAoY2xpZW50Lm5hbWUoKSwgbWVzc2FnZS5u
YW1lKSkKKyAgICAgICAgb3B0YXJncyA9IG1lc3NhZ2UuYXJncworICAgICAgICBtZXNzYWdlX2hh
bmRsZXIgPSBnZXRhdHRyKGNsaWVudCwgJ2hhbmRsZV8nICsgbWVzc2FnZS5uYW1lKQorICAgICAg
ICBtZXNzYWdlX2hhbmRsZXIobWVzc2FnZS5zcmMsICpvcHRhcmdzKQorCisKK2NsYXNzIF9NZXNz
YWdlKG9iamVjdCk6CisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBsb2FkcyhzdHJpbmdfdmFs
dWUpOgorICAgICAgICBvYmogPSBjUGlja2xlLmxvYWRzKHN0cmluZ192YWx1ZSkKKyAgICAgICAg
YXNzZXJ0KGlzaW5zdGFuY2Uob2JqLCBfTWVzc2FnZSkpCisgICAgICAgIHJldHVybiBvYmoKKwor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzcmMsIHRvcGljX25hbWUsIG1lc3NhZ2VfbmFtZSwgbWVz
c2FnZV9hcmdzKToKKyAgICAgICAgc2VsZi5zcmMgPSBzcmMKKyAgICAgICAgc2VsZi50b3BpY19u
YW1lID0gdG9waWNfbmFtZQorICAgICAgICBzZWxmLm5hbWUgPSBtZXNzYWdlX25hbWUKKyAgICAg
ICAgc2VsZi5hcmdzID0gbWVzc2FnZV9hcmdzCisKKyAgICBkZWYgZHVtcHMoc2VsZik6CisgICAg
ICAgIHJldHVybiBjUGlja2xlLmR1bXBzKHNlbGYpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6
CisgICAgICAgIHJldHVybiAoIl9NZXNzYWdlKGZyb209JyVzJywgdG9waWNfbmFtZT0nJXMnLCBt
ZXNzYWdlX25hbWU9JyVzJykiICUKKyAgICAgICAgICAgICAgICAoc2VsZi5zcmMsIHNlbGYudG9w
aWNfbmFtZSwgc2VsZi5uYW1lKSkKKworCitjbGFzcyBfQnJva2VyQ29ubmVjdGlvbihvYmplY3Qp
OgorICAgICIiIkJyb2tlckNvbm5lY3Rpb24gcHJvdmlkZXMgYSBjb25uZWN0aW9uLW9yaWVudGVk
IGZhY2FkZSBvbiB0b3Agb2YgYQorICAgIEJyb2tlciwgc28gdGhhdCBjYWxsZXJzIGRvbid0IGhh
dmUgdG8gcmVwZWF0ZWRseSBwYXNzIHRoZSBzYW1lIHRvcGljCisgICAgbmFtZXMgb3ZlciBhbmQg
b3Zlci4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXIsIGNsaWVudCwgcnVuX3Rv
cGljLCBwb3N0X3RvcGljKToKKyAgICAgICAgIiIiQ3JlYXRlIGEgX0Jyb2tlckNvbm5lY3Rpb24g
b24gdG9wIG9mIGEgQnJva2VyLiBOb3RlIHRoYXQgdGhlIF9Ccm9rZXIKKyAgICAgICAgaXMgcGFz
c2VkIGluIHJhdGhlciB0aGFuIGNyZWF0ZWQgc28gdGhhdCBhIHNpbmdsZSBfQnJva2VyIGNhbiBi
ZSB1c2VkCisgICAgICAgIGJ5IG11bHRpcGxlIF9Ccm9rZXJDb25uZWN0aW9ucy4iIiIKKyAgICAg
ICAgc2VsZi5fYnJva2VyID0gYnJva2VyCisgICAgICAgIHNlbGYuX2NsaWVudCA9IGNsaWVudAor
ICAgICAgICBzZWxmLl9wb3N0X3RvcGljID0gcG9zdF90b3BpYworICAgICAgICBzZWxmLl9ydW5f
dG9waWMgPSBydW5fdG9waWMKKyAgICAgICAgYnJva2VyLmFkZF90b3BpYyhydW5fdG9waWMpCisg
ICAgICAgIGJyb2tlci5hZGRfdG9waWMocG9zdF90b3BpYykKKworICAgIGRlZiBydW5fbWVzc2Fn
ZV9sb29wKHNlbGYsIGRlbGF5X3NlY3M9Tm9uZSk6CisgICAgICAgIHNlbGYuX2Jyb2tlci5ydW5f
bWVzc2FnZV9sb29wKHNlbGYuX3J1bl90b3BpYywgc2VsZi5fY2xpZW50LCBkZWxheV9zZWNzLCBz
ZWxmLnlpZWxkX3RvX2Jyb2tlcikKIAotY2xhc3MgQWJzdHJhY3RXb3JrZXIobWVzc2FnZV9icm9r
ZXIuQnJva2VyQ2xpZW50KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgd29ya2VyX2Nvbm5lY3Rp
b24sIHdvcmtlcl9udW1iZXIsIHJlc3VsdHNfZGlyZWN0b3J5LCBvcHRpb25zKToKKyAgICBkZWYg
eWllbGRfdG9fYnJva2VyKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgcG9zdF9tZXNz
YWdlKHNlbGYsIG1lc3NhZ2VfbmFtZSwgKm1lc3NhZ2VfYXJncyk6CisgICAgICAgIHNlbGYuX2Jy
b2tlci5wb3N0X21lc3NhZ2Uoc2VsZi5fY2xpZW50LCBzZWxmLl9wb3N0X3RvcGljLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VfbmFtZSwgKm1lc3NhZ2VfYXJncykK
KworICAgIGRlZiByYWlzZV9leGNlcHRpb24oc2VsZiwgZXhjX2luZm8pOgorICAgICAgICAjIFNp
bmNlIHRyYWNlYmFja3MgYXJlbid0IHBpY2tsYWJsZSwgc2VuZCB0aGUgZXh0cmFjdGVkIHN0YWNr
IGluc3RlYWQuCisgICAgICAgIGV4Y2VwdGlvbl90eXBlLCBleGNlcHRpb25fdmFsdWUsIGV4Y2Vw
dGlvbl90cmFjZWJhY2sgPSBzeXMuZXhjX2luZm8oKQorICAgICAgICBzdGFja191dGlscy5sb2df
dHJhY2ViYWNrKF9sb2cuZGVidWcsIGV4Y2VwdGlvbl90cmFjZWJhY2spCisgICAgICAgIHN0YWNr
ID0gdHJhY2ViYWNrLmV4dHJhY3RfdGIoZXhjZXB0aW9uX3RyYWNlYmFjaykKKyAgICAgICAgc2Vs
Zi5fYnJva2VyLnBvc3RfbWVzc2FnZShzZWxmLl9jbGllbnQsIHNlbGYuX3Bvc3RfdG9waWMsICdl
eGNlcHRpb24nLCBleGNlcHRpb25fdHlwZSwgZXhjZXB0aW9uX3ZhbHVlLCBzdGFjaykKKworCitj
bGFzcyBBYnN0cmFjdFdvcmtlcihCcm9rZXJDbGllbnQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxm
LCB3b3JrZXJfY29ubmVjdGlvbiwgd29ya2VyX251bWJlcik6CiAgICAgICAgICIiIlRoZSBjb25z
dHJ1Y3RvciBzaG91bGQgYmUgdXNlZCB0byBkbyBhbnkgc2ltcGxlIGluaXRpYWxpemF0aW9uCiAg
ICAgICAgIG5lY2Vzc2FyeSwgYnV0IHNob3VsZCBub3QgZG8gYW55dGhpbmcgdGhhdCBjcmVhdGVz
IGRhdGEgc3RydWN0dXJlcwogICAgICAgICB0aGF0IGNhbm5vdCBiZSBQaWNrbGVkIG9yIHNlbnQg
YWNyb3NzIHByb2Nlc3NlcyAobGlrZSBvcGVuaW5nCkBAIC0xMTQsODYgKzI0NSwxMDMgQEAgY2xh
c3MgQWJzdHJhY3RXb3JrZXIobWVzc2FnZV9icm9rZXIuQnJva2VyQ2xpZW50KToKICAgICAgICAg
QXJnczoKICAgICAgICAgICAgIHdvcmtlcl9jb25uZWN0aW9uIC0gaGFuZGxlIHRvIHRoZSBCcm9r
ZXJDb25uZWN0aW9uIG9iamVjdCBjcmVhdGluZwogICAgICAgICAgICAgICAgIHRoZSB3b3JrZXIg
YW5kIHRoYXQgY2FuIGJlIHVzZWQgZm9yIG1lc3NhZ2luZy4KLSAgICAgICAgICAgIHdvcmtlcl9u
dW1iZXIgLSBpZGVudGlmaWVyIGZvciB0aGlzIHBhcnRpY3VsYXIgd29ya2VyCi0gICAgICAgICAg
ICBvcHRpb25zIC0gY29tbWFuZC1saW5lIGFyZ3VtZW50IG9iamVjdCBmcm9tIG9wdHBhcnNlIiIi
Ci0gICAgICAgIG1lc3NhZ2VfYnJva2VyLkJyb2tlckNsaWVudC5fX2luaXRfXyhzZWxmKQorICAg
ICAgICAgICAgd29ya2VyX251bWJlciAtIGlkZW50aWZpZXIgZm9yIHRoaXMgcGFydGljdWxhciB3
b3JrZXIiIiIKKyAgICAgICAgQnJva2VyQ2xpZW50Ll9faW5pdF9fKHNlbGYpCiAgICAgICAgIHNl
bGYuX3dvcmtlcl9jb25uZWN0aW9uID0gd29ya2VyX2Nvbm5lY3Rpb24KLSAgICAgICAgc2VsZi5f
b3B0aW9ucyA9IG9wdGlvbnMKICAgICAgICAgc2VsZi5fd29ya2VyX251bWJlciA9IHdvcmtlcl9u
dW1iZXIKICAgICAgICAgc2VsZi5fbmFtZSA9ICd3b3JrZXIvJWQnICUgd29ya2VyX251bWJlcgot
ICAgICAgICBzZWxmLl9yZXN1bHRzX2RpcmVjdG9yeSA9IHJlc3VsdHNfZGlyZWN0b3J5CisgICAg
ICAgIHNlbGYuX2NhbmNlbGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5fZG9uZSA9IEZhbHNlCisK
KyAgICBkZWYgbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX25hbWUKIAotICAgIGRl
ZiBydW4oc2VsZiwgcG9ydCk6CisgICAgZGVmIHN0b3BfaGFuZGxpbmdfbWVzc2FnZXMoc2VsZik6
CisgICAgICAgIHNlbGYuX2RvbmUgPSBUcnVlCisKKyAgICBkZWYgcnVuKHNlbGYsIHBvcnQ9Tm9u
ZSk6CiAgICAgICAgICIiIkNhbGxiYWNrIGZvciB0aGUgd29ya2VyIHRvIHN0YXJ0IGV4ZWN1dGlu
Zy4gVHlwaWNhbGx5IGRvZXMgYW55CiAgICAgICAgIHJlbWFpbmluZyBpbml0aWFsaXphdGlvbiBh
bmQgdGhlbiBjYWxscyBicm9rZXJfY29ubmVjdGlvbi5ydW5fbWVzc2FnZV9sb29wKCkuIiIiCi0g
ICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKyAgICAgICAgZXhjZXB0aW9uX21zZyA9
ICcnCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3dvcmtlcl9jb25uZWN0aW9uLnJ1
bl9tZXNzYWdlX2xvb3AoKQorICAgICAgICAgICAgaWYgbm90IHNlbGYuaXNfZG9uZSgpOgorICAg
ICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCIlczogcmFuIG91dCBvZiBtZXNzYWdl
cyBpbiB3b3JrZXIgcXVldWUuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICUgc2VsZi5fbmFtZSkKKyAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAg
ICAgICAgZXhjZXB0aW9uX21zZyA9ICIsIGludGVycnVwdGVkIgorICAgICAgICAgICAgc2VsZi5f
d29ya2VyX2Nvbm5lY3Rpb24ucmFpc2VfZXhjZXB0aW9uKHN5cy5leGNfaW5mbygpKQorICAgICAg
ICBleGNlcHQ6CisgICAgICAgICAgICBleGNlcHRpb25fbXNnID0gIiwgZXhjZXB0aW9uIHJhaXNl
ZCIKKyAgICAgICAgICAgIHNlbGYuX3dvcmtlcl9jb25uZWN0aW9uLnJhaXNlX2V4Y2VwdGlvbihz
eXMuZXhjX2luZm8oKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIF9sb2cuZGVidWco
IiVzIGRvbmUgd2l0aCBtZXNzYWdlIGxvb3AlcyIgJSAoc2VsZi5fbmFtZSwgZXhjZXB0aW9uX21z
ZykpCisKKyAgICBkZWYgaXNfZG9uZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2RvbmUg
b3Igc2VsZi5fY2FuY2VsZWQKIAogICAgIGRlZiBjYW5jZWwoc2VsZik6CiAgICAgICAgICIiIkNh
bGxlZCB3aGVuIHBvc3NpYmxlIHRvIGluZGljYXRlIHRvIHRoZSB3b3JrZXIgdG8gc3RvcCBwcm9j
ZXNzaW5nCiAgICAgICAgIG1lc3NhZ2VzIGFuZCBzaHV0IGRvd24uIE5vdGUgdGhhdCB3b3JrZXJz
IG1heSBiZSBzdG9wcGVkIHdpdGhvdXQgdGhpcwogICAgICAgICBtZXRob2QgYmVpbmcgY2FsbGVk
LCBzbyBjbGllbnRzIHNob3VsZCBub3QgcmVseSBzb2xlbHkgb24gdGhpcy4iIiIKLSAgICAgICAg
cmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorICAgICAgICBzZWxmLl9jYW5jZWxlZCA9IFRydWUK
IAogCi1jbGFzcyBfTWFuYWdlckNvbm5lY3Rpb24obWVzc2FnZV9icm9rZXIuQnJva2VyQ29ubmVj
dGlvbik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb2tlciwgb3B0aW9ucywgY2xpZW50LCB3
b3JrZXJfY2xhc3MpOgorY2xhc3MgX01hbmFnZXJDb25uZWN0aW9uKF9Ccm9rZXJDb25uZWN0aW9u
KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCBjbGllbnQsIHdvcmtlcl9jbGFzcyk6
CiAgICAgICAgICIiIkJhc2UgaW5pdGlhbGl6YXRpb24gZm9yIGFsbCBNYW5hZ2VyIG9iamVjdHMu
CiAKICAgICAgICAgQXJnczoKICAgICAgICAgICAgIGJyb2tlcjogaGFuZGxlIHRvIHRoZSBtZXNz
YWdlX2Jyb2tlciBvYmplY3QKLSAgICAgICAgICAgIG9wdGlvbnM6IGNvbW1hbmQgbGluZSBvcHRp
b25zIG9iamVjdAogICAgICAgICAgICAgY2xpZW50OiBjYWxsYmFjayBvYmplY3QgKHRoZSBjYWxs
ZXIpCiAgICAgICAgICAgICB3b3JrZXJfY2xhc3M6IGNsYXNzIG9iamVjdCB0byB1c2UgdG8gY3Jl
YXRlIHdvcmtlcnMuCiAgICAgICAgICIiIgotICAgICAgICBtZXNzYWdlX2Jyb2tlci5Ccm9rZXJD
b25uZWN0aW9uLl9faW5pdF9fKHNlbGYsIGJyb2tlciwgY2xpZW50LAotICAgICAgICAgICAgTUFO
QUdFUl9UT1BJQywgQU5ZX1dPUktFUl9UT1BJQykKLSAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9w
dGlvbnMKKyAgICAgICAgX0Jyb2tlckNvbm5lY3Rpb24uX19pbml0X18oc2VsZiwgYnJva2VyLCBj
bGllbnQsIF9NQU5BR0VSX1RPUElDLCBfQU5ZX1dPUktFUl9UT1BJQykKICAgICAgICAgc2VsZi5f
d29ya2VyX2NsYXNzID0gd29ya2VyX2NsYXNzCiAKLSAgICBkZWYgc3RhcnRfd29ya2VyKHNlbGYs
IHdvcmtlcl9udW1iZXIsIHJlc3VsdHNfZGlyZWN0b3J5KToKKyAgICBkZWYgc3RhcnRfd29ya2Vy
KHNlbGYsIHdvcmtlcl9udW1iZXIsICoqd29ya2VyX2FyZ3MpOgogICAgICAgICByYWlzZSBOb3RJ
bXBsZW1lbnRlZEVycm9yCiAKIAogY2xhc3MgX0lubGluZU1hbmFnZXIoX01hbmFnZXJDb25uZWN0
aW9uKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCBwb3J0LCBvcHRpb25zLCBjbGll
bnQsIHdvcmtlcl9jbGFzcyk6Ci0gICAgICAgIF9NYW5hZ2VyQ29ubmVjdGlvbi5fX2luaXRfXyhz
ZWxmLCBicm9rZXIsIG9wdGlvbnMsIGNsaWVudCwgd29ya2VyX2NsYXNzKQotICAgICAgICBzZWxm
Ll9wb3J0ID0gcG9ydAorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXIsIGNsaWVudCwgd29y
a2VyX2NsYXNzKToKKyAgICAgICAgX01hbmFnZXJDb25uZWN0aW9uLl9faW5pdF9fKHNlbGYsIGJy
b2tlciwgY2xpZW50LCB3b3JrZXJfY2xhc3MpCiAgICAgICAgIHNlbGYuX2lubGluZV93b3JrZXIg
PSBOb25lCiAKLSAgICBkZWYgc3RhcnRfd29ya2VyKHNlbGYsIHdvcmtlcl9udW1iZXIsIHJlc3Vs
dHNfZGlyZWN0b3J5KToKLSAgICAgICAgc2VsZi5faW5saW5lX3dvcmtlciA9IF9JbmxpbmVXb3Jr
ZXJDb25uZWN0aW9uKHNlbGYuX2Jyb2tlciwgc2VsZi5fcG9ydCwKLSAgICAgICAgICAgIHNlbGYu
X2NsaWVudCwgc2VsZi5fd29ya2VyX2NsYXNzLCB3b3JrZXJfbnVtYmVyLCByZXN1bHRzX2RpcmVj
dG9yeSwgc2VsZi5fb3B0aW9ucykKKyAgICAjIEZJWE1FOiBXZSBpbmNsdWRlIHRoZSAncG9ydCcg
c28gdGhhdCB3ZSBjYW4gc2hhcmUgYSBzaW5nbGUgcG9ydCBvYmplY3QKKyAgICAjIGJldHdlZW4g
bWFuYWdlciBhbmQgd29ya2VyIGZvciB0aGUgdGVzdHMgaW4gcnVuX3dlYmtpdF90ZXN0c19pbnRl
Z3JhdGlvbnRlc3QuCisgICAgIyBUaGVzZSB0ZXN0cyBzaG91bGQgbm90IGJlIGFsbG93ZWQgdG8g
ZG8gdGhhdCBhbmQgbmVlZCB0byBiZSBmaXhlZCAoYnVnIDc4MTY4KS4KKyAgICBkZWYgc3RhcnRf
d29ya2VyKHNlbGYsIHdvcmtlcl9udW1iZXIsIHBvcnQ9Tm9uZSwgKip3b3JrZXJfYXJncyk6Cisg
ICAgICAgIHNlbGYuX2lubGluZV93b3JrZXIgPSBfSW5saW5lV29ya2VyQ29ubmVjdGlvbihzZWxm
Ll9icm9rZXIsCisgICAgICAgICAgICBzZWxmLl9jbGllbnQsIHNlbGYuX3dvcmtlcl9jbGFzcywg
d29ya2VyX251bWJlciwgcG9ydCwgKip3b3JrZXJfYXJncykKKwogICAgICAgICByZXR1cm4gc2Vs
Zi5faW5saW5lX3dvcmtlcgogCiAgICAgZGVmIHJ1bl9tZXNzYWdlX2xvb3Aoc2VsZiwgZGVsYXlf
c2Vjcz1Ob25lKToKICAgICAgICAgIyBOb3RlIHRoYXQgZGVsYXlfc2VjcyBpcyBpZ25vcmVkIGlu
IHRoaXMgY2FzZSBzaW5jZSB3ZSBjYW4ndCBlYXNpbHkKICAgICAgICAgIyBpbXBsZW1lbnQgaXQu
CiAgICAgICAgIHNlbGYuX2lubGluZV93b3JrZXIucnVuKCkKLSAgICAgICAgc2VsZi5fYnJva2Vy
LnJ1bl9hbGxfcGVuZGluZyhNQU5BR0VSX1RPUElDLCBzZWxmLl9jbGllbnQpCisgICAgICAgIHNl
bGYuX2Jyb2tlci5ydW5fYWxsX3BlbmRpbmcoX01BTkFHRVJfVE9QSUMsIHNlbGYuX2NsaWVudCkK
IAogCiBjbGFzcyBfTXVsdGlQcm9jZXNzTWFuYWdlcihfTWFuYWdlckNvbm5lY3Rpb24pOgotICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXIsIHBvcnQsIG9wdGlvbnMsIGNsaWVudCwgd29ya2Vy
X2NsYXNzKToKLSAgICAgICAgIyBOb3RlIHRoYXQgdGhpcyBjbGFzcyBkb2VzIG5vdCBrZWVwIGEg
aGFuZGxlIHRvIHRoZSBhY3R1YWwgcG9ydAotICAgICAgICAjIG9iamVjdCwgYmVjYXVzZSBpdCBp
c24ndCBQaWNrbGFibGUuIEluc3RlYWQgaXQga2VlcHMgdGhlIHBvcnQKLSAgICAgICAgIyBuYW1l
IGFuZCByZWNyZWF0ZXMgdGhlIHBvcnQgaW4gdGhlIGNoaWxkIHByb2Nlc3MgZnJvbSB0aGUgbmFt
ZQotICAgICAgICAjIGFuZCBvcHRpb25zLgotICAgICAgICBfTWFuYWdlckNvbm5lY3Rpb24uX19p
bml0X18oc2VsZiwgYnJva2VyLCBvcHRpb25zLCBjbGllbnQsIHdvcmtlcl9jbGFzcykKLSAgICAg
ICAgc2VsZi5fcGxhdGZvcm1fbmFtZSA9IHBvcnQucmVhbF9uYW1lKCkKLQotICAgIGRlZiBzdGFy
dF93b3JrZXIoc2VsZiwgd29ya2VyX251bWJlciwgcmVzdWx0c19kaXJlY3RvcnkpOgotICAgICAg
ICB3b3JrZXJfY29ubmVjdGlvbiA9IF9NdWx0aVByb2Nlc3NXb3JrZXJDb25uZWN0aW9uKHNlbGYu
X2Jyb2tlciwgc2VsZi5fcGxhdGZvcm1fbmFtZSwKLSAgICAgICAgICAgIHNlbGYuX3dvcmtlcl9j
bGFzcywgd29ya2VyX251bWJlciwgcmVzdWx0c19kaXJlY3RvcnksIHNlbGYuX29wdGlvbnMpCisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb2tlciwgY2xpZW50LCB3b3JrZXJfY2xhc3MpOgorICAg
ICAgICBfTWFuYWdlckNvbm5lY3Rpb24uX19pbml0X18oc2VsZiwgYnJva2VyLCBjbGllbnQsIHdv
cmtlcl9jbGFzcykKKworICAgIGRlZiBzdGFydF93b3JrZXIoc2VsZiwgd29ya2VyX251bWJlciwg
cG9ydD1Ob25lLCAqKndvcmtlcl9hcmdzKToKKyAgICAgICAgIyBXZSBkb24ndCBzdG9yZSB0aGUg
cG9ydCBiZWNhdXNlIHdvcmtlcnMgcnVuIGluIHNlcGFyYXRlIHByb2Nlc3NlcyBhbmQKKyAgICAg
ICAgIyB3ZSBjYW4ndCByZXF1aXJlIHRoZSBwYXJlbnQncyBwb3J0IHRvIGJlIHBpY2tsZWFibGUg
YW5kIHNoYXJlZCB3aXRoIHRoZSBjaGlsZC4KKyAgICAgICAgd29ya2VyX2Nvbm5lY3Rpb24gPSBf
TXVsdGlQcm9jZXNzV29ya2VyQ29ubmVjdGlvbihzZWxmLl9icm9rZXIsCisgICAgICAgICAgICBz
ZWxmLl93b3JrZXJfY2xhc3MsIHdvcmtlcl9udW1iZXIsICoqd29ya2VyX2FyZ3MpCiAgICAgICAg
IHdvcmtlcl9jb25uZWN0aW9uLnN0YXJ0KCkKICAgICAgICAgcmV0dXJuIHdvcmtlcl9jb25uZWN0
aW9uCiAKIAotY2xhc3MgX1dvcmtlckNvbm5lY3Rpb24obWVzc2FnZV9icm9rZXIuQnJva2VyQ29u
bmVjdGlvbik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb2tlciwgd29ya2VyX2NsYXNzLCB3
b3JrZXJfbnVtYmVyLCByZXN1bHRzX2RpcmVjdG9yeSwgb3B0aW9ucyk6Ci0gICAgICAgIHNlbGYu
X2NsaWVudCA9IHdvcmtlcl9jbGFzcyhzZWxmLCB3b3JrZXJfbnVtYmVyLCByZXN1bHRzX2RpcmVj
dG9yeSwgb3B0aW9ucykKK2NsYXNzIF9Xb3JrZXJDb25uZWN0aW9uKF9Ccm9rZXJDb25uZWN0aW9u
KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCB3b3JrZXJfY2xhc3MsIHdvcmtlcl9u
dW1iZXIsICoqd29ya2VyX2FyZ3MpOgorICAgICAgICBzZWxmLl9jbGllbnQgPSB3b3JrZXJfY2xh
c3Moc2VsZiwgd29ya2VyX251bWJlciwgKip3b3JrZXJfYXJncykKICAgICAgICAgc2VsZi5uYW1l
ID0gc2VsZi5fY2xpZW50Lm5hbWUoKQotICAgICAgICBtZXNzYWdlX2Jyb2tlci5Ccm9rZXJDb25u
ZWN0aW9uLl9faW5pdF9fKHNlbGYsIGJyb2tlciwgc2VsZi5fY2xpZW50LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFOWV9XT1JLRVJfVE9QSUMsIE1B
TkFHRVJfVE9QSUMpCisgICAgICAgIF9Ccm9rZXJDb25uZWN0aW9uLl9faW5pdF9fKHNlbGYsIGJy
b2tlciwgc2VsZi5fY2xpZW50LCBfQU5ZX1dPUktFUl9UT1BJQywgX01BTkFHRVJfVE9QSUMpCiAK
ICAgICBkZWYgY2FuY2VsKHNlbGYpOgogICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9y
CkBAIC0yMDQsMTUgKzM1MiwxNCBAQCBjbGFzcyBfV29ya2VyQ29ubmVjdGlvbihtZXNzYWdlX2Jy
b2tlci5Ccm9rZXJDb25uZWN0aW9uKToKICAgICBkZWYgam9pbihzZWxmLCB0aW1lb3V0KToKICAg
ICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgogCi0gICAgZGVmIHlpZWxkX3RvX2Jyb2tl
cihzZWxmKToKLSAgICAgICAgcGFzcwotCiAKIGNsYXNzIF9JbmxpbmVXb3JrZXJDb25uZWN0aW9u
KF9Xb3JrZXJDb25uZWN0aW9uKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCBwb3J0
LCBtYW5hZ2VyX2NsaWVudCwgd29ya2VyX2NsYXNzLCB3b3JrZXJfbnVtYmVyLCByZXN1bHRzX2Rp
cmVjdG9yeSwgb3B0aW9ucyk6Ci0gICAgICAgIF9Xb3JrZXJDb25uZWN0aW9uLl9faW5pdF9fKHNl
bGYsIGJyb2tlciwgd29ya2VyX2NsYXNzLCB3b3JrZXJfbnVtYmVyLCByZXN1bHRzX2RpcmVjdG9y
eSwgb3B0aW9ucykKLSAgICAgICAgc2VsZi5fYWxpdmUgPSBGYWxzZQorICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBicm9rZXIsIG1hbmFnZXJfY2xpZW50LCB3b3JrZXJfY2xhc3MsIHdvcmtlcl9udW1i
ZXIsIHBvcnQsICoqd29ya2VyX2FyZ3MpOgorICAgICAgICBfV29ya2VyQ29ubmVjdGlvbi5fX2lu
aXRfXyhzZWxmLCBicm9rZXIsIHdvcmtlcl9jbGFzcywgd29ya2VyX251bWJlciwgKip3b3JrZXJf
YXJncykKKworICAgICAgICAjIFNlZSBjb21tZW50IGluIElubGluZVdvcmtlckJyb2tlci5zdGFy
dF93b3JrZXIoKSBmb3Igd2h5IHdlIGhhdmUgcG9ydCBoZXJlLgogICAgICAgICBzZWxmLl9wb3J0
ID0gcG9ydAorICAgICAgICBzZWxmLl9hbGl2ZSA9IEZhbHNlCiAgICAgICAgIHNlbGYuX21hbmFn
ZXJfY2xpZW50ID0gbWFuYWdlcl9jbGllbnQKIAogICAgIGRlZiBjYW5jZWwoc2VsZik6CkBAIC0y
MzAsNyArMzc3LDcgQEAgY2xhc3MgX0lubGluZVdvcmtlckNvbm5lY3Rpb24oX1dvcmtlckNvbm5l
Y3Rpb24pOgogICAgICAgICBzZWxmLl9hbGl2ZSA9IEZhbHNlCiAKICAgICBkZWYgeWllbGRfdG9f
YnJva2VyKHNlbGYpOgotICAgICAgICBzZWxmLl9icm9rZXIucnVuX2FsbF9wZW5kaW5nKE1BTkFH
RVJfVE9QSUMsIHNlbGYuX21hbmFnZXJfY2xpZW50KQorICAgICAgICBzZWxmLl9icm9rZXIucnVu
X2FsbF9wZW5kaW5nKF9NQU5BR0VSX1RPUElDLCBzZWxmLl9tYW5hZ2VyX2NsaWVudCkKIAogICAg
IGRlZiByYWlzZV9leGNlcHRpb24oc2VsZiwgZXhjX2luZm8pOgogICAgICAgICAjIFNpbmNlIHRo
ZSB3b3JrZXIgaXMgaW4gdGhlIHNhbWUgcHJvY2VzcyBhcyB0aGUgbWFuYWdlciwgd2UgY2FuCkBA
IC0yNDAsNDMgKzM4NywxOSBAQCBjbGFzcyBfSW5saW5lV29ya2VyQ29ubmVjdGlvbihfV29ya2Vy
Q29ubmVjdGlvbik6CiAKIAogY2xhc3MgX1Byb2Nlc3MobXVsdGlwcm9jZXNzaW5nLlByb2Nlc3Mp
OgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3b3JrZXJfY29ubmVjdGlvbiwgcGxhdGZvcm1fbmFt
ZSwgb3B0aW9ucywgY2xpZW50KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd29ya2VyX2Nvbm5l
Y3Rpb24sIGNsaWVudCk6CiAgICAgICAgIG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzLl9faW5pdF9f
KHNlbGYpCiAgICAgICAgIHNlbGYuX3dvcmtlcl9jb25uZWN0aW9uID0gd29ya2VyX2Nvbm5lY3Rp
b24KLSAgICAgICAgc2VsZi5fcGxhdGZvcm1fbmFtZSA9IHBsYXRmb3JtX25hbWUKLSAgICAgICAg
c2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKICAgICAgICAgc2VsZi5fY2xpZW50ID0gY2xpZW50CiAK
ICAgICBkZWYgcnVuKHNlbGYpOgotICAgICAgICAjIFdlIG5lZWQgdG8gY3JlYXRlIGEgbmV3IEhv
c3Qgb2JqZWN0IGhlcmUgYmVjYXVzZSB0aGlzIGlzCi0gICAgICAgICMgcnVubmluZyBpbiBhIG5l
dyBwcm9jZXNzIGFuZCB3ZSBjYW4ndCByZXF1aXJlIHRoZSBwYXJlbnQncwotICAgICAgICAjIEhv
c3QgdG8gYmUgcGlja2xlYWJsZSBhbmQgcGFzc2VkIHRvIHRoZSBjaGlsZC4KLSAgICAgICAgaWYg
c2VsZi5fcGxhdGZvcm1fbmFtZS5zdGFydHN3aXRoKCd0ZXN0Jyk6Ci0gICAgICAgICAgICBob3N0
ID0gTW9ja0hvc3QoKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgaG9zdCA9IEhvc3QoKQot
ICAgICAgICBob3N0Ll9pbml0aWFsaXplX3NjbSgpCi0KLSAgICAgICAgb3B0aW9ucyA9IHNlbGYu
X29wdGlvbnMKLSAgICAgICAgcG9ydF9vYmogPSBob3N0LnBvcnRfZmFjdG9yeS5nZXQoc2VsZi5f
cGxhdGZvcm1fbmFtZSwgb3B0aW9ucykKLQotICAgICAgICAjIFRoZSB1bml4IG11bHRpcHJvY2Vz
c2luZyBpbXBsZW1lbnRhdGlvbiBjbG9uZXMgdGhlCi0gICAgICAgICMgbG9nIGhhbmRsZXIgY29u
ZmlndXJhdGlvbiBpbnRvIHRoZSBjaGlsZCBwcm9jZXNzZXMsCi0gICAgICAgICMgYnV0IHRoZSB3
aW4gaW1wbGVtZW50YXRpb24gZG9lc24ndC4KLSAgICAgICAgY29uZmlndXJlX2xvZ2dpbmcgPSAo
c3lzLnBsYXRmb3JtID09ICd3aW4zMicpCi0KLSAgICAgICAgIyBGSVhNRTogdGhpcyB3b24ndCB3
b3JrIGlmIHRoZSBjYWxsaW5nIHByb2Nlc3MgaXMgbG9nZ2luZwotICAgICAgICAjIHNvbWV3aGVy
ZSBvdGhlciB0aGFuIHN5cy5zdGRlcnIgYW5kIHN5cy5zdGRvdXQsIGJ1dCBJJ20gbm90IHN1cmUK
LSAgICAgICAgIyBpZiB0aGlzIHdpbGwgYmUgYW4gaXNzdWUgaW4gcHJhY3RpY2UuCi0gICAgICAg
IHByaW50ZXIgPSBwcmludGluZy5QcmludGVyKHBvcnRfb2JqLCBvcHRpb25zLCBzeXMuc3RkZXJy
LCBzeXMuc3Rkb3V0LCBjb25maWd1cmVfbG9nZ2luZykKLSAgICAgICAgc2VsZi5fY2xpZW50LnJ1
bihwb3J0X29iaikKLSAgICAgICAgcHJpbnRlci5jbGVhbnVwKCkKKyAgICAgICAgc2VsZi5fY2xp
ZW50LnJ1bigpCiAKIAogY2xhc3MgX011bHRpUHJvY2Vzc1dvcmtlckNvbm5lY3Rpb24oX1dvcmtl
ckNvbm5lY3Rpb24pOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXIsIHBsYXRmb3JtX25h
bWUsIHdvcmtlcl9jbGFzcywgd29ya2VyX251bWJlciwgcmVzdWx0c19kaXJlY3RvcnksIG9wdGlv
bnMpOgotICAgICAgICBfV29ya2VyQ29ubmVjdGlvbi5fX2luaXRfXyhzZWxmLCBicm9rZXIsIHdv
cmtlcl9jbGFzcywgd29ya2VyX251bWJlciwgcmVzdWx0c19kaXJlY3RvcnksIG9wdGlvbnMpCi0g
ICAgICAgIHNlbGYuX3Byb2MgPSBfUHJvY2VzcyhzZWxmLCBwbGF0Zm9ybV9uYW1lLCBvcHRpb25z
LCBzZWxmLl9jbGllbnQpCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb2tlciwgd29ya2VyX2Ns
YXNzLCB3b3JrZXJfbnVtYmVyLCAqKndvcmtlcl9hcmdzKToKKyAgICAgICAgX1dvcmtlckNvbm5l
Y3Rpb24uX19pbml0X18oc2VsZiwgYnJva2VyLCB3b3JrZXJfY2xhc3MsIHdvcmtlcl9udW1iZXIs
ICoqd29ya2VyX2FyZ3MpCisgICAgICAgIHNlbGYuX3Byb2MgPSBfUHJvY2VzcyhzZWxmLCBzZWxm
Ll9jbGllbnQpCiAKICAgICBkZWYgY2FuY2VsKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5f
cHJvYy50ZXJtaW5hdGUoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlcl93b3JrZXJfYnJva2VyX3VuaXR0ZXN0LnB5IGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlcl93
b3JrZXJfYnJva2VyX3VuaXR0ZXN0LnB5CmluZGV4IGU0MWUyMmNhNjgyNjRkMTI1MTY0ODc3MzJi
ZDdhYTE2ZDVlN2FlODguLjM4ZGUxNjRmZjZjNjI2NmZmNTA3YWVkN2ZjOTJlODkxNGI0M2Y5ZGYg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xs
ZXJzL21hbmFnZXJfd29ya2VyX2Jyb2tlcl91bml0dGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyX3dvcmtlcl9icm9rZXJf
dW5pdHRlc3QucHkKQEAgLTMyLDEwICszMiw4IEBAIGltcG9ydCBzeXMKIGltcG9ydCB1bml0dGVz
dAogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IG91dHB1dGNhcHR1cmUKLWZy
b20gd2Via2l0cHkuY29tbW9uLmhvc3RfbW9jayBpbXBvcnQgTW9ja0hvc3QKLWZyb20gd2Via2l0
cHkubGF5b3V0X3Rlc3RzIGltcG9ydCBwb3J0CisKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3Rz
LmNvbnRyb2xsZXJzIGltcG9ydCBtYW5hZ2VyX3dvcmtlcl9icm9rZXIKLWZyb20gd2Via2l0cHku
bGF5b3V0X3Rlc3RzLmNvbnRyb2xsZXJzIGltcG9ydCBtZXNzYWdlX2Jyb2tlcgogZnJvbSB3ZWJr
aXRweS5sYXlvdXRfdGVzdHMudmlld3MgaW1wb3J0IHByaW50aW5nCiAKIApAQCAtNTMsMTYgKzUx
LDEyIEBAIGRlZiBtYWtlX2Jyb2tlcihtYW5hZ2VyLCB3b3JrZXJfbW9kZWwsIHN0YXJ0X3F1ZXVl
PU5vbmUsIHN0b3BfcXVldWU9Tm9uZSk6CiAgICAgZ2xvYmFsIHN0b3BwaW5nX3F1ZXVlCiAgICAg
c3RhcnRpbmdfcXVldWUgPSBzdGFydF9xdWV1ZQogICAgIHN0b3BwaW5nX3F1ZXVlID0gc3RvcF9x
dWV1ZQotICAgIG9wdGlvbnMgPSBnZXRfb3B0aW9ucyh3b3JrZXJfbW9kZWwpCi0gICAgaG9zdCA9
IE1vY2tIb3N0KCkKLSAgICB0ZXN0X3BvcnQgPSBob3N0LnBvcnRfZmFjdG9yeS5nZXQoInRlc3Qi
KQotICAgIHJldHVybiBtYW5hZ2VyX3dvcmtlcl9icm9rZXIuZ2V0KHRlc3RfcG9ydCwgb3B0aW9u
cywgbWFuYWdlciwgX1Rlc3RXb3JrZXIpCisgICAgcmV0dXJuIG1hbmFnZXJfd29ya2VyX2Jyb2tl
ci5nZXQod29ya2VyX21vZGVsLCBtYW5hZ2VyLCBfVGVzdFdvcmtlcikKIAogCiBjbGFzcyBfVGVz
dFdvcmtlcihtYW5hZ2VyX3dvcmtlcl9icm9rZXIuQWJzdHJhY3RXb3JrZXIpOgotICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBicm9rZXJfY29ubmVjdGlvbiwgd29ya2VyX251bWJlciwgcmVzdWx0c19k
aXJlY3RvcnksIG9wdGlvbnMpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXJfY29ubmVj
dGlvbiwgd29ya2VyX251bWJlciwgKip3b3JrZXJfYXJncyk6CiAgICAgICAgIHNlbGYuX2Jyb2tl
cl9jb25uZWN0aW9uID0gYnJva2VyX2Nvbm5lY3Rpb24KLSAgICAgICAgc2VsZi5fb3B0aW9ucyA9
IG9wdGlvbnMKICAgICAgICAgc2VsZi5fd29ya2VyX251bWJlciA9IHdvcmtlcl9udW1iZXIKICAg
ICAgICAgc2VsZi5fbmFtZSA9ICdUZXN0V29ya2VyLyVkJyAlIHdvcmtlcl9udW1iZXIKICAgICAg
ICAgc2VsZi5fc3RvcHBlZCA9IEZhbHNlCkBAIC04Nyw3ICs4MSw3IEBAIGNsYXNzIF9UZXN0V29y
a2VyKG1hbmFnZXJfd29ya2VyX2Jyb2tlci5BYnN0cmFjdFdvcmtlcik6CiAgICAgZGVmIGNhbmNl
bChzZWxmKToKICAgICAgICAgc2VsZi5fY2FuY2VsZWQgPSBUcnVlCiAKLSAgICBkZWYgcnVuKHNl
bGYsIHBvcnQpOgorICAgIGRlZiBydW4oc2VsZiwgcG9ydD1Ob25lKToKICAgICAgICAgaWYgc2Vs
Zi5fc3RhcnRpbmdfcXVldWU6CiAgICAgICAgICAgICBzZWxmLl9zdGFydGluZ19xdWV1ZS5wdXQo
JycpCiAKQEAgLTEwMSwxNyArOTUsNiBAQCBjbGFzcyBfVGVzdFdvcmtlcihtYW5hZ2VyX3dvcmtl
cl9icm9rZXIuQWJzdHJhY3RXb3JrZXIpOgogICAgICAgICAgICAgc2VsZi5fYnJva2VyX2Nvbm5l
Y3Rpb24ucG9zdF9tZXNzYWdlKCdleGNlcHRpb24nLCAodHlwZShlKSwgc3RyKGUpLCBOb25lKSkK
IAogCi1kZWYgZ2V0X29wdGlvbnMod29ya2VyX21vZGVsKToKLSAgICBvcHRpb25fbGlzdCA9ICht
YW5hZ2VyX3dvcmtlcl9icm9rZXIucnVudGltZV9vcHRpb25zKCkgKwotICAgICAgICAgICAgICAg
ICAgIHByaW50aW5nLnByaW50X29wdGlvbnMoKSArCi0gICAgICAgICAgICAgICAgICAgW29wdHBh
cnNlLm1ha2Vfb3B0aW9uKCItLWV4cGVyaW1lbnRhbC1mdWxseS1wYXJhbGxlbCIsIGRlZmF1bHQ9
RmFsc2UpLAotICAgICAgICAgICAgICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1jaGls
ZC1wcm9jZXNzZXMiLCBkZWZhdWx0PScyJyldKQotICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlv
blBhcnNlcihvcHRpb25fbGlzdD1vcHRpb25fbGlzdCkKLSAgICBvcHRpb25zLCBhcmdzID0gcGFy
c2VyLnBhcnNlX2FyZ3MoYXJncz1bJy0td29ya2VyLW1vZGVsJywgd29ya2VyX21vZGVsXSkKLSAg
ICByZXR1cm4gb3B0aW9ucwotCi0KLQogY2xhc3MgRnVuY3Rpb25UZXN0cyh1bml0dGVzdC5UZXN0
Q2FzZSk6CiAgICAgZGVmIHRlc3RfZ2V0X19pbmxpbmUoc2VsZik6CiAgICAgICAgIHNlbGYuYXNz
ZXJ0VHJ1ZShtYWtlX2Jyb2tlcihzZWxmLCAnaW5saW5lJykgaXMgbm90IE5vbmUpCkBAIC0xNjEs
NyArMTQ0LDcgQEAgY2xhc3MgX1Rlc3RzTWl4aW4ob2JqZWN0KToKIAogICAgIGRlZiB0ZXN0X2Nh
bmNlbChzZWxmKToKICAgICAgICAgc2VsZi5tYWtlX2Jyb2tlcigpCi0gICAgICAgIHdvcmtlciA9
IHNlbGYuX2Jyb2tlci5zdGFydF93b3JrZXIoMCwgTm9uZSkKKyAgICAgICAgd29ya2VyID0gc2Vs
Zi5fYnJva2VyLnN0YXJ0X3dvcmtlcigwKQogICAgICAgICB3b3JrZXIuY2FuY2VsKCkKICAgICAg
ICAgc2VsZi5fYnJva2VyLnBvc3RfbWVzc2FnZSgndGVzdCcsIDEsICdoZWxsbywgd29ybGQnKQog
ICAgICAgICB3b3JrZXIuam9pbigwLjUpCkBAIC0xNjksNyArMTUyLDcgQEAgY2xhc3MgX1Rlc3Rz
TWl4aW4ob2JqZWN0KToKIAogICAgIGRlZiB0ZXN0X2RvbmUoc2VsZik6CiAgICAgICAgIHNlbGYu
bWFrZV9icm9rZXIoKQotICAgICAgICB3b3JrZXIgPSBzZWxmLl9icm9rZXIuc3RhcnRfd29ya2Vy
KDAsIE5vbmUpCisgICAgICAgIHdvcmtlciA9IHNlbGYuX2Jyb2tlci5zdGFydF93b3JrZXIoMCkK
ICAgICAgICAgc2VsZi5fYnJva2VyLnBvc3RfbWVzc2FnZSgndGVzdCcsIDEsICdoZWxsbywgd29y
bGQnKQogICAgICAgICBzZWxmLl9icm9rZXIucG9zdF9tZXNzYWdlKCdzdG9wJykKICAgICAgICAg
c2VsZi5fYnJva2VyLnJ1bl9tZXNzYWdlX2xvb3AoKQpAQCAtMTgxLDcgKzE2NCw3IEBAIGNsYXNz
IF9UZXN0c01peGluKG9iamVjdCk6CiAKICAgICBkZWYgdGVzdF91bmtub3duX21lc3NhZ2Uoc2Vs
Zik6CiAgICAgICAgIHNlbGYubWFrZV9icm9rZXIoKQotICAgICAgICB3b3JrZXIgPSBzZWxmLl9i
cm9rZXIuc3RhcnRfd29ya2VyKDAsIE5vbmUpCisgICAgICAgIHdvcmtlciA9IHNlbGYuX2Jyb2tl
ci5zdGFydF93b3JrZXIoMCkKICAgICAgICAgc2VsZi5fYnJva2VyLnBvc3RfbWVzc2FnZSgndW5r
bm93bicpCiAgICAgICAgIHNlbGYuX2Jyb2tlci5ydW5fbWVzc2FnZV9sb29wKCkKICAgICAgICAg
d29ya2VyLmpvaW4oMC41KQpAQCAtMTk0LDcgKzE3Nyw3IEBAIGNsYXNzIF9UZXN0c01peGluKG9i
amVjdCk6CiAKIAogIyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTU0NTIwLgotaWYgc3lzLnBsYXRmb3JtIG5vdCBpbiAoJ2N5Z3dpbicsICd3aW4zMicpOgor
aWYgRmFsc2UgYW5kIHN5cy5wbGF0Zm9ybSBub3QgaW4gKCdjeWd3aW4nLCAnd2luMzInKToKIAog
ICAgIGNsYXNzIE11bHRpUHJvY2Vzc0Jyb2tlclRlc3RzKF9UZXN0c01peGluLCB1bml0dGVzdC5U
ZXN0Q2FzZSk6CiAgICAgICAgIGRlZiBzZXRVcChzZWxmKToKQEAgLTIwMiwzNSArMTg1LDU3IEBA
IGlmIHN5cy5wbGF0Zm9ybSBub3QgaW4gKCdjeWd3aW4nLCAnd2luMzInKToKICAgICAgICAgICAg
IHNlbGYuX3dvcmtlcl9tb2RlbCA9ICdwcm9jZXNzZXMnCiAKIAotY2xhc3MgRnVuY3Rpb25zVGVz
dCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHRlc3RfcnVudGltZV9vcHRpb25zKHNlbGYp
OgotICAgICAgICBvcHRpb25fbGlzdCA9IG1hbmFnZXJfd29ya2VyX2Jyb2tlci5ydW50aW1lX29w
dGlvbnMoKQotICAgICAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIob3B0aW9uX2xp
c3Q9b3B0aW9uX2xpc3QpCi0gICAgICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJn
cyhbXSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wdGlvbnMpCi0KLQogY2xhc3MgSW50ZXJm
YWNlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIyBUaGVzZSB0ZXN0cyBtb3N0bHkgZXhp
c3QgdG8gcGFjaWZ5IGNvdmVyYWdlLgogCiAgICAgIyBGSVhNRTogVGhlcmUgbXVzdCBiZSBhIGJl
dHRlciB3YXkgdG8gZG8gdGhpcyBhbmQgYWxzbyB2ZXJpZnkKICAgICAjIHRoYXQgY2xhc3NlcyBk
byBpbXBsZW1lbnQgZXZlcnkgYWJzdHJhY3QgbWV0aG9kIGluIGFuIGludGVyZmFjZS4KKyAgICBk
ZWYgdGVzdF9icm9rZXJjbGllbnRfaXNfYWJzdHJhY3Qoc2VsZik6CisgICAgICAgICMgVGVzdCB0
aGF0IGFsbCB0aGUgYmFzZSBjbGFzcyBtZXRob2RzIGFyZSBhYnN0cmFjdCBhbmQgaGF2ZSB0aGUK
KyAgICAgICAgIyBzaWduYXR1cmUgd2UgZXhwZWN0LgorICAgICAgICBvYmogPSBtYW5hZ2VyX3dv
cmtlcl9icm9rZXIuQnJva2VyQ2xpZW50KCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90
SW1wbGVtZW50ZWRFcnJvciwgb2JqLmlzX2RvbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2Vz
KE5vdEltcGxlbWVudGVkRXJyb3IsIG9iai5uYW1lKQorCiAgICAgZGVmIHRlc3RfbWFuYWdlcmNv
bm5lY3Rpb25faXNfYWJzdHJhY3Qoc2VsZik6CiAgICAgICAgICMgVGVzdCB0aGF0IGFsbCB0aGUg
YmFzZSBjbGFzcyBtZXRob2RzIGFyZSBhYnN0cmFjdCBhbmQgaGF2ZSB0aGUKICAgICAgICAgIyBz
aWduYXR1cmUgd2UgZXhwZWN0LgogICAgICAgICBicm9rZXIgPSBtYWtlX2Jyb2tlcihzZWxmLCAn
aW5saW5lJykKLSAgICAgICAgb2JqID0gbWFuYWdlcl93b3JrZXJfYnJva2VyLl9NYW5hZ2VyQ29u
bmVjdGlvbihicm9rZXIuX2Jyb2tlciwgTm9uZSwgc2VsZiwgTm9uZSkKLSAgICAgICAgc2VsZi5h
c3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgb2JqLnN0YXJ0X3dvcmtlciwgMCwgTm9u
ZSkKKyAgICAgICAgb2JqID0gbWFuYWdlcl93b3JrZXJfYnJva2VyLl9NYW5hZ2VyQ29ubmVjdGlv
bihicm9rZXIuX2Jyb2tlciwgTm9uZSwgc2VsZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMo
Tm90SW1wbGVtZW50ZWRFcnJvciwgb2JqLnN0YXJ0X3dvcmtlciwgMCkKIAogICAgIGRlZiB0ZXN0
X3dvcmtlcmNvbm5lY3Rpb25faXNfYWJzdHJhY3Qoc2VsZik6CiAgICAgICAgICMgVGVzdCB0aGF0
IGFsbCB0aGUgYmFzZSBjbGFzcyBtZXRob2RzIGFyZSBhYnN0cmFjdCBhbmQgaGF2ZSB0aGUKICAg
ICAgICAgIyBzaWduYXR1cmUgd2UgZXhwZWN0LgogICAgICAgICBicm9rZXIgPSBtYWtlX2Jyb2tl
cihzZWxmLCAnaW5saW5lJykKLSAgICAgICAgb2JqID0gbWFuYWdlcl93b3JrZXJfYnJva2VyLl9X
b3JrZXJDb25uZWN0aW9uKGJyb2tlci5fYnJva2VyLCBfVGVzdFdvcmtlciwgMCwgTm9uZSwgTm9u
ZSkKKyAgICAgICAgb2JqID0gbWFuYWdlcl93b3JrZXJfYnJva2VyLl9Xb3JrZXJDb25uZWN0aW9u
KGJyb2tlci5fYnJva2VyLCBfVGVzdFdvcmtlciwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlz
ZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgb2JqLmNhbmNlbCkKICAgICAgICAgc2VsZi5hc3NlcnRS
YWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgb2JqLmlzX2FsaXZlKQogICAgICAgICBzZWxmLmFz
c2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBvYmouam9pbiwgTm9uZSkKIAogCitjbGFz
cyBNZXNzYWdlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfX25vX2JvZHko
c2VsZik6CisgICAgICAgIG1zZyA9IG1hbmFnZXJfd29ya2VyX2Jyb2tlci5fTWVzc2FnZSgnc3Jj
JywgJ3RvcGljX25hbWUnLCAnbWVzc2FnZV9uYW1lJywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRUcnVlKHJlcHIobXNnKSkKKyAgICAgICAgcyA9IG1zZy5kdW1wcygpCisgICAgICAgIG5ld19t
c2cgPSBtYW5hZ2VyX3dvcmtlcl9icm9rZXIuX01lc3NhZ2UubG9hZHMocykKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChuZXdfbXNnLm5hbWUsICdtZXNzYWdlX25hbWUnKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKG5ld19tc2cuYXJncywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChuZXdfbXNnLnRvcGljX25hbWUsICd0b3BpY19uYW1lJykKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChuZXdfbXNnLnNyYywgJ3NyYycpCisKKyAgICBkZWYgdGVzdF9fYm9keShzZWxmKToKKyAg
ICAgICAgbXNnID0gbWFuYWdlcl93b3JrZXJfYnJva2VyLl9NZXNzYWdlKCdzcmMnLCAndG9waWNf
bmFtZScsICdtZXNzYWdlX25hbWUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoJ2JvZHknLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIobXNnKSkKKyAg
ICAgICAgcyA9IG1zZy5kdW1wcygpCisgICAgICAgIG5ld19tc2cgPSBtYW5hZ2VyX3dvcmtlcl9i
cm9rZXIuX01lc3NhZ2UubG9hZHMocykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdfbXNn
Lm5hbWUsICdtZXNzYWdlX25hbWUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld19tc2cu
YXJncywgKCdib2R5JywgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3X21zZy50b3Bp
Y19uYW1lLCAndG9waWNfbmFtZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3X21zZy5z
cmMsICdzcmMnKQorCisKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3Qu
bWFpbigpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9j
b250cm9sbGVycy9tZXNzYWdlX2Jyb2tlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21lc3NhZ2VfYnJva2VyLnB5CmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBkNThhNmNkMTFiYjg4MzRmZjRlYmViZDAxNzNkMTRmNjM3OTMxZmRkLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21lc3NhZ2VfYnJva2VyLnB5Cisr
KyAvZGV2L251bGwKQEAgLTEsMjAyICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDExIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0jIG1ldDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMK
LSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0iIiJNb2R1
bGUgZm9yIGhhbmRsaW5nIG1lc3NhZ2luZyBmb3IgcnVuLXdlYmtpdC10ZXN0cy4KLQotVGhpcyBt
b2R1bGUgaW1wbGVtZW50cyBhIHNpbXBsZSBtZXNzYWdlIGJyb2tlciBhYnN0cmFjdGlvbiB0aGF0
IHdpbGwgYmUKLXVzZWQgdG8gY29vcmRpbmF0ZSBtZXNzYWdlcyBiZXR3ZWVuIHRoZSBtYWluIHJ1
bi13ZWJraXQtdGVzdHMgdGhyZWFkCi0oYWthIFRlc3RSdW5uZXIpIGFuZCB0aGUgaW5kaXZpZHVh
bCB3b3JrZXIgdGhyZWFkcyAocHJldmlvdXNseSBrbm93biBhcwotZHVtcF9yZW5kZXJfdHJlZV90
aHJlYWRzKS4KLQotVGhlIGJyb2tlciBzaW1wbHkgZGlzdHJpYnV0ZXMgbWVzc2FnZXMgb250byB0
b3BpY3MgKG5hbWVkIHF1ZXVlcyk7IHRoZSBhY3R1YWwKLXF1ZXVlcyB0aGVtc2VsdmVzIGFyZSBw
cm92aWRlZCBieSB0aGUgY2FsbGVyLCBhcyB0aGUgcXVldWUncyBpbXBsZW1lbnRhdGlvbgotcmVx
dWlyZW1lbnRzIHZhcmllcyB2YXJ5IGRlcGVuZGluZyBvbiB0aGUgZGVzaXJlZCBjb25jdXJyZW5j
eSBtb2RlbAotKG5vbmUvdGhyZWFkcy9wcm9jZXNzZXMpLgotCi1JbiBvcmRlciBmb3Igc2hhcmVk
LW5vdGhpbmcgbWVzc2FnaW5nIGJldHdlZW4gcHJvY2Vzc2luZyB0byBiZSBwb3NzaWJsZSwKLU1l
c3NhZ2VzIG11c3QgYmUgcGlja2xhYmxlLgotCi1UaGUgbW9kdWxlIGRlZmluZXMgb25lIGludGVy
ZmFjZSBhbmQgdHdvIGNsYXNzZXMuIENhbGxlcnMgb2YgdGhpcyBwYWNrYWdlCi1tdXN0IGltcGxl
bWVudCB0aGUgQnJva2VyQ2xpZW50IGludGVyZmFjZSwgYW5kIG1vc3QgY2FsbGVycyB3aWxsIGNy
ZWF0ZQotQnJva2VyQ29ubmVjdGlvbnMgYXMgd2VsbCBhcyBCcm9rZXJzLgotCi1UaGUgY2xhc3Nl
cyByZWxhdGUgdG8gZWFjaCBvdGhlciBhczoKLQotICAgIEJyb2tlckNsaWVudCAgIC0tLS0tLT4g
ICAgQnJva2VyQ29ubmVjdGlvbgotICAgICAgICAgXiAgICAgICAgICAgICAgICAgICAgICAgICB8
Ci0gICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHYKLSAgICAgICAgIFwtLS0tLS0t
LS0tLS0tLS0tICAgICAgQnJva2VyCi0KLShUaGUgQnJva2VyQ2xpZW50IG5ldmVyIGNhbGxzIGJy
b2tlciBkaXJlY3RseSBhZnRlciBpdCBpcyBjcmVhdGVkLCBvbmx5Ci1Ccm9rZXJDb25uZWN0aW9u
LiAgQnJva2VyQ29ubmVjdGlvbiBwYXNzZXMgYSByZWZlcmVuY2UgdG8gQnJva2VyQ2xpZW50IHRv
Ci1Ccm9rZXIsIGFuZCBCcm9rZXIgb25seSBpbnZva2VzIHRoYXQgcmVmZXJlbmNlLCBuZXZlciB0
YWxraW5nIGRpcmVjdGx5IHRvCi1Ccm9rZXJDb25uZWN0aW9uKS4KLSIiIgotaW1wb3J0IHN5cwot
aW1wb3J0IHRyYWNlYmFjawotCi1pbXBvcnQgY1BpY2tsZQotaW1wb3J0IGxvZ2dpbmcKLWltcG9y
dCBRdWV1ZQotCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IHN0YWNrX3V0aWxz
Ci0KLV9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKLQotCi1jbGFzcyBCcm9rZXJD
bGllbnQob2JqZWN0KToKLSAgICAiIiJBYnN0cmFjdCBiYXNlIGNsYXNzIC8gaW50ZXJmYWNlIHRo
YXQgYWxsIG1lc3NhZ2UgYnJva2VyIGNsaWVudHMgbXVzdAotICAgIGltcGxlbWVudC4gSW4gYWRk
aXRpb24gdG8gdGhlIG1ldGhvZHMgYmVsb3csIGJ5IGNvbnZlbnRpb24gY2xpZW50cwotICAgIGlt
cGxlbWVudCByb3V0aW5lcyBvZiB0aGUgc2lnbmF0dXJlIHR5cGUKLQotICAgICAgICBoYW5kbGVf
TUVTU0FHRV9OQU1FKHNlbGYsIHNyYywgLi4uKToKLQotICAgIHdoZXJlIE1FU1NBR0VfTkFNRSBt
YXRjaGVzIHRoZSBzdHJpbmcgcGFzc2VkIHRvIHBvc3RfbWVzc2FnZSgpLCBhbmQKLSAgICBzcmMg
aW5kaWNhdGVzIHRoZSBuYW1lIG9mIHRoZSBzZW5kZXIuIElmIHRoZSBtZXNzYWdlIGNvbnRhaW5z
IHZhbHVlcyBpbgotICAgIHRoZSBtZXNzYWdlIGJvZHksIHRob3NlIHdpbGwgYmUgcHJvdmlkZWQg
YXMgb3B0cGFyYW1zLiIiIgotCi0gICAgZGVmIGlzX2RvbmUoc2VsZik6Ci0gICAgICAgICIiIkNh
bGxlZCBmcm9tIGluc2lkZSBydW5fbWVzc2FnZV9sb29wKCkgdG8gaW5kaWNhdGUgd2hldGhlciB0
byBleGl0LiIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCi0KLSAgICBkZWYg
bmFtZShzZWxmKToKLSAgICAgICAgIiIiUmV0dXJuIGEgbmFtZSB0aGF0IGlkZW50aWZpZXMgdGhl
IGNsaWVudC4iIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgotCi0KLWNsYXNz
IEJyb2tlcihvYmplY3QpOgotICAgICIiIkJyb2tlcnMgcHJvdmlkZSB0aGUgYmFzaWMgbW9kZWwg
b2YgYSBzZXQgb2YgdG9waWNzLiBDbGllbnRzIGNhbiBwb3N0IGEKLSAgICBtZXNzYWdlIHRvIGFu
eSB0b3BpYyB1c2luZyBwb3N0X21lc3NhZ2UoKSwgYW5kIGNhbiBwcm9jZXNzIG1lc3NhZ2VzIG9u
IG9uZQotICAgIHRvcGljIGF0IGEgdGltZSB1c2luZyBydW5fbWVzc2FnZV9sb29wKCkuIiIiCi0K
LSAgICBkZWYgX19pbml0X18oc2VsZiwgb3B0aW9ucywgcXVldWVfbWFrZXIpOgotICAgICAgICAi
IiJBcmdzOgotICAgICAgICAgICAgb3B0aW9uczogYSBydW50aW1lIG9wdGlvbiBjbGFzcyBmcm9t
IG9wdHBhcnNlCi0gICAgICAgICAgICBxdWV1ZV9tYWtlcjogYSBmYWN0b3J5IG1ldGhvZCB0aGF0
IHJldHVybnMgb2JqZWN0cyBpbXBsZW1lbnRpbmcgYQotICAgICAgICAgICAgICAgIFF1ZXVlIGlu
dGVyZmFjZSAocHV0KCkvZ2V0KCkpLgotICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5fb3B0aW9u
cyA9IG9wdGlvbnMKLSAgICAgICAgc2VsZi5fcXVldWVfbWFrZXIgPSBxdWV1ZV9tYWtlcgotICAg
ICAgICBzZWxmLl90b3BpY3MgPSB7fQotCi0gICAgZGVmIGFkZF90b3BpYyhzZWxmLCB0b3BpY19u
YW1lKToKLSAgICAgICAgaWYgdG9waWNfbmFtZSBub3QgaW4gc2VsZi5fdG9waWNzOgotICAgICAg
ICAgICAgc2VsZi5fdG9waWNzW3RvcGljX25hbWVdID0gc2VsZi5fcXVldWVfbWFrZXIoKQotCi0g
ICAgZGVmIF9nZXRfcXVldWVfZm9yX3RvcGljKHNlbGYsIHRvcGljX25hbWUpOgotICAgICAgICBy
ZXR1cm4gc2VsZi5fdG9waWNzW3RvcGljX25hbWVdCi0KLSAgICBkZWYgcG9zdF9tZXNzYWdlKHNl
bGYsIGNsaWVudCwgdG9waWNfbmFtZSwgbWVzc2FnZV9uYW1lLCAqbWVzc2FnZV9hcmdzKToKLSAg
ICAgICAgIiIiUG9zdCBhIG1lc3NhZ2UgdG8gdGhlIGFwcHJvcHJpYXRlIHRvcGljIG5hbWUuCi0K
LSAgICAgICAgTWVzc2FnZXMgaGF2ZSBhIG5hbWUgYW5kIGEgdHVwbGUgb2Ygb3B0aW9uYWwgYXJn
dW1lbnRzLiBCb3RoIG11c3QgYmUgcGlja2xhYmxlLiIiIgotICAgICAgICBtZXNzYWdlID0gX01l
c3NhZ2UoY2xpZW50Lm5hbWUoKSwgdG9waWNfbmFtZSwgbWVzc2FnZV9uYW1lLCBtZXNzYWdlX2Fy
Z3MpCi0gICAgICAgIHF1ZXVlID0gc2VsZi5fZ2V0X3F1ZXVlX2Zvcl90b3BpYyh0b3BpY19uYW1l
KQotICAgICAgICBxdWV1ZS5wdXQoX01lc3NhZ2UuZHVtcHMobWVzc2FnZSkpCi0KLSAgICBkZWYg
cnVuX21lc3NhZ2VfbG9vcChzZWxmLCB0b3BpY19uYW1lLCBjbGllbnQsIGRlbGF5X3NlY3M9Tm9u
ZSk6Ci0gICAgICAgICIiIkxvb3AgcHJvY2Vzc2luZyBtZXNzYWdlcyB1bnRpbCBjbGllbnQuaXNf
ZG9uZSgpIG9yIGRlbGF5IHBhc3Nlcy4KLQotICAgICAgICBUbyBydW4gaW5kZWZpbml0ZWx5LCBz
ZXQgZGVsYXlfc2VjcyB0byBOb25lLiIiIgotICAgICAgICBhc3NlcnQgZGVsYXlfc2VjcyBpcyBO
b25lIG9yIGRlbGF5X3NlY3MgPiAwCi0gICAgICAgIHNlbGYuX3J1bl9sb29wKHRvcGljX25hbWUs
IGNsaWVudCwgYmxvY2s9VHJ1ZSwgZGVsYXlfc2Vjcz1kZWxheV9zZWNzKQotCi0gICAgZGVmIHJ1
bl9hbGxfcGVuZGluZyhzZWxmLCB0b3BpY19uYW1lLCBjbGllbnQpOgotICAgICAgICAiIiJQcm9j
ZXNzIG1lc3NhZ2VzIHVudGlsIGNsaWVudC5pc19kb25lKCkgb3IgY2FsbGVyIHdvdWxkIGJsb2Nr
LiIiIgotICAgICAgICBzZWxmLl9ydW5fbG9vcCh0b3BpY19uYW1lLCBjbGllbnQsIGJsb2NrPUZh
bHNlLCBkZWxheV9zZWNzPU5vbmUpCi0KLSAgICBkZWYgX3J1bl9sb29wKHNlbGYsIHRvcGljX25h
bWUsIGNsaWVudCwgYmxvY2ssIGRlbGF5X3NlY3MpOgotICAgICAgICBxdWV1ZSA9IHNlbGYuX2dl
dF9xdWV1ZV9mb3JfdG9waWModG9waWNfbmFtZSkKLSAgICAgICAgd2hpbGUgbm90IGNsaWVudC5p
c19kb25lKCk6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcyA9IHF1ZXVlLmdl
dChibG9jaywgZGVsYXlfc2VjcykKLSAgICAgICAgICAgIGV4Y2VwdCBRdWV1ZS5FbXB0eToKLSAg
ICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgIG1zZyA9IF9NZXNzYWdlLmxvYWRzKHMp
Ci0gICAgICAgICAgICBzZWxmLl9kaXNwYXRjaF9tZXNzYWdlKG1zZywgY2xpZW50KQotCi0gICAg
ZGVmIF9kaXNwYXRjaF9tZXNzYWdlKHNlbGYsIG1lc3NhZ2UsIGNsaWVudCk6Ci0gICAgICAgIGlm
IG5vdCBoYXNhdHRyKGNsaWVudCwgJ2hhbmRsZV8nICsgbWVzc2FnZS5uYW1lKToKLSAgICAgICAg
ICAgIHJhaXNlIFZhbHVlRXJyb3IoCi0gICAgICAgICAgICAgICAiJXM6IHJlY2VpdmVkIG1lc3Nh
Z2UgJyVzJyBpdCBjb3VsZG4ndCBoYW5kbGUiICUKLSAgICAgICAgICAgICAgIChjbGllbnQubmFt
ZSgpLCBtZXNzYWdlLm5hbWUpKQotICAgICAgICBvcHRhcmdzID0gbWVzc2FnZS5hcmdzCi0gICAg
ICAgIG1lc3NhZ2VfaGFuZGxlciA9IGdldGF0dHIoY2xpZW50LCAnaGFuZGxlXycgKyBtZXNzYWdl
Lm5hbWUpCi0gICAgICAgIG1lc3NhZ2VfaGFuZGxlcihtZXNzYWdlLnNyYywgKm9wdGFyZ3MpCi0K
LQotY2xhc3MgX01lc3NhZ2Uob2JqZWN0KToKLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGxv
YWRzKHN0cmluZ192YWx1ZSk6Ci0gICAgICAgIG9iaiA9IGNQaWNrbGUubG9hZHMoc3RyaW5nX3Zh
bHVlKQotICAgICAgICBhc3NlcnQoaXNpbnN0YW5jZShvYmosIF9NZXNzYWdlKSkKLSAgICAgICAg
cmV0dXJuIG9iagotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHNyYywgdG9waWNfbmFtZSwgbWVz
c2FnZV9uYW1lLCBtZXNzYWdlX2FyZ3MpOgotICAgICAgICBzZWxmLnNyYyA9IHNyYwotICAgICAg
ICBzZWxmLnRvcGljX25hbWUgPSB0b3BpY19uYW1lCi0gICAgICAgIHNlbGYubmFtZSA9IG1lc3Nh
Z2VfbmFtZQotICAgICAgICBzZWxmLmFyZ3MgPSBtZXNzYWdlX2FyZ3MKLQotICAgIGRlZiBkdW1w
cyhzZWxmKToKLSAgICAgICAgcmV0dXJuIGNQaWNrbGUuZHVtcHMoc2VsZikKLQotICAgIGRlZiBf
X3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuICgiX01lc3NhZ2UoZnJvbT0nJXMnLCB0b3Bp
Y19uYW1lPSclcycsIG1lc3NhZ2VfbmFtZT0nJXMnKSIgJQotICAgICAgICAgICAgICAgIChzZWxm
LnNyYywgc2VsZi50b3BpY19uYW1lLCBzZWxmLm5hbWUpKQotCi0KLWNsYXNzIEJyb2tlckNvbm5l
Y3Rpb24ob2JqZWN0KToKLSAgICAiIiJCcm9rZXJDb25uZWN0aW9uIHByb3ZpZGVzIGEgY29ubmVj
dGlvbi1vcmllbnRlZCBmYWNhZGUgb24gdG9wIG9mIGEKLSAgICBCcm9rZXIsIHNvIHRoYXQgY2Fs
bGVycyBkb24ndCBoYXZlIHRvIHJlcGVhdGVkbHkgcGFzcyB0aGUgc2FtZSB0b3BpYwotICAgIG5h
bWVzIG92ZXIgYW5kIG92ZXIuIiIiCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCBj
bGllbnQsIHJ1bl90b3BpYywgcG9zdF90b3BpYyk6Ci0gICAgICAgICIiIkNyZWF0ZSBhIEJyb2tl
ckNvbm5lY3Rpb24gb24gdG9wIG9mIGEgQnJva2VyLiBOb3RlIHRoYXQgdGhlIEJyb2tlcgotICAg
ICAgICBpcyBwYXNzZWQgaW4gcmF0aGVyIHRoYW4gY3JlYXRlZCBzbyB0aGF0IGEgc2luZ2xlIEJy
b2tlciBjYW4gYmUgdXNlZAotICAgICAgICBieSBtdWx0aXBsZSBCcm9rZXJDb25uZWN0aW9ucy4i
IiIKLSAgICAgICAgc2VsZi5fYnJva2VyID0gYnJva2VyCi0gICAgICAgIHNlbGYuX2NsaWVudCA9
IGNsaWVudAotICAgICAgICBzZWxmLl9wb3N0X3RvcGljID0gcG9zdF90b3BpYwotICAgICAgICBz
ZWxmLl9ydW5fdG9waWMgPSBydW5fdG9waWMKLSAgICAgICAgYnJva2VyLmFkZF90b3BpYyhydW5f
dG9waWMpCi0gICAgICAgIGJyb2tlci5hZGRfdG9waWMocG9zdF90b3BpYykKLQotICAgIGRlZiBy
dW5fbWVzc2FnZV9sb29wKHNlbGYsIGRlbGF5X3NlY3M9Tm9uZSk6Ci0gICAgICAgIHNlbGYuX2Jy
b2tlci5ydW5fbWVzc2FnZV9sb29wKHNlbGYuX3J1bl90b3BpYywgc2VsZi5fY2xpZW50LCBkZWxh
eV9zZWNzKQotCi0gICAgZGVmIHBvc3RfbWVzc2FnZShzZWxmLCBtZXNzYWdlX25hbWUsICptZXNz
YWdlX2FyZ3MpOgotICAgICAgICBzZWxmLl9icm9rZXIucG9zdF9tZXNzYWdlKHNlbGYuX2NsaWVu
dCwgc2VsZi5fcG9zdF90b3BpYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
ZXNzYWdlX25hbWUsICptZXNzYWdlX2FyZ3MpCi0KLSAgICBkZWYgcmFpc2VfZXhjZXB0aW9uKHNl
bGYsIGV4Y19pbmZvKToKLSAgICAgICAgIyBTaW5jZSB0cmFjZWJhY2tzIGFyZW4ndCBwaWNrbGFi
bGUsIHNlbmQgdGhlIGV4dHJhY3RlZCBzdGFjayBpbnN0ZWFkLgotICAgICAgICBleGNlcHRpb25f
dHlwZSwgZXhjZXB0aW9uX3ZhbHVlLCBleGNlcHRpb25fdHJhY2ViYWNrID0gc3lzLmV4Y19pbmZv
KCkKLSAgICAgICAgc3RhY2tfdXRpbHMubG9nX3RyYWNlYmFjayhfbG9nLmRlYnVnLCBleGNlcHRp
b25fdHJhY2ViYWNrKQotICAgICAgICBzdGFjayA9IHRyYWNlYmFjay5leHRyYWN0X3RiKGV4Y2Vw
dGlvbl90cmFjZWJhY2spCi0gICAgICAgIHNlbGYuX2Jyb2tlci5wb3N0X21lc3NhZ2Uoc2VsZi5f
Y2xpZW50LCBzZWxmLl9wb3N0X3RvcGljLCAnZXhjZXB0aW9uJywgZXhjZXB0aW9uX3R5cGUsIGV4
Y2VwdGlvbl92YWx1ZSwgc3RhY2spCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tZXNzYWdlX2Jyb2tlcl91bml0dGVzdC5weSBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21lc3NhZ2VfYnJv
a2VyX3VuaXR0ZXN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjhkOGU2Zjk3
YTZlMTNiMTdlMWJkYTE4NmI3Y2Q4MGI3YzI0NTY3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L2NvbnRyb2xsZXJzL21lc3NhZ2VfYnJva2VyX3VuaXR0ZXN0LnB5CisrKyAvZGV2L251bGwKQEAg
LTEsNzYgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwot
IyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0j
IGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0j
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWltcG9ydCB1bml0dGVzdAotCi1mcm9t
IHdlYmtpdHB5LmxheW91dF90ZXN0cy5jb250cm9sbGVycyBpbXBvcnQgbWVzc2FnZV9icm9rZXIK
LQotIyBUaGlzIGZpbGUgZXhpc3RzIHRvIHRlc3Qgcm91dGluZXMgdGhhdCBhcmVuJ3QgbmVjZXNz
YXJpbHkgY292ZXJlZCBlbHNld2hlcmU7Ci0jIG1vc3Qgb2YgdGhlIHRlc3Rpbmcgb2YgbWVzc2Fn
ZV9icm9rZXIgd2lsbCBiZSBjb3ZlcmVkIHVuZGVyIHRoZSB0ZXN0cyBpbgotIyB0aGUgbWFuYWdl
cl93b3JrZXJfYnJva2VyIG1vZHVsZS4KLQotCi1jbGFzcyBNZXNzYWdlVGVzdCh1bml0dGVzdC5U
ZXN0Q2FzZSk6Ci0gICAgZGVmIHRlc3RfX25vX2JvZHkoc2VsZik6Ci0gICAgICAgIG1zZyA9IG1l
c3NhZ2VfYnJva2VyLl9NZXNzYWdlKCdzcmMnLCAndG9waWNfbmFtZScsICdtZXNzYWdlX25hbWUn
LCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcihtc2cpKQotICAgICAgICBzID0g
bXNnLmR1bXBzKCkKLSAgICAgICAgbmV3X21zZyA9IG1lc3NhZ2VfYnJva2VyLl9NZXNzYWdlLmxv
YWRzKHMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3X21zZy5uYW1lLCAnbWVzc2FnZV9u
YW1lJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdfbXNnLmFyZ3MsIE5vbmUpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3X21zZy50b3BpY19uYW1lLCAndG9waWNfbmFtZScpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3X21zZy5zcmMsICdzcmMnKQotCi0gICAgZGVmIHRl
c3RfX2JvZHkoc2VsZik6Ci0gICAgICAgIG1zZyA9IG1lc3NhZ2VfYnJva2VyLl9NZXNzYWdlKCdz
cmMnLCAndG9waWNfbmFtZScsICdtZXNzYWdlX25hbWUnLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoJ2JvZHknLCAwKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJl
cHIobXNnKSkKLSAgICAgICAgcyA9IG1zZy5kdW1wcygpCi0gICAgICAgIG5ld19tc2cgPSBtZXNz
YWdlX2Jyb2tlci5fTWVzc2FnZS5sb2FkcyhzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5l
d19tc2cubmFtZSwgJ21lc3NhZ2VfbmFtZScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3
X21zZy5hcmdzLCAoJ2JvZHknLCAwKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdfbXNn
LnRvcGljX25hbWUsICd0b3BpY19uYW1lJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdf
bXNnLnNyYywgJ3NyYycpCi0KLQotY2xhc3MgSW50ZXJmYWNlVGVzdCh1bml0dGVzdC5UZXN0Q2Fz
ZSk6Ci0gICAgIyBUaGVzZSB0ZXN0cyBtb3N0bHkgZXhpc3QgdG8gcGFjaWZ5IGNvdmVyYWdlLgot
Ci0gICAgIyBGSVhNRTogVGhlcmUgbXVzdCBiZSBhIGJldHRlciB3YXkgdG8gZG8gdGhpcyBhbmQg
YWxzbyB2ZXJpZnkKLSAgICAjIHRoYXQgY2xhc3NlcyBkbyBpbXBsZW1lbnQgZXZlcnkgYWJzdHJh
Y3QgbWV0aG9kIGluIGFuIGludGVyZmFjZS4KLQotICAgIGRlZiB0ZXN0X2Jyb2tlcmNsaWVudF9p
c19hYnN0cmFjdChzZWxmKToKLSAgICAgICAgIyBUZXN0IHRoYXQgYWxsIHRoZSBiYXNlIGNsYXNz
IG1ldGhvZHMgYXJlIGFic3RyYWN0IGFuZCBoYXZlIHRoZQotICAgICAgICAjIHNpZ25hdHVyZSB3
ZSBleHBlY3QuCi0gICAgICAgIG9iaiA9IG1lc3NhZ2VfYnJva2VyLkJyb2tlckNsaWVudCgpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIG9iai5pc19kb25l
KQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBvYmoubmFt
ZSkKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHVuaXR0ZXN0Lm1haW4oKQpk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxl
cnMvd29ya2VyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJv
bGxlcnMvd29ya2VyLnB5CmluZGV4IGZjNzgzMWRmYjY3YzYyZDJjZTU5MWJlMTJhNzU4NjFjODI5
Yzg0Y2YuLmE2N2IxOWNlZWI0ODU2YmExN2E4MGE4YWM2ZmUyZmRjY2JhMTcxN2EgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL3dvcmtl
ci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVy
cy93b3JrZXIucHkKQEAgLTMzLDc1ICszMyw3MyBAQCBpbXBvcnQgc3lzCiBpbXBvcnQgdGhyZWFk
aW5nCiBpbXBvcnQgdGltZQogCisjIFRoZXNlIGFyZSBuZWVkZWQgd2hlbiB3b3JrZXJzIGFyZSBs
YXVuY2hlZCBpbiBuZXcgY2hpbGQgcHJvY2Vzc2VzLgorZnJvbSB3ZWJraXRweS5jb21tb24uaG9z
dCBpbXBvcnQgSG9zdAorZnJvbSB3ZWJraXRweS5jb21tb24uaG9zdF9tb2NrIGltcG9ydCBNb2Nr
SG9zdAorCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5jb250cm9sbGVycyBpbXBvcnQgbWFu
YWdlcl93b3JrZXJfYnJva2VyCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5jb250cm9sbGVy
cyBpbXBvcnQgc2luZ2xlX3Rlc3RfcnVubmVyCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5t
b2RlbHMgaW1wb3J0IHRlc3RfZXhwZWN0YXRpb25zCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0
cy5tb2RlbHMgaW1wb3J0IHRlc3RfcmVzdWx0cworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMu
dmlld3MgaW1wb3J0IHByaW50aW5nCiAKIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFt
ZV9fKQogCiAKIGNsYXNzIFdvcmtlcihtYW5hZ2VyX3dvcmtlcl9icm9rZXIuQWJzdHJhY3RXb3Jr
ZXIpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3b3JrZXJfY29ubmVjdGlvbiwgd29ya2VyX251
bWJlciwgcmVzdWx0c19kaXJlY3RvcnksIG9wdGlvbnMpOgotICAgICAgICBtYW5hZ2VyX3dvcmtl
cl9icm9rZXIuQWJzdHJhY3RXb3JrZXIuX19pbml0X18oc2VsZiwgd29ya2VyX2Nvbm5lY3Rpb24s
IHdvcmtlcl9udW1iZXIsIHJlc3VsdHNfZGlyZWN0b3J5LCBvcHRpb25zKQotICAgICAgICBzZWxm
Ll9kb25lID0gRmFsc2UKLSAgICAgICAgc2VsZi5fY2FuY2VsZWQgPSBGYWxzZQotICAgICAgICBz
ZWxmLl9wb3J0ID0gTm9uZQotICAgICAgICBzZWxmLl9iYXRjaF9zaXplID0gTm9uZQotICAgICAg
ICBzZWxmLl9iYXRjaF9jb3VudCA9IE5vbmUKLSAgICAgICAgc2VsZi5fZmlsZXN5c3RlbSA9IE5v
bmUKLSAgICAgICAgc2VsZi5fZHJpdmVyID0gTm9uZQotICAgICAgICBzZWxmLl90ZXN0c19ydW5f
ZmlsZSA9IE5vbmUKLSAgICAgICAgc2VsZi5fdGVzdHNfcnVuX2ZpbGVuYW1lID0gTm9uZQorICAg
IGRlZiBfX2luaXRfXyhzZWxmLCB3b3JrZXJfY29ubmVjdGlvbiwgd29ya2VyX251bWJlciwgcmVz
dWx0c19kaXJlY3Rvcnk9Tm9uZSwgb3B0aW9ucz1Ob25lLCByZWFsX3BvcnRfbmFtZT1Ob25lKToK
KyAgICAgICAgbWFuYWdlcl93b3JrZXJfYnJva2VyLkFic3RyYWN0V29ya2VyLl9faW5pdF9fKHNl
bGYsIHdvcmtlcl9jb25uZWN0aW9uLCB3b3JrZXJfbnVtYmVyKQorICAgICAgICBzZWxmLl9yZXN1
bHRzX2RpcmVjdG9yeSA9IHJlc3VsdHNfZGlyZWN0b3J5CisgICAgICAgIHNlbGYuX29wdGlvbnMg
PSBvcHRpb25zCisgICAgICAgIHNlbGYuX3JlYWxfcG9ydF9uYW1lID0gcmVhbF9wb3J0X25hbWUK
IAogICAgIGRlZiBfX2RlbF9fKHNlbGYpOgogICAgICAgICBzZWxmLmNsZWFudXAoKQogCi0gICAg
ZGVmIHNhZmVfaW5pdChzZWxmLCBwb3J0KToKKyAgICBkZWYgX2ZpbmlzaF9pbml0aWFsaXppbmco
c2VsZiwgcG9ydCk6CiAgICAgICAgICIiIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxl
ZCB3aGVuIGl0IGlzIGlzIHNhZmUgZm9yIHRoZSBtaXhpbgogICAgICAgICB0byBjcmVhdGUgc3Rh
dGUgdGhhdCBjYW4ndCBiZSBQaWNrbGVkLgogCiAgICAgICAgIFRoaXMgcm91dGluZSBleGlzdHMg
c28gdGhhdCB0aGUgbWl4aW4gY2FuIGJlIGNyZWF0ZWQgYW5kIHRoZW4gbWFyc2hhbGVkCiAgICAg
ICAgIGFjcm9zcyBpbnRvIGEgY2hpbGQgcHJvY2Vzcy4iIiIKKyAgICAgICAgaWYgbm90IHBvcnQ6
CisgICAgICAgICAgICBpZiAndGVzdCcgaW4gc2VsZi5fcmVhbF9wb3J0X25hbWU6CisgICAgICAg
ICAgICAgICAgaG9zdCA9IE1vY2tIb3N0KCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICAgICAgaG9zdCA9IEhvc3QoKQorICAgICAgICAgICAgaG9zdC5faW5pdGlhbGl6ZV9zY20oKQor
ICAgICAgICAgICAgcG9ydCA9IGhvc3QucG9ydF9mYWN0b3J5LmdldChzZWxmLl9yZWFsX3BvcnRf
bmFtZSwgc2VsZi5fb3B0aW9ucykKKwogICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAorCisgICAg
ICAgICMgVGhlIHVuaXggbXVsdGlwcm9jZXNzaW5nIGltcGxlbWVudGF0aW9uIGNsb25lcyB0aGUK
KyAgICAgICAgIyBsb2cgaGFuZGxlciBjb25maWd1cmF0aW9uIGludG8gdGhlIGNoaWxkIHByb2Nl
c3NlcywKKyAgICAgICAgIyBidXQgdGhlIHdpbiBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0LgorICAg
ICAgICBjb25maWd1cmVfbG9nZ2luZyA9IChzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJykKKworICAg
ICAgICAjIEZJWE1FOiB0aGlzIHdvbid0IHdvcmsgaWYgdGhlIGNhbGxpbmcgcHJvY2VzcyBpcyBs
b2dnaW5nCisgICAgICAgICMgc29tZXdoZXJlIG90aGVyIHRoYW4gc3lzLnN0ZGVyciBhbmQgc3lz
LnN0ZG91dCwgYnV0IEknbSBub3Qgc3VyZQorICAgICAgICAjIGlmIHRoaXMgd2lsbCBiZSBhbiBp
c3N1ZSBpbiBwcmFjdGljZS4KKyAgICAgICAgc2VsZi5fcHJpbnRlciA9IHByaW50aW5nLlByaW50
ZXIocG9ydCwgc2VsZi5fb3B0aW9ucywgc3lzLnN0ZGVyciwgc3lzLnN0ZG91dCwgY29uZmlndXJl
X2xvZ2dpbmcpCisKICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbSA9IHBvcnQuaG9zdC5maWxlc3lz
dGVtCiAgICAgICAgIHNlbGYuX2JhdGNoX2NvdW50ID0gMAogICAgICAgICBzZWxmLl9iYXRjaF9z
aXplID0gc2VsZi5fb3B0aW9ucy5iYXRjaF9zaXplIG9yIDAKICAgICAgICAgdGVzdHNfcnVuX2Zp
bGVuYW1lID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYuX3Jlc3VsdHNfZGlyZWN0b3J5LCAi
dGVzdHNfcnVuJWQudHh0IiAlIHNlbGYuX3dvcmtlcl9udW1iZXIpCiAgICAgICAgIHNlbGYuX3Rl
c3RzX3J1bl9maWxlID0gc2VsZi5fZmlsZXN5c3RlbS5vcGVuX3RleHRfZmlsZV9mb3Jfd3JpdGlu
Zyh0ZXN0c19ydW5fZmlsZW5hbWUpCisgICAgICAgIHNlbGYuX2RyaXZlciA9IE5vbmUKIAotICAg
IGRlZiBjYW5jZWwoc2VsZik6Ci0gICAgICAgICIiIkF0dGVtcHQgdG8gYWJvcnQgcHJvY2Vzc2lu
ZyAoYmVzdCBlZmZvcnQpLiIiIgotICAgICAgICBzZWxmLl9jYW5jZWxlZCA9IFRydWUKLQotICAg
IGRlZiBpc19kb25lKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fZG9uZSBvciBzZWxmLl9j
YW5jZWxlZAotCi0gICAgZGVmIG5hbWUoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9uYW1l
Ci0KLSAgICBkZWYgcnVuKHNlbGYsIHBvcnQpOgotICAgICAgICBzZWxmLnNhZmVfaW5pdChwb3J0
KQorICAgIGRlZiBydW4oc2VsZiwgcG9ydD1Ob25lKToKKyAgICAgICAgc2VsZi5fZmluaXNoX2lu
aXRpYWxpemluZyhwb3J0KQogCi0gICAgICAgIGV4Y2VwdGlvbl9tc2cgPSAiIgogICAgICAgICBf
bG9nLmRlYnVnKCIlcyBzdGFydGluZyIgJSBzZWxmLl9uYW1lKQotCiAgICAgICAgIHRyeToKLSAg
ICAgICAgICAgIHNlbGYuX3dvcmtlcl9jb25uZWN0aW9uLnJ1bl9tZXNzYWdlX2xvb3AoKQotICAg
ICAgICAgICAgaWYgbm90IHNlbGYuaXNfZG9uZSgpOgotICAgICAgICAgICAgICAgIHJhaXNlIEFz
c2VydGlvbkVycm9yKCIlczogcmFuIG91dCBvZiBtZXNzYWdlcyBpbiB3b3JrZXIgcXVldWUuIgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgc2VsZi5fbmFtZSkKLSAgICAg
ICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgotICAgICAgICAgICAgZXhjZXB0aW9uX21zZyA9
ICIsIGludGVycnVwdGVkIgotICAgICAgICAgICAgc2VsZi5fd29ya2VyX2Nvbm5lY3Rpb24ucmFp
c2VfZXhjZXB0aW9uKHN5cy5leGNfaW5mbygpKQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAg
ICBleGNlcHRpb25fbXNnID0gIiwgZXhjZXB0aW9uIHJhaXNlZCIKLSAgICAgICAgICAgIHNlbGYu
X3dvcmtlcl9jb25uZWN0aW9uLnJhaXNlX2V4Y2VwdGlvbihzeXMuZXhjX2luZm8oKSkKKyAgICAg
ICAgICAgIHN1cGVyKFdvcmtlciwgc2VsZikucnVuKCkKICAgICAgICAgZmluYWxseToKLSAgICAg
ICAgICAgIF9sb2cuZGVidWcoIiVzIGRvbmUgd2l0aCBtZXNzYWdlIGxvb3AlcyIgJSAoc2VsZi5f
bmFtZSwgZXhjZXB0aW9uX21zZykpCiAgICAgICAgICAgICBzZWxmLl93b3JrZXJfY29ubmVjdGlv
bi5wb3N0X21lc3NhZ2UoJ2RvbmUnKQogICAgICAgICAgICAgc2VsZi5jbGVhbnVwKCkKKyAgICAg
ICAgICAgIHNlbGYuX3ByaW50ZXIuY2xlYW51cCgpCiAgICAgICAgICAgICBfbG9nLmRlYnVnKCIl
cyBleGl0aW5nIiAlIHNlbGYuX25hbWUpCiAKICAgICBkZWYgaGFuZGxlX3Rlc3RfbGlzdChzZWxm
LCBzcmMsIGxpc3RfbmFtZSwgdGVzdF9saXN0KToKQEAgLTExOSw3ICsxMTcsNyBAQCBjbGFzcyBX
b3JrZXIobWFuYWdlcl93b3JrZXJfYnJva2VyLkFic3RyYWN0V29ya2VyKToKICAgICAgICAgc2Vs
Zi5fd29ya2VyX2Nvbm5lY3Rpb24ucG9zdF9tZXNzYWdlKCdmaW5pc2hlZF9saXN0JywgbGlzdF9u
YW1lLCBudW1fdGVzdHMsIGVsYXBzZWRfdGltZSkKIAogICAgIGRlZiBoYW5kbGVfc3RvcChzZWxm
LCBzcmMpOgotICAgICAgICBzZWxmLl9kb25lID0gVHJ1ZQorICAgICAgICBzZWxmLnN0b3BfaGFu
ZGxpbmdfbWVzc2FnZXMoKQogCiAgICAgZGVmIF9ydW5fdGVzdChzZWxmLCB0ZXN0X2lucHV0KToK
ICAgICAgICAgdGVzdF90aW1lb3V0X3NlYyA9IHNlbGYudGltZW91dCh0ZXN0X2lucHV0KQpkaWZm
IC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90
ZXN0c19pbnRlZ3JhdGlvbnRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX2ludGVncmF0aW9udGVzdC5weQppbmRleCA4NzkzZjM3Mjc0
MTViZWQzMzFkMjNiYzgwZGU1Mjc1MzZiNjAzMjEyLi40N2QzNGRiNzBiNjczZGM0YmM1MDhhZjY3
NzBjZjRmZDQ4ZWQ3MzU3IDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX2ludGVncmF0aW9udGVzdC5weQorKysgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX2ludGVncmF0aW9u
dGVzdC5weQpAQCAtNDUsNyArNDUsNyBAQCBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1w
b3J0IHBhdGgKIAogIyBGSVhNRTogcmVtb3ZlIHRoaXMgd2hlbiB3ZSBmaXggdGVzdC13ZWJraXRw
eSB0byB3b3JrIHByb3Blcmx5IG9uIGN5Z3dpbgogIyAoYnVnIDYzODQ2KS4KLVNIT1VMRF9URVNU
X1BST0NFU1NFUyA9IHN5cy5wbGF0Zm9ybSBub3QgaW4gKCdjeWd3aW4nLCAnd2luMzInKQorU0hP
VUxEX1RFU1RfUFJPQ0VTU0VTID0gRmFsc2UgYW5kIHN5cy5wbGF0Zm9ybSBub3QgaW4gKCdjeWd3
aW4nLCAnd2luMzInKQogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbiBpbXBvcnQgYXJyYXlfc3RyZWFt
CiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IG91dHB1dGNhcHR1cmUKZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9tYWluLnB5IGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS90ZXN0L21haW4ucHkKaW5kZXggNzhjMzlkYjU1Nzk1NzZiZmY3ZTJiMzc3MzM4
OTI1YWFkYTk5ZWVjYi4uMDgwZTk0YmY3N2QyMDFmNjMyNzU4NTE4MDZlN2Y3ODM1M2IwYmVhOSAx
MDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90ZXN0L21haW4ucHkKKysrIGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS90ZXN0L21haW4ucHkKQEAgLTEsMyArMSw0IEBACisjIENvcHly
aWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIyBDb3B5cmln
aHQgKEMpIDIwMTAgQ2hyaXMgSmVyZG9uZWsgKGNqZXJkb25la0B3ZWJraXQub3JnKQogIwogIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKQEAgLTI1LDgyICsyNiwxMzUgQEAKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3B0
cGFyc2UKIGltcG9ydCBvcworaW1wb3J0IHBkYgoraW1wb3J0IHJlCiBpbXBvcnQgU3RyaW5nSU8K
IGltcG9ydCBzeXMKK2ltcG9ydCB0aW1lCiBpbXBvcnQgdHJhY2ViYWNrCiBpbXBvcnQgdW5pdHRl
c3QKIAogIyBOT1RFOiBXZSBpbnRlbnRpb25hbGx5IGRvIG5vdCBkZXBlbmQgb24gYW55dGhpbmcg
ZWxzZSBpbiB3ZWJraXRweSBoZXJlIHRvIGF2b2lkIGJyZWFraW5nIHRlc3Qtd2Via2l0cHkuCitm
cm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5jb250cm9sbGVycyBpbXBvcnQgbWFuYWdlcl93b3Jr
ZXJfYnJva2VyCiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKIAogCi1jbGFz
cyBUZXN0ZXIob2JqZWN0KToKLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGNsZWFuX3BhY2th
Z2VzKGRpcnMpOgotICAgICAgICAiIiJEZWxldGUgYWxsIC5weWMgZmlsZXMgdW5kZXIgZGlycyB0
aGF0IGhhdmUgbm8gLnB5IGZpbGUuIiIiCi0gICAgICAgIGZvciBkaXJfdG9fY2xlYW4gaW4gZGly
czoKLSAgICAgICAgICAgIF9sb2cuZGVidWcoIkNsZWFuaW5nIG9ycGhhbmVkICoucHljIGZpbGVz
IGZyb206ICVzIiAlIGRpcl90b19jbGVhbikKLSAgICAgICAgICAgIGZvciBkaXJfcGF0aCwgZGly
X25hbWVzLCBmaWxlX25hbWVzIGluIG9zLndhbGsoZGlyX3RvX2NsZWFuKToKLSAgICAgICAgICAg
ICAgICBmb3IgZmlsZV9uYW1lIGluIGZpbGVfbmFtZXM6Ci0gICAgICAgICAgICAgICAgICAgIGlm
IGZpbGVfbmFtZS5lbmRzd2l0aCgiLnB5YyIpIGFuZCBmaWxlX25hbWVbOi0xXSBub3QgaW4gZmls
ZV9uYW1lczoKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfcGF0aCA9IG9zLnBhdGguam9p
bihkaXJfcGF0aCwgZmlsZV9uYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgX2xvZy5pbmZv
KCJEZWxldGluZyBvcnBoYW4gKi5weWMgZmlsZTogJXMiICUgZmlsZV9wYXRoKQotICAgICAgICAg
ICAgICAgICAgICAgICAgb3MucmVtb3ZlKGZpbGVfcGF0aCkKK1RFU1RfREVTQ1JJUFRJT05fUkVH
RVhQID0gcmUuY29tcGlsZSgiKFx3KykgXCgoW1x3Ll0rKVwpIikKIAotICAgIGRlZiBfX2luaXRf
XyhzZWxmKToKLSAgICAgICAgc2VsZi5fdmVyYm9zaXR5ID0gMQogCi0gICAgZGVmIHBhcnNlX2Fy
Z3Moc2VsZiwgYXJndik6CitkZWYgX3Rlc3RfbmFtZSh0ZXN0KToKKyAgICBtID0gVEVTVF9ERVND
UklQVElPTl9SRUdFWFAubWF0Y2goc3RyKHRlc3QpKQorICAgIHJldHVybiAiJXMuJXMiICUgKG0u
Z3JvdXAoMiksIG0uZ3JvdXAoMSkpCisKKworY2xhc3MgVGVzdFRyZWUob2JqZWN0KToKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgdG9wX2RpcmVjdG9yeSwgc3RhcnRpbmdfc3ViZGlyZWN0b3J5LCBp
Z25vcmVfbGlzdCk6CisgICAgICAgIHNlbGYudG9wX2RpcmVjdG9yeSA9IG9zLnBhdGgucmVhbHBh
dGgodG9wX2RpcmVjdG9yeSkKKyAgICAgICAgc2VsZi5zZWFyY2hfZGlyZWN0b3J5ID0gc2VsZi50
b3BfZGlyZWN0b3J5CisgICAgICAgIHNlbGYuaWdub3JlX2xpc3QgPSBbb3MucGF0aC5qb2luKHNl
bGYudG9wX2RpcmVjdG9yeSwgeCkgZm9yIHggaW4gaWdub3JlX2xpc3RdCisgICAgICAgIHNlbGYu
dG9wX3BhY2thZ2UgPSAnJworICAgICAgICBpZiBzdGFydGluZ19zdWJkaXJlY3Rvcnk6CisgICAg
ICAgICAgICBzZWxmLnRvcF9wYWNrYWdlID0gc3RhcnRpbmdfc3ViZGlyZWN0b3J5LnJlcGxhY2Uo
b3Muc2VwLCAnLicpICsgJy4nCisgICAgICAgICAgICBzZWxmLnNlYXJjaF9kaXJlY3RvcnkgPSBv
cy5wYXRoLmpvaW4oc2VsZi50b3BfZGlyZWN0b3J5LCBzdGFydGluZ19zdWJkaXJlY3RvcnkpCisK
KyAgICBkZWYgY2xlYW4oc2VsZik6CisgICAgICAgICIiIkRlbGV0ZSBhbGwgLnB5YyBmaWxlcyBp
biB0aGUgdHJlZSB0aGF0IGhhdmUgbm8gbWF0Y2hpbmcgLnB5IGZpbGUuIiIiCisgICAgICAgIF9s
b2cuZGVidWcoIkNsZWFuaW5nIG9ycGhhbmVkICoucHljIGZpbGVzIGZyb206ICVzIiAlIHNlbGYu
c2VhcmNoX2RpcmVjdG9yeSkKKyAgICAgICAgZm9yIGRpcl9wYXRoLCBkaXJfbmFtZXMsIGZpbGVf
bmFtZXMgaW4gb3Mud2FsayhzZWxmLnNlYXJjaF9kaXJlY3RvcnkpOgorICAgICAgICAgICAgIyBG
SVhNRTogU2hvdWxkIHdlIGJlIGNsZWFuaW5nIHRoZSBpZ25vcmVkIHN1YmRpcmVjdG9yaWVzIGFz
IHdlbGw/CisgICAgICAgICAgICBmb3IgZmlsZV9uYW1lIGluIGZpbGVfbmFtZXM6CisgICAgICAg
ICAgICAgICAgaWYgZmlsZV9uYW1lLmVuZHN3aXRoKCIucHljIikgYW5kIGZpbGVfbmFtZVs6LTFd
IG5vdCBpbiBmaWxlX25hbWVzOgorICAgICAgICAgICAgICAgICAgICBmaWxlX3BhdGggPSBvcy5w
YXRoLmpvaW4oZGlyX3BhdGgsIGZpbGVfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgX2xvZy5p
bmZvKCJEZWxldGluZyBvcnBoYW4gKi5weWMgZmlsZTogJXMiICUgZmlsZV9wYXRoKQorICAgICAg
ICAgICAgICAgICAgICBvcy5yZW1vdmUoZmlsZV9wYXRoKQorCisgICAgZGVmIGZpbmRfbW9kdWxl
cyhzZWxmLCBkaXJfdG9fc2VhcmNoLCBzdWZmaXhlcyk6CisgICAgICAgIG1vZHVsZXMgPSBbXQor
ICAgICAgICBmb3IgZGlyX3BhdGgsIF8sIGZpbGVuYW1lcyBpbiBvcy53YWxrKGRpcl90b19zZWFy
Y2gpOgorICAgICAgICAgICAgZGlyX3BhdGggPSBvcy5wYXRoLmpvaW4oZGlyX3BhdGgsICcnKQor
ICAgICAgICAgICAgcGFja2FnZSA9IGRpcl9wYXRoLnJlcGxhY2Uoc2VsZi50b3BfZGlyZWN0b3J5
ICsgb3Muc2VwLCAnJykucmVwbGFjZShvcy5zZXAsICcuJykKKyAgICAgICAgICAgIGZvciBmIGlu
IGZpbGVuYW1lczoKKyAgICAgICAgICAgICAgICBpZiBhbnkoZi5lbmRzd2l0aChzdWZmaXgpIGZv
ciBzdWZmaXggaW4gc3VmZml4ZXMpOgorICAgICAgICAgICAgICAgICAgICBtb2R1bGVzLmFwcGVu
ZChwYWNrYWdlICsgZi5yZXBsYWNlKCcucHknLCAnJykpCisgICAgICAgIHJldHVybiBtb2R1bGVz
CisKKworY2xhc3MgTG9hZGVyRXJyb3IoRXhjZXB0aW9uKToKKyAgICBwYXNzCisKKworY2xhc3Mg
VGVzdGVyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0cmVhbSk6CisgICAgICAg
IHNlbGYudHJlZXMgPSBbXQorICAgICAgICBzZWxmLmxvYWRlciA9IE5vbmUKKyAgICAgICAgc2Vs
Zi5ydW5uZXIgPSBOb25lCisgICAgICAgIHNlbGYubG9nX2xldmVsID0gbG9nZ2luZy5JTkZPCisg
ICAgICAgIHNlbGYuc3RyZWFtID0gc3RyZWFtCisKKyAgICBkZWYgcGFyc2VfYXJncyhzZWxmLCBh
cmd2PU5vbmUpOgogICAgICAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodXNhZ2U9
J3VzYWdlOiAlcHJvZyBbb3B0aW9uc10gW2FyZ3MuLi5dJykKLSAgICAgICAgcGFyc2VyLmFkZF9v
cHRpb24oJy1hJywgJy0tYWxsJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncnVuIGFsbCB0aGUgdGVzdHMnKSwKLSAg
ICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1jJywgJy0tY292ZXJhZ2UnLCBhY3Rpb249J3N0b3Jl
X3RydWUnLCBkZWZhdWx0PUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdn
ZW5lcmF0ZSBjb2RlIGNvdmVyYWdlIGluZm8gKHJlcXVpcmVzIGh0dHA6Ly9weXBpLnB5dGhvbi5v
cmcvcHlwaS9jb3ZlcmFnZSknKSwKLSAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1xJywgJy0t
cXVpZXQnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICBoZWxwPSdydW4gcXVpZXRseSAoZXJyb3JzLCB3YXJuaW5ncywgYW5kIHBy
b2dyZXNzIG9ubHkpJyksCi0gICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCctcycsICctLXNpbGVu
dCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgIGhlbHA9J3J1biBzaWxlbnRseSAoZXJyb3JzIGFuZCB3YXJuaW5ncyBvbmx5KScp
LAotICAgICAgICBwYXJzZXIuYWRkX29wdGlvbignLXgnLCAnLS14bWwnLCBhY3Rpb249J3N0b3Jl
X3RydWUnLCBkZWZhdWx0PUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdv
dXRwdXQgeFVuaXQtc3R5bGUgWE1MIG91dHB1dCcpCi0gICAgICAgIHBhcnNlci5hZGRfb3B0aW9u
KCctdicsICctLXZlcmJvc2UnLCBhY3Rpb249J2NvdW50JywgZGVmYXVsdD0wLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICBoZWxwPSd2ZXJib3NlIG91dHB1dCAoc3BlY2lmeSBvbmNlIGZvciBp
bmRpdmlkdWFsIHRlc3QgcmVzdWx0cywgdHdpY2UgZm9yIGRlYnVnIG1lc3NhZ2VzKScpCi0gICAg
ICAgIHBhcnNlci5hZGRfb3B0aW9uKCctLXNraXAtaW50ZWdyYXRpb250ZXN0cycsIGFjdGlvbj0n
c3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGhl
bHA9J2RvIG5vdCBydW4gdGhlIGludGVncmF0aW9uIHRlc3RzJykKLQotICAgICAgICBwYXJzZXIu
ZXBpbG9nID0gKCdbYXJncy4uLl0gaXMgYW4gb3B0aW9uYWwgbGlzdCBvZiBtb2R1bGVzLCB0ZXN0
X2NsYXNzZXMsIG9yIGluZGl2aWR1YWwgdGVzdHMuICcKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAnSWYgbm8gYXJncyBhcmUgZ2l2ZW4sIGFsbCB0aGUgdGVzdHMgd2lsbCBiZSBydW4uJykKLQot
ICAgICAgICBzZWxmLnByb2dOYW1lID0gb3MucGF0aC5iYXNlbmFtZShhcmd2WzBdKQotICAgICAg
ICByZXR1cm4gcGFyc2VyLnBhcnNlX2FyZ3MoYXJndlsxOl0pCisgICAgICAgIGdyb3VwID0gb3B0
cGFyc2UuT3B0aW9uR3JvdXAocGFyc2VyLCAnT3B0aW9ucyBmb3IgY29udHJvbGxpbmcgd2hhdCBp
cyBwcmludGVkJykKKyAgICAgICAgZ3JvdXAuYWRkX29wdGlvbignLXEnLCAnLS1xdWlldCcsIGFj
dGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgaGVscD0ncnVuIHF1aWV0bHkgKGVycm9ycywgd2FybmluZ3MsIGFuZCBwcm9ncmVzcyBvbmx5
KScpLAorICAgICAgICBncm91cC5hZGRfb3B0aW9uKCctdCcsICctLXRpbWluZycsIGFjdGlvbj0n
c3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgaGVs
cD0nZGlzcGxheSBwZXItdGVzdCB0aW1pbmcgaW5mbycpLAorICAgICAgICBncm91cC5hZGRfb3B0
aW9uKCctdicsICctLXZlcmJvc2UnLCBhY3Rpb249J2NvdW50JywgZGVmYXVsdD0wLAorICAgICAg
ICAgICAgICAgICAgICAgICAgIGhlbHA9J3ZlcmJvc2Ugb3V0cHV0IChzcGVjaWZ5IG9uY2UgZm9y
IGluZGl2aWR1YWwgdGVzdCByZXN1bHRzLCB0d2ljZSBmb3IgZGVidWcgbWVzc2FnZXMpJykKKyAg
ICAgICAgZ3JvdXAuYWRkX29wdGlvbignLXgnLCAnLS14bWwnLCBhY3Rpb249J3N0b3JlX3RydWUn
LCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J291dHB1dCB4
VW5pdC1zdHlsZSBYTUwgb3V0cHV0IGludG8gJFBXRC90ZXN0LXdlYmtpdHB5LXhtbC1yZXBvcnRz
LycpCisgICAgICAgIGdyb3VwLmFkZF9vcHRpb24oJy1jJywgJy0tY292ZXJhZ2UnLCBhY3Rpb249
J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGhl
bHA9J2dlbmVyYXRlIGNvZGUgY292ZXJhZ2UgcmVwb3J0IChhdXRvaW5zdGFsbHMgaHR0cDovL3B5
cGkucHl0aG9uLm9yZy9weXBpL2NvdmVyYWdlKScpCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9u
X2dyb3VwKGdyb3VwKQorCisgICAgICAgICMgRklYTUU6IFdlIG5lZWQgdG8gdW5pZnkgdGhlc2Ug
dHdvIHR5cGVzIG9mIHRlc3RzIGFuZCBtYWtlIHRoZW0gY29uc2lzdGVudC4KKyAgICAgICAgZ3Jv
dXAgPSBvcHRwYXJzZS5PcHRpb25Hcm91cChwYXJzZXIsICdPcHRpb25zIGZvciBjb250cm9sbGlu
ZyB3aGljaCB0ZXN0cyBhcmUgcnVuJykKKyAgICAgICAgZ3JvdXAuYWRkX29wdGlvbignLS1za2lw
LWludGVncmF0aW9udGVzdHMnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2RvIG5vdCBydW4gdGhlICJpbnRlZ3JhdGlv
biIgKHNsb3dlcikgdGVzdHMnKQorICAgICAgICBncm91cC5hZGRfb3B0aW9uKCctaScsICctLXJ1
bi1yZWFsLWludGVncmF0aW9udGVzdHMnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZh
bHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2Fsc28gcnVuIHRoZSAicmVhbCIg
aW50ZWdyYXRpb24gdGVzdHMgKG5vcm1hbGx5IHNraXBwZWQpJykKKyAgICAgICAgZ3JvdXAuYWRk
X29wdGlvbignLWEnLCAnLS1hbGwnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNl
LAorICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3J1biBhbGwgdGhlIHRlc3RzLCBpbmNs
dWRpbmcgdGhvc2Ugbm9ybWFsbHkgc2tpcHBlZCcpLAorICAgICAgICBwYXJzZXIuYWRkX29wdGlv
bl9ncm91cChncm91cCkKKworICAgICAgICBwYXJzZXIuZXBpbG9nID0gKCdbYXJncy4uLl0gaXMg
YW4gb3B0aW9uYWwgbGlzdCBvZiBtb2R1bGVzLCB0ZXN0X2NsYXNzZXMsIG9yIGluZGl2aWR1YWwg
dGVzdHMgdG8gcnVuIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgc2V0LicpCisKKyAgICAgICAgcmV0
dXJuIHBhcnNlci5wYXJzZV9hcmdzKGFyZ3YpCiAKICAgICBkZWYgY29uZmlndXJlKHNlbGYsIG9w
dGlvbnMpOgotICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucwotCi0gICAgICAgIGlmIG9w
dGlvbnMuc2lsZW50OgotICAgICAgICAgICAgc2VsZi5fdmVyYm9zaXR5ID0gMAotICAgICAgICAg
ICAgc2VsZi5fY29uZmlndXJlX2xvZ2dpbmcobG9nZ2luZy5XQVJOSU5HKQotICAgICAgICBlbGlm
IG9wdGlvbnMucXVpZXQ6Ci0gICAgICAgICAgICBzZWxmLl92ZXJib3NpdHkgPSAxCi0gICAgICAg
ICAgICBzZWxmLl9jb25maWd1cmVfbG9nZ2luZyhsb2dnaW5nLldBUk5JTkcpCi0gICAgICAgIGVs
aWYgb3B0aW9ucy52ZXJib3NlID09IDA6Ci0gICAgICAgICAgICBzZWxmLl92ZXJib3NpdHkgPSAx
Ci0gICAgICAgICAgICBzZWxmLl9jb25maWd1cmVfbG9nZ2luZyhsb2dnaW5nLklORk8pCi0gICAg
ICAgIGVsaWYgb3B0aW9ucy52ZXJib3NlID09IDE6Ci0gICAgICAgICAgICBzZWxmLl92ZXJib3Np
dHkgPSAyCi0gICAgICAgICAgICBzZWxmLl9jb25maWd1cmVfbG9nZ2luZyhsb2dnaW5nLklORk8p
Ci0gICAgICAgIGVsaWYgb3B0aW9ucy52ZXJib3NlID09IDI6Ci0gICAgICAgICAgICBzZWxmLl92
ZXJib3NpdHkgPSAyCi0gICAgICAgICAgICBzZWxmLl9jb25maWd1cmVfbG9nZ2luZyhsb2dnaW5n
LkRFQlVHKQotCi0gICAgZGVmIF9jb25maWd1cmVfbG9nZ2luZyhzZWxmLCBsb2dfbGV2ZWwpOgor
ICAgICAgICBzZWxmLm9wdGlvbnMgPSBvcHRpb25zCisKKyAgICAgICAgc2VsZi5sb2FkZXIgPSBU
ZXN0TG9hZGVyKCkKKyAgICAgICAgc2VsZi5sb2FkZXIucnVuX3JlYWxfaW50ZWdyYXRpb25fdGVz
dHMgPSBvcHRpb25zLnJ1bl9yZWFsX2ludGVncmF0aW9udGVzdHMgb3Igb3B0aW9ucy5hbGwKKyAg
ICAgICAgaWYgc2VsZi5vcHRpb25zLnhtbDoKKyAgICAgICAgICAgIGZyb20gd2Via2l0cHkudGhp
cmRwYXJ0eS5hdXRvaW5zdGFsbGVkLnhtbHJ1bm5lciBpbXBvcnQgWE1MVGVzdFJ1bm5lcgorICAg
ICAgICAgICAgc2VsZi5ydW5uZXIgPSBYTUxUZXN0UnVubmVyKG91dHB1dD0ndGVzdC13ZWJraXRw
eS14bWwtcmVwb3J0cycpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnJ1bm5lciA9
IFRlc3RSdW5uZXIoc2VsZi5zdHJlYW0sIG9wdGlvbnMsIHN0YXJ0PXRpbWUudGltZSgpKQorCisg
ICAgZGVmIGNvbmZpZ3VyZV9sb2dnaW5nKHNlbGYpOgogICAgICAgICAiIiJDb25maWd1cmUgdGhl
IHJvb3QgbG9nZ2VyLgogCiAgICAgICAgIENvbmZpZ3VyZSB0aGUgcm9vdCBsb2dnZXIgbm90IHRv
IGxvZyBhbnkgbWVzc2FnZXMgZnJvbSB3ZWJraXRweSAtLQogICAgICAgICBleGNlcHQgZm9yIG1l
c3NhZ2VzIGZyb20gdGhlIGF1dG9pbnN0YWxsIG1vZHVsZS4gIEFsc28gc2V0IHRoZQogICAgICAg
ICBsb2dnaW5nIGxldmVsIGFzIGRlc2NyaWJlZCBiZWxvdy4KICAgICAgICAgIiIiCi0gICAgICAg
IGhhbmRsZXIgPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoc3lzLnN0ZGVycikKKyAgICAgICAgbWVz
c2FnZXMgPSBbXQorCisgICAgICAgIGlmIHNlbGYub3B0aW9ucy50aW1pbmcgYW5kIG5vdCBzZWxm
Lm9wdGlvbnMudmVyYm9zZToKKyAgICAgICAgICAgIHNlbGYub3B0aW9ucy52ZXJib3NlID0gMQor
ICAgICAgICAgICAgbWVzc2FnZXMuYXBwZW5kKChsb2dnaW5nLklORk8sICctLXRpbWluZyBpbXBs
aWVzIC0tdmVyYm9zZScpKQorCisgICAgICAgIHNlbGYubG9nX2xldmVsID0gbG9nZ2luZy5JTkZP
CisgICAgICAgIGlmIHNlbGYub3B0aW9ucy52ZXJib3NlOgorICAgICAgICAgICAgaWYgc2VsZi5v
cHRpb25zLnF1aWV0OgorICAgICAgICAgICAgICAgIG1lc3NhZ2VzLmFwcGVuZCgobG9nZ2luZy5X
QVJOSU5HLCAnLS12ZXJib3NlIG92ZXJyaWRlcyAtLXF1aWV0JykpCisgICAgICAgICAgICBpZiBz
ZWxmLm9wdGlvbnMudmVyYm9zZSA+IDE6CisgICAgICAgICAgICAgICAgc2VsZi5sb2dfbGV2ZWwg
PSBsb2dnaW5nLkRFQlVHCisgICAgICAgIGVsaWYgc2VsZi5vcHRpb25zLnF1aWV0OgorICAgICAg
ICAgICAgc2VsZi5sb2dfbGV2ZWwgPSBsb2dnaW5nLldBUk5JTkcKKworICAgICAgICBoYW5kbGVy
ID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKHNlbGYuc3RyZWFtKQogICAgICAgICAjIFdlIGNvbnN0
cmFpbiB0aGUgbGV2ZWwgb24gdGhlIGhhbmRsZXIgcmF0aGVyIHRoYW4gb24gdGhlIHJvb3QKICAg
ICAgICAgIyBsb2dnZXIgaXRzZWxmLiAgVGhpcyBpcyBwcm9iYWJseSBiZXR0ZXIgYmVjYXVzZSB0
aGUgaGFuZGxlciBpcwogICAgICAgICAjIGNvbmZpZ3VyZWQgYW5kIGtub3duIG9ubHkgdG8gdGhp
cyBtb2R1bGUsIHdoZXJlYXMgdGhlIHJvb3QgbG9nZ2VyCkBAIC0xMDgsNyArMTYyLDcgQEAgY2xh
c3MgVGVzdGVyKG9iamVjdCk6CiAgICAgICAgICMgTW9kaWZ5aW5nIHRoZSBoYW5kbGVyLCB0aGVu
LCBpcyBsZXNzIGludHJ1c2l2ZSBhbmQgbGVzcyBsaWtlbHkgdG8KICAgICAgICAgIyBpbnRlcmZl
cmUgd2l0aCBtb2RpZmljYXRpb25zIG1hZGUgYnkgb3RoZXIgbW9kdWxlcyAoZS5nLiBpbiB1bml0
CiAgICAgICAgICMgdGVzdHMpLgotICAgICAgICBoYW5kbGVyLnNldExldmVsKGxvZ19sZXZlbCkK
KyAgICAgICAgaGFuZGxlci5zZXRMZXZlbChzZWxmLmxvZ19sZXZlbCkKICAgICAgICAgZm9ybWF0
dGVyID0gbG9nZ2luZy5Gb3JtYXR0ZXIoIiUobWVzc2FnZSlzIikKICAgICAgICAgaGFuZGxlci5z
ZXRGb3JtYXR0ZXIoZm9ybWF0dGVyKQogCkBAIC0xMzYsMTExICsxOTAsMzA1IEBAIGNsYXNzIFRl
c3RlcihvYmplY3QpOgogICAgICAgICB0ZXN0aW5nX2ZpbHRlciA9IGxvZ2dpbmcuRmlsdGVyKCkK
ICAgICAgICAgdGVzdGluZ19maWx0ZXIuZmlsdGVyID0gZmlsdGVyCiAKKyAgICAgICAgZm9yIGxl
dmVsLCBtc2cgaW4gbWVzc2FnZXM6CisgICAgICAgICAgICBfbG9nLmxvZyhsZXZlbCwgbXNnKQor
CiAgICAgICAgICMgRGlzcGxheSBhIG1lc3NhZ2Ugc28gZGV2ZWxvcGVycyBhcmUgbm90IG15c3Rp
ZmllZCBhcyB0byB3aHkKICAgICAgICAgIyBsb2dnaW5nIGRvZXMgbm90IHdvcmsgaW4gdGhlIHVu
aXQgdGVzdHMuCiAgICAgICAgIF9sb2cuaW5mbygiU3VwcHJlc3NpbmcgbW9zdCB3ZWJraXRweSBs
b2dnaW5nIHdoaWxlIHJ1bm5pbmcgdW5pdCB0ZXN0cy4iKQogICAgICAgICBoYW5kbGVyLmFkZEZp
bHRlcih0ZXN0aW5nX2ZpbHRlcikKIAotICAgIGRlZiBydW4oc2VsZiwgZGlycywgYXJncyk6Ci0g
ICAgICAgIGFyZ3MgPSBhcmdzIG9yIHNlbGYuX2ZpbmRfbW9kdWxlcyhkaXJzKQotICAgICAgICBy
ZXR1cm4gc2VsZi5fcnVuX3Rlc3RzKGRpcnMsIGFyZ3MpCi0KLSAgICBkZWYgX2ZpbmRfbW9kdWxl
cyhzZWxmLCBkaXJzKToKLSAgICAgICAgbW9kdWxlcyA9IFtdCi0gICAgICAgIGZvciBkaXJfdG9f
c2VhcmNoIGluIGRpcnM6Ci0gICAgICAgICAgICBtb2R1bGVzLmV4dGVuZChzZWxmLl9maW5kX21v
ZHVsZXNfdW5kZXIoZGlyX3RvX3NlYXJjaCwgJ191bml0dGVzdC5weScpKQotICAgICAgICAgICAg
aWYgbm90IHNlbGYuX29wdGlvbnMuc2tpcF9pbnRlZ3JhdGlvbnRlc3RzOgotICAgICAgICAgICAg
ICAgIG1vZHVsZXMuZXh0ZW5kKHNlbGYuX2ZpbmRfbW9kdWxlc191bmRlcihkaXJfdG9fc2VhcmNo
LCAnX2ludGVncmF0aW9udGVzdC5weScpKQotICAgICAgICBtb2R1bGVzLnNvcnQoKQotCi0gICAg
ICAgIGZvciBtb2R1bGUgaW4gbW9kdWxlczoKLSAgICAgICAgICAgIF9sb2cuZGVidWcoIkZvdW5k
OiAlcyIgJSBtb2R1bGUpCi0KLSAgICAgICAgIyBGSVhNRTogRmlndXJlIG91dCBob3cgdG8gbW92
ZSB0aGlzIHRvIHRlc3Qtd2Via2l0cHkgaW4gb3JkZXIgdG8gdG8gbWFrZSB0aGlzIGZpbGUgbW9y
ZSBnZW5lcmljLgotICAgICAgICBpZiBub3Qgc2VsZi5fb3B0aW9ucy5hbGw6Ci0gICAgICAgICAg
ICBzbG93X3Rlc3RzID0gKCd3ZWJraXRweS5jb21tb24uY2hlY2tvdXQuc2NtLnNjbV91bml0dGVz
dCcsKQotICAgICAgICAgICAgc2VsZi5fZXhjbHVkZShtb2R1bGVzLCBzbG93X3Rlc3RzLCAnYXJl
IHJlYWxseSwgcmVhbGx5IHNsb3cnLCAzMTgxOCkKLQotICAgICAgICAgICAgaWYgc3lzLnBsYXRm
b3JtID09ICd3aW4zMic6Ci0gICAgICAgICAgICAgICAgd2luMzJfYmxhY2tsaXN0ID0gKCd3ZWJr
aXRweS5jb21tb24uY2hlY2tvdXQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnd2Via2l0cHkuY29tbW9uLmNvbmZpZycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICd3ZWJraXRweS50b29sJykKLSAgICAgICAgICAgICAgICBzZWxmLl9leGNsdWRlKG1v
ZHVsZXMsIHdpbjMyX2JsYWNrbGlzdCwgJ2ZhaWwgaG9ycmlibHkgb24gd2luMzInLCA1NDUyNikK
LQorICAgIGRlZiBhZGRfdHJlZShzZWxmLCB0b3BfZGlyZWN0b3J5LCBzdGFydGluZ19zdWJkaXJl
Y3Rvcnk9Tm9uZSwgaWdub3JlX2xpc3Q9Tm9uZSk6CisgICAgICAgIHNlbGYudHJlZXMuYXBwZW5k
KFRlc3RUcmVlKHRvcF9kaXJlY3RvcnksIHN0YXJ0aW5nX3N1YmRpcmVjdG9yeSwgaWdub3JlX2xp
c3Qgb3IgW10pKQorCisgICAgZGVmIHJ1bihzZWxmLCBhcmdzKToKKyAgICAgICAgc2VsZi5fY2xl
YW5fdHJlZXMoKQorICAgICAgICBzZWxmLl9maXhfcGF0aCgpCisKKyAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgY292ID0gTm9uZQorICAgICAgICAgICAgaWYgc2VsZi5vcHRpb25zLmNvdmVyYWdl
OgorICAgICAgICAgICAgICAgIGNvdiA9IHNlbGYuX2NvdmVyYWdlX29iamVjdCgpCisgICAgICAg
ICAgICAgICAgY292LnN0YXJ0KCkKKworICAgICAgICAgICAgX2xvZy5kZWJ1ZygiTG9hZGluZyB0
aGUgdGVzdHMuLi4iKQorICAgICAgICAgICAgaWYgYXJnczoKKyAgICAgICAgICAgICAgICB0ZXN0
cyA9IFtdCisgICAgICAgICAgICAgICAgZm9yIGFyZyBpbiBhcmdzOgorICAgICAgICAgICAgICAg
ICAgICB0ZXN0cy5leHRlbmQoc2VsZi5fZmluZF90ZXN0c19mb3IoYXJnKSkKKyAgICAgICAgICAg
IGVsc2U6CisgICAgICAgICAgICAgICAgIyBGSVhNRTogQ29uc2lkZXIgcnVubmluZyBlYWNoIHRy
ZWUgc2VwYXJhdGVseSB0byBhdm9pZCBuYW1lc3BhY2UgY2xhc2hlcy4KKyAgICAgICAgICAgICAg
ICB0ZXN0cyA9IHNlbGYuX2RlZmF1bHRfdGVzdHMoKQorCisgICAgICAgICAgICByZXN1bHQgPSBz
ZWxmLl9ydW5fdGVzdHModGVzdHMpCisgICAgICAgICAgICBpZiBjb3Y6CisgICAgICAgICAgICAg
ICAgY292LnN0b3AoKQorICAgICAgICAgICAgICAgIGNvdi5yZXBvcnQoc2hvd19taXNzaW5nPUZh
bHNlKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC53YXNTdWNjZXNzZnVsCisKKyAgICAgICAg
ZXhjZXB0IExvYWRlckVycm9yLCBlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBk
ZWYgX2ZpeF9wYXRoKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSBQWVRIT05QQVRIIGlzIHNl
dCB1cCBjb3JyZWN0bHkuCisgICAgICAgIHN5cy5wYXRoID0gW3RyZWUudG9wX2RpcmVjdG9yeSBm
b3IgdHJlZSBpbiBzZWxmLnRyZWVzIGlmIHRyZWUudG9wX2RpcmVjdG9yeSBub3QgaW4gc3lzLnBh
dGhdICsgc3lzLnBhdGgKKworICAgIGRlZiBfY2xlYW5fdHJlZXMoc2VsZik6CisgICAgICAgIGZv
ciB0cmVlIGluIHNlbGYudHJlZXM6CisgICAgICAgICAgICB0cmVlLmNsZWFuKCkKKworICAgIGRl
ZiBfY292ZXJhZ2Vfb2JqZWN0KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpbXBv
cnQgd2Via2l0cHkudGhpcmRwYXJ0eS5hdXRvaW5zdGFsbGVkLmNvdmVyYWdlIGFzIGNvdmVyYWdl
CisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciwgZToKKyAgICAgICAgICAgIF9sb2cuZXJyb3Io
IkZhaWxlZCB0byBpbXBvcnQgJ2NvdmVyYWdlJzsgY2FuJ3QgZ2VuZXJhdGUgY292ZXJhZ2UgbnVt
YmVycy4iKQorICAgICAgICAgICAgcmFpc2UgTG9hZGVyRXJyb3IoKQorCisgICAgICAgIGluY2x1
ZGUgPSBbb3MucGF0aC5qb2luKHRyZWUuc2VhcmNoX2RpcmVjdG9yeSwgJyonKSBmb3IgdHJlZSBp
biBzZWxmLnRyZWVzXQorICAgICAgICBvbWl0ID0gW10KKyAgICAgICAgZm9yIHRyZWUgaW4gc2Vs
Zi50cmVlczoKKyAgICAgICAgICAgIGZvciBwYXRoIGluIHRyZWUuaWdub3JlX2xpc3Q6CisgICAg
ICAgICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihwYXRoKToKKyAgICAgICAgICAgICAgICAgICAg
b21pdC5hcHBlbmQob3MucGF0aC5qb2luKHBhdGgsICcqJykpCisgICAgICAgICAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgICAgICAgICAgb21pdC5hcHBlbmQocGF0aCkKKyAgICAgICAgcmV0dXJu
IGNvdmVyYWdlLmNvdmVyYWdlKGluY2x1ZGU9aW5jbHVkZSwgb21pdD1vbWl0KQorCisgICAgZGVm
IF9maW5kX21vZHVsZXMoc2VsZiwgdHJlZSwgZGlyX3RvX3NlYXJjaCk6CisgICAgICAgIHN1ZmZp
eGVzID0gKCdfdW5pdHRlc3QucHknLCAnX2ludGVncmF0aW9udGVzdC5weScpCisgICAgICAgIGlm
IHNlbGYub3B0aW9ucy5za2lwX2ludGVncmF0aW9udGVzdHM6CisgICAgICAgICAgICBzdWZmaXhl
cyA9ICgnX3VuaXR0ZXN0LnB5JywpCisgICAgICAgIHJldHVybiB0cmVlLmZpbmRfbW9kdWxlcyhk
aXJfdG9fc2VhcmNoLCBzdWZmaXhlcykKKworICAgIGRlZiBfZGVmYXVsdF90ZXN0cyhzZWxmKToK
KyAgICAgICAgdGVzdHMgPSBbXQorICAgICAgICBmb3IgdHJlZSBpbiBzZWxmLnRyZWVzOgorICAg
ICAgICAgICAgdGVzdHMuZXh0ZW5kKHNlbGYuX2ZpbmRfbW9kdWxlcyh0cmVlLCB0cmVlLnNlYXJj
aF9kaXJlY3RvcnkpKQorICAgICAgICByZXR1cm4gdGVzdHMKKworICAgIGRlZiBfc2tpcF9tb2R1
bGVzKHNlbGYsIG1vZHVsZXMpOgorICAgICAgICAjIEZJWE1FOiBUaGVzZSBzaG91bGQgYmUgcmVw
bGFjZWQgdy8gQHNsb3cgYW5kIEBza2lwX2lmIGRlY29yYXRvcnMKKyAgICAgICAgc2xvd190ZXN0
cyA9ICgnd2Via2l0cHkuY29tbW9uLmNoZWNrb3V0LnNjbS5zY21fdW5pdHRlc3QnLCkKKyAgICAg
ICAgc2VsZi5fZXhjbHVkZShtb2R1bGVzLCBzbG93X3Rlc3RzLCAnYXJlIHJlYWxseSwgcmVhbGx5
IHNsb3cnLCAzMTgxOCkKKworICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAg
ICAgICAgICAgIHdpbjMyX2JsYWNrbGlzdCA9ICgnd2Via2l0cHkuY29tbW9uLmNoZWNrb3V0JywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dlYmtpdHB5LmNvbW1vbi5jb25maWcn
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2Via2l0cHkudG9vbCcpCisgICAg
ICAgICAgICBzZWxmLl9leGNsdWRlKG1vZHVsZXMsIHdpbjMyX2JsYWNrbGlzdCwgJ2ZhaWwgaG9y
cmlibHkgb24gd2luMzInLCA1NDUyNikKICAgICAgICAgcmV0dXJuIG1vZHVsZXMKIAogICAgIGRl
ZiBfZXhjbHVkZShzZWxmLCBtb2R1bGVzLCBtb2R1bGVfcHJlZml4ZXMsIHJlYXNvbiwgYnVnaWQp
OgotICAgICAgICBfbG9nLmluZm8oJ1NraXBwaW5nIHRlc3RzIGluIHRoZSBmb2xsb3dpbmcgbW9k
dWxlcyBvciBwYWNrYWdlcyBiZWNhdXNlIHRoZXkgJXM6JyAlIHJlYXNvbikKKyAgICAgICAgc2tp
cHBlZF9hbnkgPSBGYWxzZQogICAgICAgICBmb3IgcHJlZml4IGluIG1vZHVsZV9wcmVmaXhlczoK
LSAgICAgICAgICAgIF9sb2cuaW5mbygnICAgICVzJyAlIHByZWZpeCkKICAgICAgICAgICAgIG1v
ZHVsZXNfdG9fZXhjbHVkZSA9IGZpbHRlcihsYW1iZGEgbTogbS5zdGFydHN3aXRoKHByZWZpeCks
IG1vZHVsZXMpCi0gICAgICAgICAgICBmb3IgbSBpbiBtb2R1bGVzX3RvX2V4Y2x1ZGU6Ci0gICAg
ICAgICAgICAgICAgaWYgbGVuKG1vZHVsZXNfdG9fZXhjbHVkZSkgPiAxOgorICAgICAgICAgICAg
aWYgbW9kdWxlc190b19leGNsdWRlOgorICAgICAgICAgICAgICAgIGlmIG5vdCBza2lwcGVkX2Fu
eToKKyAgICAgICAgICAgICAgICAgICAgX2xvZy5pbmZvKCdTa2lwcGluZyB0ZXN0cyBpbiB0aGUg
Zm9sbG93aW5nIG1vZHVsZXMgb3IgcGFja2FnZXMgYmVjYXVzZSB0aGV5ICVzOicgJSByZWFzb24p
CisgICAgICAgICAgICAgICAgICAgIHNraXBwZWRfYW55ID0gVHJ1ZQorICAgICAgICAgICAgICAg
IF9sb2cuaW5mbygnICAgICVzJyAlIHByZWZpeCkKKyAgICAgICAgICAgICAgICBmb3IgbSBpbiBt
b2R1bGVzX3RvX2V4Y2x1ZGU6CiAgICAgICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoJyAgICAg
ICAgJXMnICUgbSkKICAgICAgICAgICAgICAgICBtb2R1bGVzLnJlbW92ZShtKQotICAgICAgICBf
bG9nLmluZm8oJyAgICAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPSVk
OyB1c2UgLS1hbGwgdG8gaW5jbHVkZSknICUgYnVnaWQpCi0gICAgICAgIF9sb2cuaW5mbygnJykK
LQotICAgIGRlZiBfZmluZF9tb2R1bGVzX3VuZGVyKHNlbGYsIGRpcl90b19zZWFyY2gsIHN1ZmZp
eCk6CiAKLSAgICAgICAgZGVmIHRvX3BhY2thZ2UoZGlyX3BhdGgpOgotICAgICAgICAgICAgcmV0
dXJuIGRpcl9wYXRoLnJlcGxhY2UoZGlyX3RvX3NlYXJjaCArIG9zLnNlcCwgJycpLnJlcGxhY2Uo
b3Muc2VwLCAnLicpCisgICAgICAgIGlmIHNraXBwZWRfYW55OgorICAgICAgICAgICAgX2xvZy5p
bmZvKCcgICAgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0lZDsgdXNl
IC0tYWxsIHRvIGluY2x1ZGUpJyAlIGJ1Z2lkKQorICAgICAgICAgICAgX2xvZy5pbmZvKCcnKQog
Ci0gICAgICAgIGRlZiB0b19tb2R1bGUoZmlsZW5hbWUsIHBhY2thZ2UpOgotICAgICAgICAgICAg
cmV0dXJuIHBhY2thZ2UgKyAnLicgKyBmaWxlbmFtZS5yZXBsYWNlKCcucHknLCAnJykKLQotICAg
ICAgICBtb2R1bGVzID0gW10KLSAgICAgICAgZm9yIGRpcl9wYXRoLCBfLCBmaWxlbmFtZXMgaW4g
b3Mud2FsayhkaXJfdG9fc2VhcmNoKToKLSAgICAgICAgICAgIHBhY2thZ2UgPSB0b19wYWNrYWdl
KGRpcl9wYXRoKQotICAgICAgICAgICAgbW9kdWxlcy5leHRlbmQodG9fbW9kdWxlKGYsIHBhY2th
Z2UpIGZvciBmIGluIGZpbGVuYW1lcyBpZiBmLmVuZHN3aXRoKHN1ZmZpeCkpCi0gICAgICAgIHJl
dHVybiBtb2R1bGVzCi0KLSAgICBkZWYgX3J1bl90ZXN0cyhzZWxmLCBkaXJzLCBhcmdzKToKLSAg
ICAgICAgaWYgc2VsZi5fb3B0aW9ucy5jb3ZlcmFnZToKKyAgICBkZWYgX2ZpbmRfdGVzdHNfZm9y
KHNlbGYsIG5hbWUpOgorICAgICAgICAodHJlZSwgc3RhcnRpbmdfZGlyZWN0b3J5KSA9IHNlbGYu
X2ZpbmRfdHJlZShuYW1lKQorICAgICAgICBpZiB0cmVlIGFuZCBub3Qgb3MucGF0aC5pc2ZpbGUo
c3RhcnRpbmdfZGlyZWN0b3J5KToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9maW5kX21vZHVs
ZXModHJlZSwgc3RhcnRpbmdfZGlyZWN0b3J5KQorICAgICAgICBlbGlmIG9zLnBhdGguZXhpc3Rz
KG5hbWUpOgorICAgICAgICAgICAgcmV0dXJuIFtzZWxmLl90ZXN0X2Zyb21fcGF0aChuYW1lKV0K
KyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBbbmFtZV0KKworICAgIGRlZiBfdGVz
dF9mcm9tX3BhdGgoc2VsZiwgbmFtZSk6CisgICAgICAgICMgRmlyc3QsIGNoZWNrIHRvIHNlZSBp
ZiB3ZSBjYW4gcmVzb2x2ZSB0aGUgcGF0aCByZWxhdGl2ZSB0byB0aGUgY3dkLgorICAgICAgICBm
dWxsX3BhdGggPSBvcy5wYXRoLnJlYWxwYXRoKG5hbWUpCisgICAgICAgIGZvciB0cmVlIGluIHNl
bGYudHJlZXM6CisgICAgICAgICAgICAjIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIHdvcnJ5IGFib3V0
IGNhc2UtaW5zZW5zaXRpdml0eSBoZXJlPworICAgICAgICAgICAgaWYgZnVsbF9wYXRoLnN0YXJ0
c3dpdGgodHJlZS50b3BfZGlyZWN0b3J5KToKKyAgICAgICAgICAgICAgICByZXR1cm4gZnVsbF9w
YXRoLnJlcGxhY2UodHJlZS50b3BfZGlyZWN0b3J5ICsgb3Muc2VwLCAnJykucmVwbGFjZSgnLnB5
JywgJycpLnJlcGxhY2Uob3Muc2VwLCAnLicpCisKKyAgICAgICAgZXJyID0gJyVzIGlzIG5vdCBp
biBvbmUgb2YgdGhlIFdlYktpdCBweXRob24gdHJlZXMnICUgbmFtZQorICAgICAgICBfbG9nLmZh
dGFsKGVycikKKyAgICAgICAgcmFpc2UgTG9hZGVyRXJyb3IoZXJyKQorCisgICAgZGVmIF9zdWl0
ZV9mcm9tX25hbWUoc2VsZiwgbmFtZSk6CisgICAgICAgIGlmIHNlbGYuX2lzX21vZHVsZShuYW1l
KToKKyAgICAgICAgICAgICMgaW1wb3J0IG1vZHVsZXMgZXhwbGljaXRseSBiZWZvcmUgbG9hZGlu
ZyB0aGVpciB0ZXN0cyBiZWNhdXNlCisgICAgICAgICAgICAjIGxvYWRUZXN0c0Zyb21OYW1lKCkg
cHJvZHVjZXMgbG91c3kgZXJyb3IgbWVzc2FnZXMgZm9yIGJhZCBtb2R1bGVzLgogICAgICAgICAg
ICAgdHJ5OgotICAgICAgICAgICAgICAgIGltcG9ydCBjb3ZlcmFnZQorICAgICAgICAgICAgICAg
IF9faW1wb3J0X18obmFtZSkKICAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciwgZToKLSAg
ICAgICAgICAgICAgICBfbG9nLmVycm9yKCJGYWlsZWQgdG8gaW1wb3J0ICdjb3ZlcmFnZSc7IGNh
bid0IGdlbmVyYXRlIGNvdmVyYWdlIG51bWJlcnMuIikKLSAgICAgICAgICAgICAgICByZXR1cm4g
RmFsc2UKLSAgICAgICAgICAgIGNvdiA9IGNvdmVyYWdlLmNvdmVyYWdlKCkKLSAgICAgICAgICAg
IGNvdi5zdGFydCgpCi0KLSAgICAgICAgX2xvZy5kZWJ1ZygiTG9hZGluZyB0aGUgdGVzdHMuLi4i
KQotCi0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LmRlZmF1bHRUZXN0TG9hZGVyCi0gICAgICAg
IHN1aXRlcyA9IFtdCi0gICAgICAgIGZvciBuYW1lIGluIGFyZ3M6Ci0gICAgICAgICAgICBpZiBz
ZWxmLl9pc19tb2R1bGUoZGlycywgbmFtZSk6Ci0gICAgICAgICAgICAgICAgIyBpbXBvcnQgbW9k
dWxlcyBleHBsaWNpdGx5IGJlZm9yZSBsb2FkaW5nIHRoZWlyIHRlc3RzIGJlY2F1c2UKLSAgICAg
ICAgICAgICAgICAjIGxvYWRUZXN0c0Zyb21OYW1lKCkgcHJvZHVjZXMgbG91c3kgZXJyb3IgbWVz
c2FnZXMgZm9yIGJhZCBtb2R1bGVzLgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAg
ICAgICAgICAgX19pbXBvcnRfXyhuYW1lKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRF
cnJvciwgZToKLSAgICAgICAgICAgICAgICAgICAgX2xvZy5mYXRhbCgnRmFpbGVkIHRvIGltcG9y
dCAlczonICUgbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fbG9nX2V4Y2VwdGlvbigp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICAgICAgc3VpdGVzLmFw
cGVuZChsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUobmFtZSwgTm9uZSkpCi0KLSAgICAgICAgdGVz
dF9zdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShzdWl0ZXMpCi0gICAgICAgIGlmIHNlbGYuX29w
dGlvbnMueG1sOgotICAgICAgICAgICAgZnJvbSB3ZWJraXRweS50aGlyZHBhcnR5LmF1dG9pbnN0
YWxsZWQueG1scnVubmVyIGltcG9ydCBYTUxUZXN0UnVubmVyCi0gICAgICAgICAgICB0ZXN0X3J1
bm5lciA9IFhNTFRlc3RSdW5uZXIob3V0cHV0PSd0ZXN0LXdlYmtpdHB5LXhtbC1yZXBvcnRzJykK
LSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHRlc3RfcnVubmVyID0gdW5pdHRlc3QuVGV4dFRl
c3RSdW5uZXIodmVyYm9zaXR5PXNlbGYuX3ZlcmJvc2l0eSkKLQotICAgICAgICBfbG9nLmRlYnVn
KCJSdW5uaW5nIHRoZSB0ZXN0cy4iKQotICAgICAgICByZXN1bHQgPSB0ZXN0X3J1bm5lci5ydW4o
dGVzdF9zdWl0ZSkKLSAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5jb3ZlcmFnZToKLSAgICAgICAg
ICAgIGNvdi5zdG9wKCkKLSAgICAgICAgICAgIGNvdi5zYXZlKCkKLSAgICAgICAgcmV0dXJuIHJl
c3VsdC53YXNTdWNjZXNzZnVsKCkKLQotICAgIGRlZiBfaXNfbW9kdWxlKHNlbGYsIGRpcnMsIG5h
bWUpOgorICAgICAgICAgICAgICAgIF9sb2cuZmF0YWwoJ0ZhaWxlZCB0byBpbXBvcnQgJXM6JyAl
IG5hbWUpCisgICAgICAgICAgICAgICAgc2VsZi5fbG9nX2V4Y2VwdGlvbigpCisgICAgICAgICAg
ICAgICAgcmFpc2UgTG9hZGVyRXJyb3IoKQorICAgICAgICByZXR1cm4gc2VsZi5sb2FkZXIubG9h
ZFRlc3RzRnJvbU5hbWUobmFtZSwgTm9uZSkKKworICAgIGRlZiBfZmluZF90cmVlKHNlbGYsIG5h
bWUpOgorICAgICAgICAjIElzIHRoZSBuYW1lIGEgc3ViZGlyZWN0b3J5IHJlbGF0aXZlIHRvIHRo
ZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGFuZCBpbiBhIHRyZWU/CisgICAgICAgIGlmIG9z
LnBhdGguZXhpc3RzKG5hbWUpOgorICAgICAgICAgICAgZnVsbF9wYXRoID0gb3MucGF0aC5yZWFs
cGF0aChuYW1lKQorICAgICAgICAgICAgZm9yIHRyZWUgaW4gc2VsZi50cmVlczoKKyAgICAgICAg
ICAgICAgICBpZiBmdWxsX3BhdGguc3RhcnRzd2l0aCh0cmVlLnRvcF9kaXJlY3RvcnkpOgorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gKHRyZWUsIGZ1bGxfcGF0aCkKKworICAgICAgICAjIElz
IHRoZSBuYW1lIGEgc3ViZGlyZWN0b3J5IG9mIGEgdHJlZT8KKyAgICAgICAgaWYgbm90IG9zLnBh
dGguaXNhYnMobmFtZSk6CisgICAgICAgICAgICBmb3IgdHJlZSBpbiBzZWxmLnRyZWVzOgorICAg
ICAgICAgICAgICAgIGZ1bGxfcGF0aCA9IG9zLnBhdGgucmVhbHBhdGgob3MucGF0aC5qb2luKHRy
ZWUudG9wX2RpcmVjdG9yeSwgbmFtZSkpCisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2Rp
cihmdWxsX3BhdGgpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHRyZWUsIG9zLnBhdGgu
am9pbih0cmVlLnRvcF9kaXJlY3RvcnksIG5hbWUpKQorCisgICAgICAgICMgSXMgdGhlIG5hbWUg
YSBwYWNrYWdlPworICAgICAgICByZWxwYXRoID0gbmFtZS5yZXBsYWNlKCcuJywgb3Muc2VwKQor
ICAgICAgICBmb3IgdHJlZSBpbiBzZWxmLnRyZWVzOgorICAgICAgICAgICAgZnVsbF9wYXRoID0g
b3MucGF0aC5qb2luKHRyZWUudG9wX2RpcmVjdG9yeSwgcmVscGF0aCkKKyAgICAgICAgICAgIGlm
IG9zLnBhdGguaXNkaXIoZnVsbF9wYXRoKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKHRyZWUs
IGZ1bGxfcGF0aCkKKworICAgICAgICByZXR1cm4gKE5vbmUsIE5vbmUpCisKKyAgICBkZWYgX2lz
X21vZHVsZShzZWxmLCBuYW1lKToKICAgICAgICAgcmVscGF0aCA9IG5hbWUucmVwbGFjZSgnLics
IG9zLnNlcCkgKyAnLnB5JwotICAgICAgICByZXR1cm4gYW55KG9zLnBhdGguZXhpc3RzKG9zLnBh
dGguam9pbihkLCByZWxwYXRoKSkgZm9yIGQgaW4gZGlycykKKyAgICAgICAgcmV0dXJuIGFueShv
cy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4odHJlZS50b3BfZGlyZWN0b3J5LCByZWxwYXRoKSkg
Zm9yIHRyZWUgaW4gc2VsZi50cmVlcykKKworICAgIGRlZiBfcnVuX3Rlc3RzKHNlbGYsIHRlc3Rz
KToKKyAgICAgICAgIyBTb3J0IGFuZCBkZWR1cGxpY2F0ZSBhbGwgb2YgdGhlIHRlc3RzCisgICAg
ICAgIHRlc3RzID0gc29ydGVkKFt0ZXN0IGZvciB0ZXN0IGluIHNldCh0ZXN0cyldKQorCisgICAg
ICAgIGZvciB0ZXN0IGluIHRlc3RzOgorICAgICAgICAgICAgX2xvZy5kZWJ1ZygiRm91bmQ6ICVz
IiAlIHRlc3QpCisKKyAgICAgICAgaWYgbm90IHNlbGYub3B0aW9ucy5hbGw6CisgICAgICAgICAg
ICB0ZXN0cyA9IHNlbGYuX3NraXBfbW9kdWxlcyh0ZXN0cykKKworICAgICAgICBkZWYgYWxsX3Rl
c3RfbmFtZXMoc3VpdGUpOgorICAgICAgICAgICAgbmFtZXMgPSBbXQorICAgICAgICAgICAgaWYg
aGFzYXR0cihzdWl0ZSwgJ190ZXN0cycpOgorICAgICAgICAgICAgICAgIGZvciB0IGluIHN1aXRl
Ll90ZXN0czoKKyAgICAgICAgICAgICAgICAgICAgbmFtZXMuZXh0ZW5kKGFsbF90ZXN0X25hbWVz
KHQpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBuYW1lcy5hcHBlbmQoX3Rl
c3RfbmFtZShzdWl0ZSkpCisgICAgICAgICAgICByZXR1cm4gbmFtZXMKKworICAgICAgICBzdWl0
ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbc2VsZi5fc3VpdGVfZnJvbV9uYW1lKHRlc3QpIGZvciB0
ZXN0IGluIHRlc3RzXSkKKyAgICAgICAgaWYgc2VsZi5vcHRpb25zLnhtbDoKKyAgICAgICAgICAg
IHJldHVybiBzZWxmLnJ1bm5lci5ydW4oc3VpdGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICByZXR1cm4gc2VsZi5ydW5uZXIucnVuKGFsbF90ZXN0X25hbWVzKHN1aXRlKSkKIAogICAgIGRl
ZiBfbG9nX2V4Y2VwdGlvbihzZWxmKToKICAgICAgICAgcyA9IFN0cmluZ0lPLlN0cmluZ0lPKCkK
ICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YyhmaWxlPXMpCiAgICAgICAgIGZvciBsIGluIHMu
YnVmbGlzdDoKICAgICAgICAgICAgIF9sb2cuZXJyb3IoJyAgJyArIGwucnN0cmlwKCkpCisKKwor
Y2xhc3MgVGVzdExvYWRlcih1bml0dGVzdC5UZXN0TG9hZGVyKToKKyAgICBkZWYgX19pbml0X18o
c2VsZik6CisgICAgICAgIHNlbGYucnVuX3JlYWxfaW50ZWdyYXRpb25fdGVzdHMgPSBGYWxzZQor
ICAgICAgICBzdXBlcihUZXN0TG9hZGVyLCBzZWxmKS5fX2luaXRfXygpCisKKyAgICBkZWYgZ2V0
VGVzdENhc2VOYW1lcyhzZWxmLCB0ZXN0Q2FzZUNsYXNzKToKKyAgICAgICAgZGVmIGlzVGVzdE1l
dGhvZChhdHRybmFtZSwgdGVzdENhc2VDbGFzcz10ZXN0Q2FzZUNsYXNzKToKKyAgICAgICAgICAg
IGlmIG5vdCBoYXNhdHRyKGdldGF0dHIodGVzdENhc2VDbGFzcywgYXR0cm5hbWUpLCAnX19jYWxs
X18nKToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIHJldHVybiAo
KGF0dHJuYW1lLnN0YXJ0c3dpdGgoJ3Rlc3QnKSkgb3IKKyAgICAgICAgICAgICAgICAgICAgKHNl
bGYucnVuX3JlYWxfaW50ZWdyYXRpb25fdGVzdHMgYW5kIGF0dHJuYW1lLnN0YXJ0c3dpdGgoJ2lu
dGVncmF0aW9uX3Rlc3RfJykpKQorICAgICAgICB0ZXN0Rm5OYW1lcyA9IGZpbHRlcihpc1Rlc3RN
ZXRob2QsIGRpcih0ZXN0Q2FzZUNsYXNzKSkKKyAgICAgICAgdGVzdEZuTmFtZXMuc29ydCgpCisg
ICAgICAgIHJldHVybiB0ZXN0Rm5OYW1lcworCisKK2NsYXNzIFRlc3RSdW5uZXIobWFuYWdlcl93
b3JrZXJfYnJva2VyLkJyb2tlckNsaWVudCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0cmVh
bSwgb3B0aW9ucywgc3RhcnQpOgorICAgICAgICBzZWxmLm9wdGlvbnMgPSBvcHRpb25zCisgICAg
ICAgIHNlbGYuc3RyZWFtID0gc3RyZWFtCisgICAgICAgIHNlbGYuc3RhcnQgPSBzdGFydAorICAg
ICAgICBzZWxmLm51bV90ZXN0cyA9IE5vbmUKKyAgICAgICAgc2VsZi5fYnVmZmVyID0gJycKKwor
ICAgIGRlZiBuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gJ21hbmFnZXInCisKKyAgICBkZWYg
cnVuKHNlbGYsIHRlc3RfbmFtZXMpOgorICAgICAgICBzZWxmLm51bV90ZXN0cyA9IGxlbih0ZXN0
X25hbWVzKQorICAgICAgICBsb2FkZXIgPSBUZXN0TG9hZGVyKCkKKyAgICAgICAgcmVzdWx0ID0g
dW5pdHRlc3QuVGVzdFJlc3VsdCgpCisKKyAgICAgICAgc3RvcCA9IHRpbWUudGltZSgpCisgICAg
ICAgIGZvciB0ZXN0X25hbWUgaW4gdGVzdF9uYW1lczoKKyAgICAgICAgICAgIGlmIHNlbGYub3B0
aW9ucy52ZXJib3NlOgorICAgICAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKHRlc3RfbmFt
ZSkKKyAgICAgICAgICAgIG51bV9mYWlsdXJlcyA9IGxlbihyZXN1bHQuZmFpbHVyZXMpCisgICAg
ICAgICAgICBzdGFydCA9IHRpbWUudGltZSgpCisgICAgICAgICAgICBsb2FkZXIubG9hZFRlc3Rz
RnJvbU5hbWUodGVzdF9uYW1lLCBOb25lKS5ydW4ocmVzdWx0KQorICAgICAgICAgICAgc3RvcCA9
IHRpbWUudGltZSgpCisgICAgICAgICAgICBlcnIgPSBOb25lCisgICAgICAgICAgICBpZiBsZW4o
cmVzdWx0LmZhaWx1cmVzKSA+IG51bV9mYWlsdXJlczoKKyAgICAgICAgICAgICAgICBlcnIgPSBy
ZXN1bHQuZmFpbHVyZXNbbnVtX2ZhaWx1cmVzXVsxXQorICAgICAgICAgICAgc2VsZi5fd3JpdGVf
cmVzdWx0KHJlc3VsdCwgdGVzdF9uYW1lLCBzdG9wIC0gc3RhcnQsIGVycikKKworICAgICAgICBz
ZWxmLl93cml0ZV9zdW1tYXJ5KHJlc3VsdCwgc3RvcCAtIHNlbGYuc3RhcnQpCisgICAgICAgIHJl
dHVybiByZXN1bHQKKworICAgIGRlZiBfZXJhc2Uoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2J1
ZmZlcjoKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKCdcYicgKiBsZW4oc2VsZi5fYnVm
ZmVyKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAnICogbGVuKHNlbGYuX2J1
ZmZlcikgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcYicgKiBsZW4oc2VsZi5f
YnVmZmVyKSkKKyAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9ICcnCisKKyAgICBkZWYgX3dyaXRl
X3N0YXR1cyhzZWxmLCB0b3RhbCwgcnVuLCBmYWlsZWQpOgorICAgICAgICBwYXNzZWQgPSBydW4g
LSBmYWlsZWQKKyAgICAgICAgcmVtYWluaW5nID0gdG90YWwgLSBydW4KKyAgICAgICAgcGVyY2Vu
dCA9IDEwMCAqIHJ1biAvIHRvdGFsCisKKyAgICAgICAgc2VsZi5fZXJhc2UoKQorICAgICAgICBz
ZWxmLl9idWZmZXIgPSAnJTJkJSU6ICVkIHBhc3NlZCAlZCBmYWlsZWQgJWQgbGVmdCcgJSAocGVy
Y2VudCwgcGFzc2VkLCBmYWlsZWQsIHJlbWFpbmluZykKKyAgICAgICAgc2VsZi5zdHJlYW0ud3Jp
dGUoc2VsZi5fYnVmZmVyKQorICAgICAgICBzZWxmLnN0cmVhbS5mbHVzaCgpCisKKyAgICBkZWYg
X3dyaXRlX3Jlc3VsdChzZWxmLCByZXN1bHQsIHRlc3RfbmFtZSwgdGVzdF90aW1lLCBlcnI9Tm9u
ZSk6CisgICAgICAgIGlmIHNlbGYub3B0aW9ucy50aW1pbmcgYW5kIGVycjoKKyAgICAgICAgICAg
IG1zZyA9ICcgZmFpbGVkICUuNWZzJyAlIHRlc3RfdGltZQorICAgICAgICBlbGlmIHNlbGYub3B0
aW9ucy50aW1pbmc6CisgICAgICAgICAgICBtc2cgPSAnIHBhc3NlZCAlLjVmcycgJSB0ZXN0X3Rp
bWUKKyAgICAgICAgZWxpZiBlcnI6CisgICAgICAgICAgICBtc2cgPSAnIGZhaWxlZCcKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIG1zZyA9ICcgcGFzc2VkJworCisgICAgICAgIGlmIGVycjoK
KyAgICAgICAgICAgIGlmIG5vdCBzZWxmLm9wdGlvbnMudmVyYm9zZToKKyAgICAgICAgICAgICAg
ICBzZWxmLl9lcmFzZSgpCisgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZSh0ZXN0X25hbWUg
KyBtc2cgKyAnXG4nKQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZXJyLnNwbGl0bGluZXMoKToK
KyAgICAgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZSgnICAgICcgKyBsaW5lICsgJ1xuJykK
KyAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKCdcbicpCisgICAgICAgIGVsaWYgc2VsZi5v
cHRpb25zLnZlcmJvc2U6CisgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZShtc2cgKyAnXG4n
KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fd3JpdGVfc3RhdHVzKHNlbGYubnVt
X3Rlc3RzLCByZXN1bHQudGVzdHNSdW4sIGxlbihyZXN1bHQuZmFpbHVyZXMpKQorCisgICAgZGVm
IF93cml0ZV9zdW1tYXJ5KHNlbGYsIHJlc3VsdCwgdG90YWxfdGVzdF90aW1lKToKKyAgICAgICAg
aWYgc2VsZi5vcHRpb25zLnZlcmJvc2U6CisgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZSgn
XG4nKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fZXJhc2UoKQorCisgICAgICAg
IHRvdGFsX2RlbGF5ID0gJyUuM2Ygc2Vjb25kcycgJSAodG90YWxfdGVzdF90aW1lKQorICAgICAg
ICBydW4gPSByZXN1bHQudGVzdHNSdW4KKyAgICAgICAgZmFpbGVkID0gbGVuKHJlc3VsdC5mYWls
dXJlcykKKyAgICAgICAgaWYgcnVuID4gMSBhbmQgZmFpbGVkOgorICAgICAgICAgICAgc2VsZi5z
dHJlYW0ud3JpdGUoJyVkIHRlc3RzIHJhbiBpbiAlczsgJWQgZmFpbGVkLlxuJyAlIChydW4sIHRv
dGFsX2RlbGF5LCBmYWlsZWQpKQorICAgICAgICBlbGlmIHJ1biA+IDE6CisgICAgICAgICAgICBz
ZWxmLnN0cmVhbS53cml0ZSgnJWQgdGVzdHMgcmFuIGluICVzOyBhbGwgcGFzc2VkLlxuJyAlIChy
dW4sIHRvdGFsX2RlbGF5KSkKKyAgICAgICAgZWxpZiBmYWlsZWQ6CisgICAgICAgICAgICBzZWxm
LnN0cmVhbS53cml0ZSgnMSB0ZXN0IHJhbiBpbiAlczsgaXQgZmFpbGVkLlxuJyAlICh0b3RhbF9k
ZWxheSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZSgnMSB0
ZXN0IHJhbiBpbiAlczsgaXQgcGFzc2VkLlxuJyAlICh0b3RhbF9kZWxheSkpCmRpZmYgLS1naXQg
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3QvbWFpbl91bml0dGVzdC5weSBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvdGVzdC9tYWluX3VuaXR0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE0MDU4ODk3
M2FlYWFkZTNkMDJjNmJmMDI1Y2RhODMyOTZkZDBmNGUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3QvbWFpbl91bml0dGVzdC5weQpAQCAtMCwwICsxLDk0IEBA
CisjIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgb3MKK2lt
cG9ydCBwZGIKK2ltcG9ydCBjU3RyaW5nSU8gYXMgU3RyaW5nSU8KK2ltcG9ydCBzeXMKK2ltcG9y
dCB1bml0dGVzdAorCitmcm9tIHdlYmtpdHB5LnRlc3QubWFpbiBpbXBvcnQgVGVzdGVyCisKKwor
Y2xhc3MgRHVtbXlSZXN1bHQob2JqZWN0KToKKyAgICB3YXNTdWNjZXNzZnVsID0gVHJ1ZQorCisK
K2NsYXNzIER1bW15UnVubmVyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0cmVh
bSwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5zdHJlYW0gPSBzdHJlYW0KKyAgICAg
ICAgcGFzcworCisgICAgZGVmIHJ1bihzZWxmLCBzdWl0ZSk6CisgICAgICAgIHNlbGYuc3RyZWFt
LndyaXRlKCdSYW4gJWQgdGVzdHMuJyAlIHN1aXRlLmNvdW50VGVzdENhc2VzKCkpCisgICAgICAg
IHJldHVybiBEdW1teVJlc3VsdCgpCisKK3dlYmtpdF9yb290ID0gb3MucGF0aC5kaXJuYW1lKG9z
LnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGly
bmFtZShfX2ZpbGVfXykpKSkpCisKKworY2xhc3MgTWFpblRlc3QodW5pdHRlc3QuVGVzdENhc2Up
OgorICAgIGRlZiBjbWQoc2VsZiwgYXJncywgY3dkPU5vbmUsIHN0ZGVycj1Ob25lLCByZXQ9VHJ1
ZSwgbnVtX3Rlc3RzPU5vbmUpOgorICAgICAgICBvbGRjd2QgPSBvcy5nZXRjd2QoKQorICAgICAg
ICBpZiBub3QgY3dkOgorICAgICAgICAgICAgY3dkID0gJy9zcmMvd2snCisgICAgICAgIHRyeToK
KyAgICAgICAgICAgIG9zLmNoZGlyKGN3ZCkKKyAgICAgICAgICAgIGVyciA9IFN0cmluZ0lPLlN0
cmluZ0lPKCkKKyAgICAgICAgICAgIHRlc3RlciA9IFRlc3RlcihlcnIpCisgICAgICAgICAgICBv
cHRpb25zLCBhcmdzID0gdGVzdGVyLnBhcnNlX2FyZ3MoYXJncykKKyAgICAgICAgICAgIHRlc3Rl
ci5jb25maWd1cmUob3B0aW9ucykKKyAgICAgICAgICAgIHRlc3Rlci5hZGRfdHJlZShvcy5wYXRo
LmpvaW4od2Via2l0X3Jvb3QsICdUb29scycsICdTY3JpcHRzJyksICd3ZWJraXRweScpCisgICAg
ICAgICAgICB0ZXN0ZXIucnVubmVyID0gRHVtbXlSdW5uZXIoZXJyKQorICAgICAgICAgICAgcmV0
dXJuY29kZSA9IHRlc3Rlci5ydW4oYXJncykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAg
IG9zLmNoZGlyKG9sZGN3ZCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldCwgcmV0dXJu
Y29kZSkKKyAgICAgICAgYWN0dWFsX2VyciA9IGVyci5nZXR2YWx1ZSgpCisgICAgICAgIGlmIHN0
ZGVyciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsX2Vy
ciwgc3RkZXJyKQorICAgICAgICBpZiBudW1fdGVzdHMgaXMgbm90IE5vbmU6CisgICAgICAgICAg
ICBzZWxmLmFzc2VydFRydWUoKCdSYW4gJWQgdGVzdCcgJSBudW1fdGVzdHMpIGluIGFjdHVhbF9l
cnIsIGFjdHVhbF9lcnIpCisKKyAgICBkZWYgaW50ZWdyYXRpb25fdGVzdF9wYWNrYWdlKHNlbGYp
OgorICAgICAgICBzZWxmLmNtZChbJ3dlYmtpdHB5LmNvbW1vbi53YXRjaGxpc3QnXSwgbnVtX3Rl
c3RzPTM3KQorCisgICAgZGVmIGludGVncmF0aW9uX3Rlc3RfbW9kdWxlKHNlbGYpOgorICAgICAg
ICBzZWxmLmNtZChbJ3dlYmtpdHB5LmNvbW1vbi53YXRjaGxpc3Qud2F0Y2hsaXN0X3VuaXR0ZXN0
J10sIG51bV90ZXN0cz0xMCkKKworICAgIGRlZiBpbnRlZ3JhdGlvbl90ZXN0X2NsYXNzKHNlbGYp
OgorICAgICAgICBzZWxmLmNtZChbJ3dlYmtpdHB5LmNvbW1vbi53YXRjaGxpc3Qud2F0Y2hsaXN0
X3VuaXR0ZXN0LldhdGNoTGlzdFRlc3QnXSwgbnVtX3Rlc3RzPTEwKQorCisgICAgZGVmIGludGVn
cmF0aW9uX3Rlc3RfbWV0aG9kKHNlbGYpOgorICAgICAgICBzZWxmLmNtZChbJ3dlYmtpdHB5LmNv
bW1vbi53YXRjaGxpc3Qud2F0Y2hsaXN0X3VuaXR0ZXN0LldhdGNoTGlzdFRlc3QudGVzdF9maWxl
bmFtZV9kZWZpbml0aW9uJ10sIG51bV90ZXN0cz0xKQorCisgICAgZGVmIGludGVncmF0aW9uX3Rl
c3RfZGlyZWN0b3J5KHNlbGYpOgorICAgICAgICBzZWxmLmNtZChbJ3dlYmtpdHB5L2NvbW1vbi93
YXRjaGxpc3QnXSwgbnVtX3Rlc3RzPTM3KQorCisgICAgZGVmIGludGVncmF0aW9uX3Rlc3RfY3dk
KHNlbGYpOgorICAgICAgICBzZWxmLmNtZChbJy4nXSwgY3dkPScvc3JjL3drL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL3dhdGNobGlzdCcsIG51bV90ZXN0cz0zNykKKworICAgIGRlZiBp
bnRlZ3JhdGlvbl90ZXN0X2N3ZChzZWxmKToKKyAgICAgICAgc2VsZi5jbWQoWyd3YXRjaGxpc3Qn
XSwgY3dkPScvc3JjL3drL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uJywgbnVtX3Rlc3Rz
PTM3KQorCisgICAgZGVmIGludGVncmF0aW9uX3Rlc3RfZmlsZV9pbl9jd2Qoc2VsZik6CisgICAg
ICAgIHNlbGYuY21kKFsnd2F0Y2hsaXN0L3dhdGNobGlzdF91bml0dGVzdC5weSddLCBjd2Q9Jy9z
cmMvd2svVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24nLCBudW1fdGVzdHM9MTApCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128511</attachid>
            <date>2012-02-23 11:19:57 -0800</date>
            <delta_ts>2012-02-23 11:24:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77687-20120223111956.patch</filename>
            <type>text/plain</type>
            <size>32368</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4NTE1CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3Rl
c3Qtd2Via2l0cHkgYi9Ub29scy9TY3JpcHRzL3Rlc3Qtd2Via2l0cHkKaW5kZXggNDI5OGZlYWUy
MzczYTdiOGEzN2M0MGZiOWM4ZDA1NzQ2NWJkOTU2YS4uZTk1YTMwZGJkM2FiOGI5NjNlNzViOGI4
MzE1ZjUzNjA3MDA2OWYyNCAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy90ZXN0LXdlYmtpdHB5
CisrKyBiL1Rvb2xzL1NjcmlwdHMvdGVzdC13ZWJraXRweQpAQCAtMzcsMTggKzM3LDIzIEBAIGlt
cG9ydCBzeXMKIGZyb20gd2Via2l0cHkuY29tbW9uIGltcG9ydCB2ZXJzaW9uX2NoZWNrCiBmcm9t
IHdlYmtpdHB5LnRlc3QgaW1wb3J0IG1haW4KIAotCi1fbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIo
InRlc3Qtd2Via2l0cHkiKQotCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCiAK
IGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgd2Via2l0X3Jvb3QgPSBvcy5wYXRoLmRp
cm5hbWUob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19m
aWxlX18pKSkpCiAKLSAgICAjIEZJWE1FOiBXZSBzaG91bGQgcHJvYmFibHkgdGVzdCBlYWNoIHBh
Y2thZ2Ugc2VwYXJhdGVseSB0byBhdm9pZCBuYW1pbmcgY29uZmxpY3RzLgotICAgIGRpcnMgPSBb
Ci0gICAgICAgIG9zLnBhdGguam9pbih3ZWJraXRfcm9vdCwgJ1Rvb2xzJywgJ1NjcmlwdHMnKSwK
LSAgICAgICAgb3MucGF0aC5qb2luKHdlYmtpdF9yb290LCAnU291cmNlJywgJ1dlYktpdDInLCAn
U2NyaXB0cycpLAotICAgIF0KKyAgICB0ZXN0ZXIgPSBtYWluLlRlc3RlcihzeXMuc3RkZXJyKQor
ICAgIG9wdGlvbnMsIGFyZ3MgPSB0ZXN0ZXIucGFyc2VfYXJncyhzeXMuYXJndlsxOl0pCisgICAg
dGVzdGVyLmNvbmZpZ3VyZShvcHRpb25zKQorICAgIHRlc3Rlci5jb25maWd1cmVfbG9nZ2luZygp
CisKKyAgICB0aGlyZHBhcnR5ID0gb3MucGF0aC5qb2luKCd3ZWJraXRweScsICd0aGlyZHBhcnR5
JykKKyAgICB0ZXN0ZXIuYWRkX3RyZWUob3MucGF0aC5qb2luKHdlYmtpdF9yb290LCAnVG9vbHMn
LCAnU2NyaXB0cycpLCAnd2Via2l0cHknLAorICAgICAgICAgICAgICAgICAgICBbb3MucGF0aC5q
b2luKHRoaXJkcGFydHksICdhdXRvaW5zdGFsbGVkJyksCisgICAgICAgICAgICAgICAgICAgICBv
cy5wYXRoLmpvaW4odGhpcmRwYXJ0eSwgJ3NpbXBsZWpzb24nKSwKKyAgICAgICAgICAgICAgICAg
ICAgIG9zLnBhdGguam9pbih0aGlyZHBhcnR5LCAnQmVhdXRpZnVsU291cC5weScpLAorICAgICAg
ICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHRoaXJkcGFydHksICdtb2NrLnB5JyldKQorICAg
IHRlc3Rlci5hZGRfdHJlZShvcy5wYXRoLmpvaW4od2Via2l0X3Jvb3QsICdTb3VyY2UnLCAnV2Vi
S2l0MicsICdTY3JpcHRzJyksICd3ZWJraXQyJykKIAogICAgICMgRklYTUU6IERvIHdlIG5lZWQg
dG8gYmUgYWJsZSB0byB0ZXN0IFF1ZXVlU3RhdHVzU2VydmVyIG9uIFdpbmRvd3MgYXMgd2VsbD8K
ICAgICBhcHBlbmdpbmVfc2RrX3BhdGggPSAnL3Vzci9sb2NhbC9nb29nbGVfYXBwZW5naW5lJwpA
QCAtNTksMTcgKzY0LDEyIEBAIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgICAgIGZy
b20gZ29vZ2xlLmFwcGVuZ2luZS5kaXN0IGltcG9ydCB1c2VfbGlicmFyeQogICAgICAgICB1c2Vf
bGlicmFyeSgnZGphbmdvJywgJzEuMicpCiAgICAgICAgIGRldl9hcHBzZXJ2ZXIuZml4X3N5c19w
YXRoKCkKLSAgICAgICAgZGlycy5hcHBlbmQob3MucGF0aC5qb2luKHdlYmtpdF9yb290LCAnVG9v
bHMnLCAnUXVldWVTdGF0dXNTZXJ2ZXInKSkKKyAgICAgICAgdGVzdGVyLmFkZF90cmVlKG9zLnBh
dGguam9pbih3ZWJraXRfcm9vdCwgJ1Rvb2xzJywgJ1F1ZXVlU3RhdHVzU2VydmVyJyksICcnKQog
ICAgIGVsc2U6CiAgICAgICAgIF9sb2cuaW5mbygnU2tpcHBpbmcgUXVldWVTdGF0dXNTZXJ2ZXIg
dGVzdHM7IHRoZSBHb29nbGUgQXBwRW5naW5lIFB5dGhvbiBTREsgaXMgbm90IGluc3RhbGxlZC4n
KQogCi0gICAgbWFpbi5UZXN0ZXIuY2xlYW5fcGFja2FnZXMoZGlycykKLQotICAgIHRlc3RlciA9
IG1haW4uVGVzdGVyKCkKLSAgICBvcHRpb25zLCBhcmdzID0gdGVzdGVyLnBhcnNlX2FyZ3Moc3lz
LmFyZ3YpCi0gICAgdGVzdGVyLmNvbmZpZ3VyZShvcHRpb25zKQotCi0gICAgIyBNYWtlIHN1cmUg
UFlUSE9OUEFUSCBpcyBzZXQgdXAgY29ycmVjdGx5IHNvIHRoYXQgYWxsIG9mIHRoZSBpbXBvcnRz
IHdpbGwgd29yay4KLSAgICBzeXMucGF0aCA9IFtkIGZvciBkIGluIGRpcnMgaWYgZCBub3QgaW4g
c3lzLnBhdGhdICsgc3lzLnBhdGgKLQotICAgIHN5cy5leGl0KG5vdCB0ZXN0ZXIucnVuKGRpcnMs
IGFyZ3MpKQorICAgIHRyeToKKyAgICAgICAgc3lzLmV4aXQobm90IHRlc3Rlci5ydW4oYXJncykp
CisgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICBzeXMuc3RkZXJyLndyaXRl
KCdJbnRlcnJ1cHRlZCwgZXhpdGluZ1xuJykKKyAgICAgICAgc3lzLmV4aXQoMSkKZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9tYWluLnB5IGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS90ZXN0L21haW4ucHkKaW5kZXggNzhjMzlkYjU1Nzk1NzZiZmY3ZTJiMzc3MzM4OTI1
YWFkYTk5ZWVjYi4uMTRjMDAxMmYzNDUwZjNiMzZkYjgyZTg4ZjFhMmQ4YmYyNjdmNmNlMiAxMDA2
NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90ZXN0L21haW4ucHkKKysrIGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS90ZXN0L21haW4ucHkKQEAgLTEsMyArMSw0IEBACisjIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIyBDb3B5cmlnaHQg
KEMpIDIwMTAgQ2hyaXMgSmVyZG9uZWsgKGNqZXJkb25la0B3ZWJraXQub3JnKQogIwogIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKQEAgLTI1LDgyICsyNiwxMzUgQEAKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3B0cGFy
c2UKIGltcG9ydCBvcworaW1wb3J0IHBkYgoraW1wb3J0IHJlCiBpbXBvcnQgU3RyaW5nSU8KIGlt
cG9ydCBzeXMKK2ltcG9ydCB0aW1lCiBpbXBvcnQgdHJhY2ViYWNrCiBpbXBvcnQgdW5pdHRlc3QK
IAogIyBOT1RFOiBXZSBpbnRlbnRpb25hbGx5IGRvIG5vdCBkZXBlbmQgb24gYW55dGhpbmcgZWxz
ZSBpbiB3ZWJraXRweSBoZXJlIHRvIGF2b2lkIGJyZWFraW5nIHRlc3Qtd2Via2l0cHkuCitmcm9t
IHdlYmtpdHB5LmxheW91dF90ZXN0cy5jb250cm9sbGVycyBpbXBvcnQgbWFuYWdlcl93b3JrZXJf
YnJva2VyCiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKIAogCi1jbGFzcyBU
ZXN0ZXIob2JqZWN0KToKLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGNsZWFuX3BhY2thZ2Vz
KGRpcnMpOgotICAgICAgICAiIiJEZWxldGUgYWxsIC5weWMgZmlsZXMgdW5kZXIgZGlycyB0aGF0
IGhhdmUgbm8gLnB5IGZpbGUuIiIiCi0gICAgICAgIGZvciBkaXJfdG9fY2xlYW4gaW4gZGlyczoK
LSAgICAgICAgICAgIF9sb2cuZGVidWcoIkNsZWFuaW5nIG9ycGhhbmVkICoucHljIGZpbGVzIGZy
b206ICVzIiAlIGRpcl90b19jbGVhbikKLSAgICAgICAgICAgIGZvciBkaXJfcGF0aCwgZGlyX25h
bWVzLCBmaWxlX25hbWVzIGluIG9zLndhbGsoZGlyX3RvX2NsZWFuKToKLSAgICAgICAgICAgICAg
ICBmb3IgZmlsZV9uYW1lIGluIGZpbGVfbmFtZXM6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGZp
bGVfbmFtZS5lbmRzd2l0aCgiLnB5YyIpIGFuZCBmaWxlX25hbWVbOi0xXSBub3QgaW4gZmlsZV9u
YW1lczoKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihk
aXJfcGF0aCwgZmlsZV9uYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgX2xvZy5pbmZvKCJE
ZWxldGluZyBvcnBoYW4gKi5weWMgZmlsZTogJXMiICUgZmlsZV9wYXRoKQotICAgICAgICAgICAg
ICAgICAgICAgICAgb3MucmVtb3ZlKGZpbGVfcGF0aCkKK1RFU1RfREVTQ1JJUFRJT05fUkVHRVhQ
ID0gcmUuY29tcGlsZSgiKFx3KykgXCgoW1x3Ll0rKVwpIikKIAotICAgIGRlZiBfX2luaXRfXyhz
ZWxmKToKLSAgICAgICAgc2VsZi5fdmVyYm9zaXR5ID0gMQogCi0gICAgZGVmIHBhcnNlX2FyZ3Mo
c2VsZiwgYXJndik6CitkZWYgX3Rlc3RfbmFtZSh0ZXN0KToKKyAgICBtID0gVEVTVF9ERVNDUklQ
VElPTl9SRUdFWFAubWF0Y2goc3RyKHRlc3QpKQorICAgIHJldHVybiAiJXMuJXMiICUgKG0uZ3Jv
dXAoMiksIG0uZ3JvdXAoMSkpCisKKworY2xhc3MgVGVzdFRyZWUob2JqZWN0KToKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgdG9wX2RpcmVjdG9yeSwgc3RhcnRpbmdfc3ViZGlyZWN0b3J5LCBpZ25v
cmVfbGlzdCk6CisgICAgICAgIHNlbGYudG9wX2RpcmVjdG9yeSA9IG9zLnBhdGgucmVhbHBhdGgo
dG9wX2RpcmVjdG9yeSkKKyAgICAgICAgc2VsZi5zZWFyY2hfZGlyZWN0b3J5ID0gc2VsZi50b3Bf
ZGlyZWN0b3J5CisgICAgICAgIHNlbGYuaWdub3JlX2xpc3QgPSBbb3MucGF0aC5qb2luKHNlbGYu
dG9wX2RpcmVjdG9yeSwgeCkgZm9yIHggaW4gaWdub3JlX2xpc3RdCisgICAgICAgIHNlbGYudG9w
X3BhY2thZ2UgPSAnJworICAgICAgICBpZiBzdGFydGluZ19zdWJkaXJlY3Rvcnk6CisgICAgICAg
ICAgICBzZWxmLnRvcF9wYWNrYWdlID0gc3RhcnRpbmdfc3ViZGlyZWN0b3J5LnJlcGxhY2Uob3Mu
c2VwLCAnLicpICsgJy4nCisgICAgICAgICAgICBzZWxmLnNlYXJjaF9kaXJlY3RvcnkgPSBvcy5w
YXRoLmpvaW4oc2VsZi50b3BfZGlyZWN0b3J5LCBzdGFydGluZ19zdWJkaXJlY3RvcnkpCisKKyAg
ICBkZWYgY2xlYW4oc2VsZik6CisgICAgICAgICIiIkRlbGV0ZSBhbGwgLnB5YyBmaWxlcyBpbiB0
aGUgdHJlZSB0aGF0IGhhdmUgbm8gbWF0Y2hpbmcgLnB5IGZpbGUuIiIiCisgICAgICAgIF9sb2cu
ZGVidWcoIkNsZWFuaW5nIG9ycGhhbmVkICoucHljIGZpbGVzIGZyb206ICVzIiAlIHNlbGYuc2Vh
cmNoX2RpcmVjdG9yeSkKKyAgICAgICAgZm9yIGRpcl9wYXRoLCBkaXJfbmFtZXMsIGZpbGVfbmFt
ZXMgaW4gb3Mud2FsayhzZWxmLnNlYXJjaF9kaXJlY3RvcnkpOgorICAgICAgICAgICAgIyBGSVhN
RTogU2hvdWxkIHdlIGJlIGNsZWFuaW5nIHRoZSBpZ25vcmVkIHN1YmRpcmVjdG9yaWVzIGFzIHdl
bGw/CisgICAgICAgICAgICBmb3IgZmlsZV9uYW1lIGluIGZpbGVfbmFtZXM6CisgICAgICAgICAg
ICAgICAgaWYgZmlsZV9uYW1lLmVuZHN3aXRoKCIucHljIikgYW5kIGZpbGVfbmFtZVs6LTFdIG5v
dCBpbiBmaWxlX25hbWVzOgorICAgICAgICAgICAgICAgICAgICBmaWxlX3BhdGggPSBvcy5wYXRo
LmpvaW4oZGlyX3BhdGgsIGZpbGVfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgX2xvZy5pbmZv
KCJEZWxldGluZyBvcnBoYW4gKi5weWMgZmlsZTogJXMiICUgZmlsZV9wYXRoKQorICAgICAgICAg
ICAgICAgICAgICBvcy5yZW1vdmUoZmlsZV9wYXRoKQorCisgICAgZGVmIGZpbmRfbW9kdWxlcyhz
ZWxmLCBkaXJfdG9fc2VhcmNoLCBzdWZmaXhlcyk6CisgICAgICAgIG1vZHVsZXMgPSBbXQorICAg
ICAgICBmb3IgZGlyX3BhdGgsIF8sIGZpbGVuYW1lcyBpbiBvcy53YWxrKGRpcl90b19zZWFyY2gp
OgorICAgICAgICAgICAgZGlyX3BhdGggPSBvcy5wYXRoLmpvaW4oZGlyX3BhdGgsICcnKQorICAg
ICAgICAgICAgcGFja2FnZSA9IGRpcl9wYXRoLnJlcGxhY2Uoc2VsZi50b3BfZGlyZWN0b3J5ICsg
b3Muc2VwLCAnJykucmVwbGFjZShvcy5zZXAsICcuJykKKyAgICAgICAgICAgIGZvciBmIGluIGZp
bGVuYW1lczoKKyAgICAgICAgICAgICAgICBpZiBhbnkoZi5lbmRzd2l0aChzdWZmaXgpIGZvciBz
dWZmaXggaW4gc3VmZml4ZXMpOgorICAgICAgICAgICAgICAgICAgICBtb2R1bGVzLmFwcGVuZChw
YWNrYWdlICsgZi5yZXBsYWNlKCcucHknLCAnJykpCisgICAgICAgIHJldHVybiBtb2R1bGVzCisK
KworY2xhc3MgTG9hZGVyRXJyb3IoRXhjZXB0aW9uKToKKyAgICBwYXNzCisKKworY2xhc3MgVGVz
dGVyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0cmVhbSk6CisgICAgICAgIHNl
bGYudHJlZXMgPSBbXQorICAgICAgICBzZWxmLmxvYWRlciA9IE5vbmUKKyAgICAgICAgc2VsZi5y
dW5uZXIgPSBOb25lCisgICAgICAgIHNlbGYubG9nX2xldmVsID0gbG9nZ2luZy5JTkZPCisgICAg
ICAgIHNlbGYuc3RyZWFtID0gc3RyZWFtCisKKyAgICBkZWYgcGFyc2VfYXJncyhzZWxmLCBhcmd2
PU5vbmUpOgogICAgICAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodXNhZ2U9J3Vz
YWdlOiAlcHJvZyBbb3B0aW9uc10gW2FyZ3MuLi5dJykKLSAgICAgICAgcGFyc2VyLmFkZF9vcHRp
b24oJy1hJywgJy0tYWxsJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncnVuIGFsbCB0aGUgdGVzdHMnKSwKLSAgICAg
ICAgcGFyc2VyLmFkZF9vcHRpb24oJy1jJywgJy0tY292ZXJhZ2UnLCBhY3Rpb249J3N0b3JlX3Ry
dWUnLCBkZWZhdWx0PUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdnZW5l
cmF0ZSBjb2RlIGNvdmVyYWdlIGluZm8gKHJlcXVpcmVzIGh0dHA6Ly9weXBpLnB5dGhvbi5vcmcv
cHlwaS9jb3ZlcmFnZSknKSwKLSAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1xJywgJy0tcXVp
ZXQnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICBoZWxwPSdydW4gcXVpZXRseSAoZXJyb3JzLCB3YXJuaW5ncywgYW5kIHByb2dy
ZXNzIG9ubHkpJyksCi0gICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCctcycsICctLXNpbGVudCcs
IGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgIGhlbHA9J3J1biBzaWxlbnRseSAoZXJyb3JzIGFuZCB3YXJuaW5ncyBvbmx5KScpLAot
ICAgICAgICBwYXJzZXIuYWRkX29wdGlvbignLXgnLCAnLS14bWwnLCBhY3Rpb249J3N0b3JlX3Ry
dWUnLCBkZWZhdWx0PUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdvdXRw
dXQgeFVuaXQtc3R5bGUgWE1MIG91dHB1dCcpCi0gICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCct
dicsICctLXZlcmJvc2UnLCBhY3Rpb249J2NvdW50JywgZGVmYXVsdD0wLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICBoZWxwPSd2ZXJib3NlIG91dHB1dCAoc3BlY2lmeSBvbmNlIGZvciBpbmRp
dmlkdWFsIHRlc3QgcmVzdWx0cywgdHdpY2UgZm9yIGRlYnVnIG1lc3NhZ2VzKScpCi0gICAgICAg
IHBhcnNlci5hZGRfb3B0aW9uKCctLXNraXAtaW50ZWdyYXRpb250ZXN0cycsIGFjdGlvbj0nc3Rv
cmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9
J2RvIG5vdCBydW4gdGhlIGludGVncmF0aW9uIHRlc3RzJykKLQotICAgICAgICBwYXJzZXIuZXBp
bG9nID0gKCdbYXJncy4uLl0gaXMgYW4gb3B0aW9uYWwgbGlzdCBvZiBtb2R1bGVzLCB0ZXN0X2Ns
YXNzZXMsIG9yIGluZGl2aWR1YWwgdGVzdHMuICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAn
SWYgbm8gYXJncyBhcmUgZ2l2ZW4sIGFsbCB0aGUgdGVzdHMgd2lsbCBiZSBydW4uJykKLQotICAg
ICAgICBzZWxmLnByb2dOYW1lID0gb3MucGF0aC5iYXNlbmFtZShhcmd2WzBdKQotICAgICAgICBy
ZXR1cm4gcGFyc2VyLnBhcnNlX2FyZ3MoYXJndlsxOl0pCisgICAgICAgIGdyb3VwID0gb3B0cGFy
c2UuT3B0aW9uR3JvdXAocGFyc2VyLCAnT3B0aW9ucyBmb3IgY29udHJvbGxpbmcgd2hhdCBpcyBw
cmludGVkJykKKyAgICAgICAgZ3JvdXAuYWRkX29wdGlvbignLXEnLCAnLS1xdWlldCcsIGFjdGlv
bj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAg
aGVscD0ncnVuIHF1aWV0bHkgKGVycm9ycywgd2FybmluZ3MsIGFuZCBwcm9ncmVzcyBvbmx5KScp
LAorICAgICAgICBncm91cC5hZGRfb3B0aW9uKCctdCcsICctLXRpbWluZycsIGFjdGlvbj0nc3Rv
cmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0n
ZGlzcGxheSBwZXItdGVzdCB0aW1pbmcgaW5mbycpLAorICAgICAgICBncm91cC5hZGRfb3B0aW9u
KCctdicsICctLXZlcmJvc2UnLCBhY3Rpb249J2NvdW50JywgZGVmYXVsdD0wLAorICAgICAgICAg
ICAgICAgICAgICAgICAgIGhlbHA9J3ZlcmJvc2Ugb3V0cHV0IChzcGVjaWZ5IG9uY2UgZm9yIGlu
ZGl2aWR1YWwgdGVzdCByZXN1bHRzLCB0d2ljZSBmb3IgZGVidWcgbWVzc2FnZXMpJykKKyAgICAg
ICAgZ3JvdXAuYWRkX29wdGlvbignLXgnLCAnLS14bWwnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBk
ZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J291dHB1dCB4VW5p
dC1zdHlsZSBYTUwgb3V0cHV0IGludG8gJFBXRC90ZXN0LXdlYmtpdHB5LXhtbC1yZXBvcnRzLycp
CisgICAgICAgIGdyb3VwLmFkZF9vcHRpb24oJy1jJywgJy0tY292ZXJhZ2UnLCBhY3Rpb249J3N0
b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9
J2dlbmVyYXRlIGNvZGUgY292ZXJhZ2UgcmVwb3J0IChhdXRvaW5zdGFsbHMgaHR0cDovL3B5cGku
cHl0aG9uLm9yZy9weXBpL2NvdmVyYWdlKScpCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uX2dy
b3VwKGdyb3VwKQorCisgICAgICAgICMgRklYTUU6IFdlIG5lZWQgdG8gdW5pZnkgdGhlc2UgdHdv
IHR5cGVzIG9mIHRlc3RzIGFuZCBtYWtlIHRoZW0gY29uc2lzdGVudC4KKyAgICAgICAgZ3JvdXAg
PSBvcHRwYXJzZS5PcHRpb25Hcm91cChwYXJzZXIsICdPcHRpb25zIGZvciBjb250cm9sbGluZyB3
aGljaCB0ZXN0cyBhcmUgcnVuJykKKyAgICAgICAgZ3JvdXAuYWRkX29wdGlvbignLS1za2lwLWlu
dGVncmF0aW9udGVzdHMnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2RvIG5vdCBydW4gdGhlICJpbnRlZ3JhdGlvbiIg
KHNsb3dlcikgdGVzdHMnKQorICAgICAgICBncm91cC5hZGRfb3B0aW9uKCctaScsICctLXJ1bi1y
ZWFsLWludGVncmF0aW9udGVzdHMnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNl
LAorICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2Fsc28gcnVuIHRoZSAicmVhbCIgaW50
ZWdyYXRpb24gdGVzdHMgKG5vcm1hbGx5IHNraXBwZWQpJykKKyAgICAgICAgZ3JvdXAuYWRkX29w
dGlvbignLWEnLCAnLS1hbGwnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3J1biBhbGwgdGhlIHRlc3RzLCBpbmNsdWRp
bmcgdGhvc2Ugbm9ybWFsbHkgc2tpcHBlZCcpLAorICAgICAgICBwYXJzZXIuYWRkX29wdGlvbl9n
cm91cChncm91cCkKKworICAgICAgICBwYXJzZXIuZXBpbG9nID0gKCdbYXJncy4uLl0gaXMgYW4g
b3B0aW9uYWwgbGlzdCBvZiBtb2R1bGVzLCB0ZXN0X2NsYXNzZXMsIG9yIGluZGl2aWR1YWwgdGVz
dHMgdG8gcnVuIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgc2V0LicpCisKKyAgICAgICAgcmV0dXJu
IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3YpCiAKICAgICBkZWYgY29uZmlndXJlKHNlbGYsIG9wdGlv
bnMpOgotICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucwotCi0gICAgICAgIGlmIG9wdGlv
bnMuc2lsZW50OgotICAgICAgICAgICAgc2VsZi5fdmVyYm9zaXR5ID0gMAotICAgICAgICAgICAg
c2VsZi5fY29uZmlndXJlX2xvZ2dpbmcobG9nZ2luZy5XQVJOSU5HKQotICAgICAgICBlbGlmIG9w
dGlvbnMucXVpZXQ6Ci0gICAgICAgICAgICBzZWxmLl92ZXJib3NpdHkgPSAxCi0gICAgICAgICAg
ICBzZWxmLl9jb25maWd1cmVfbG9nZ2luZyhsb2dnaW5nLldBUk5JTkcpCi0gICAgICAgIGVsaWYg
b3B0aW9ucy52ZXJib3NlID09IDA6Ci0gICAgICAgICAgICBzZWxmLl92ZXJib3NpdHkgPSAxCi0g
ICAgICAgICAgICBzZWxmLl9jb25maWd1cmVfbG9nZ2luZyhsb2dnaW5nLklORk8pCi0gICAgICAg
IGVsaWYgb3B0aW9ucy52ZXJib3NlID09IDE6Ci0gICAgICAgICAgICBzZWxmLl92ZXJib3NpdHkg
PSAyCi0gICAgICAgICAgICBzZWxmLl9jb25maWd1cmVfbG9nZ2luZyhsb2dnaW5nLklORk8pCi0g
ICAgICAgIGVsaWYgb3B0aW9ucy52ZXJib3NlID09IDI6Ci0gICAgICAgICAgICBzZWxmLl92ZXJi
b3NpdHkgPSAyCi0gICAgICAgICAgICBzZWxmLl9jb25maWd1cmVfbG9nZ2luZyhsb2dnaW5nLkRF
QlVHKQotCi0gICAgZGVmIF9jb25maWd1cmVfbG9nZ2luZyhzZWxmLCBsb2dfbGV2ZWwpOgorICAg
ICAgICBzZWxmLm9wdGlvbnMgPSBvcHRpb25zCisKKyAgICAgICAgc2VsZi5sb2FkZXIgPSBUZXN0
TG9hZGVyKCkKKyAgICAgICAgc2VsZi5sb2FkZXIucnVuX3JlYWxfaW50ZWdyYXRpb25fdGVzdHMg
PSBvcHRpb25zLnJ1bl9yZWFsX2ludGVncmF0aW9udGVzdHMgb3Igb3B0aW9ucy5hbGwKKyAgICAg
ICAgaWYgc2VsZi5vcHRpb25zLnhtbDoKKyAgICAgICAgICAgIGZyb20gd2Via2l0cHkudGhpcmRw
YXJ0eS5hdXRvaW5zdGFsbGVkLnhtbHJ1bm5lciBpbXBvcnQgWE1MVGVzdFJ1bm5lcgorICAgICAg
ICAgICAgc2VsZi5ydW5uZXIgPSBYTUxUZXN0UnVubmVyKG91dHB1dD0ndGVzdC13ZWJraXRweS14
bWwtcmVwb3J0cycpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnJ1bm5lciA9IFRl
c3RSdW5uZXIoc2VsZi5zdHJlYW0sIG9wdGlvbnMsIHN0YXJ0PXRpbWUudGltZSgpKQorCisgICAg
ZGVmIGNvbmZpZ3VyZV9sb2dnaW5nKHNlbGYpOgogICAgICAgICAiIiJDb25maWd1cmUgdGhlIHJv
b3QgbG9nZ2VyLgogCiAgICAgICAgIENvbmZpZ3VyZSB0aGUgcm9vdCBsb2dnZXIgbm90IHRvIGxv
ZyBhbnkgbWVzc2FnZXMgZnJvbSB3ZWJraXRweSAtLQogICAgICAgICBleGNlcHQgZm9yIG1lc3Nh
Z2VzIGZyb20gdGhlIGF1dG9pbnN0YWxsIG1vZHVsZS4gIEFsc28gc2V0IHRoZQogICAgICAgICBs
b2dnaW5nIGxldmVsIGFzIGRlc2NyaWJlZCBiZWxvdy4KICAgICAgICAgIiIiCi0gICAgICAgIGhh
bmRsZXIgPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoc3lzLnN0ZGVycikKKyAgICAgICAgbWVzc2Fn
ZXMgPSBbXQorCisgICAgICAgIGlmIHNlbGYub3B0aW9ucy50aW1pbmcgYW5kIG5vdCBzZWxmLm9w
dGlvbnMudmVyYm9zZToKKyAgICAgICAgICAgIHNlbGYub3B0aW9ucy52ZXJib3NlID0gMQorICAg
ICAgICAgICAgbWVzc2FnZXMuYXBwZW5kKChsb2dnaW5nLklORk8sICctLXRpbWluZyBpbXBsaWVz
IC0tdmVyYm9zZScpKQorCisgICAgICAgIHNlbGYubG9nX2xldmVsID0gbG9nZ2luZy5JTkZPCisg
ICAgICAgIGlmIHNlbGYub3B0aW9ucy52ZXJib3NlOgorICAgICAgICAgICAgaWYgc2VsZi5vcHRp
b25zLnF1aWV0OgorICAgICAgICAgICAgICAgIG1lc3NhZ2VzLmFwcGVuZCgobG9nZ2luZy5XQVJO
SU5HLCAnLS12ZXJib3NlIG92ZXJyaWRlcyAtLXF1aWV0JykpCisgICAgICAgICAgICBpZiBzZWxm
Lm9wdGlvbnMudmVyYm9zZSA+IDE6CisgICAgICAgICAgICAgICAgc2VsZi5sb2dfbGV2ZWwgPSBs
b2dnaW5nLkRFQlVHCisgICAgICAgIGVsaWYgc2VsZi5vcHRpb25zLnF1aWV0OgorICAgICAgICAg
ICAgc2VsZi5sb2dfbGV2ZWwgPSBsb2dnaW5nLldBUk5JTkcKKworICAgICAgICBoYW5kbGVyID0g
bG9nZ2luZy5TdHJlYW1IYW5kbGVyKHNlbGYuc3RyZWFtKQogICAgICAgICAjIFdlIGNvbnN0cmFp
biB0aGUgbGV2ZWwgb24gdGhlIGhhbmRsZXIgcmF0aGVyIHRoYW4gb24gdGhlIHJvb3QKICAgICAg
ICAgIyBsb2dnZXIgaXRzZWxmLiAgVGhpcyBpcyBwcm9iYWJseSBiZXR0ZXIgYmVjYXVzZSB0aGUg
aGFuZGxlciBpcwogICAgICAgICAjIGNvbmZpZ3VyZWQgYW5kIGtub3duIG9ubHkgdG8gdGhpcyBt
b2R1bGUsIHdoZXJlYXMgdGhlIHJvb3QgbG9nZ2VyCkBAIC0xMDgsNyArMTYyLDcgQEAgY2xhc3Mg
VGVzdGVyKG9iamVjdCk6CiAgICAgICAgICMgTW9kaWZ5aW5nIHRoZSBoYW5kbGVyLCB0aGVuLCBp
cyBsZXNzIGludHJ1c2l2ZSBhbmQgbGVzcyBsaWtlbHkgdG8KICAgICAgICAgIyBpbnRlcmZlcmUg
d2l0aCBtb2RpZmljYXRpb25zIG1hZGUgYnkgb3RoZXIgbW9kdWxlcyAoZS5nLiBpbiB1bml0CiAg
ICAgICAgICMgdGVzdHMpLgotICAgICAgICBoYW5kbGVyLnNldExldmVsKGxvZ19sZXZlbCkKKyAg
ICAgICAgaGFuZGxlci5zZXRMZXZlbChzZWxmLmxvZ19sZXZlbCkKICAgICAgICAgZm9ybWF0dGVy
ID0gbG9nZ2luZy5Gb3JtYXR0ZXIoIiUobWVzc2FnZSlzIikKICAgICAgICAgaGFuZGxlci5zZXRG
b3JtYXR0ZXIoZm9ybWF0dGVyKQogCkBAIC0xMzYsMTExICsxOTAsMzA5IEBAIGNsYXNzIFRlc3Rl
cihvYmplY3QpOgogICAgICAgICB0ZXN0aW5nX2ZpbHRlciA9IGxvZ2dpbmcuRmlsdGVyKCkKICAg
ICAgICAgdGVzdGluZ19maWx0ZXIuZmlsdGVyID0gZmlsdGVyCiAKKyAgICAgICAgZm9yIGxldmVs
LCBtc2cgaW4gbWVzc2FnZXM6CisgICAgICAgICAgICBfbG9nLmxvZyhsZXZlbCwgbXNnKQorCiAg
ICAgICAgICMgRGlzcGxheSBhIG1lc3NhZ2Ugc28gZGV2ZWxvcGVycyBhcmUgbm90IG15c3RpZmll
ZCBhcyB0byB3aHkKICAgICAgICAgIyBsb2dnaW5nIGRvZXMgbm90IHdvcmsgaW4gdGhlIHVuaXQg
dGVzdHMuCiAgICAgICAgIF9sb2cuaW5mbygiU3VwcHJlc3NpbmcgbW9zdCB3ZWJraXRweSBsb2dn
aW5nIHdoaWxlIHJ1bm5pbmcgdW5pdCB0ZXN0cy4iKQogICAgICAgICBoYW5kbGVyLmFkZEZpbHRl
cih0ZXN0aW5nX2ZpbHRlcikKIAotICAgIGRlZiBydW4oc2VsZiwgZGlycywgYXJncyk6Ci0gICAg
ICAgIGFyZ3MgPSBhcmdzIG9yIHNlbGYuX2ZpbmRfbW9kdWxlcyhkaXJzKQotICAgICAgICByZXR1
cm4gc2VsZi5fcnVuX3Rlc3RzKGRpcnMsIGFyZ3MpCi0KLSAgICBkZWYgX2ZpbmRfbW9kdWxlcyhz
ZWxmLCBkaXJzKToKLSAgICAgICAgbW9kdWxlcyA9IFtdCi0gICAgICAgIGZvciBkaXJfdG9fc2Vh
cmNoIGluIGRpcnM6Ci0gICAgICAgICAgICBtb2R1bGVzLmV4dGVuZChzZWxmLl9maW5kX21vZHVs
ZXNfdW5kZXIoZGlyX3RvX3NlYXJjaCwgJ191bml0dGVzdC5weScpKQotICAgICAgICAgICAgaWYg
bm90IHNlbGYuX29wdGlvbnMuc2tpcF9pbnRlZ3JhdGlvbnRlc3RzOgotICAgICAgICAgICAgICAg
IG1vZHVsZXMuZXh0ZW5kKHNlbGYuX2ZpbmRfbW9kdWxlc191bmRlcihkaXJfdG9fc2VhcmNoLCAn
X2ludGVncmF0aW9udGVzdC5weScpKQotICAgICAgICBtb2R1bGVzLnNvcnQoKQotCi0gICAgICAg
IGZvciBtb2R1bGUgaW4gbW9kdWxlczoKLSAgICAgICAgICAgIF9sb2cuZGVidWcoIkZvdW5kOiAl
cyIgJSBtb2R1bGUpCi0KLSAgICAgICAgIyBGSVhNRTogRmlndXJlIG91dCBob3cgdG8gbW92ZSB0
aGlzIHRvIHRlc3Qtd2Via2l0cHkgaW4gb3JkZXIgdG8gdG8gbWFrZSB0aGlzIGZpbGUgbW9yZSBn
ZW5lcmljLgotICAgICAgICBpZiBub3Qgc2VsZi5fb3B0aW9ucy5hbGw6Ci0gICAgICAgICAgICBz
bG93X3Rlc3RzID0gKCd3ZWJraXRweS5jb21tb24uY2hlY2tvdXQuc2NtLnNjbV91bml0dGVzdCcs
KQotICAgICAgICAgICAgc2VsZi5fZXhjbHVkZShtb2R1bGVzLCBzbG93X3Rlc3RzLCAnYXJlIHJl
YWxseSwgcmVhbGx5IHNsb3cnLCAzMTgxOCkKLQotICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3Jt
ID09ICd3aW4zMic6Ci0gICAgICAgICAgICAgICAgd2luMzJfYmxhY2tsaXN0ID0gKCd3ZWJraXRw
eS5jb21tb24uY2hlY2tvdXQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
d2Via2l0cHkuY29tbW9uLmNvbmZpZycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICd3ZWJraXRweS50b29sJykKLSAgICAgICAgICAgICAgICBzZWxmLl9leGNsdWRlKG1vZHVs
ZXMsIHdpbjMyX2JsYWNrbGlzdCwgJ2ZhaWwgaG9ycmlibHkgb24gd2luMzInLCA1NDUyNikKLQor
ICAgIGRlZiBhZGRfdHJlZShzZWxmLCB0b3BfZGlyZWN0b3J5LCBzdGFydGluZ19zdWJkaXJlY3Rv
cnk9Tm9uZSwgaWdub3JlX2xpc3Q9Tm9uZSk6CisgICAgICAgIHNlbGYudHJlZXMuYXBwZW5kKFRl
c3RUcmVlKHRvcF9kaXJlY3RvcnksIHN0YXJ0aW5nX3N1YmRpcmVjdG9yeSwgaWdub3JlX2xpc3Qg
b3IgW10pKQorCisgICAgZGVmIHJ1bihzZWxmLCBhcmdzKToKKyAgICAgICAgc2VsZi5fY2xlYW5f
dHJlZXMoKQorICAgICAgICBzZWxmLl9maXhfcGF0aCgpCisKKyAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgY292ID0gTm9uZQorICAgICAgICAgICAgaWYgc2VsZi5vcHRpb25zLmNvdmVyYWdlOgor
ICAgICAgICAgICAgICAgIGNvdiA9IHNlbGYuX2NvdmVyYWdlX29iamVjdCgpCisgICAgICAgICAg
ICAgICAgY292LnN0YXJ0KCkKKworICAgICAgICAgICAgX2xvZy5kZWJ1ZygiTG9hZGluZyB0aGUg
dGVzdHMuLi4iKQorICAgICAgICAgICAgaWYgYXJnczoKKyAgICAgICAgICAgICAgICB0ZXN0cyA9
IFtdCisgICAgICAgICAgICAgICAgZm9yIGFyZyBpbiBhcmdzOgorICAgICAgICAgICAgICAgICAg
ICB0ZXN0cy5leHRlbmQoc2VsZi5fZmluZF90ZXN0c19mb3IoYXJnKSkKKyAgICAgICAgICAgIGVs
c2U6CisgICAgICAgICAgICAgICAgIyBGSVhNRTogQ29uc2lkZXIgcnVubmluZyBlYWNoIHRyZWUg
c2VwYXJhdGVseSB0byBhdm9pZCBuYW1lc3BhY2UgY2xhc2hlcy4KKyAgICAgICAgICAgICAgICB0
ZXN0cyA9IHNlbGYuX2RlZmF1bHRfdGVzdHMoKQorCisgICAgICAgICAgICByZXN1bHQgPSBzZWxm
Ll9ydW5fdGVzdHModGVzdHMpCisgICAgICAgICAgICBpZiBjb3Y6CisgICAgICAgICAgICAgICAg
Y292LnN0b3AoKQorICAgICAgICAgICAgICAgIGNvdi5yZXBvcnQoc2hvd19taXNzaW5nPUZhbHNl
KQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC53YXNTdWNjZXNzZnVsCisKKyAgICAgICAgZXhj
ZXB0IExvYWRlckVycm9yLCBlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYg
X2ZpeF9wYXRoKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSBQWVRIT05QQVRIIGlzIHNldCB1
cCBjb3JyZWN0bHkuCisgICAgICAgIHN5cy5wYXRoID0gW3RyZWUudG9wX2RpcmVjdG9yeSBmb3Ig
dHJlZSBpbiBzZWxmLnRyZWVzIGlmIHRyZWUudG9wX2RpcmVjdG9yeSBub3QgaW4gc3lzLnBhdGhd
ICsgc3lzLnBhdGgKKworICAgIGRlZiBfY2xlYW5fdHJlZXMoc2VsZik6CisgICAgICAgIGZvciB0
cmVlIGluIHNlbGYudHJlZXM6CisgICAgICAgICAgICB0cmVlLmNsZWFuKCkKKworICAgIGRlZiBf
Y292ZXJhZ2Vfb2JqZWN0KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpbXBvcnQg
d2Via2l0cHkudGhpcmRwYXJ0eS5hdXRvaW5zdGFsbGVkLmNvdmVyYWdlIGFzIGNvdmVyYWdlCisg
ICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciwgZToKKyAgICAgICAgICAgIF9sb2cuZXJyb3IoIkZh
aWxlZCB0byBpbXBvcnQgJ2NvdmVyYWdlJzsgY2FuJ3QgZ2VuZXJhdGUgY292ZXJhZ2UgbnVtYmVy
cy4iKQorICAgICAgICAgICAgcmFpc2UgTG9hZGVyRXJyb3IoKQorCisgICAgICAgIGluY2x1ZGUg
PSBbb3MucGF0aC5qb2luKHRyZWUuc2VhcmNoX2RpcmVjdG9yeSwgJyonKSBmb3IgdHJlZSBpbiBz
ZWxmLnRyZWVzXQorICAgICAgICBvbWl0ID0gW10KKyAgICAgICAgZm9yIHRyZWUgaW4gc2VsZi50
cmVlczoKKyAgICAgICAgICAgIGZvciBwYXRoIGluIHRyZWUuaWdub3JlX2xpc3Q6CisgICAgICAg
ICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihwYXRoKToKKyAgICAgICAgICAgICAgICAgICAgb21p
dC5hcHBlbmQob3MucGF0aC5qb2luKHBhdGgsICcqJykpCisgICAgICAgICAgICAgICAgZWxzZToK
KyAgICAgICAgICAgICAgICAgICAgb21pdC5hcHBlbmQocGF0aCkKKyAgICAgICAgcmV0dXJuIGNv
dmVyYWdlLmNvdmVyYWdlKGluY2x1ZGU9aW5jbHVkZSwgb21pdD1vbWl0KQorCisgICAgZGVmIF9m
aW5kX21vZHVsZXMoc2VsZiwgdHJlZSwgZGlyX3RvX3NlYXJjaCk6CisgICAgICAgIHN1ZmZpeGVz
ID0gKCdfdW5pdHRlc3QucHknLCAnX2ludGVncmF0aW9udGVzdC5weScpCisgICAgICAgIGlmIHNl
bGYub3B0aW9ucy5za2lwX2ludGVncmF0aW9udGVzdHM6CisgICAgICAgICAgICBzdWZmaXhlcyA9
ICgnX3VuaXR0ZXN0LnB5JywpCisgICAgICAgIHJldHVybiB0cmVlLmZpbmRfbW9kdWxlcyhkaXJf
dG9fc2VhcmNoLCBzdWZmaXhlcykKKworICAgIGRlZiBfZGVmYXVsdF90ZXN0cyhzZWxmKToKKyAg
ICAgICAgdGVzdHMgPSBbXQorICAgICAgICBmb3IgdHJlZSBpbiBzZWxmLnRyZWVzOgorICAgICAg
ICAgICAgdGVzdHMuZXh0ZW5kKHNlbGYuX2ZpbmRfbW9kdWxlcyh0cmVlLCB0cmVlLnNlYXJjaF9k
aXJlY3RvcnkpKQorICAgICAgICByZXR1cm4gdGVzdHMKKworICAgIGRlZiBfc2tpcF9tb2R1bGVz
KHNlbGYsIG1vZHVsZXMpOgorICAgICAgICAjIEZJWE1FOiBUaGVzZSBzaG91bGQgYmUgcmVwbGFj
ZWQgdy8gQHNsb3cgYW5kIEBza2lwX2lmIGRlY29yYXRvcnMKKyAgICAgICAgc2xvd190ZXN0cyA9
ICgnd2Via2l0cHkuY29tbW9uLmNoZWNrb3V0LnNjbS5zY21fdW5pdHRlc3QnLCkKKyAgICAgICAg
c2VsZi5fZXhjbHVkZShtb2R1bGVzLCBzbG93X3Rlc3RzLCAnYXJlIHJlYWxseSwgcmVhbGx5IHNs
b3cnLCAzMTgxOCkKKworICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICAg
ICAgICAgIHdpbjMyX2JsYWNrbGlzdCA9ICgnd2Via2l0cHkuY29tbW9uLmNoZWNrb3V0JywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dlYmtpdHB5LmNvbW1vbi5jb25maWcnLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2Via2l0cHkudG9vbCcpCisgICAgICAg
ICAgICBzZWxmLl9leGNsdWRlKG1vZHVsZXMsIHdpbjMyX2JsYWNrbGlzdCwgJ2ZhaWwgaG9ycmli
bHkgb24gd2luMzInLCA1NDUyNikKICAgICAgICAgcmV0dXJuIG1vZHVsZXMKIAogICAgIGRlZiBf
ZXhjbHVkZShzZWxmLCBtb2R1bGVzLCBtb2R1bGVfcHJlZml4ZXMsIHJlYXNvbiwgYnVnaWQpOgot
ICAgICAgICBfbG9nLmluZm8oJ1NraXBwaW5nIHRlc3RzIGluIHRoZSBmb2xsb3dpbmcgbW9kdWxl
cyBvciBwYWNrYWdlcyBiZWNhdXNlIHRoZXkgJXM6JyAlIHJlYXNvbikKKyAgICAgICAgc2tpcHBl
ZF9hbnkgPSBGYWxzZQogICAgICAgICBmb3IgcHJlZml4IGluIG1vZHVsZV9wcmVmaXhlczoKLSAg
ICAgICAgICAgIF9sb2cuaW5mbygnICAgICVzJyAlIHByZWZpeCkKICAgICAgICAgICAgIG1vZHVs
ZXNfdG9fZXhjbHVkZSA9IGZpbHRlcihsYW1iZGEgbTogbS5zdGFydHN3aXRoKHByZWZpeCksIG1v
ZHVsZXMpCi0gICAgICAgICAgICBmb3IgbSBpbiBtb2R1bGVzX3RvX2V4Y2x1ZGU6Ci0gICAgICAg
ICAgICAgICAgaWYgbGVuKG1vZHVsZXNfdG9fZXhjbHVkZSkgPiAxOgorICAgICAgICAgICAgaWYg
bW9kdWxlc190b19leGNsdWRlOgorICAgICAgICAgICAgICAgIGlmIG5vdCBza2lwcGVkX2FueToK
KyAgICAgICAgICAgICAgICAgICAgX2xvZy5pbmZvKCdTa2lwcGluZyB0ZXN0cyBpbiB0aGUgZm9s
bG93aW5nIG1vZHVsZXMgb3IgcGFja2FnZXMgYmVjYXVzZSB0aGV5ICVzOicgJSByZWFzb24pCisg
ICAgICAgICAgICAgICAgICAgIHNraXBwZWRfYW55ID0gVHJ1ZQorICAgICAgICAgICAgICAgIF9s
b2cuaW5mbygnICAgICVzJyAlIHByZWZpeCkKKyAgICAgICAgICAgICAgICBmb3IgbSBpbiBtb2R1
bGVzX3RvX2V4Y2x1ZGU6CiAgICAgICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoJyAgICAgICAg
JXMnICUgbSkKICAgICAgICAgICAgICAgICBtb2R1bGVzLnJlbW92ZShtKQotICAgICAgICBfbG9n
LmluZm8oJyAgICAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPSVkOyB1
c2UgLS1hbGwgdG8gaW5jbHVkZSknICUgYnVnaWQpCi0gICAgICAgIF9sb2cuaW5mbygnJykKLQot
ICAgIGRlZiBfZmluZF9tb2R1bGVzX3VuZGVyKHNlbGYsIGRpcl90b19zZWFyY2gsIHN1ZmZpeCk6
CiAKLSAgICAgICAgZGVmIHRvX3BhY2thZ2UoZGlyX3BhdGgpOgotICAgICAgICAgICAgcmV0dXJu
IGRpcl9wYXRoLnJlcGxhY2UoZGlyX3RvX3NlYXJjaCArIG9zLnNlcCwgJycpLnJlcGxhY2Uob3Mu
c2VwLCAnLicpCisgICAgICAgIGlmIHNraXBwZWRfYW55OgorICAgICAgICAgICAgX2xvZy5pbmZv
KCcgICAgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0lZDsgdXNlIC0t
YWxsIHRvIGluY2x1ZGUpJyAlIGJ1Z2lkKQorICAgICAgICAgICAgX2xvZy5pbmZvKCcnKQogCi0g
ICAgICAgIGRlZiB0b19tb2R1bGUoZmlsZW5hbWUsIHBhY2thZ2UpOgotICAgICAgICAgICAgcmV0
dXJuIHBhY2thZ2UgKyAnLicgKyBmaWxlbmFtZS5yZXBsYWNlKCcucHknLCAnJykKLQotICAgICAg
ICBtb2R1bGVzID0gW10KLSAgICAgICAgZm9yIGRpcl9wYXRoLCBfLCBmaWxlbmFtZXMgaW4gb3Mu
d2FsayhkaXJfdG9fc2VhcmNoKToKLSAgICAgICAgICAgIHBhY2thZ2UgPSB0b19wYWNrYWdlKGRp
cl9wYXRoKQotICAgICAgICAgICAgbW9kdWxlcy5leHRlbmQodG9fbW9kdWxlKGYsIHBhY2thZ2Up
IGZvciBmIGluIGZpbGVuYW1lcyBpZiBmLmVuZHN3aXRoKHN1ZmZpeCkpCi0gICAgICAgIHJldHVy
biBtb2R1bGVzCi0KLSAgICBkZWYgX3J1bl90ZXN0cyhzZWxmLCBkaXJzLCBhcmdzKToKLSAgICAg
ICAgaWYgc2VsZi5fb3B0aW9ucy5jb3ZlcmFnZToKKyAgICBkZWYgX2ZpbmRfdGVzdHNfZm9yKHNl
bGYsIG5hbWUpOgorICAgICAgICAodHJlZSwgc3RhcnRpbmdfZGlyZWN0b3J5KSA9IHNlbGYuX2Zp
bmRfdHJlZShuYW1lKQorICAgICAgICBpZiB0cmVlIGFuZCBub3Qgb3MucGF0aC5pc2ZpbGUoc3Rh
cnRpbmdfZGlyZWN0b3J5KToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9maW5kX21vZHVsZXMo
dHJlZSwgc3RhcnRpbmdfZGlyZWN0b3J5KQorICAgICAgICBlbGlmIG9zLnBhdGguZXhpc3RzKG5h
bWUpOgorICAgICAgICAgICAgcmV0dXJuIFtzZWxmLl90ZXN0X2Zyb21fcGF0aChuYW1lKV0KKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBbbmFtZV0KKworICAgIGRlZiBfdGVzdF9m
cm9tX3BhdGgoc2VsZiwgbmFtZSk6CisgICAgICAgICMgRmlyc3QsIGNoZWNrIHRvIHNlZSBpZiB3
ZSBjYW4gcmVzb2x2ZSB0aGUgcGF0aCByZWxhdGl2ZSB0byB0aGUgY3dkLgorICAgICAgICBmdWxs
X3BhdGggPSBvcy5wYXRoLnJlYWxwYXRoKG5hbWUpCisgICAgICAgIGZvciB0cmVlIGluIHNlbGYu
dHJlZXM6CisgICAgICAgICAgICAjIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIHdvcnJ5IGFib3V0IGNh
c2UtaW5zZW5zaXRpdml0eSBoZXJlPworICAgICAgICAgICAgaWYgZnVsbF9wYXRoLnN0YXJ0c3dp
dGgodHJlZS50b3BfZGlyZWN0b3J5KToKKyAgICAgICAgICAgICAgICByZXR1cm4gZnVsbF9wYXRo
LnJlcGxhY2UodHJlZS50b3BfZGlyZWN0b3J5ICsgb3Muc2VwLCAnJykucmVwbGFjZSgnLnB5Jywg
JycpLnJlcGxhY2Uob3Muc2VwLCAnLicpCisKKyAgICAgICAgZXJyID0gJyVzIGlzIG5vdCBpbiBv
bmUgb2YgdGhlIFdlYktpdCBweXRob24gdHJlZXMnICUgbmFtZQorICAgICAgICBfbG9nLmZhdGFs
KGVycikKKyAgICAgICAgcmFpc2UgTG9hZGVyRXJyb3IoZXJyKQorCisgICAgZGVmIF9zdWl0ZV9m
cm9tX25hbWUoc2VsZiwgbmFtZSk6CisgICAgICAgIGlmIHNlbGYuX2lzX21vZHVsZShuYW1lKToK
KyAgICAgICAgICAgICMgaW1wb3J0IG1vZHVsZXMgZXhwbGljaXRseSBiZWZvcmUgbG9hZGluZyB0
aGVpciB0ZXN0cyBiZWNhdXNlCisgICAgICAgICAgICAjIGxvYWRUZXN0c0Zyb21OYW1lKCkgcHJv
ZHVjZXMgbG91c3kgZXJyb3IgbWVzc2FnZXMgZm9yIGJhZCBtb2R1bGVzLgogICAgICAgICAgICAg
dHJ5OgotICAgICAgICAgICAgICAgIGltcG9ydCBjb3ZlcmFnZQorICAgICAgICAgICAgICAgIF9f
aW1wb3J0X18obmFtZSkKICAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciwgZToKLSAgICAg
ICAgICAgICAgICBfbG9nLmVycm9yKCJGYWlsZWQgdG8gaW1wb3J0ICdjb3ZlcmFnZSc7IGNhbid0
IGdlbmVyYXRlIGNvdmVyYWdlIG51bWJlcnMuIikKLSAgICAgICAgICAgICAgICByZXR1cm4gRmFs
c2UKLSAgICAgICAgICAgIGNvdiA9IGNvdmVyYWdlLmNvdmVyYWdlKCkKLSAgICAgICAgICAgIGNv
di5zdGFydCgpCi0KLSAgICAgICAgX2xvZy5kZWJ1ZygiTG9hZGluZyB0aGUgdGVzdHMuLi4iKQot
Ci0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LmRlZmF1bHRUZXN0TG9hZGVyCi0gICAgICAgIHN1
aXRlcyA9IFtdCi0gICAgICAgIGZvciBuYW1lIGluIGFyZ3M6Ci0gICAgICAgICAgICBpZiBzZWxm
Ll9pc19tb2R1bGUoZGlycywgbmFtZSk6Ci0gICAgICAgICAgICAgICAgIyBpbXBvcnQgbW9kdWxl
cyBleHBsaWNpdGx5IGJlZm9yZSBsb2FkaW5nIHRoZWlyIHRlc3RzIGJlY2F1c2UKLSAgICAgICAg
ICAgICAgICAjIGxvYWRUZXN0c0Zyb21OYW1lKCkgcHJvZHVjZXMgbG91c3kgZXJyb3IgbWVzc2Fn
ZXMgZm9yIGJhZCBtb2R1bGVzLgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAg
ICAgICAgX19pbXBvcnRfXyhuYW1lKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJv
ciwgZToKLSAgICAgICAgICAgICAgICAgICAgX2xvZy5mYXRhbCgnRmFpbGVkIHRvIGltcG9ydCAl
czonICUgbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fbG9nX2V4Y2VwdGlvbigpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICAgICAgc3VpdGVzLmFwcGVu
ZChsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUobmFtZSwgTm9uZSkpCi0KLSAgICAgICAgdGVzdF9z
dWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShzdWl0ZXMpCi0gICAgICAgIGlmIHNlbGYuX29wdGlv
bnMueG1sOgotICAgICAgICAgICAgZnJvbSB3ZWJraXRweS50aGlyZHBhcnR5LmF1dG9pbnN0YWxs
ZWQueG1scnVubmVyIGltcG9ydCBYTUxUZXN0UnVubmVyCi0gICAgICAgICAgICB0ZXN0X3J1bm5l
ciA9IFhNTFRlc3RSdW5uZXIob3V0cHV0PSd0ZXN0LXdlYmtpdHB5LXhtbC1yZXBvcnRzJykKLSAg
ICAgICAgZWxzZToKLSAgICAgICAgICAgIHRlc3RfcnVubmVyID0gdW5pdHRlc3QuVGV4dFRlc3RS
dW5uZXIodmVyYm9zaXR5PXNlbGYuX3ZlcmJvc2l0eSkKLQotICAgICAgICBfbG9nLmRlYnVnKCJS
dW5uaW5nIHRoZSB0ZXN0cy4iKQotICAgICAgICByZXN1bHQgPSB0ZXN0X3J1bm5lci5ydW4odGVz
dF9zdWl0ZSkKLSAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5jb3ZlcmFnZToKLSAgICAgICAgICAg
IGNvdi5zdG9wKCkKLSAgICAgICAgICAgIGNvdi5zYXZlKCkKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dC53YXNTdWNjZXNzZnVsKCkKLQotICAgIGRlZiBfaXNfbW9kdWxlKHNlbGYsIGRpcnMsIG5hbWUp
OgorICAgICAgICAgICAgICAgIF9sb2cuZmF0YWwoJ0ZhaWxlZCB0byBpbXBvcnQgJXM6JyAlIG5h
bWUpCisgICAgICAgICAgICAgICAgc2VsZi5fbG9nX2V4Y2VwdGlvbigpCisgICAgICAgICAgICAg
ICAgcmFpc2UgTG9hZGVyRXJyb3IoKQorICAgICAgICByZXR1cm4gc2VsZi5sb2FkZXIubG9hZFRl
c3RzRnJvbU5hbWUobmFtZSwgTm9uZSkKKworICAgIGRlZiBfZmluZF90cmVlKHNlbGYsIG5hbWUp
OgorICAgICAgICAjIElzIHRoZSBuYW1lIGEgc3ViZGlyZWN0b3J5IHJlbGF0aXZlIHRvIHRoZSBj
dXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGFuZCBpbiBhIHRyZWU/CisgICAgICAgIGlmIG9zLnBh
dGguZXhpc3RzKG5hbWUpOgorICAgICAgICAgICAgZnVsbF9wYXRoID0gb3MucGF0aC5yZWFscGF0
aChuYW1lKQorICAgICAgICAgICAgZm9yIHRyZWUgaW4gc2VsZi50cmVlczoKKyAgICAgICAgICAg
ICAgICBpZiBmdWxsX3BhdGguc3RhcnRzd2l0aCh0cmVlLnRvcF9kaXJlY3RvcnkpOgorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gKHRyZWUsIGZ1bGxfcGF0aCkKKworICAgICAgICAjIElzIHRo
ZSBuYW1lIGEgc3ViZGlyZWN0b3J5IG9mIGEgdHJlZT8KKyAgICAgICAgaWYgbm90IG9zLnBhdGgu
aXNhYnMobmFtZSk6CisgICAgICAgICAgICBmb3IgdHJlZSBpbiBzZWxmLnRyZWVzOgorICAgICAg
ICAgICAgICAgIGZ1bGxfcGF0aCA9IG9zLnBhdGgucmVhbHBhdGgob3MucGF0aC5qb2luKHRyZWUu
dG9wX2RpcmVjdG9yeSwgbmFtZSkpCisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2Rpcihm
dWxsX3BhdGgpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHRyZWUsIG9zLnBhdGguam9p
bih0cmVlLnRvcF9kaXJlY3RvcnksIG5hbWUpKQorCisgICAgICAgICMgSXMgdGhlIG5hbWUgYSBw
YWNrYWdlPworICAgICAgICByZWxwYXRoID0gbmFtZS5yZXBsYWNlKCcuJywgb3Muc2VwKQorICAg
ICAgICBmb3IgdHJlZSBpbiBzZWxmLnRyZWVzOgorICAgICAgICAgICAgZnVsbF9wYXRoID0gb3Mu
cGF0aC5qb2luKHRyZWUudG9wX2RpcmVjdG9yeSwgcmVscGF0aCkKKyAgICAgICAgICAgIGlmIG9z
LnBhdGguaXNkaXIoZnVsbF9wYXRoKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKHRyZWUsIGZ1
bGxfcGF0aCkKKworICAgICAgICByZXR1cm4gKE5vbmUsIE5vbmUpCisKKyAgICBkZWYgX2lzX21v
ZHVsZShzZWxmLCBuYW1lKToKICAgICAgICAgcmVscGF0aCA9IG5hbWUucmVwbGFjZSgnLicsIG9z
LnNlcCkgKyAnLnB5JwotICAgICAgICByZXR1cm4gYW55KG9zLnBhdGguZXhpc3RzKG9zLnBhdGgu
am9pbihkLCByZWxwYXRoKSkgZm9yIGQgaW4gZGlycykKKyAgICAgICAgcmV0dXJuIGFueShvcy5w
YXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4odHJlZS50b3BfZGlyZWN0b3J5LCByZWxwYXRoKSkgZm9y
IHRyZWUgaW4gc2VsZi50cmVlcykKKworICAgIGRlZiBfcnVuX3Rlc3RzKHNlbGYsIHRlc3RzKToK
KyAgICAgICAgIyBTb3J0IGFuZCBkZWR1cGxpY2F0ZSBhbGwgb2YgdGhlIHRlc3RzCisgICAgICAg
IHRlc3RzID0gc29ydGVkKFt0ZXN0IGZvciB0ZXN0IGluIHNldCh0ZXN0cyldKQorCisgICAgICAg
IGZvciB0ZXN0IGluIHRlc3RzOgorICAgICAgICAgICAgX2xvZy5kZWJ1ZygiRm91bmQ6ICVzIiAl
IHRlc3QpCisKKyAgICAgICAgaWYgbm90IHNlbGYub3B0aW9ucy5hbGw6CisgICAgICAgICAgICB0
ZXN0cyA9IHNlbGYuX3NraXBfbW9kdWxlcyh0ZXN0cykKKworICAgICAgICBkZWYgYWxsX3Rlc3Rf
bmFtZXMoc3VpdGUpOgorICAgICAgICAgICAgbmFtZXMgPSBbXQorICAgICAgICAgICAgaWYgaGFz
YXR0cihzdWl0ZSwgJ190ZXN0cycpOgorICAgICAgICAgICAgICAgIGZvciB0IGluIHN1aXRlLl90
ZXN0czoKKyAgICAgICAgICAgICAgICAgICAgbmFtZXMuZXh0ZW5kKGFsbF90ZXN0X25hbWVzKHQp
KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBuYW1lcy5hcHBlbmQoX3Rlc3Rf
bmFtZShzdWl0ZSkpCisgICAgICAgICAgICByZXR1cm4gbmFtZXMKKworICAgICAgICBzdWl0ZSA9
IHVuaXR0ZXN0LlRlc3RTdWl0ZShbc2VsZi5fc3VpdGVfZnJvbV9uYW1lKHRlc3QpIGZvciB0ZXN0
IGluIHRlc3RzXSkKKyAgICAgICAgaWYgc2VsZi5vcHRpb25zLnhtbDoKKyAgICAgICAgICAgIHJl
dHVybiBzZWxmLnJ1bm5lci5ydW4oc3VpdGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBy
ZXR1cm4gc2VsZi5ydW5uZXIucnVuKGFsbF90ZXN0X25hbWVzKHN1aXRlKSkKIAogICAgIGRlZiBf
bG9nX2V4Y2VwdGlvbihzZWxmKToKICAgICAgICAgcyA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKICAg
ICAgICAgdHJhY2ViYWNrLnByaW50X2V4YyhmaWxlPXMpCiAgICAgICAgIGZvciBsIGluIHMuYnVm
bGlzdDoKICAgICAgICAgICAgIF9sb2cuZXJyb3IoJyAgJyArIGwucnN0cmlwKCkpCisKKworY2xh
c3MgVGVzdExvYWRlcih1bml0dGVzdC5UZXN0TG9hZGVyKToKKyAgICBkZWYgX19pbml0X18oc2Vs
Zik6CisgICAgICAgIHNlbGYucnVuX3JlYWxfaW50ZWdyYXRpb25fdGVzdHMgPSBGYWxzZQorICAg
ICAgICBzdXBlcihUZXN0TG9hZGVyLCBzZWxmKS5fX2luaXRfXygpCisKKyAgICBkZWYgZ2V0VGVz
dENhc2VOYW1lcyhzZWxmLCB0ZXN0Q2FzZUNsYXNzKToKKyAgICAgICAgZGVmIGlzVGVzdE1ldGhv
ZChhdHRybmFtZSwgdGVzdENhc2VDbGFzcz10ZXN0Q2FzZUNsYXNzKToKKyAgICAgICAgICAgIGlm
IG5vdCBoYXNhdHRyKGdldGF0dHIodGVzdENhc2VDbGFzcywgYXR0cm5hbWUpLCAnX19jYWxsX18n
KToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIHJldHVybiAoKGF0
dHJuYW1lLnN0YXJ0c3dpdGgoJ3Rlc3QnKSkgb3IKKyAgICAgICAgICAgICAgICAgICAgKHNlbGYu
cnVuX3JlYWxfaW50ZWdyYXRpb25fdGVzdHMgYW5kIGF0dHJuYW1lLnN0YXJ0c3dpdGgoJ2ludGVn
cmF0aW9uX3Rlc3RfJykpKQorICAgICAgICB0ZXN0Rm5OYW1lcyA9IGZpbHRlcihpc1Rlc3RNZXRo
b2QsIGRpcih0ZXN0Q2FzZUNsYXNzKSkKKyAgICAgICAgdGVzdEZuTmFtZXMuc29ydCgpCisgICAg
ICAgIHJldHVybiB0ZXN0Rm5OYW1lcworCisKK2NsYXNzIFRlc3RSdW5uZXIobWFuYWdlcl93b3Jr
ZXJfYnJva2VyLkJyb2tlckNsaWVudCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0cmVhbSwg
b3B0aW9ucywgc3RhcnQpOgorICAgICAgICBzZWxmLm9wdGlvbnMgPSBvcHRpb25zCisgICAgICAg
IHNlbGYuc3RyZWFtID0gc3RyZWFtCisgICAgICAgIHNlbGYuc3RhcnQgPSBzdGFydAorICAgICAg
ICBzZWxmLm51bV90ZXN0cyA9IE5vbmUKKyAgICAgICAgc2VsZi5fYnVmZmVyID0gJycKKworICAg
IGRlZiBuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gJ21hbmFnZXInCisKKyAgICBkZWYgcnVu
KHNlbGYsIHRlc3RfbmFtZXMpOgorICAgICAgICBzZWxmLm51bV90ZXN0cyA9IGxlbih0ZXN0X25h
bWVzKQorICAgICAgICBsb2FkZXIgPSBUZXN0TG9hZGVyKCkKKyAgICAgICAgcmVzdWx0ID0gdW5p
dHRlc3QuVGVzdFJlc3VsdCgpCisKKyAgICAgICAgc3RvcCA9IHRpbWUudGltZSgpCisgICAgICAg
IGZvciB0ZXN0X25hbWUgaW4gdGVzdF9uYW1lczoKKyAgICAgICAgICAgIGlmIHNlbGYub3B0aW9u
cy52ZXJib3NlOgorICAgICAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKHRlc3RfbmFtZSkK
KyAgICAgICAgICAgIG51bV9mYWlsdXJlcyA9IGxlbihyZXN1bHQuZmFpbHVyZXMpCisgICAgICAg
ICAgICBudW1fZXJyb3JzID0gbGVuKHJlc3VsdC5lcnJvcnMpCisgICAgICAgICAgICBzdGFydCA9
IHRpbWUudGltZSgpCisgICAgICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUodGVzdF9u
YW1lLCBOb25lKS5ydW4ocmVzdWx0KQorICAgICAgICAgICAgc3RvcCA9IHRpbWUudGltZSgpCisg
ICAgICAgICAgICBlcnIgPSBOb25lCisgICAgICAgICAgICBmYWlsdXJlID0gTm9uZQorICAgICAg
ICAgICAgaWYgbGVuKHJlc3VsdC5mYWlsdXJlcykgPiBudW1fZmFpbHVyZXM6CisgICAgICAgICAg
ICAgICAgZmFpbHVyZSA9IHJlc3VsdC5mYWlsdXJlc1tudW1fZmFpbHVyZXNdWzFdCisgICAgICAg
ICAgICBlbGlmIGxlbihyZXN1bHQuZXJyb3JzKSA+IG51bV9lcnJvcnM6CisgICAgICAgICAgICAg
ICAgZXJyID0gcmVzdWx0LmVycm9yc1tudW1fZXJyb3JzXVsxXQorICAgICAgICAgICAgc2VsZi5f
d3JpdGVfcmVzdWx0KHJlc3VsdCwgdGVzdF9uYW1lLCBzdG9wIC0gc3RhcnQsIGZhaWx1cmUsIGVy
cikKKworICAgICAgICBzZWxmLl93cml0ZV9zdW1tYXJ5KHJlc3VsdCwgc3RvcCAtIHNlbGYuc3Rh
cnQpCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBfZXJhc2Uoc2VsZik6CisgICAg
ICAgIGlmIHNlbGYuX2J1ZmZlcjoKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKCdcYicg
KiBsZW4oc2VsZi5fYnVmZmVyKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAn
ICogbGVuKHNlbGYuX2J1ZmZlcikgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdc
YicgKiBsZW4oc2VsZi5fYnVmZmVyKSkKKyAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9ICcnCisK
KyAgICBkZWYgX3dyaXRlX3N0YXR1cyhzZWxmLCB0b3RhbCwgbnVtX3J1biwgbnVtX2ZhaWx1cmVz
LCBudW1fZXJyb3JzKToKKyAgICAgICAgbnVtX3Bhc3NlcyA9IG51bV9ydW4gLSAobnVtX2ZhaWx1
cmVzIC0gbnVtX2Vycm9ycykKKyAgICAgICAgbnVtX3JlbWFpbmluZyA9IHRvdGFsIC0gbnVtX3J1
bgorICAgICAgICBwZXJjZW50ID0gMTAwICogbnVtX3J1biAvIHRvdGFsCisKKyAgICAgICAgc2Vs
Zi5fZXJhc2UoKQorICAgICAgICBzZWxmLl9idWZmZXIgPSAnJTJkJSU6ICVkIHBhc3NlZCAlZCBm
YWlsZWQgJWQgZXJyZWQgJWQgbGVmdCcgJSAocGVyY2VudCwgbnVtX3Bhc3NlcywgbnVtX2ZhaWx1
cmVzLCBudW1fZXJyb3JzLCBudW1fcmVtYWluaW5nKQorICAgICAgICBzZWxmLnN0cmVhbS53cml0
ZShzZWxmLl9idWZmZXIpCisgICAgICAgIHNlbGYuc3RyZWFtLmZsdXNoKCkKKworICAgIGRlZiBf
d3JpdGVfcmVzdWx0KHNlbGYsIHJlc3VsdCwgdGVzdF9uYW1lLCB0ZXN0X3RpbWUsIGZhaWx1cmU9
Tm9uZSwgZXJyPU5vbmUpOgorICAgICAgICBpZiBmYWlsdXJlOgorICAgICAgICAgICAgbXNnID0g
JyBmYWlsZWQnCisgICAgICAgIGVsaWYgZXJyOgorICAgICAgICAgICAgbXNnID0gJyBlcnJlZCcK
KyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1zZyA9ICcgcGFzc2VkJworICAgICAgICBpZiBz
ZWxmLm9wdGlvbnMudGltaW5nOgorICAgICAgICAgICAgbXNnICs9ICcgJS41ZnMnICUgdGVzdF90
aW1lCisKKyAgICAgICAgaWYgZXJyIG9yIGZhaWx1cmU6CisgICAgICAgICAgICBpZiBub3Qgc2Vs
Zi5vcHRpb25zLnZlcmJvc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fZXJhc2UoKQorICAgICAg
ICAgICAgc2VsZi5zdHJlYW0ud3JpdGUodGVzdF9uYW1lICsgbXNnICsgJ1xuJykKKyAgICAgICAg
ICAgIGZvciBsaW5lIGluIGVyci5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICAgICAgc2VsZi5z
dHJlYW0ud3JpdGUoJyAgICAnICsgbGluZSArICdcbicpCisgICAgICAgICAgICBzZWxmLnN0cmVh
bS53cml0ZSgnXG4nKQorICAgICAgICBlbGlmIHNlbGYub3B0aW9ucy52ZXJib3NlOgorICAgICAg
ICAgICAgc2VsZi5zdHJlYW0ud3JpdGUobXNnICsgJ1xuJykKKyAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgIHNlbGYuX3dyaXRlX3N0YXR1cyhzZWxmLm51bV90ZXN0cywgcmVzdWx0LnRlc3RzUnVu
LCBsZW4ocmVzdWx0LmZhaWx1cmVzKSwgbGVuKHJlc3VsdC5lcnJvcnMpKQorCisgICAgZGVmIF93
cml0ZV9zdW1tYXJ5KHNlbGYsIHJlc3VsdCwgdG90YWxfdGVzdF90aW1lKToKKyAgICAgICAgaWYg
c2VsZi5vcHRpb25zLnZlcmJvc2U6CisgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZSgnXG4n
KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fZXJhc2UoKQorCisgICAgICAgIHRv
dGFsX2RlbGF5ID0gJyUuM2Ygc2Vjb25kcycgJSAodG90YWxfdGVzdF90aW1lKQorICAgICAgICBy
dW4gPSByZXN1bHQudGVzdHNSdW4KKyAgICAgICAgZmFpbGVkID0gbGVuKHJlc3VsdC5mYWlsdXJl
cykKKyAgICAgICAgaWYgcnVuID4gMSBhbmQgZmFpbGVkOgorICAgICAgICAgICAgc2VsZi5zdHJl
YW0ud3JpdGUoJyVkIHRlc3RzIHJhbiBpbiAlczsgJWQgZmFpbGVkLlxuJyAlIChydW4sIHRvdGFs
X2RlbGF5LCBmYWlsZWQpKQorICAgICAgICBlbGlmIHJ1biA+IDE6CisgICAgICAgICAgICBzZWxm
LnN0cmVhbS53cml0ZSgnJWQgdGVzdHMgcmFuIGluICVzOyBhbGwgcGFzc2VkLlxuJyAlIChydW4s
IHRvdGFsX2RlbGF5KSkKKyAgICAgICAgZWxpZiBmYWlsZWQ6CisgICAgICAgICAgICBzZWxmLnN0
cmVhbS53cml0ZSgnMSB0ZXN0IHJhbiBpbiAlczsgaXQgZmFpbGVkLlxuJyAlICh0b3RhbF9kZWxh
eSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZSgnMSB0ZXN0
IHJhbiBpbiAlczsgaXQgcGFzc2VkLlxuJyAlICh0b3RhbF9kZWxheSkpCmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3QvbWFpbl91bml0dGVzdC5weSBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdGVzdC9tYWluX3VuaXR0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE0MDU4ODk3M2Fl
YWFkZTNkMDJjNmJmMDI1Y2RhODMyOTZkZDBmNGUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L3Rlc3QvbWFpbl91bml0dGVzdC5weQpAQCAtMCwwICsxLDk0IEBACisj
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIwor
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAor
IyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgb3MKK2ltcG9y
dCBwZGIKK2ltcG9ydCBjU3RyaW5nSU8gYXMgU3RyaW5nSU8KK2ltcG9ydCBzeXMKK2ltcG9ydCB1
bml0dGVzdAorCitmcm9tIHdlYmtpdHB5LnRlc3QubWFpbiBpbXBvcnQgVGVzdGVyCisKKworY2xh
c3MgRHVtbXlSZXN1bHQob2JqZWN0KToKKyAgICB3YXNTdWNjZXNzZnVsID0gVHJ1ZQorCisKK2Ns
YXNzIER1bW15UnVubmVyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0cmVhbSwg
KmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5zdHJlYW0gPSBzdHJlYW0KKyAgICAgICAg
cGFzcworCisgICAgZGVmIHJ1bihzZWxmLCBzdWl0ZSk6CisgICAgICAgIHNlbGYuc3RyZWFtLndy
aXRlKCdSYW4gJWQgdGVzdHMuJyAlIHN1aXRlLmNvdW50VGVzdENhc2VzKCkpCisgICAgICAgIHJl
dHVybiBEdW1teVJlc3VsdCgpCisKK3dlYmtpdF9yb290ID0gb3MucGF0aC5kaXJuYW1lKG9zLnBh
dGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFt
ZShfX2ZpbGVfXykpKSkpCisKKworY2xhc3MgTWFpblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgor
ICAgIGRlZiBjbWQoc2VsZiwgYXJncywgY3dkPU5vbmUsIHN0ZGVycj1Ob25lLCByZXQ9VHJ1ZSwg
bnVtX3Rlc3RzPU5vbmUpOgorICAgICAgICBvbGRjd2QgPSBvcy5nZXRjd2QoKQorICAgICAgICBp
ZiBub3QgY3dkOgorICAgICAgICAgICAgY3dkID0gJy9zcmMvd2snCisgICAgICAgIHRyeToKKyAg
ICAgICAgICAgIG9zLmNoZGlyKGN3ZCkKKyAgICAgICAgICAgIGVyciA9IFN0cmluZ0lPLlN0cmlu
Z0lPKCkKKyAgICAgICAgICAgIHRlc3RlciA9IFRlc3RlcihlcnIpCisgICAgICAgICAgICBvcHRp
b25zLCBhcmdzID0gdGVzdGVyLnBhcnNlX2FyZ3MoYXJncykKKyAgICAgICAgICAgIHRlc3Rlci5j
b25maWd1cmUob3B0aW9ucykKKyAgICAgICAgICAgIHRlc3Rlci5hZGRfdHJlZShvcy5wYXRoLmpv
aW4od2Via2l0X3Jvb3QsICdUb29scycsICdTY3JpcHRzJyksICd3ZWJraXRweScpCisgICAgICAg
ICAgICB0ZXN0ZXIucnVubmVyID0gRHVtbXlSdW5uZXIoZXJyKQorICAgICAgICAgICAgcmV0dXJu
Y29kZSA9IHRlc3Rlci5ydW4oYXJncykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9z
LmNoZGlyKG9sZGN3ZCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldCwgcmV0dXJuY29k
ZSkKKyAgICAgICAgYWN0dWFsX2VyciA9IGVyci5nZXR2YWx1ZSgpCisgICAgICAgIGlmIHN0ZGVy
ciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsX2Vyciwg
c3RkZXJyKQorICAgICAgICBpZiBudW1fdGVzdHMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBz
ZWxmLmFzc2VydFRydWUoKCdSYW4gJWQgdGVzdCcgJSBudW1fdGVzdHMpIGluIGFjdHVhbF9lcnIs
IGFjdHVhbF9lcnIpCisKKyAgICBkZWYgaW50ZWdyYXRpb25fdGVzdF9wYWNrYWdlKHNlbGYpOgor
ICAgICAgICBzZWxmLmNtZChbJ3dlYmtpdHB5LmNvbW1vbi53YXRjaGxpc3QnXSwgbnVtX3Rlc3Rz
PTM3KQorCisgICAgZGVmIGludGVncmF0aW9uX3Rlc3RfbW9kdWxlKHNlbGYpOgorICAgICAgICBz
ZWxmLmNtZChbJ3dlYmtpdHB5LmNvbW1vbi53YXRjaGxpc3Qud2F0Y2hsaXN0X3VuaXR0ZXN0J10s
IG51bV90ZXN0cz0xMCkKKworICAgIGRlZiBpbnRlZ3JhdGlvbl90ZXN0X2NsYXNzKHNlbGYpOgor
ICAgICAgICBzZWxmLmNtZChbJ3dlYmtpdHB5LmNvbW1vbi53YXRjaGxpc3Qud2F0Y2hsaXN0X3Vu
aXR0ZXN0LldhdGNoTGlzdFRlc3QnXSwgbnVtX3Rlc3RzPTEwKQorCisgICAgZGVmIGludGVncmF0
aW9uX3Rlc3RfbWV0aG9kKHNlbGYpOgorICAgICAgICBzZWxmLmNtZChbJ3dlYmtpdHB5LmNvbW1v
bi53YXRjaGxpc3Qud2F0Y2hsaXN0X3VuaXR0ZXN0LldhdGNoTGlzdFRlc3QudGVzdF9maWxlbmFt
ZV9kZWZpbml0aW9uJ10sIG51bV90ZXN0cz0xKQorCisgICAgZGVmIGludGVncmF0aW9uX3Rlc3Rf
ZGlyZWN0b3J5KHNlbGYpOgorICAgICAgICBzZWxmLmNtZChbJ3dlYmtpdHB5L2NvbW1vbi93YXRj
aGxpc3QnXSwgbnVtX3Rlc3RzPTM3KQorCisgICAgZGVmIGludGVncmF0aW9uX3Rlc3RfY3dkKHNl
bGYpOgorICAgICAgICBzZWxmLmNtZChbJy4nXSwgY3dkPScvc3JjL3drL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvY29tbW9uL3dhdGNobGlzdCcsIG51bV90ZXN0cz0zNykKKworICAgIGRlZiBpbnRl
Z3JhdGlvbl90ZXN0X2N3ZChzZWxmKToKKyAgICAgICAgc2VsZi5jbWQoWyd3YXRjaGxpc3QnXSwg
Y3dkPScvc3JjL3drL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uJywgbnVtX3Rlc3RzPTM3
KQorCisgICAgZGVmIGludGVncmF0aW9uX3Rlc3RfZmlsZV9pbl9jd2Qoc2VsZik6CisgICAgICAg
IHNlbGYuY21kKFsnd2F0Y2hsaXN0L3dhdGNobGlzdF91bml0dGVzdC5weSddLCBjd2Q9Jy9zcmMv
d2svVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24nLCBudW1fdGVzdHM9MTApCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128515</attachid>
            <date>2012-02-23 11:24:27 -0800</date>
            <delta_ts>2012-02-24 20:12:53 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>bug-77687-20120223112426.patch</filename>
            <type>text/plain</type>
            <size>42553</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4NTE1CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3Rl
c3Qtd2Via2l0cHkgYi9Ub29scy9TY3JpcHRzL3Rlc3Qtd2Via2l0cHkKaW5kZXggNDI5OGZlYWUy
MzczYTdiOGEzN2M0MGZiOWM4ZDA1NzQ2NWJkOTU2YS4uZTk1YTMwZGJkM2FiOGI5NjNlNzViOGI4
MzE1ZjUzNjA3MDA2OWYyNCAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy90ZXN0LXdlYmtpdHB5
CisrKyBiL1Rvb2xzL1NjcmlwdHMvdGVzdC13ZWJraXRweQpAQCAtMzcsMTggKzM3LDIzIEBAIGlt
cG9ydCBzeXMKIGZyb20gd2Via2l0cHkuY29tbW9uIGltcG9ydCB2ZXJzaW9uX2NoZWNrCiBmcm9t
IHdlYmtpdHB5LnRlc3QgaW1wb3J0IG1haW4KIAotCi1fbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIo
InRlc3Qtd2Via2l0cHkiKQotCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCiAK
IGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgd2Via2l0X3Jvb3QgPSBvcy5wYXRoLmRp
cm5hbWUob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19m
aWxlX18pKSkpCiAKLSAgICAjIEZJWE1FOiBXZSBzaG91bGQgcHJvYmFibHkgdGVzdCBlYWNoIHBh
Y2thZ2Ugc2VwYXJhdGVseSB0byBhdm9pZCBuYW1pbmcgY29uZmxpY3RzLgotICAgIGRpcnMgPSBb
Ci0gICAgICAgIG9zLnBhdGguam9pbih3ZWJraXRfcm9vdCwgJ1Rvb2xzJywgJ1NjcmlwdHMnKSwK
LSAgICAgICAgb3MucGF0aC5qb2luKHdlYmtpdF9yb290LCAnU291cmNlJywgJ1dlYktpdDInLCAn
U2NyaXB0cycpLAotICAgIF0KKyAgICB0ZXN0ZXIgPSBtYWluLlRlc3RlcihzeXMuc3RkZXJyKQor
ICAgIG9wdGlvbnMsIGFyZ3MgPSB0ZXN0ZXIucGFyc2VfYXJncyhzeXMuYXJndlsxOl0pCisgICAg
dGVzdGVyLmNvbmZpZ3VyZShvcHRpb25zKQorICAgIHRlc3Rlci5jb25maWd1cmVfbG9nZ2luZygp
CisKKyAgICB0aGlyZHBhcnR5ID0gb3MucGF0aC5qb2luKCd3ZWJraXRweScsICd0aGlyZHBhcnR5
JykKKyAgICB0ZXN0ZXIuYWRkX3RyZWUob3MucGF0aC5qb2luKHdlYmtpdF9yb290LCAnVG9vbHMn
LCAnU2NyaXB0cycpLCAnd2Via2l0cHknLAorICAgICAgICAgICAgICAgICAgICBbb3MucGF0aC5q
b2luKHRoaXJkcGFydHksICdhdXRvaW5zdGFsbGVkJyksCisgICAgICAgICAgICAgICAgICAgICBv
cy5wYXRoLmpvaW4odGhpcmRwYXJ0eSwgJ3NpbXBsZWpzb24nKSwKKyAgICAgICAgICAgICAgICAg
ICAgIG9zLnBhdGguam9pbih0aGlyZHBhcnR5LCAnQmVhdXRpZnVsU291cC5weScpLAorICAgICAg
ICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHRoaXJkcGFydHksICdtb2NrLnB5JyldKQorICAg
IHRlc3Rlci5hZGRfdHJlZShvcy5wYXRoLmpvaW4od2Via2l0X3Jvb3QsICdTb3VyY2UnLCAnV2Vi
S2l0MicsICdTY3JpcHRzJyksICd3ZWJraXQyJykKIAogICAgICMgRklYTUU6IERvIHdlIG5lZWQg
dG8gYmUgYWJsZSB0byB0ZXN0IFF1ZXVlU3RhdHVzU2VydmVyIG9uIFdpbmRvd3MgYXMgd2VsbD8K
ICAgICBhcHBlbmdpbmVfc2RrX3BhdGggPSAnL3Vzci9sb2NhbC9nb29nbGVfYXBwZW5naW5lJwpA
QCAtNTksMTcgKzY0LDEyIEBAIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgICAgIGZy
b20gZ29vZ2xlLmFwcGVuZ2luZS5kaXN0IGltcG9ydCB1c2VfbGlicmFyeQogICAgICAgICB1c2Vf
bGlicmFyeSgnZGphbmdvJywgJzEuMicpCiAgICAgICAgIGRldl9hcHBzZXJ2ZXIuZml4X3N5c19w
YXRoKCkKLSAgICAgICAgZGlycy5hcHBlbmQob3MucGF0aC5qb2luKHdlYmtpdF9yb290LCAnVG9v
bHMnLCAnUXVldWVTdGF0dXNTZXJ2ZXInKSkKKyAgICAgICAgdGVzdGVyLmFkZF90cmVlKG9zLnBh
dGguam9pbih3ZWJraXRfcm9vdCwgJ1Rvb2xzJywgJ1F1ZXVlU3RhdHVzU2VydmVyJyksICcnKQog
ICAgIGVsc2U6CiAgICAgICAgIF9sb2cuaW5mbygnU2tpcHBpbmcgUXVldWVTdGF0dXNTZXJ2ZXIg
dGVzdHM7IHRoZSBHb29nbGUgQXBwRW5naW5lIFB5dGhvbiBTREsgaXMgbm90IGluc3RhbGxlZC4n
KQogCi0gICAgbWFpbi5UZXN0ZXIuY2xlYW5fcGFja2FnZXMoZGlycykKLQotICAgIHRlc3RlciA9
IG1haW4uVGVzdGVyKCkKLSAgICBvcHRpb25zLCBhcmdzID0gdGVzdGVyLnBhcnNlX2FyZ3Moc3lz
LmFyZ3YpCi0gICAgdGVzdGVyLmNvbmZpZ3VyZShvcHRpb25zKQotCi0gICAgIyBNYWtlIHN1cmUg
UFlUSE9OUEFUSCBpcyBzZXQgdXAgY29ycmVjdGx5IHNvIHRoYXQgYWxsIG9mIHRoZSBpbXBvcnRz
IHdpbGwgd29yay4KLSAgICBzeXMucGF0aCA9IFtkIGZvciBkIGluIGRpcnMgaWYgZCBub3QgaW4g
c3lzLnBhdGhdICsgc3lzLnBhdGgKLQotICAgIHN5cy5leGl0KG5vdCB0ZXN0ZXIucnVuKGRpcnMs
IGFyZ3MpKQorICAgIHRyeToKKyAgICAgICAgc3lzLmV4aXQobm90IHRlc3Rlci5ydW4oYXJncykp
CisgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICBzeXMuc3RkZXJyLndyaXRl
KCdJbnRlcnJ1cHRlZCwgZXhpdGluZ1xuJykKKyAgICAgICAgc3lzLmV4aXQoMSkKZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9leGVjdXRpdmVfdW5pdHRl
c3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlX3Vu
aXR0ZXN0LnB5CmluZGV4IGM2M2ZmMzU1NWFlMThlNzAxMzAyMTkwYjdiYWI3ZTlkZWU3YTg3YWQu
LjE3ZTYzMWQ3YjRmMWM3NTAyNWVhNTg5NTkwMTlhZTY3MWU1ZDU3MzcgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9leGVjdXRpdmVfdW5pdHRlc3QucHkK
KysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2ZV91bml0
dGVzdC5weQpAQCAtMTUyLDcgKzE1Miw3IEBAIGNsYXNzIEV4ZWN1dGl2ZVRlc3QodW5pdHRlc3Qu
VGVzdENhc2UpOgogICAgICAgICBvdXRwdXQgPSBleGVjdXRpdmUucnVuX2FuZF90aHJvd19pZl9m
YWlsKGNvbW1hbmRfbGluZSgnZWNobycsIHVuaWNvZGVfdG9yX2lucHV0KSwgcXVpZXQ9VHJ1ZSwg
ZGVjb2RlX291dHB1dD1GYWxzZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3V0cHV0LCBl
bmNvZGVkX3RvcikKIAotICAgIGRlZiB0ZXN0X2tpbGxfcHJvY2VzcyhzZWxmKToKKyAgICBkZWYg
c2VyaWFsX3Rlc3Rfa2lsbF9wcm9jZXNzKHNlbGYpOgogICAgICAgICBleGVjdXRpdmUgPSBFeGVj
dXRpdmUoKQogICAgICAgICBwcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3BlbihuZXZlcl9lbmRpbmdf
Y29tbWFuZCgpLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQogICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKHByb2Nlc3MucG9sbCgpLCBOb25lKSAgIyBQcm9jZXNzIGlzIHJ1bm5pbmcKZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFn
ZXJfd29ya2VyX2Jyb2tlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L2NvbnRyb2xsZXJzL21hbmFnZXJfd29ya2VyX2Jyb2tlci5weQppbmRleCA3MGM0M2E2ZDQxNWQz
NDA2NWIxNGE3M2UzZTFkZWY3ODFmZmEyM2ZmLi45ODM3ZjAzZjk5ZWZhOTNjOTE3MDcwYjgyNDU3
ZTg3MjAwMTNjMTlkIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyX3dvcmtlcl9icm9rZXIucHkKKysrIGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlcl93b3JrZXJfYnJv
a2VyLnB5CkBAIC0xNjAsMTggKzE2MCwxOCBAQCBjbGFzcyBfQnJva2VyKG9iamVjdCk6CiAgICAg
ICAgIHF1ZXVlID0gc2VsZi5fZ2V0X3F1ZXVlX2Zvcl90b3BpYyh0b3BpY19uYW1lKQogICAgICAg
ICBxdWV1ZS5wdXQoX01lc3NhZ2UuZHVtcHMobWVzc2FnZSkpCiAKLSAgICBkZWYgcnVuX21lc3Nh
Z2VfbG9vcChzZWxmLCB0b3BpY19uYW1lLCBjbGllbnQsIGRlbGF5X3NlY3M9Tm9uZSk6CisgICAg
ZGVmIHJ1bl9tZXNzYWdlX2xvb3Aoc2VsZiwgdG9waWNfbmFtZSwgY2xpZW50LCBkZWxheV9zZWNz
PU5vbmUsIGlkbGVyPU5vbmUpOgogICAgICAgICAiIiJMb29wIHByb2Nlc3NpbmcgbWVzc2FnZXMg
dW50aWwgY2xpZW50LmlzX2RvbmUoKSBvciBkZWxheSBwYXNzZXMuCiAKICAgICAgICAgVG8gcnVu
IGluZGVmaW5pdGVseSwgc2V0IGRlbGF5X3NlY3MgdG8gTm9uZS4iIiIKICAgICAgICAgYXNzZXJ0
IGRlbGF5X3NlY3MgaXMgTm9uZSBvciBkZWxheV9zZWNzID4gMAotICAgICAgICBzZWxmLl9ydW5f
bG9vcCh0b3BpY19uYW1lLCBjbGllbnQsIGJsb2NrPVRydWUsIGRlbGF5X3NlY3M9ZGVsYXlfc2Vj
cykKKyAgICAgICAgc2VsZi5fcnVuX2xvb3AodG9waWNfbmFtZSwgY2xpZW50LCBibG9jaz1UcnVl
LCBkZWxheV9zZWNzPWRlbGF5X3NlY3MsIGlkbGVyPWlkbGVyKQogCiAgICAgZGVmIHJ1bl9hbGxf
cGVuZGluZyhzZWxmLCB0b3BpY19uYW1lLCBjbGllbnQpOgogICAgICAgICAiIiJQcm9jZXNzIG1l
c3NhZ2VzIHVudGlsIGNsaWVudC5pc19kb25lKCkgb3IgY2FsbGVyIHdvdWxkIGJsb2NrLiIiIgot
ICAgICAgICBzZWxmLl9ydW5fbG9vcCh0b3BpY19uYW1lLCBjbGllbnQsIGJsb2NrPUZhbHNlLCBk
ZWxheV9zZWNzPU5vbmUpCisgICAgICAgIHNlbGYuX3J1bl9sb29wKHRvcGljX25hbWUsIGNsaWVu
dCwgYmxvY2s9RmFsc2UsIGRlbGF5X3NlY3M9Tm9uZSwgaWRsZXI9Tm9uZSkKIAotICAgIGRlZiBf
cnVuX2xvb3Aoc2VsZiwgdG9waWNfbmFtZSwgY2xpZW50LCBibG9jaywgZGVsYXlfc2Vjcyk6Cisg
ICAgZGVmIF9ydW5fbG9vcChzZWxmLCB0b3BpY19uYW1lLCBjbGllbnQsIGJsb2NrLCBkZWxheV9z
ZWNzLCBpZGxlcik6CiAgICAgICAgIHF1ZXVlID0gc2VsZi5fZ2V0X3F1ZXVlX2Zvcl90b3BpYyh0
b3BpY19uYW1lKQogICAgICAgICB3aGlsZSBub3QgY2xpZW50LmlzX2RvbmUoKToKICAgICAgICAg
ICAgIHRyeToKQEAgLTE4MCw2ICsxODAsOCBAQCBjbGFzcyBfQnJva2VyKG9iamVjdCk6CiAgICAg
ICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICBtc2cgPSBfTWVzc2FnZS5sb2FkcyhzKQog
ICAgICAgICAgICAgc2VsZi5fZGlzcGF0Y2hfbWVzc2FnZShtc2csIGNsaWVudCkKKyAgICAgICAg
ICAgIGlmIGlkbGVyOgorICAgICAgICAgICAgICAgIGlkbGVyKCkKIAogICAgIGRlZiBfZGlzcGF0
Y2hfbWVzc2FnZShzZWxmLCBtZXNzYWdlLCBjbGllbnQpOgogICAgICAgICBpZiBub3QgaGFzYXR0
cihjbGllbnQsICdoYW5kbGVfJyArIG1lc3NhZ2UubmFtZSk6CkBAIC0yNzAsMTIgKzI3MiwxNCBA
QCBjbGFzcyBBYnN0cmFjdFdvcmtlcihCcm9rZXJDbGllbnQpOgogICAgIGRlZiBzdG9wX2hhbmRs
aW5nX21lc3NhZ2VzKHNlbGYpOgogICAgICAgICBzZWxmLl9kb25lID0gVHJ1ZQogCisgICAgZGVm
IHNldF9pbmxpbmVfYXJndW1lbnRzKHNlbGYsIHdvcmtlcl9hcmd1bWVudHMpOgorICAgICAgICBw
YXNzCisKICAgICBkZWYgcnVuKHNlbGYpOgogICAgICAgICAiIiJDYWxsYmFjayBmb3IgdGhlIHdv
cmtlciB0byBzdGFydCBleGVjdXRpbmcuIFR5cGljYWxseSBkb2VzIGFueQogICAgICAgICByZW1h
aW5pbmcgaW5pdGlhbGl6YXRpb24gYW5kIHRoZW4gY2FsbHMgYnJva2VyX2Nvbm5lY3Rpb24ucnVu
X21lc3NhZ2VfbG9vcCgpLiIiIgogICAgICAgICBleGNlcHRpb25fbXNnID0gIiIKICAgICAgICAg
X2xvZy5kZWJ1ZygiJXMgc3RhcnRpbmciICUgc2VsZi5fbmFtZSkKLQogICAgICAgICB0cnk6CiAg
ICAgICAgICAgICBzZWxmLl93b3JrZXJfY29ubmVjdGlvbi5ydW5fbWVzc2FnZV9sb29wKCkKICAg
ICAgICAgICAgIGlmIG5vdCBzZWxmLmlzX2RvbmUoKToKQEAgLTM1NCw2ICszNTgsOSBAQCBjbGFz
cyBfV29ya2VyQ29ubmVjdGlvbihfQnJva2VyQ29ubmVjdGlvbik6CiAgICAgICAgIHNlbGYuX2Ns
aWVudCA9IHdvcmtlcl9jbGFzcyhzZWxmLCB3b3JrZXJfYXJndW1lbnRzKQogICAgICAgICBfQnJv
a2VyQ29ubmVjdGlvbi5fX2luaXRfXyhzZWxmLCBicm9rZXIsIHNlbGYuX2NsaWVudCwgQU5ZX1dP
UktFUl9UT1BJQywgTUFOQUdFUl9UT1BJQykKIAorICAgIGRlZiBydW5fbWVzc2FnZV9sb29wKHNl
bGYsIGRlbGF5X3NlY3M9Tm9uZSk6CisgICAgICAgIHNlbGYuX2Jyb2tlci5ydW5fbWVzc2FnZV9s
b29wKHNlbGYuX3J1bl90b3BpYywgc2VsZi5fY2xpZW50LCBkZWxheV9zZWNzLCBpZGxlcj1zZWxm
LnlpZWxkX3RvX2Jyb2tlcikKKwogICAgIGRlZiBuYW1lKHNlbGYpOgogICAgICAgICByZXR1cm4g
c2VsZi5fY2xpZW50Lm5hbWUoKQogCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L2NvbmZpZ191bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY29uZmlnX3VuaXR0ZXN0LnB5CmluZGV4IDUxYTc3OTg1
MDA1NjkwMTAwODk5MGEyNTUzMjc3ZmFjMTdiZjFmZTQuLjA4YjlhZjE2YzBmZjVhZTAzYmU2OTU4
MmJiNzQwYjlhNmZjNDI4NDkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3BvcnQvY29uZmlnX3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY29uZmlnX3VuaXR0ZXN0LnB5CkBAIC00MCw2ICs0MCw5
IEBAIGltcG9ydCBjb25maWcKIAogCiBjbGFzcyBDb25maWdUZXN0KHVuaXR0ZXN0LlRlc3RDYXNl
KToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGNvbmZpZy5jbGVhcl9jYWNoZWRfY29u
ZmlndXJhdGlvbigpCisKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIGNvbmZpZy5j
bGVhcl9jYWNoZWRfY29uZmlndXJhdGlvbigpCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfaW50ZWdyYXRpb250ZXN0LnB5
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c19p
bnRlZ3JhdGlvbnRlc3QucHkKaW5kZXggNjY4NzZjYzhjODgwMzBmYTU4OTEyOTViNDRmZjhhMDFh
NTlmMzVjYy4uM2E0YTcyZmQ4NjJiODU5ZjdiNGI5OWI3MTU3YWE1NTM2NGU4NGYyMSAxMDA3NTUK
LS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0
c19pbnRlZ3JhdGlvbnRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcnVuX3dlYmtpdF90ZXN0c19pbnRlZ3JhdGlvbnRlc3QucHkKQEAgLTI4MSwyMiArMjgx
LDIwIEBAIGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlLCBTdHJlYW1UZXN0aW5nTWl4
aW4pOgogICAgICAgICBmb3IgYmF0Y2ggaW4gYmF0Y2hfdGVzdHNfcnVuOgogICAgICAgICAgICAg
c2VsZi5hc3NlcnRUcnVlKGxlbihiYXRjaCkgPD0gMiwgJyVzIGhhZCB0b28gbWFueSB0ZXN0cycg
JSAnLCAnLmpvaW4oYmF0Y2gpKQogCi0gICAgZGVmIHRlc3RfY2hpbGRfcHJvY2Vzc18xKHNlbGYp
OgorICAgIGRlZiBzZXJpYWxfdGVzdF9jaGlsZF9wcm9jZXNzXzEoc2VsZik6CiAgICAgICAgIGlm
IFNIT1VMRF9URVNUX1BST0NFU1NFUzoKICAgICAgICAgICAgIF8sIF8sIHJlZ3VsYXJfb3V0cHV0
LCBfID0gbG9nZ2luZ19ydW4oCiAgICAgICAgICAgICAgICAgWyctLXByaW50JywgJ2NvbmZpZycs
ICctLXdvcmtlci1tb2RlbCcsICdwcm9jZXNzZXMnLCAnLS1jaGlsZC1wcm9jZXNzZXMnLCAnMSdd
KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueShbJ1J1bm5pbmcgMSAnIGluIGxpbmUg
Zm9yIGxpbmUgaW4gcmVndWxhcl9vdXRwdXQuYnVmbGlzdF0pKQogCi0gICAgZGVmIHRlc3RfY2hp
bGRfcHJvY2Vzc2VzXzIoc2VsZik6CisgICAgZGVmIHNlcmlhbF90ZXN0X2NoaWxkX3Byb2Nlc3Nl
c18yKHNlbGYpOgogICAgICAgICAjIFRoaXMgdGVzdCBzZWVtcyB0byBmYWlsIG9uIHdpbjMyLgot
ICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKLSAgICAgICAgICAgIHJldHVybgog
ICAgICAgICBpZiBTSE9VTERfVEVTVF9QUk9DRVNTRVM6CiAgICAgICAgICAgICBfLCBfLCByZWd1
bGFyX291dHB1dCwgXyA9IGxvZ2dpbmdfcnVuKAogICAgICAgICAgICAgICAgIFsnLS1wcmludCcs
ICdjb25maWcnLCAnLS13b3JrZXItbW9kZWwnLCAncHJvY2Vzc2VzJywgJy0tY2hpbGQtcHJvY2Vz
c2VzJywgJzInXSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnkoWydSdW5uaW5nIDIg
JyBpbiBsaW5lIGZvciBsaW5lIGluIHJlZ3VsYXJfb3V0cHV0LmJ1Zmxpc3RdKSkKIAotICAgIGRl
ZiB0ZXN0X2NoaWxkX3Byb2Nlc3Nlc19taW4oc2VsZik6CisgICAgZGVmIHNlcmlhbF90ZXN0X2No
aWxkX3Byb2Nlc3Nlc19taW4oc2VsZik6CiAgICAgICAgIGlmIFNIT1VMRF9URVNUX1BST0NFU1NF
UzoKICAgICAgICAgICAgIF8sIF8sIHJlZ3VsYXJfb3V0cHV0LCBfID0gbG9nZ2luZ19ydW4oCiAg
ICAgICAgICAgICAgICAgWyctLXByaW50JywgJ2NvbmZpZycsICctLXdvcmtlci1tb2RlbCcsICdw
cm9jZXNzZXMnLCAnLS1jaGlsZC1wcm9jZXNzZXMnLCAnMicsICdwYXNzZXMnXSwKZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9tYWluLnB5IGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS90ZXN0L21haW4ucHkKaW5kZXggNzhjMzlkYjU1Nzk1NzZiZmY3ZTJiMzc3MzM4OTI1
YWFkYTk5ZWVjYi4uOTRiMWQwOTAyMWI3MGRkZjU5OWJlZGZlZWU2YWI5ZTQ3ZDYyNWY1YyAxMDA2
NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90ZXN0L21haW4ucHkKKysrIGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS90ZXN0L21haW4ucHkKQEAgLTEsMyArMSw0IEBACisjIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIyBDb3B5cmlnaHQg
KEMpIDIwMTAgQ2hyaXMgSmVyZG9uZWsgKGNqZXJkb25la0B3ZWJraXQub3JnKQogIwogIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKQEAgLTI1LDgyICsyNiwxMzkgQEAKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3B0cGFy
c2UKIGltcG9ydCBvcworaW1wb3J0IHBkYgoraW1wb3J0IHJlCiBpbXBvcnQgU3RyaW5nSU8KIGlt
cG9ydCBzeXMKK2ltcG9ydCB0aW1lCiBpbXBvcnQgdHJhY2ViYWNrCiBpbXBvcnQgdW5pdHRlc3QK
IAogIyBOT1RFOiBXZSBpbnRlbnRpb25hbGx5IGRvIG5vdCBkZXBlbmQgb24gYW55dGhpbmcgZWxz
ZSBpbiB3ZWJraXRweSBoZXJlIHRvIGF2b2lkIGJyZWFraW5nIHRlc3Qtd2Via2l0cHkuCitmcm9t
IHdlYmtpdHB5LmxheW91dF90ZXN0cy5jb250cm9sbGVycyBpbXBvcnQgbWFuYWdlcl93b3JrZXJf
YnJva2VyCiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKIAogCi1jbGFzcyBU
ZXN0ZXIob2JqZWN0KToKLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGNsZWFuX3BhY2thZ2Vz
KGRpcnMpOgotICAgICAgICAiIiJEZWxldGUgYWxsIC5weWMgZmlsZXMgdW5kZXIgZGlycyB0aGF0
IGhhdmUgbm8gLnB5IGZpbGUuIiIiCi0gICAgICAgIGZvciBkaXJfdG9fY2xlYW4gaW4gZGlyczoK
LSAgICAgICAgICAgIF9sb2cuZGVidWcoIkNsZWFuaW5nIG9ycGhhbmVkICoucHljIGZpbGVzIGZy
b206ICVzIiAlIGRpcl90b19jbGVhbikKLSAgICAgICAgICAgIGZvciBkaXJfcGF0aCwgZGlyX25h
bWVzLCBmaWxlX25hbWVzIGluIG9zLndhbGsoZGlyX3RvX2NsZWFuKToKLSAgICAgICAgICAgICAg
ICBmb3IgZmlsZV9uYW1lIGluIGZpbGVfbmFtZXM6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGZp
bGVfbmFtZS5lbmRzd2l0aCgiLnB5YyIpIGFuZCBmaWxlX25hbWVbOi0xXSBub3QgaW4gZmlsZV9u
YW1lczoKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihk
aXJfcGF0aCwgZmlsZV9uYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgX2xvZy5pbmZvKCJE
ZWxldGluZyBvcnBoYW4gKi5weWMgZmlsZTogJXMiICUgZmlsZV9wYXRoKQotICAgICAgICAgICAg
ICAgICAgICAgICAgb3MucmVtb3ZlKGZpbGVfcGF0aCkKK1RFU1RfREVTQ1JJUFRJT05fUkVHRVhQ
ID0gcmUuY29tcGlsZSgiKFx3KykgXCgoW1x3Ll0rKVwpIikKIAotICAgIGRlZiBfX2luaXRfXyhz
ZWxmKToKLSAgICAgICAgc2VsZi5fdmVyYm9zaXR5ID0gMQogCi0gICAgZGVmIHBhcnNlX2FyZ3Mo
c2VsZiwgYXJndik6CitkZWYgX3Rlc3RfbmFtZSh0ZXN0KToKKyAgICBtID0gVEVTVF9ERVNDUklQ
VElPTl9SRUdFWFAubWF0Y2goc3RyKHRlc3QpKQorICAgIHJldHVybiAiJXMuJXMiICUgKG0uZ3Jv
dXAoMiksIG0uZ3JvdXAoMSkpCisKKworY2xhc3MgVGVzdFRyZWUob2JqZWN0KToKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgdG9wX2RpcmVjdG9yeSwgc3RhcnRpbmdfc3ViZGlyZWN0b3J5LCBpZ25v
cmVfbGlzdCk6CisgICAgICAgIHNlbGYudG9wX2RpcmVjdG9yeSA9IG9zLnBhdGgucmVhbHBhdGgo
dG9wX2RpcmVjdG9yeSkKKyAgICAgICAgc2VsZi5zZWFyY2hfZGlyZWN0b3J5ID0gc2VsZi50b3Bf
ZGlyZWN0b3J5CisgICAgICAgIHNlbGYuaWdub3JlX2xpc3QgPSBbb3MucGF0aC5qb2luKHNlbGYu
dG9wX2RpcmVjdG9yeSwgeCkgZm9yIHggaW4gaWdub3JlX2xpc3RdCisgICAgICAgIHNlbGYudG9w
X3BhY2thZ2UgPSAnJworICAgICAgICBpZiBzdGFydGluZ19zdWJkaXJlY3Rvcnk6CisgICAgICAg
ICAgICBzZWxmLnRvcF9wYWNrYWdlID0gc3RhcnRpbmdfc3ViZGlyZWN0b3J5LnJlcGxhY2Uob3Mu
c2VwLCAnLicpICsgJy4nCisgICAgICAgICAgICBzZWxmLnNlYXJjaF9kaXJlY3RvcnkgPSBvcy5w
YXRoLmpvaW4oc2VsZi50b3BfZGlyZWN0b3J5LCBzdGFydGluZ19zdWJkaXJlY3RvcnkpCisKKyAg
ICBkZWYgY2xlYW4oc2VsZik6CisgICAgICAgICIiIkRlbGV0ZSBhbGwgLnB5YyBmaWxlcyBpbiB0
aGUgdHJlZSB0aGF0IGhhdmUgbm8gbWF0Y2hpbmcgLnB5IGZpbGUuIiIiCisgICAgICAgIF9sb2cu
ZGVidWcoIkNsZWFuaW5nIG9ycGhhbmVkICoucHljIGZpbGVzIGZyb206ICVzIiAlIHNlbGYuc2Vh
cmNoX2RpcmVjdG9yeSkKKyAgICAgICAgZm9yIGRpcl9wYXRoLCBkaXJfbmFtZXMsIGZpbGVfbmFt
ZXMgaW4gb3Mud2FsayhzZWxmLnNlYXJjaF9kaXJlY3RvcnkpOgorICAgICAgICAgICAgIyBGSVhN
RTogU2hvdWxkIHdlIGJlIGNsZWFuaW5nIHRoZSBpZ25vcmVkIHN1YmRpcmVjdG9yaWVzIGFzIHdl
bGw/CisgICAgICAgICAgICBmb3IgZmlsZV9uYW1lIGluIGZpbGVfbmFtZXM6CisgICAgICAgICAg
ICAgICAgaWYgZmlsZV9uYW1lLmVuZHN3aXRoKCIucHljIikgYW5kIGZpbGVfbmFtZVs6LTFdIG5v
dCBpbiBmaWxlX25hbWVzOgorICAgICAgICAgICAgICAgICAgICBmaWxlX3BhdGggPSBvcy5wYXRo
LmpvaW4oZGlyX3BhdGgsIGZpbGVfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgX2xvZy5pbmZv
KCJEZWxldGluZyBvcnBoYW4gKi5weWMgZmlsZTogJXMiICUgZmlsZV9wYXRoKQorICAgICAgICAg
ICAgICAgICAgICBvcy5yZW1vdmUoZmlsZV9wYXRoKQorCisgICAgZGVmIGZpbmRfbW9kdWxlcyhz
ZWxmLCBkaXJfdG9fc2VhcmNoLCBzdWZmaXhlcyk6CisgICAgICAgIG1vZHVsZXMgPSBbXQorICAg
ICAgICBmb3IgZGlyX3BhdGgsIF8sIGZpbGVuYW1lcyBpbiBvcy53YWxrKGRpcl90b19zZWFyY2gp
OgorICAgICAgICAgICAgZGlyX3BhdGggPSBvcy5wYXRoLmpvaW4oZGlyX3BhdGgsICcnKQorICAg
ICAgICAgICAgcGFja2FnZSA9IGRpcl9wYXRoLnJlcGxhY2Uoc2VsZi50b3BfZGlyZWN0b3J5ICsg
b3Muc2VwLCAnJykucmVwbGFjZShvcy5zZXAsICcuJykKKyAgICAgICAgICAgIGZvciBmIGluIGZp
bGVuYW1lczoKKyAgICAgICAgICAgICAgICBpZiBhbnkoZi5lbmRzd2l0aChzdWZmaXgpIGZvciBz
dWZmaXggaW4gc3VmZml4ZXMpOgorICAgICAgICAgICAgICAgICAgICBtb2R1bGVzLmFwcGVuZChw
YWNrYWdlICsgZi5yZXBsYWNlKCcucHknLCAnJykpCisgICAgICAgIHJldHVybiBtb2R1bGVzCisK
KworY2xhc3MgTG9hZGVyRXJyb3IoRXhjZXB0aW9uKToKKyAgICBwYXNzCisKKworY2xhc3MgVGVz
dGVyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0cmVhbSk6CisgICAgICAgIHNl
bGYudHJlZXMgPSBbXQorICAgICAgICBzZWxmLmxvYWRlciA9IE5vbmUKKyAgICAgICAgc2VsZi5y
dW5uZXIgPSBOb25lCisgICAgICAgIHNlbGYubG9nX2xldmVsID0gbG9nZ2luZy5JTkZPCisgICAg
ICAgIHNlbGYuc3RyZWFtID0gc3RyZWFtCisKKyAgICBkZWYgcGFyc2VfYXJncyhzZWxmLCBhcmd2
PU5vbmUpOgogICAgICAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodXNhZ2U9J3Vz
YWdlOiAlcHJvZyBbb3B0aW9uc10gW2FyZ3MuLi5dJykKLSAgICAgICAgcGFyc2VyLmFkZF9vcHRp
b24oJy1hJywgJy0tYWxsJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncnVuIGFsbCB0aGUgdGVzdHMnKSwKLSAgICAg
ICAgcGFyc2VyLmFkZF9vcHRpb24oJy1jJywgJy0tY292ZXJhZ2UnLCBhY3Rpb249J3N0b3JlX3Ry
dWUnLCBkZWZhdWx0PUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdnZW5l
cmF0ZSBjb2RlIGNvdmVyYWdlIGluZm8gKHJlcXVpcmVzIGh0dHA6Ly9weXBpLnB5dGhvbi5vcmcv
cHlwaS9jb3ZlcmFnZSknKSwKLSAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1xJywgJy0tcXVp
ZXQnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICBoZWxwPSdydW4gcXVpZXRseSAoZXJyb3JzLCB3YXJuaW5ncywgYW5kIHByb2dy
ZXNzIG9ubHkpJyksCi0gICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCctcycsICctLXNpbGVudCcs
IGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgIGhlbHA9J3J1biBzaWxlbnRseSAoZXJyb3JzIGFuZCB3YXJuaW5ncyBvbmx5KScpLAot
ICAgICAgICBwYXJzZXIuYWRkX29wdGlvbignLXgnLCAnLS14bWwnLCBhY3Rpb249J3N0b3JlX3Ry
dWUnLCBkZWZhdWx0PUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdvdXRw
dXQgeFVuaXQtc3R5bGUgWE1MIG91dHB1dCcpCi0gICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCct
dicsICctLXZlcmJvc2UnLCBhY3Rpb249J2NvdW50JywgZGVmYXVsdD0wLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICBoZWxwPSd2ZXJib3NlIG91dHB1dCAoc3BlY2lmeSBvbmNlIGZvciBpbmRp
dmlkdWFsIHRlc3QgcmVzdWx0cywgdHdpY2UgZm9yIGRlYnVnIG1lc3NhZ2VzKScpCi0gICAgICAg
IHBhcnNlci5hZGRfb3B0aW9uKCctLXNraXAtaW50ZWdyYXRpb250ZXN0cycsIGFjdGlvbj0nc3Rv
cmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9
J2RvIG5vdCBydW4gdGhlIGludGVncmF0aW9uIHRlc3RzJykKLQotICAgICAgICBwYXJzZXIuZXBp
bG9nID0gKCdbYXJncy4uLl0gaXMgYW4gb3B0aW9uYWwgbGlzdCBvZiBtb2R1bGVzLCB0ZXN0X2Ns
YXNzZXMsIG9yIGluZGl2aWR1YWwgdGVzdHMuICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAn
SWYgbm8gYXJncyBhcmUgZ2l2ZW4sIGFsbCB0aGUgdGVzdHMgd2lsbCBiZSBydW4uJykKLQotICAg
ICAgICBzZWxmLnByb2dOYW1lID0gb3MucGF0aC5iYXNlbmFtZShhcmd2WzBdKQotICAgICAgICBy
ZXR1cm4gcGFyc2VyLnBhcnNlX2FyZ3MoYXJndlsxOl0pCisgICAgICAgIHBhcnNlci5hZGRfb3B0
aW9uKCctaicsICctLWpvYnMnLCBhY3Rpb249J3N0b3JlJywgdHlwZT1pbnQsIGRlZmF1bHQ9MSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nbnVtYmVyIG9mIHRlc3RzIHRvIHJ1biBp
biBwYXJhbGxlbCAoZGVmYXVsdCAlZGVmYXVsdCknKQorCisgICAgICAgIGdyb3VwID0gb3B0cGFy
c2UuT3B0aW9uR3JvdXAocGFyc2VyLCAnT3B0aW9ucyBmb3IgY29udHJvbGxpbmcgd2hhdCBpcyBw
cmludGVkJykKKyAgICAgICAgZ3JvdXAuYWRkX29wdGlvbignLXEnLCAnLS1xdWlldCcsIGFjdGlv
bj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAg
aGVscD0ncnVuIHF1aWV0bHkgKGVycm9ycywgd2FybmluZ3MsIGFuZCBwcm9ncmVzcyBvbmx5KScp
LAorICAgICAgICBncm91cC5hZGRfb3B0aW9uKCctdCcsICctLXRpbWluZycsIGFjdGlvbj0nc3Rv
cmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0n
ZGlzcGxheSBwZXItdGVzdCB0aW1pbmcgaW5mbycpLAorICAgICAgICBncm91cC5hZGRfb3B0aW9u
KCctdicsICctLXZlcmJvc2UnLCBhY3Rpb249J2NvdW50JywgZGVmYXVsdD0wLAorICAgICAgICAg
ICAgICAgICAgICAgICAgIGhlbHA9J3ZlcmJvc2Ugb3V0cHV0IChzcGVjaWZ5IG9uY2UgZm9yIGlu
ZGl2aWR1YWwgdGVzdCByZXN1bHRzLCB0d2ljZSBmb3IgZGVidWcgbWVzc2FnZXMpJykKKyAgICAg
ICAgZ3JvdXAuYWRkX29wdGlvbignLXgnLCAnLS14bWwnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBk
ZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J291dHB1dCB4VW5p
dC1zdHlsZSBYTUwgb3V0cHV0IGludG8gJFBXRC90ZXN0LXdlYmtpdHB5LXhtbC1yZXBvcnRzLycp
CisgICAgICAgIGdyb3VwLmFkZF9vcHRpb24oJy1jJywgJy0tY292ZXJhZ2UnLCBhY3Rpb249J3N0
b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9
J2dlbmVyYXRlIGNvZGUgY292ZXJhZ2UgcmVwb3J0IChhdXRvaW5zdGFsbHMgaHR0cDovL3B5cGku
cHl0aG9uLm9yZy9weXBpL2NvdmVyYWdlKScpCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uX2dy
b3VwKGdyb3VwKQorCisgICAgICAgICMgRklYTUU6IFdlIG5lZWQgdG8gdW5pZnkgdGhlc2UgdHdv
IHR5cGVzIG9mIHRlc3RzIGFuZCBtYWtlIHRoZW0gY29uc2lzdGVudC4KKyAgICAgICAgZ3JvdXAg
PSBvcHRwYXJzZS5PcHRpb25Hcm91cChwYXJzZXIsICdPcHRpb25zIGZvciBjb250cm9sbGluZyB3
aGljaCB0ZXN0cyBhcmUgcnVuJykKKyAgICAgICAgZ3JvdXAuYWRkX29wdGlvbignLS1za2lwLWlu
dGVncmF0aW9udGVzdHMnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2RvIG5vdCBydW4gdGhlICJpbnRlZ3JhdGlvbiIg
KHNsb3dlcikgdGVzdHMnKQorICAgICAgICBncm91cC5hZGRfb3B0aW9uKCctaScsICctLXJ1bi1y
ZWFsLWludGVncmF0aW9udGVzdHMnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNl
LAorICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2Fsc28gcnVuIHRoZSAicmVhbCIgaW50
ZWdyYXRpb24gdGVzdHMgKG5vcm1hbGx5IHNraXBwZWQpJykKKyAgICAgICAgZ3JvdXAuYWRkX29w
dGlvbignLWEnLCAnLS1hbGwnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3J1biBhbGwgdGhlIHRlc3RzLCBpbmNsdWRp
bmcgdGhvc2Ugbm9ybWFsbHkgc2tpcHBlZCcpLAorICAgICAgICBwYXJzZXIuYWRkX29wdGlvbl9n
cm91cChncm91cCkKKworICAgICAgICBwYXJzZXIuZXBpbG9nID0gKCdbYXJncy4uLl0gaXMgYW4g
b3B0aW9uYWwgbGlzdCBvZiBtb2R1bGVzLCB0ZXN0X2NsYXNzZXMsIG9yIGluZGl2aWR1YWwgdGVz
dHMgdG8gcnVuIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgc2V0LicpCisKKyAgICAgICAgcmV0dXJu
IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3YpCiAKICAgICBkZWYgY29uZmlndXJlKHNlbGYsIG9wdGlv
bnMpOgotICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucwotCi0gICAgICAgIGlmIG9wdGlv
bnMuc2lsZW50OgotICAgICAgICAgICAgc2VsZi5fdmVyYm9zaXR5ID0gMAotICAgICAgICAgICAg
c2VsZi5fY29uZmlndXJlX2xvZ2dpbmcobG9nZ2luZy5XQVJOSU5HKQotICAgICAgICBlbGlmIG9w
dGlvbnMucXVpZXQ6Ci0gICAgICAgICAgICBzZWxmLl92ZXJib3NpdHkgPSAxCi0gICAgICAgICAg
ICBzZWxmLl9jb25maWd1cmVfbG9nZ2luZyhsb2dnaW5nLldBUk5JTkcpCi0gICAgICAgIGVsaWYg
b3B0aW9ucy52ZXJib3NlID09IDA6Ci0gICAgICAgICAgICBzZWxmLl92ZXJib3NpdHkgPSAxCi0g
ICAgICAgICAgICBzZWxmLl9jb25maWd1cmVfbG9nZ2luZyhsb2dnaW5nLklORk8pCi0gICAgICAg
IGVsaWYgb3B0aW9ucy52ZXJib3NlID09IDE6Ci0gICAgICAgICAgICBzZWxmLl92ZXJib3NpdHkg
PSAyCi0gICAgICAgICAgICBzZWxmLl9jb25maWd1cmVfbG9nZ2luZyhsb2dnaW5nLklORk8pCi0g
ICAgICAgIGVsaWYgb3B0aW9ucy52ZXJib3NlID09IDI6Ci0gICAgICAgICAgICBzZWxmLl92ZXJi
b3NpdHkgPSAyCi0gICAgICAgICAgICBzZWxmLl9jb25maWd1cmVfbG9nZ2luZyhsb2dnaW5nLkRF
QlVHKQotCi0gICAgZGVmIF9jb25maWd1cmVfbG9nZ2luZyhzZWxmLCBsb2dfbGV2ZWwpOgorICAg
ICAgICBzZWxmLm9wdGlvbnMgPSBvcHRpb25zCisKKyAgICAgICAgc2VsZi5sb2FkZXIgPSBUZXN0
TG9hZGVyKCkKKyAgICAgICAgc2VsZi5sb2FkZXIucnVuX3JlYWxfaW50ZWdyYXRpb25fdGVzdHMg
PSBvcHRpb25zLnJ1bl9yZWFsX2ludGVncmF0aW9udGVzdHMgb3Igb3B0aW9ucy5hbGwKKyAgICAg
ICAgc2VsZi5sb2FkZXIucnVuX3NlcmlhbF90ZXN0cyA9IChvcHRpb25zLmpvYnMgPT0gMSkgb3Ig
b3B0aW9ucy5hbGwKKyAgICAgICAgaWYgc2VsZi5vcHRpb25zLnhtbDoKKyAgICAgICAgICAgIGZy
b20gd2Via2l0cHkudGhpcmRwYXJ0eS5hdXRvaW5zdGFsbGVkLnhtbHJ1bm5lciBpbXBvcnQgWE1M
VGVzdFJ1bm5lcgorICAgICAgICAgICAgc2VsZi5ydW5uZXIgPSBYTUxUZXN0UnVubmVyKG91dHB1
dD0ndGVzdC13ZWJraXRweS14bWwtcmVwb3J0cycpCisgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICBzZWxmLnJ1bm5lciA9IFRlc3RSdW5uZXIoc2VsZi5zdHJlYW0sIG9wdGlvbnMsIHN0YXJ0PXRp
bWUudGltZSgpKQorCisgICAgZGVmIGNvbmZpZ3VyZV9sb2dnaW5nKHNlbGYpOgogICAgICAgICAi
IiJDb25maWd1cmUgdGhlIHJvb3QgbG9nZ2VyLgogCiAgICAgICAgIENvbmZpZ3VyZSB0aGUgcm9v
dCBsb2dnZXIgbm90IHRvIGxvZyBhbnkgbWVzc2FnZXMgZnJvbSB3ZWJraXRweSAtLQogICAgICAg
ICBleGNlcHQgZm9yIG1lc3NhZ2VzIGZyb20gdGhlIGF1dG9pbnN0YWxsIG1vZHVsZS4gIEFsc28g
c2V0IHRoZQogICAgICAgICBsb2dnaW5nIGxldmVsIGFzIGRlc2NyaWJlZCBiZWxvdy4KICAgICAg
ICAgIiIiCi0gICAgICAgIGhhbmRsZXIgPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoc3lzLnN0ZGVy
cikKKyAgICAgICAgbWVzc2FnZXMgPSBbXQorCisgICAgICAgIGlmIHNlbGYub3B0aW9ucy50aW1p
bmcgYW5kIG5vdCBzZWxmLm9wdGlvbnMudmVyYm9zZToKKyAgICAgICAgICAgIHNlbGYub3B0aW9u
cy52ZXJib3NlID0gMQorICAgICAgICAgICAgbWVzc2FnZXMuYXBwZW5kKChsb2dnaW5nLklORk8s
ICctLXRpbWluZyBpbXBsaWVzIC0tdmVyYm9zZScpKQorCisgICAgICAgIHNlbGYubG9nX2xldmVs
ID0gbG9nZ2luZy5JTkZPCisgICAgICAgIGlmIHNlbGYub3B0aW9ucy52ZXJib3NlOgorICAgICAg
ICAgICAgaWYgc2VsZi5vcHRpb25zLnF1aWV0OgorICAgICAgICAgICAgICAgIG1lc3NhZ2VzLmFw
cGVuZCgobG9nZ2luZy5XQVJOSU5HLCAnLS12ZXJib3NlIG92ZXJyaWRlcyAtLXF1aWV0JykpCisg
ICAgICAgICAgICBpZiBzZWxmLm9wdGlvbnMudmVyYm9zZSA+IDE6CisgICAgICAgICAgICAgICAg
c2VsZi5sb2dfbGV2ZWwgPSBsb2dnaW5nLkRFQlVHCisgICAgICAgIGVsaWYgc2VsZi5vcHRpb25z
LnF1aWV0OgorICAgICAgICAgICAgc2VsZi5sb2dfbGV2ZWwgPSBsb2dnaW5nLldBUk5JTkcKKwor
ICAgICAgICBoYW5kbGVyID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKHNlbGYuc3RyZWFtKQogICAg
ICAgICAjIFdlIGNvbnN0cmFpbiB0aGUgbGV2ZWwgb24gdGhlIGhhbmRsZXIgcmF0aGVyIHRoYW4g
b24gdGhlIHJvb3QKICAgICAgICAgIyBsb2dnZXIgaXRzZWxmLiAgVGhpcyBpcyBwcm9iYWJseSBi
ZXR0ZXIgYmVjYXVzZSB0aGUgaGFuZGxlciBpcwogICAgICAgICAjIGNvbmZpZ3VyZWQgYW5kIGtu
b3duIG9ubHkgdG8gdGhpcyBtb2R1bGUsIHdoZXJlYXMgdGhlIHJvb3QgbG9nZ2VyCkBAIC0xMDgs
NyArMTY2LDcgQEAgY2xhc3MgVGVzdGVyKG9iamVjdCk6CiAgICAgICAgICMgTW9kaWZ5aW5nIHRo
ZSBoYW5kbGVyLCB0aGVuLCBpcyBsZXNzIGludHJ1c2l2ZSBhbmQgbGVzcyBsaWtlbHkgdG8KICAg
ICAgICAgIyBpbnRlcmZlcmUgd2l0aCBtb2RpZmljYXRpb25zIG1hZGUgYnkgb3RoZXIgbW9kdWxl
cyAoZS5nLiBpbiB1bml0CiAgICAgICAgICMgdGVzdHMpLgotICAgICAgICBoYW5kbGVyLnNldExl
dmVsKGxvZ19sZXZlbCkKKyAgICAgICAgaGFuZGxlci5zZXRMZXZlbChzZWxmLmxvZ19sZXZlbCkK
ICAgICAgICAgZm9ybWF0dGVyID0gbG9nZ2luZy5Gb3JtYXR0ZXIoIiUobWVzc2FnZSlzIikKICAg
ICAgICAgaGFuZGxlci5zZXRGb3JtYXR0ZXIoZm9ybWF0dGVyKQogCkBAIC0xMzYsMTExICsxOTQs
NDA3IEBAIGNsYXNzIFRlc3RlcihvYmplY3QpOgogICAgICAgICB0ZXN0aW5nX2ZpbHRlciA9IGxv
Z2dpbmcuRmlsdGVyKCkKICAgICAgICAgdGVzdGluZ19maWx0ZXIuZmlsdGVyID0gZmlsdGVyCiAK
KyAgICAgICAgZm9yIGxldmVsLCBtc2cgaW4gbWVzc2FnZXM6CisgICAgICAgICAgICBfbG9nLmxv
ZyhsZXZlbCwgbXNnKQorCiAgICAgICAgICMgRGlzcGxheSBhIG1lc3NhZ2Ugc28gZGV2ZWxvcGVy
cyBhcmUgbm90IG15c3RpZmllZCBhcyB0byB3aHkKICAgICAgICAgIyBsb2dnaW5nIGRvZXMgbm90
IHdvcmsgaW4gdGhlIHVuaXQgdGVzdHMuCiAgICAgICAgIF9sb2cuaW5mbygiU3VwcHJlc3Npbmcg
bW9zdCB3ZWJraXRweSBsb2dnaW5nIHdoaWxlIHJ1bm5pbmcgdW5pdCB0ZXN0cy4iKQogICAgICAg
ICBoYW5kbGVyLmFkZEZpbHRlcih0ZXN0aW5nX2ZpbHRlcikKIAotICAgIGRlZiBydW4oc2VsZiwg
ZGlycywgYXJncyk6Ci0gICAgICAgIGFyZ3MgPSBhcmdzIG9yIHNlbGYuX2ZpbmRfbW9kdWxlcyhk
aXJzKQotICAgICAgICByZXR1cm4gc2VsZi5fcnVuX3Rlc3RzKGRpcnMsIGFyZ3MpCi0KLSAgICBk
ZWYgX2ZpbmRfbW9kdWxlcyhzZWxmLCBkaXJzKToKLSAgICAgICAgbW9kdWxlcyA9IFtdCi0gICAg
ICAgIGZvciBkaXJfdG9fc2VhcmNoIGluIGRpcnM6Ci0gICAgICAgICAgICBtb2R1bGVzLmV4dGVu
ZChzZWxmLl9maW5kX21vZHVsZXNfdW5kZXIoZGlyX3RvX3NlYXJjaCwgJ191bml0dGVzdC5weScp
KQotICAgICAgICAgICAgaWYgbm90IHNlbGYuX29wdGlvbnMuc2tpcF9pbnRlZ3JhdGlvbnRlc3Rz
OgotICAgICAgICAgICAgICAgIG1vZHVsZXMuZXh0ZW5kKHNlbGYuX2ZpbmRfbW9kdWxlc191bmRl
cihkaXJfdG9fc2VhcmNoLCAnX2ludGVncmF0aW9udGVzdC5weScpKQotICAgICAgICBtb2R1bGVz
LnNvcnQoKQotCi0gICAgICAgIGZvciBtb2R1bGUgaW4gbW9kdWxlczoKLSAgICAgICAgICAgIF9s
b2cuZGVidWcoIkZvdW5kOiAlcyIgJSBtb2R1bGUpCi0KLSAgICAgICAgIyBGSVhNRTogRmlndXJl
IG91dCBob3cgdG8gbW92ZSB0aGlzIHRvIHRlc3Qtd2Via2l0cHkgaW4gb3JkZXIgdG8gdG8gbWFr
ZSB0aGlzIGZpbGUgbW9yZSBnZW5lcmljLgotICAgICAgICBpZiBub3Qgc2VsZi5fb3B0aW9ucy5h
bGw6Ci0gICAgICAgICAgICBzbG93X3Rlc3RzID0gKCd3ZWJraXRweS5jb21tb24uY2hlY2tvdXQu
c2NtLnNjbV91bml0dGVzdCcsKQotICAgICAgICAgICAgc2VsZi5fZXhjbHVkZShtb2R1bGVzLCBz
bG93X3Rlc3RzLCAnYXJlIHJlYWxseSwgcmVhbGx5IHNsb3cnLCAzMTgxOCkKLQotICAgICAgICAg
ICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6Ci0gICAgICAgICAgICAgICAgd2luMzJfYmxh
Y2tsaXN0ID0gKCd3ZWJraXRweS5jb21tb24uY2hlY2tvdXQnLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAnd2Via2l0cHkuY29tbW9uLmNvbmZpZycsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICd3ZWJraXRweS50b29sJykKLSAgICAgICAgICAgICAgICBz
ZWxmLl9leGNsdWRlKG1vZHVsZXMsIHdpbjMyX2JsYWNrbGlzdCwgJ2ZhaWwgaG9ycmlibHkgb24g
d2luMzInLCA1NDUyNikKLQorICAgIGRlZiBhZGRfdHJlZShzZWxmLCB0b3BfZGlyZWN0b3J5LCBz
dGFydGluZ19zdWJkaXJlY3Rvcnk9Tm9uZSwgaWdub3JlX2xpc3Q9Tm9uZSk6CisgICAgICAgIHNl
bGYudHJlZXMuYXBwZW5kKFRlc3RUcmVlKHRvcF9kaXJlY3RvcnksIHN0YXJ0aW5nX3N1YmRpcmVj
dG9yeSwgaWdub3JlX2xpc3Qgb3IgW10pKQorCisgICAgZGVmIHJ1bihzZWxmLCBhcmdzKToKKyAg
ICAgICAgc2VsZi5fY2xlYW5fdHJlZXMoKQorICAgICAgICBzZWxmLl9maXhfcGF0aCgpCisKKyAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgY292ID0gTm9uZQorICAgICAgICAgICAgaWYgc2VsZi5v
cHRpb25zLmNvdmVyYWdlOgorICAgICAgICAgICAgICAgIGNvdiA9IHNlbGYuX2NvdmVyYWdlX29i
amVjdCgpCisgICAgICAgICAgICAgICAgY292LnN0YXJ0KCkKKworICAgICAgICAgICAgX2xvZy5k
ZWJ1ZygiTG9hZGluZyB0aGUgdGVzdHMuLi4iKQorICAgICAgICAgICAgaWYgYXJnczoKKyAgICAg
ICAgICAgICAgICB0ZXN0cyA9IFtdCisgICAgICAgICAgICAgICAgZm9yIGFyZyBpbiBhcmdzOgor
ICAgICAgICAgICAgICAgICAgICB0ZXN0cy5leHRlbmQoc2VsZi5fZmluZF90ZXN0c19mb3IoYXJn
KSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBGSVhNRTogQ29uc2lkZXIg
cnVubmluZyBlYWNoIHRyZWUgc2VwYXJhdGVseSB0byBhdm9pZCBuYW1lc3BhY2UgY2xhc2hlcy4K
KyAgICAgICAgICAgICAgICB0ZXN0cyA9IHNlbGYuX2RlZmF1bHRfdGVzdHMoKQorCisgICAgICAg
ICAgICByZXN1bHQgPSBzZWxmLl9ydW5fdGVzdHModGVzdHMpCisgICAgICAgICAgICBpZiBjb3Y6
CisgICAgICAgICAgICAgICAgY292LnN0b3AoKQorICAgICAgICAgICAgICAgIGNvdi5yZXBvcnQo
c2hvd19taXNzaW5nPUZhbHNlKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC53YXNTdWNjZXNz
ZnVsCisKKyAgICAgICAgZXhjZXB0IExvYWRlckVycm9yLCBlOgorICAgICAgICAgICAgcmV0dXJu
IEZhbHNlCisKKyAgICBkZWYgX2ZpeF9wYXRoKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSBQ
WVRIT05QQVRIIGlzIHNldCB1cCBjb3JyZWN0bHkuCisgICAgICAgIHN5cy5wYXRoID0gW3RyZWUu
dG9wX2RpcmVjdG9yeSBmb3IgdHJlZSBpbiBzZWxmLnRyZWVzIGlmIHRyZWUudG9wX2RpcmVjdG9y
eSBub3QgaW4gc3lzLnBhdGhdICsgc3lzLnBhdGgKKworICAgIGRlZiBfY2xlYW5fdHJlZXMoc2Vs
Zik6CisgICAgICAgIGZvciB0cmVlIGluIHNlbGYudHJlZXM6CisgICAgICAgICAgICB0cmVlLmNs
ZWFuKCkKKworICAgIGRlZiBfY292ZXJhZ2Vfb2JqZWN0KHNlbGYpOgorICAgICAgICB0cnk6Cisg
ICAgICAgICAgICBpbXBvcnQgd2Via2l0cHkudGhpcmRwYXJ0eS5hdXRvaW5zdGFsbGVkLmNvdmVy
YWdlIGFzIGNvdmVyYWdlCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciwgZToKKyAgICAgICAg
ICAgIF9sb2cuZXJyb3IoIkZhaWxlZCB0byBpbXBvcnQgJ2NvdmVyYWdlJzsgY2FuJ3QgZ2VuZXJh
dGUgY292ZXJhZ2UgbnVtYmVycy4iKQorICAgICAgICAgICAgcmFpc2UgTG9hZGVyRXJyb3IoKQor
CisgICAgICAgIGluY2x1ZGUgPSBbb3MucGF0aC5qb2luKHRyZWUuc2VhcmNoX2RpcmVjdG9yeSwg
JyonKSBmb3IgdHJlZSBpbiBzZWxmLnRyZWVzXQorICAgICAgICBvbWl0ID0gW10KKyAgICAgICAg
Zm9yIHRyZWUgaW4gc2VsZi50cmVlczoKKyAgICAgICAgICAgIGZvciBwYXRoIGluIHRyZWUuaWdu
b3JlX2xpc3Q6CisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihwYXRoKToKKyAgICAg
ICAgICAgICAgICAgICAgb21pdC5hcHBlbmQob3MucGF0aC5qb2luKHBhdGgsICcqJykpCisgICAg
ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgb21pdC5hcHBlbmQocGF0aCkK
KyAgICAgICAgcmV0dXJuIGNvdmVyYWdlLmNvdmVyYWdlKGluY2x1ZGU9aW5jbHVkZSwgb21pdD1v
bWl0KQorCisgICAgZGVmIF9maW5kX21vZHVsZXMoc2VsZiwgdHJlZSwgZGlyX3RvX3NlYXJjaCk6
CisgICAgICAgIHN1ZmZpeGVzID0gKCdfdW5pdHRlc3QucHknLCAnX2ludGVncmF0aW9udGVzdC5w
eScpCisgICAgICAgIGlmIHNlbGYub3B0aW9ucy5za2lwX2ludGVncmF0aW9udGVzdHM6CisgICAg
ICAgICAgICBzdWZmaXhlcyA9ICgnX3VuaXR0ZXN0LnB5JywpCisgICAgICAgIHJldHVybiB0cmVl
LmZpbmRfbW9kdWxlcyhkaXJfdG9fc2VhcmNoLCBzdWZmaXhlcykKKworICAgIGRlZiBfZGVmYXVs
dF90ZXN0cyhzZWxmKToKKyAgICAgICAgdGVzdHMgPSBbXQorICAgICAgICBmb3IgdHJlZSBpbiBz
ZWxmLnRyZWVzOgorICAgICAgICAgICAgdGVzdHMuZXh0ZW5kKHNlbGYuX2ZpbmRfbW9kdWxlcyh0
cmVlLCB0cmVlLnNlYXJjaF9kaXJlY3RvcnkpKQorICAgICAgICByZXR1cm4gdGVzdHMKKworICAg
IGRlZiBfc2tpcF9tb2R1bGVzKHNlbGYsIG1vZHVsZXMpOgorICAgICAgICAjIEZJWE1FOiBUaGVz
ZSBzaG91bGQgYmUgcmVwbGFjZWQgdy8gQHNsb3cgYW5kIEBza2lwX2lmIGRlY29yYXRvcnMKKyAg
ICAgICAgc2xvd190ZXN0cyA9ICgnd2Via2l0cHkuY29tbW9uLmNoZWNrb3V0LnNjbS5zY21fdW5p
dHRlc3QnLCkKKyAgICAgICAgc2VsZi5fZXhjbHVkZShtb2R1bGVzLCBzbG93X3Rlc3RzLCAnYXJl
IHJlYWxseSwgcmVhbGx5IHNsb3cnLCAzMTgxOCkKKworICAgICAgICBpZiBzeXMucGxhdGZvcm0g
PT0gJ3dpbjMyJzoKKyAgICAgICAgICAgIHdpbjMyX2JsYWNrbGlzdCA9ICgnd2Via2l0cHkuY29t
bW9uLmNoZWNrb3V0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dlYmtpdHB5
LmNvbW1vbi5jb25maWcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2Via2l0
cHkudG9vbCcpCisgICAgICAgICAgICBzZWxmLl9leGNsdWRlKG1vZHVsZXMsIHdpbjMyX2JsYWNr
bGlzdCwgJ2ZhaWwgaG9ycmlibHkgb24gd2luMzInLCA1NDUyNikKICAgICAgICAgcmV0dXJuIG1v
ZHVsZXMKIAogICAgIGRlZiBfZXhjbHVkZShzZWxmLCBtb2R1bGVzLCBtb2R1bGVfcHJlZml4ZXMs
IHJlYXNvbiwgYnVnaWQpOgotICAgICAgICBfbG9nLmluZm8oJ1NraXBwaW5nIHRlc3RzIGluIHRo
ZSBmb2xsb3dpbmcgbW9kdWxlcyBvciBwYWNrYWdlcyBiZWNhdXNlIHRoZXkgJXM6JyAlIHJlYXNv
bikKKyAgICAgICAgc2tpcHBlZF9hbnkgPSBGYWxzZQogICAgICAgICBmb3IgcHJlZml4IGluIG1v
ZHVsZV9wcmVmaXhlczoKLSAgICAgICAgICAgIF9sb2cuaW5mbygnICAgICVzJyAlIHByZWZpeCkK
ICAgICAgICAgICAgIG1vZHVsZXNfdG9fZXhjbHVkZSA9IGZpbHRlcihsYW1iZGEgbTogbS5zdGFy
dHN3aXRoKHByZWZpeCksIG1vZHVsZXMpCi0gICAgICAgICAgICBmb3IgbSBpbiBtb2R1bGVzX3Rv
X2V4Y2x1ZGU6Ci0gICAgICAgICAgICAgICAgaWYgbGVuKG1vZHVsZXNfdG9fZXhjbHVkZSkgPiAx
OgorICAgICAgICAgICAgaWYgbW9kdWxlc190b19leGNsdWRlOgorICAgICAgICAgICAgICAgIGlm
IG5vdCBza2lwcGVkX2FueToKKyAgICAgICAgICAgICAgICAgICAgX2xvZy5pbmZvKCdTa2lwcGlu
ZyB0ZXN0cyBpbiB0aGUgZm9sbG93aW5nIG1vZHVsZXMgb3IgcGFja2FnZXMgYmVjYXVzZSB0aGV5
ICVzOicgJSByZWFzb24pCisgICAgICAgICAgICAgICAgICAgIHNraXBwZWRfYW55ID0gVHJ1ZQor
ICAgICAgICAgICAgICAgIF9sb2cuaW5mbygnICAgICVzJyAlIHByZWZpeCkKKyAgICAgICAgICAg
ICAgICBmb3IgbSBpbiBtb2R1bGVzX3RvX2V4Y2x1ZGU6CiAgICAgICAgICAgICAgICAgICAgIF9s
b2cuZGVidWcoJyAgICAgICAgJXMnICUgbSkKICAgICAgICAgICAgICAgICBtb2R1bGVzLnJlbW92
ZShtKQotICAgICAgICBfbG9nLmluZm8oJyAgICAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPSVkOyB1c2UgLS1hbGwgdG8gaW5jbHVkZSknICUgYnVnaWQpCi0gICAgICAg
IF9sb2cuaW5mbygnJykKLQotICAgIGRlZiBfZmluZF9tb2R1bGVzX3VuZGVyKHNlbGYsIGRpcl90
b19zZWFyY2gsIHN1ZmZpeCk6CiAKLSAgICAgICAgZGVmIHRvX3BhY2thZ2UoZGlyX3BhdGgpOgot
ICAgICAgICAgICAgcmV0dXJuIGRpcl9wYXRoLnJlcGxhY2UoZGlyX3RvX3NlYXJjaCArIG9zLnNl
cCwgJycpLnJlcGxhY2Uob3Muc2VwLCAnLicpCisgICAgICAgIGlmIHNraXBwZWRfYW55OgorICAg
ICAgICAgICAgX2xvZy5pbmZvKCcgICAgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0lZDsgdXNlIC0tYWxsIHRvIGluY2x1ZGUpJyAlIGJ1Z2lkKQorICAgICAgICAgICAg
X2xvZy5pbmZvKCcnKQogCi0gICAgICAgIGRlZiB0b19tb2R1bGUoZmlsZW5hbWUsIHBhY2thZ2Up
OgotICAgICAgICAgICAgcmV0dXJuIHBhY2thZ2UgKyAnLicgKyBmaWxlbmFtZS5yZXBsYWNlKCcu
cHknLCAnJykKLQotICAgICAgICBtb2R1bGVzID0gW10KLSAgICAgICAgZm9yIGRpcl9wYXRoLCBf
LCBmaWxlbmFtZXMgaW4gb3Mud2FsayhkaXJfdG9fc2VhcmNoKToKLSAgICAgICAgICAgIHBhY2th
Z2UgPSB0b19wYWNrYWdlKGRpcl9wYXRoKQotICAgICAgICAgICAgbW9kdWxlcy5leHRlbmQodG9f
bW9kdWxlKGYsIHBhY2thZ2UpIGZvciBmIGluIGZpbGVuYW1lcyBpZiBmLmVuZHN3aXRoKHN1ZmZp
eCkpCi0gICAgICAgIHJldHVybiBtb2R1bGVzCi0KLSAgICBkZWYgX3J1bl90ZXN0cyhzZWxmLCBk
aXJzLCBhcmdzKToKLSAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5jb3ZlcmFnZToKKyAgICBkZWYg
X2ZpbmRfdGVzdHNfZm9yKHNlbGYsIG5hbWUpOgorICAgICAgICAodHJlZSwgc3RhcnRpbmdfZGly
ZWN0b3J5KSA9IHNlbGYuX2ZpbmRfdHJlZShuYW1lKQorICAgICAgICBpZiB0cmVlIGFuZCBub3Qg
b3MucGF0aC5pc2ZpbGUoc3RhcnRpbmdfZGlyZWN0b3J5KToKKyAgICAgICAgICAgIHJldHVybiBz
ZWxmLl9maW5kX21vZHVsZXModHJlZSwgc3RhcnRpbmdfZGlyZWN0b3J5KQorICAgICAgICBlbGlm
IG9zLnBhdGguZXhpc3RzKG5hbWUpOgorICAgICAgICAgICAgcmV0dXJuIFtzZWxmLl90ZXN0X2Zy
b21fcGF0aChuYW1lKV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBbbmFtZV0K
KworICAgIGRlZiBfdGVzdF9mcm9tX3BhdGgoc2VsZiwgbmFtZSk6CisgICAgICAgICMgRmlyc3Qs
IGNoZWNrIHRvIHNlZSBpZiB3ZSBjYW4gcmVzb2x2ZSB0aGUgcGF0aCByZWxhdGl2ZSB0byB0aGUg
Y3dkLgorICAgICAgICBmdWxsX3BhdGggPSBvcy5wYXRoLnJlYWxwYXRoKG5hbWUpCisgICAgICAg
IGZvciB0cmVlIGluIHNlbGYudHJlZXM6CisgICAgICAgICAgICAjIEZJWE1FOiBEbyB3ZSBuZWVk
IHRvIHdvcnJ5IGFib3V0IGNhc2UtaW5zZW5zaXRpdml0eSBoZXJlPworICAgICAgICAgICAgaWYg
ZnVsbF9wYXRoLnN0YXJ0c3dpdGgodHJlZS50b3BfZGlyZWN0b3J5KToKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZnVsbF9wYXRoLnJlcGxhY2UodHJlZS50b3BfZGlyZWN0b3J5ICsgb3Muc2VwLCAn
JykucmVwbGFjZSgnLnB5JywgJycpLnJlcGxhY2Uob3Muc2VwLCAnLicpCisKKyAgICAgICAgZXJy
ID0gJyVzIGlzIG5vdCBpbiBvbmUgb2YgdGhlIFdlYktpdCBweXRob24gdHJlZXMnICUgbmFtZQor
ICAgICAgICBfbG9nLmZhdGFsKGVycikKKyAgICAgICAgcmFpc2UgTG9hZGVyRXJyb3IoZXJyKQor
CisgICAgZGVmIF9zdWl0ZV9mcm9tX25hbWUoc2VsZiwgbmFtZSk6CisgICAgICAgIGlmIHNlbGYu
X2lzX21vZHVsZShuYW1lKToKKyAgICAgICAgICAgICMgaW1wb3J0IG1vZHVsZXMgZXhwbGljaXRs
eSBiZWZvcmUgbG9hZGluZyB0aGVpciB0ZXN0cyBiZWNhdXNlCisgICAgICAgICAgICAjIGxvYWRU
ZXN0c0Zyb21OYW1lKCkgcHJvZHVjZXMgbG91c3kgZXJyb3IgbWVzc2FnZXMgZm9yIGJhZCBtb2R1
bGVzLgogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGltcG9ydCBjb3ZlcmFnZQor
ICAgICAgICAgICAgICAgIF9faW1wb3J0X18obmFtZSkKICAgICAgICAgICAgIGV4Y2VwdCBJbXBv
cnRFcnJvciwgZToKLSAgICAgICAgICAgICAgICBfbG9nLmVycm9yKCJGYWlsZWQgdG8gaW1wb3J0
ICdjb3ZlcmFnZSc7IGNhbid0IGdlbmVyYXRlIGNvdmVyYWdlIG51bWJlcnMuIikKLSAgICAgICAg
ICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgICAgIGNvdiA9IGNvdmVyYWdlLmNvdmVyYWdl
KCkKLSAgICAgICAgICAgIGNvdi5zdGFydCgpCi0KLSAgICAgICAgX2xvZy5kZWJ1ZygiTG9hZGlu
ZyB0aGUgdGVzdHMuLi4iKQotCi0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LmRlZmF1bHRUZXN0
TG9hZGVyCi0gICAgICAgIHN1aXRlcyA9IFtdCi0gICAgICAgIGZvciBuYW1lIGluIGFyZ3M6Ci0g
ICAgICAgICAgICBpZiBzZWxmLl9pc19tb2R1bGUoZGlycywgbmFtZSk6Ci0gICAgICAgICAgICAg
ICAgIyBpbXBvcnQgbW9kdWxlcyBleHBsaWNpdGx5IGJlZm9yZSBsb2FkaW5nIHRoZWlyIHRlc3Rz
IGJlY2F1c2UKLSAgICAgICAgICAgICAgICAjIGxvYWRUZXN0c0Zyb21OYW1lKCkgcHJvZHVjZXMg
bG91c3kgZXJyb3IgbWVzc2FnZXMgZm9yIGJhZCBtb2R1bGVzLgotICAgICAgICAgICAgICAgIHRy
eToKLSAgICAgICAgICAgICAgICAgICAgX19pbXBvcnRfXyhuYW1lKQotICAgICAgICAgICAgICAg
IGV4Y2VwdCBJbXBvcnRFcnJvciwgZToKLSAgICAgICAgICAgICAgICAgICAgX2xvZy5mYXRhbCgn
RmFpbGVkIHRvIGltcG9ydCAlczonICUgbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5f
bG9nX2V4Y2VwdGlvbigpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAg
ICAgICAgc3VpdGVzLmFwcGVuZChsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUobmFtZSwgTm9uZSkp
Ci0KLSAgICAgICAgdGVzdF9zdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShzdWl0ZXMpCi0gICAg
ICAgIGlmIHNlbGYuX29wdGlvbnMueG1sOgotICAgICAgICAgICAgZnJvbSB3ZWJraXRweS50aGly
ZHBhcnR5LmF1dG9pbnN0YWxsZWQueG1scnVubmVyIGltcG9ydCBYTUxUZXN0UnVubmVyCi0gICAg
ICAgICAgICB0ZXN0X3J1bm5lciA9IFhNTFRlc3RSdW5uZXIob3V0cHV0PSd0ZXN0LXdlYmtpdHB5
LXhtbC1yZXBvcnRzJykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHRlc3RfcnVubmVyID0g
dW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIodmVyYm9zaXR5PXNlbGYuX3ZlcmJvc2l0eSkKLQotICAg
ICAgICBfbG9nLmRlYnVnKCJSdW5uaW5nIHRoZSB0ZXN0cy4iKQotICAgICAgICByZXN1bHQgPSB0
ZXN0X3J1bm5lci5ydW4odGVzdF9zdWl0ZSkKLSAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5jb3Zl
cmFnZToKLSAgICAgICAgICAgIGNvdi5zdG9wKCkKLSAgICAgICAgICAgIGNvdi5zYXZlKCkKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdC53YXNTdWNjZXNzZnVsKCkKLQotICAgIGRlZiBfaXNfbW9kdWxl
KHNlbGYsIGRpcnMsIG5hbWUpOgorICAgICAgICAgICAgICAgIF9sb2cuZmF0YWwoJ0ZhaWxlZCB0
byBpbXBvcnQgJXM6JyAlIG5hbWUpCisgICAgICAgICAgICAgICAgc2VsZi5fbG9nX2V4Y2VwdGlv
bigpCisgICAgICAgICAgICAgICAgcmFpc2UgTG9hZGVyRXJyb3IoKQorICAgICAgICByZXR1cm4g
c2VsZi5sb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUobmFtZSwgTm9uZSkKKworICAgIGRlZiBfZmlu
ZF90cmVlKHNlbGYsIG5hbWUpOgorICAgICAgICAjIElzIHRoZSBuYW1lIGEgc3ViZGlyZWN0b3J5
IHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGFuZCBpbiBhIHRyZWU/
CisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG5hbWUpOgorICAgICAgICAgICAgZnVsbF9wYXRo
ID0gb3MucGF0aC5yZWFscGF0aChuYW1lKQorICAgICAgICAgICAgZm9yIHRyZWUgaW4gc2VsZi50
cmVlczoKKyAgICAgICAgICAgICAgICBpZiBmdWxsX3BhdGguc3RhcnRzd2l0aCh0cmVlLnRvcF9k
aXJlY3RvcnkpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHRyZWUsIGZ1bGxfcGF0aCkK
KworICAgICAgICAjIElzIHRoZSBuYW1lIGEgc3ViZGlyZWN0b3J5IG9mIGEgdHJlZT8KKyAgICAg
ICAgaWYgbm90IG9zLnBhdGguaXNhYnMobmFtZSk6CisgICAgICAgICAgICBmb3IgdHJlZSBpbiBz
ZWxmLnRyZWVzOgorICAgICAgICAgICAgICAgIGZ1bGxfcGF0aCA9IG9zLnBhdGgucmVhbHBhdGgo
b3MucGF0aC5qb2luKHRyZWUudG9wX2RpcmVjdG9yeSwgbmFtZSkpCisgICAgICAgICAgICAgICAg
aWYgb3MucGF0aC5pc2RpcihmdWxsX3BhdGgpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
KHRyZWUsIG9zLnBhdGguam9pbih0cmVlLnRvcF9kaXJlY3RvcnksIG5hbWUpKQorCisgICAgICAg
ICMgSXMgdGhlIG5hbWUgYSBwYWNrYWdlPworICAgICAgICByZWxwYXRoID0gbmFtZS5yZXBsYWNl
KCcuJywgb3Muc2VwKQorICAgICAgICBmb3IgdHJlZSBpbiBzZWxmLnRyZWVzOgorICAgICAgICAg
ICAgZnVsbF9wYXRoID0gb3MucGF0aC5qb2luKHRyZWUudG9wX2RpcmVjdG9yeSwgcmVscGF0aCkK
KyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoZnVsbF9wYXRoKToKKyAgICAgICAgICAgICAg
ICByZXR1cm4gKHRyZWUsIGZ1bGxfcGF0aCkKKworICAgICAgICByZXR1cm4gKE5vbmUsIE5vbmUp
CisKKyAgICBkZWYgX2lzX21vZHVsZShzZWxmLCBuYW1lKToKICAgICAgICAgcmVscGF0aCA9IG5h
bWUucmVwbGFjZSgnLicsIG9zLnNlcCkgKyAnLnB5JwotICAgICAgICByZXR1cm4gYW55KG9zLnBh
dGguZXhpc3RzKG9zLnBhdGguam9pbihkLCByZWxwYXRoKSkgZm9yIGQgaW4gZGlycykKKyAgICAg
ICAgcmV0dXJuIGFueShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4odHJlZS50b3BfZGlyZWN0
b3J5LCByZWxwYXRoKSkgZm9yIHRyZWUgaW4gc2VsZi50cmVlcykKKworICAgIGRlZiBfcnVuX3Rl
c3RzKHNlbGYsIHRlc3RzKToKKyAgICAgICAgIyBTb3J0IGFuZCBkZWR1cGxpY2F0ZSBhbGwgb2Yg
dGhlIHRlc3RzCisgICAgICAgIHRlc3RzID0gc29ydGVkKFt0ZXN0IGZvciB0ZXN0IGluIHNldCh0
ZXN0cyldKQorCisgICAgICAgIGZvciB0ZXN0IGluIHRlc3RzOgorICAgICAgICAgICAgX2xvZy5k
ZWJ1ZygiRm91bmQ6ICVzIiAlIHRlc3QpCisKKyAgICAgICAgaWYgbm90IHNlbGYub3B0aW9ucy5h
bGw6CisgICAgICAgICAgICB0ZXN0cyA9IHNlbGYuX3NraXBfbW9kdWxlcyh0ZXN0cykKKworICAg
ICAgICBkZWYgYWxsX3Rlc3RfbmFtZXMoc3VpdGUpOgorICAgICAgICAgICAgbmFtZXMgPSBbXQor
ICAgICAgICAgICAgaWYgaGFzYXR0cihzdWl0ZSwgJ190ZXN0cycpOgorICAgICAgICAgICAgICAg
IGZvciB0IGluIHN1aXRlLl90ZXN0czoKKyAgICAgICAgICAgICAgICAgICAgbmFtZXMuZXh0ZW5k
KGFsbF90ZXN0X25hbWVzKHQpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBu
YW1lcy5hcHBlbmQoX3Rlc3RfbmFtZShzdWl0ZSkpCisgICAgICAgICAgICByZXR1cm4gbmFtZXMK
KworICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbc2VsZi5fc3VpdGVfZnJvbV9u
YW1lKHRlc3QpIGZvciB0ZXN0IGluIHRlc3RzXSkKKyAgICAgICAgaWYgc2VsZi5vcHRpb25zLnht
bDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnJ1bm5lci5ydW4oc3VpdGUpCisgICAgICAgIGVs
c2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5ydW5uZXIucnVuKGFsbF90ZXN0X25hbWVzKHN1
aXRlKSkKIAogICAgIGRlZiBfbG9nX2V4Y2VwdGlvbihzZWxmKToKICAgICAgICAgcyA9IFN0cmlu
Z0lPLlN0cmluZ0lPKCkKICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YyhmaWxlPXMpCiAgICAg
ICAgIGZvciBsIGluIHMuYnVmbGlzdDoKICAgICAgICAgICAgIF9sb2cuZXJyb3IoJyAgJyArIGwu
cnN0cmlwKCkpCisKKworY2xhc3MgVGVzdExvYWRlcih1bml0dGVzdC5UZXN0TG9hZGVyKToKKyAg
ICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYucnVuX3JlYWxfaW50ZWdyYXRpb25f
dGVzdHMgPSBGYWxzZQorICAgICAgICBzZWxmLnJ1bl9zZXJpYWxfdGVzdHMgPSBUcnVlCisgICAg
ICAgIHN1cGVyKFRlc3RMb2FkZXIsIHNlbGYpLl9faW5pdF9fKCkKKworICAgIGRlZiBnZXRUZXN0
Q2FzZU5hbWVzKHNlbGYsIHRlc3RDYXNlQ2xhc3MpOgorICAgICAgICBkZWYgaXNUZXN0TWV0aG9k
KGF0dHJuYW1lLCB0ZXN0Q2FzZUNsYXNzPXRlc3RDYXNlQ2xhc3MpOgorICAgICAgICAgICAgaWYg
bm90IGhhc2F0dHIoZ2V0YXR0cih0ZXN0Q2FzZUNsYXNzLCBhdHRybmFtZSksICdfX2NhbGxfXycp
OgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgcmV0dXJuICgoYXR0
cm5hbWUuc3RhcnRzd2l0aCgndGVzdCcpKSBvcgorICAgICAgICAgICAgICAgICAgICAoc2VsZi5y
dW5fcmVhbF9pbnRlZ3JhdGlvbl90ZXN0cyBhbmQgYXR0cm5hbWUuc3RhcnRzd2l0aCgnaW50ZWdy
YXRpb25fdGVzdF8nKSkgb3IKKyAgICAgICAgICAgICAgICAgICAgKHNlbGYucnVuX3NlcmlhbF90
ZXN0cyBhbmQgYXR0cm5hbWUuc3RhcnRzd2l0aCgnc2VyaWFsX3Rlc3RfJykpKQorICAgICAgICB0
ZXN0Rm5OYW1lcyA9IGZpbHRlcihpc1Rlc3RNZXRob2QsIGRpcih0ZXN0Q2FzZUNsYXNzKSkKKyAg
ICAgICAgdGVzdEZuTmFtZXMuc29ydCgpCisgICAgICAgIHJldHVybiB0ZXN0Rm5OYW1lcworCisK
K2NsYXNzIFRlc3RSdW5uZXIobWFuYWdlcl93b3JrZXJfYnJva2VyLkJyb2tlckNsaWVudCk6Cisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0cmVhbSwgb3B0aW9ucywgc3RhcnQpOgorICAgICAgICBz
ZWxmLm9wdGlvbnMgPSBvcHRpb25zCisgICAgICAgIHNlbGYuc3RyZWFtID0gc3RyZWFtCisgICAg
ICAgIHNlbGYuc3RhcnQgPSBzdGFydAorICAgICAgICBzZWxmLnJlc3VsdCA9IE5vbmUKKyAgICAg
ICAgc2VsZi53b3JrZXJzID0ge30KKyAgICAgICAgc2VsZi5udW1fdGVzdHMgPSBOb25lCisgICAg
ICAgIHNlbGYuX2J1ZmZlciA9ICcnCisKKyAgICBkZWYgbmFtZShzZWxmKToKKyAgICAgICAgcmV0
dXJuICdtYW5hZ2VyJworCisgICAgZGVmIHJ1bihzZWxmLCB0ZXN0X25hbWVzKToKKyAgICAgICAg
cGFyYWxsZWwgPSB0aW1lLnRpbWUoKQorICAgICAgICBzZWxmLm51bV90ZXN0cyA9IGxlbih0ZXN0
X25hbWVzKQorCisgICAgICAgIGlmIHNlbGYub3B0aW9ucy5qb2JzID4gMToKKyAgICAgICAgICAg
IHdvcmtlcl9tb2RlbCA9ICdwcm9jZXNzZXMnCisgICAgICAgICAgICBfbG9nLmluZm8oJ1J1bm5p
bmcgdXAgdG8gJWQgdGVzdHMgaW4gcGFyYWxsZWwuJyAlIHNlbGYub3B0aW9ucy5qb2JzKQorICAg
ICAgICAgICAgcnVubmVyID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgd29ya2Vy
X21vZGVsID0gJ2lubGluZScKKyAgICAgICAgICAgIF9sb2cuaW5mbygnUnVubmluZyB0ZXN0cyBp
bmxpbmUuJykKKyAgICAgICAgICAgIHJ1bm5lciA9IHNlbGYKKworICAgICAgICBicm9rZXIgPSBt
YW5hZ2VyX3dvcmtlcl9icm9rZXIuZ2V0KHdvcmtlcl9tb2RlbCwgc2VsZiwgV29ya2VyKQorICAg
ICAgICBsb2FkZXIgPSBUZXN0TG9hZGVyKCkKKyAgICAgICAgc2VsZi5yZXN1bHQgPSB1bml0dGVz
dC5UZXN0UmVzdWx0KCkKKworICAgICAgICBmb3IgaSBpbiByYW5nZShzZWxmLm9wdGlvbnMuam9i
cyk6CisgICAgICAgICAgICB3b3JrZXIgPSBicm9rZXIuc3RhcnRfd29ya2VyKGludChpKSArIDEp
CisgICAgICAgICAgICBpZiBzZWxmLm9wdGlvbnMuam9icyA9PSAxOgorICAgICAgICAgICAgICAg
IHdvcmtlci5zZXRfaW5saW5lX2FyZ3VtZW50cyhydW5uZXIpCisgICAgICAgICAgICBzZWxmLndv
cmtlcnNbd29ya2VyLm5hbWUoKV0gPSB3b3JrZXIKKworICAgICAgICBmb3IgdCBpbiB0ZXN0X25h
bWVzOgorICAgICAgICAgICAgYnJva2VyLnBvc3RfbWVzc2FnZSgndGVzdCcsIHQpCisKKyAgICAg
ICAgZm9yIGkgaW4gcmFuZ2Uoc2VsZi5vcHRpb25zLmpvYnMpOgorICAgICAgICAgICAgYnJva2Vy
LnBvc3RfbWVzc2FnZSgnc3RvcCcpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYnJva2Vy
LnJ1bl9tZXNzYWdlX2xvb3AoKQorICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6Cisg
ICAgICAgICAgICBmb3Igd29ya2VyIGluIHNlbGYud29ya2Vycy52YWx1ZXMoKToKKyAgICAgICAg
ICAgICAgICB3b3JrZXIuY2FuY2VsKCkKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgc3Rv
cCA9IHRpbWUudGltZSgpCisgICAgICAgIHNlbGYuX3dyaXRlX3N1bW1hcnkoc2VsZi5yZXN1bHQs
IHN0b3AgLSBzZWxmLnN0YXJ0KQorICAgICAgICB0b3RhbF90aW1lID0gc3RvcCAtIHNlbGYuc3Rh
cnQKKyAgICAgICAgcGFyYWxsZWxfdGltZSA9IHN0b3AgLSBwYXJhbGxlbAorICAgICAgICBzZXJp
YWxfdGltZSA9IHRvdGFsX3RpbWUgLSBwYXJhbGxlbF90aW1lCisgICAgICAgIGlmIHNlbGYub3B0
aW9ucy5qb2JzID4gMToKKyAgICAgICAgICAgIF9sb2cuaW5mbygnJS4zZnMgd2FzIHNwZW50IHJ1
bm5pbmcgc2luZ2xlLXRocmVhZGVkICglZCUlKScgJQorICAgICAgICAgICAgICAgICAgICAoc2Vy
aWFsX3RpbWUsIGludChzZXJpYWxfdGltZSAqIDEwMCAvIHRvdGFsX3RpbWUpKSkKKyAgICAgICAg
cmV0dXJuIHNlbGYucmVzdWx0CisKKyAgICBkZWYgaXNfZG9uZShzZWxmKToKKyAgICAgICAgcmV0
dXJuIG5vdCBzZWxmLndvcmtlcnMKKworICAgIGRlZiBoYW5kbGVfc3RhcnRlZF90ZXN0KHNlbGYs
IHNyYywgdGVzdF9uYW1lLCBzdGFydCk6CisgICAgICAgIGlmIHNlbGYub3B0aW9ucy52ZXJib3Nl
OgorICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGUodGVzdF9uYW1lKQorCisgICAgZGVmIGhh
bmRsZV9maW5pc2hlZF90ZXN0KHNlbGYsIHNyYywgdGVzdF9uYW1lLCB0ZXN0X3RpbWUsIGZhaWx1
cmUsIGVycik6CisgICAgICAgIHNlbGYucmVzdWx0LnRlc3RzUnVuICs9IDEKKyAgICAgICAgaWYg
ZmFpbHVyZToKKyAgICAgICAgICAgIHNlbGYucmVzdWx0LmZhaWx1cmVzLmFwcGVuZCgodGVzdF9u
YW1lLCBmYWlsdXJlKSkKKyAgICAgICAgaWYgZXJyOgorICAgICAgICAgICAgc2VsZi5yZXN1bHQu
ZXJyb3JzLmFwcGVuZCgodGVzdF9uYW1lLCBlcnIpKQorICAgICAgICBzZWxmLl93cml0ZV9yZXN1
bHQoc2VsZi5yZXN1bHQsIHRlc3RfbmFtZSwgdGVzdF90aW1lLCBmYWlsdXJlLCBlcnIpCisKKyAg
ICBkZWYgaGFuZGxlX2RvbmUoc2VsZiwgc3JjKToKKyAgICAgICAgc2VsZi5fZXJhc2UoKQorICAg
ICAgICBfbG9nLmRlYnVnKCclcyBkb25lIGFmdGVyICUuM2ZzJyAlIChzcmMsIHRpbWUudGltZSgp
IC0gc2VsZi5zdGFydCkpCisgICAgICAgIGRlbCBzZWxmLndvcmtlcnNbc3JjXQorCisgICAgZGVm
IGhhbmRsZV9leGNlcHRpb24oc2VsZiwgc291cmNlLCBleGNlcHRpb25fdHlwZSwgZXhjZXB0aW9u
X3ZhbHVlLCBzdGFjayk6CisgICAgICAgIF9sb2cuZXJyb3IoIiVzIHJhaXNlZCAlcygnJXMnKToi
ICUgKAorICAgICAgICAgICAgICAgICAgIHNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICBleGNl
cHRpb25fdmFsdWUuX19jbGFzc19fLl9fbmFtZV9fLAorICAgICAgICAgICAgICAgICAgIHN0cihl
eGNlcHRpb25fdmFsdWUpKSkKKyAgICAgICAgcmFpc2UgZXhjZXB0aW9uX3R5cGUoZXhjZXB0aW9u
X3ZhbHVlKQorCisgICAgZGVmIF9lcmFzZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fYnVmZmVy
OgorICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGUoJ1xiJyAqIGxlbihzZWxmLl9idWZmZXIp
ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICcgKiBsZW4oc2VsZi5fYnVmZmVy
KSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xiJyAqIGxlbihzZWxmLl9idWZm
ZXIpKQorICAgICAgICAgICAgc2VsZi5fYnVmZmVyID0gJycKKworICAgIGRlZiBfd3JpdGVfc3Rh
dHVzKHNlbGYsIHRvdGFsLCBudW1fcnVuLCBudW1fZmFpbHVyZXMsIG51bV9lcnJvcnMpOgorICAg
ICAgICBudW1fcGFzc2VzID0gbnVtX3J1biAtIChudW1fZmFpbHVyZXMgLSBudW1fZXJyb3JzKQor
ICAgICAgICBudW1fcmVtYWluaW5nID0gdG90YWwgLSBudW1fcnVuCisgICAgICAgIHBlcmNlbnQg
PSAxMDAgKiBudW1fcnVuIC8gdG90YWwKKworICAgICAgICBzZWxmLl9lcmFzZSgpCisgICAgICAg
IHNlbGYuX2J1ZmZlciA9ICclMmQlJTogJWQgcGFzc2VkICVkIGZhaWxlZCAlZCBlcnJlZCAlZCBs
ZWZ0JyAlIChwZXJjZW50LCBudW1fcGFzc2VzLCBudW1fZmFpbHVyZXMsIG51bV9lcnJvcnMsIG51
bV9yZW1haW5pbmcpCisgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKHNlbGYuX2J1ZmZlcikKKyAg
ICAgICAgc2VsZi5zdHJlYW0uZmx1c2goKQorCisgICAgZGVmIF93cml0ZV9yZXN1bHQoc2VsZiwg
cmVzdWx0LCB0ZXN0X25hbWUsIHRlc3RfdGltZSwgZmFpbHVyZT1Ob25lLCBlcnI9Tm9uZSk6Cisg
ICAgICAgIGlmIGZhaWx1cmU6CisgICAgICAgICAgICBtc2cgPSAnIGZhaWxlZCcKKyAgICAgICAg
ZWxpZiBlcnI6CisgICAgICAgICAgICBtc2cgPSAnIGVycmVkJworICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgbXNnID0gJyBwYXNzZWQnCisgICAgICAgIGlmIHNlbGYub3B0aW9ucy50aW1pbmc6
CisgICAgICAgICAgICBtc2cgKz0gJyAlLjVmcycgJSB0ZXN0X3RpbWUKKworICAgICAgICBpZiBl
cnIgb3IgZmFpbHVyZToKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLm9wdGlvbnMudmVyYm9zZToK
KyAgICAgICAgICAgICAgICBzZWxmLl9lcmFzZSgpCisgICAgICAgICAgICBzZWxmLnN0cmVhbS53
cml0ZSh0ZXN0X25hbWUgKyBtc2cgKyAnOlxuJykKKyAgICAgICAgICAgIGlmIGZhaWx1cmU6Cisg
ICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZmFpbHVyZS5zcGxpdGxpbmVzKCk6CisgICAgICAg
ICAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKCcgICAgJyArIGxpbmUgKyAnXG4nKQorICAg
ICAgICAgICAgaWYgZXJyOgorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGVyci5zcGxpdGxp
bmVzKCk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKCcgICAgJyArIGxp
bmUgKyAnXG4nKQorICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGUoJ1xuJykKKyAgICAgICAg
ZWxpZiBzZWxmLm9wdGlvbnMudmVyYm9zZToKKyAgICAgICAgICAgIGlmIHNlbGYub3B0aW9ucy5q
b2JzID4gMToKKyAgICAgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZSh0ZXN0X25hbWUpCisg
ICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZShtc2cgKyAnXG4nKQorICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgc2VsZi5fd3JpdGVfc3RhdHVzKHNlbGYubnVtX3Rlc3RzLCByZXN1bHQudGVz
dHNSdW4sIGxlbihyZXN1bHQuZmFpbHVyZXMpLCBsZW4ocmVzdWx0LmVycm9ycykpCisKKyAgICBk
ZWYgX3dyaXRlX3N1bW1hcnkoc2VsZiwgcmVzdWx0LCB0b3RhbF90ZXN0X3RpbWUpOgorICAgICAg
ICBpZiBzZWxmLm9wdGlvbnMudmVyYm9zZToKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRl
KCdcbicpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9lcmFzZSgpCisKKyAgICAg
ICAgdG90YWxfZGVsYXkgPSAnJS4zZiBzZWNvbmRzJyAlICh0b3RhbF90ZXN0X3RpbWUpCisgICAg
ICAgIHJ1biA9IHJlc3VsdC50ZXN0c1J1bgorICAgICAgICBmYWlsZWQgPSBsZW4ocmVzdWx0LmZh
aWx1cmVzKQorICAgICAgICBlcnJlZCA9IGxlbihyZXN1bHQuZXJyb3JzKQorICAgICAgICBpZiBy
dW4gPiAxIGFuZCBmYWlsZWQgYW5kIGVycmVkOgorICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3Jp
dGUoJyVkIHRlc3RzIHJhbiBpbiAlczsgJWQgZmFpbGVkLCAlZCBlcnJvcmVkIG91dC5cbicgJSAo
cnVuLCB0b3RhbF9kZWxheSwgZmFpbGVkLCBlcnJlZCkpCisgICAgICAgIGVsaWYgcnVuID4gMSBh
bmQgZmFpbGVkOgorICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGUoJyVkIHRlc3RzIHJhbiBp
biAlczsgJWQgZmFpbGVkLlxuJyAlIChydW4sIHRvdGFsX2RlbGF5LCBmYWlsZWQpKQorICAgICAg
ICBlbGlmIHJ1biA+IDEgYW5kIGVycmVkOgorICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGUo
JyVkIHRlc3RzIHJhbiBpbiAlczsgJWQgZXJyb3JlZCBvdXQuXG4nICUgKHJ1biwgdG90YWxfZGVs
YXksIGVycmVkKSkKKyAgICAgICAgZWxpZiBydW4gPiAxOgorICAgICAgICAgICAgc2VsZi5zdHJl
YW0ud3JpdGUoJyVkIHRlc3RzIHJhbiBpbiAlczsgYWxsIHBhc3NlZC5cbicgJSAocnVuLCB0b3Rh
bF9kZWxheSkpCisgICAgICAgIGVsaWYgZmFpbGVkOgorICAgICAgICAgICAgc2VsZi5zdHJlYW0u
d3JpdGUoJzEgdGVzdCByYW4gaW4gJXM7IGl0IGZhaWxlZC5cbicgJSAodG90YWxfZGVsYXkpKQor
ICAgICAgICBlbGlmIGVycmVkOgorICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGUoJzEgdGVz
dCByYW4gaW4gJXM7IGl0IGVycm9yZWQgb3V0LlxuJyAlICh0b3RhbF9kZWxheSkpCisgICAgICAg
IGVsc2U6CisgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZSgnMSB0ZXN0IHJhbiBpbiAlczsg
aXQgcGFzc2VkLlxuJyAlICh0b3RhbF9kZWxheSkpCisKKworY2xhc3MgV29ya2VyKG1hbmFnZXJf
d29ya2VyX2Jyb2tlci5BYnN0cmFjdFdvcmtlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdv
cmtlcl9jb25uZWN0aW9uLCB3b3JrZXJfbnVtYmVyKToKKyAgICAgICAgc3VwZXIoV29ya2VyLCBz
ZWxmKS5fX2luaXRfXyh3b3JrZXJfY29ubmVjdGlvbiwgd29ya2VyX251bWJlcikKKyAgICAgICAg
c2VsZi5fd29ya2VyX251bWJlciA9IHdvcmtlcl9udW1iZXIKKyAgICAgICAgc2VsZi5fbmFtZSA9
ICd3b3JrZXIvJWQnICUgd29ya2VyX251bWJlcgorCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAg
ICAgc2VsZi5sb2FkZXIgPSBUZXN0TG9hZGVyKCkKKyAgICAgICAgc2VsZi5yZXN1bHQgPSB1bml0
dGVzdC5UZXN0UmVzdWx0KCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3VwZXIoV29ya2Vy
LCBzZWxmKS5ydW4oKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fd29ya2Vy
X2Nvbm5lY3Rpb24ucG9zdF9tZXNzYWdlKCdkb25lJykKKworICAgIGRlZiBoYW5kbGVfdGVzdChz
ZWxmLCBzcmMsIHRlc3RfbmFtZSk6CisgICAgICAgIHN0YXJ0ID0gdGltZS50aW1lKCkKKyAgICAg
ICAgc2VsZi5fd29ya2VyX2Nvbm5lY3Rpb24ucG9zdF9tZXNzYWdlKCdzdGFydGVkX3Rlc3QnLCB0
ZXN0X25hbWUsIHN0YXJ0KQorICAgICAgICBudW1fZmFpbHVyZXMgPSBsZW4oc2VsZi5yZXN1bHQu
ZmFpbHVyZXMpCisgICAgICAgIG51bV9lcnJvcnMgPSBsZW4oc2VsZi5yZXN1bHQuZXJyb3JzKQor
ICAgICAgICBzZWxmLmxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSh0ZXN0X25hbWUsIE5vbmUpLnJ1
bihzZWxmLnJlc3VsdCkKKyAgICAgICAgc3RvcCA9IHRpbWUudGltZSgpCisgICAgICAgIGVyciA9
IE5vbmUKKyAgICAgICAgZmFpbHVyZSA9IE5vbmUKKyAgICAgICAgaWYgbGVuKHNlbGYucmVzdWx0
LmVycm9ycykgPiBudW1fZXJyb3JzOgorICAgICAgICAgICAgZXJyID0gc2VsZi5yZXN1bHQuZXJy
b3JzW251bV9lcnJvcnNdWzFdCisgICAgICAgIGlmIGxlbihzZWxmLnJlc3VsdC5mYWlsdXJlcykg
PiBudW1fZmFpbHVyZXM6CisgICAgICAgICAgICBmYWlsdXJlID0gc2VsZi5yZXN1bHQuZmFpbHVy
ZXNbbnVtX2ZhaWx1cmVzXVsxXQorICAgICAgICBzZWxmLl93b3JrZXJfY29ubmVjdGlvbi5wb3N0
X21lc3NhZ2UoJ2ZpbmlzaGVkX3Rlc3QnLCB0ZXN0X25hbWUsIHN0b3AgLSBzdGFydCwgZmFpbHVy
ZSwgZXJyKQorCisgICAgZGVmIGhhbmRsZV9zdG9wKHNlbGYsIHNyYyk6CisgICAgICAgIHNlbGYu
c3RvcF9oYW5kbGluZ19tZXNzYWdlcygpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3Rlc3QvbWFpbl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9t
YWluX3VuaXR0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE0MDU4ODk3M2FlYWFkZTNkMDJjNmJmMDI1Y2Rh
ODMyOTZkZDBmNGUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rl
c3QvbWFpbl91bml0dGVzdC5weQpAQCAtMCwwICsxLDk0IEBACisjIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgb3MKK2ltcG9ydCBwZGIKK2ltcG9ydCBjU3Ry
aW5nSU8gYXMgU3RyaW5nSU8KK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHdl
YmtpdHB5LnRlc3QubWFpbiBpbXBvcnQgVGVzdGVyCisKKworY2xhc3MgRHVtbXlSZXN1bHQob2Jq
ZWN0KToKKyAgICB3YXNTdWNjZXNzZnVsID0gVHJ1ZQorCisKK2NsYXNzIER1bW15UnVubmVyKG9i
amVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0cmVhbSwgKmFyZ3MsICoqa3dhcmdzKToK
KyAgICAgICAgc2VsZi5zdHJlYW0gPSBzdHJlYW0KKyAgICAgICAgcGFzcworCisgICAgZGVmIHJ1
bihzZWxmLCBzdWl0ZSk6CisgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKCdSYW4gJWQgdGVzdHMu
JyAlIHN1aXRlLmNvdW50VGVzdENhc2VzKCkpCisgICAgICAgIHJldHVybiBEdW1teVJlc3VsdCgp
CisKK3dlYmtpdF9yb290ID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRo
LmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpKSkpCisK
KworY2xhc3MgTWFpblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBjbWQoc2VsZiwg
YXJncywgY3dkPU5vbmUsIHN0ZGVycj1Ob25lLCByZXQ9VHJ1ZSwgbnVtX3Rlc3RzPU5vbmUpOgor
ICAgICAgICBvbGRjd2QgPSBvcy5nZXRjd2QoKQorICAgICAgICBpZiBub3QgY3dkOgorICAgICAg
ICAgICAgY3dkID0gJy9zcmMvd2snCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLmNoZGly
KGN3ZCkKKyAgICAgICAgICAgIGVyciA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgICAg
IHRlc3RlciA9IFRlc3RlcihlcnIpCisgICAgICAgICAgICBvcHRpb25zLCBhcmdzID0gdGVzdGVy
LnBhcnNlX2FyZ3MoYXJncykKKyAgICAgICAgICAgIHRlc3Rlci5jb25maWd1cmUob3B0aW9ucykK
KyAgICAgICAgICAgIHRlc3Rlci5hZGRfdHJlZShvcy5wYXRoLmpvaW4od2Via2l0X3Jvb3QsICdU
b29scycsICdTY3JpcHRzJyksICd3ZWJraXRweScpCisgICAgICAgICAgICB0ZXN0ZXIucnVubmVy
ID0gRHVtbXlSdW5uZXIoZXJyKQorICAgICAgICAgICAgcmV0dXJuY29kZSA9IHRlc3Rlci5ydW4o
YXJncykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNoZGlyKG9sZGN3ZCkKKwor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldCwgcmV0dXJuY29kZSkKKyAgICAgICAgYWN0dWFs
X2VyciA9IGVyci5nZXR2YWx1ZSgpCisgICAgICAgIGlmIHN0ZGVyciBpcyBub3QgTm9uZToKKyAg
ICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsX2Vyciwgc3RkZXJyKQorICAgICAgICBp
ZiBudW1fdGVzdHMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoKCdS
YW4gJWQgdGVzdCcgJSBudW1fdGVzdHMpIGluIGFjdHVhbF9lcnIsIGFjdHVhbF9lcnIpCisKKyAg
ICBkZWYgaW50ZWdyYXRpb25fdGVzdF9wYWNrYWdlKHNlbGYpOgorICAgICAgICBzZWxmLmNtZChb
J3dlYmtpdHB5LmNvbW1vbi53YXRjaGxpc3QnXSwgbnVtX3Rlc3RzPTM3KQorCisgICAgZGVmIGlu
dGVncmF0aW9uX3Rlc3RfbW9kdWxlKHNlbGYpOgorICAgICAgICBzZWxmLmNtZChbJ3dlYmtpdHB5
LmNvbW1vbi53YXRjaGxpc3Qud2F0Y2hsaXN0X3VuaXR0ZXN0J10sIG51bV90ZXN0cz0xMCkKKwor
ICAgIGRlZiBpbnRlZ3JhdGlvbl90ZXN0X2NsYXNzKHNlbGYpOgorICAgICAgICBzZWxmLmNtZChb
J3dlYmtpdHB5LmNvbW1vbi53YXRjaGxpc3Qud2F0Y2hsaXN0X3VuaXR0ZXN0LldhdGNoTGlzdFRl
c3QnXSwgbnVtX3Rlc3RzPTEwKQorCisgICAgZGVmIGludGVncmF0aW9uX3Rlc3RfbWV0aG9kKHNl
bGYpOgorICAgICAgICBzZWxmLmNtZChbJ3dlYmtpdHB5LmNvbW1vbi53YXRjaGxpc3Qud2F0Y2hs
aXN0X3VuaXR0ZXN0LldhdGNoTGlzdFRlc3QudGVzdF9maWxlbmFtZV9kZWZpbml0aW9uJ10sIG51
bV90ZXN0cz0xKQorCisgICAgZGVmIGludGVncmF0aW9uX3Rlc3RfZGlyZWN0b3J5KHNlbGYpOgor
ICAgICAgICBzZWxmLmNtZChbJ3dlYmtpdHB5L2NvbW1vbi93YXRjaGxpc3QnXSwgbnVtX3Rlc3Rz
PTM3KQorCisgICAgZGVmIGludGVncmF0aW9uX3Rlc3RfY3dkKHNlbGYpOgorICAgICAgICBzZWxm
LmNtZChbJy4nXSwgY3dkPScvc3JjL3drL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3dh
dGNobGlzdCcsIG51bV90ZXN0cz0zNykKKworICAgIGRlZiBpbnRlZ3JhdGlvbl90ZXN0X2N3ZChz
ZWxmKToKKyAgICAgICAgc2VsZi5jbWQoWyd3YXRjaGxpc3QnXSwgY3dkPScvc3JjL3drL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvY29tbW9uJywgbnVtX3Rlc3RzPTM3KQorCisgICAgZGVmIGludGVn
cmF0aW9uX3Rlc3RfZmlsZV9pbl9jd2Qoc2VsZik6CisgICAgICAgIHNlbGYuY21kKFsnd2F0Y2hs
aXN0L3dhdGNobGlzdF91bml0dGVzdC5weSddLCBjd2Q9Jy9zcmMvd2svVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9jb21tb24nLCBudW1fdGVzdHM9MTApCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128843</attachid>
            <date>2012-02-24 20:12:56 -0800</date>
            <delta_ts>2012-06-26 17:04:57 -0700</delta_ts>
            <desc>work in progress (does not include parallel testing)</desc>
            <filename>bug-77687-20120224201255.patch</filename>
            <type>text/plain</type>
            <size>32458</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4ODY4CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3Rl
c3Qtd2Via2l0cHkgYi9Ub29scy9TY3JpcHRzL3Rlc3Qtd2Via2l0cHkKaW5kZXggNDI5OGZlYWUy
MzczYTdiOGEzN2M0MGZiOWM4ZDA1NzQ2NWJkOTU2YS4uZTk1YTMwZGJkM2FiOGI5NjNlNzViOGI4
MzE1ZjUzNjA3MDA2OWYyNCAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy90ZXN0LXdlYmtpdHB5
CisrKyBiL1Rvb2xzL1NjcmlwdHMvdGVzdC13ZWJraXRweQpAQCAtMzcsMTggKzM3LDIzIEBAIGlt
cG9ydCBzeXMKIGZyb20gd2Via2l0cHkuY29tbW9uIGltcG9ydCB2ZXJzaW9uX2NoZWNrCiBmcm9t
IHdlYmtpdHB5LnRlc3QgaW1wb3J0IG1haW4KIAotCi1fbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIo
InRlc3Qtd2Via2l0cHkiKQotCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCiAK
IGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgd2Via2l0X3Jvb3QgPSBvcy5wYXRoLmRp
cm5hbWUob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19m
aWxlX18pKSkpCiAKLSAgICAjIEZJWE1FOiBXZSBzaG91bGQgcHJvYmFibHkgdGVzdCBlYWNoIHBh
Y2thZ2Ugc2VwYXJhdGVseSB0byBhdm9pZCBuYW1pbmcgY29uZmxpY3RzLgotICAgIGRpcnMgPSBb
Ci0gICAgICAgIG9zLnBhdGguam9pbih3ZWJraXRfcm9vdCwgJ1Rvb2xzJywgJ1NjcmlwdHMnKSwK
LSAgICAgICAgb3MucGF0aC5qb2luKHdlYmtpdF9yb290LCAnU291cmNlJywgJ1dlYktpdDInLCAn
U2NyaXB0cycpLAotICAgIF0KKyAgICB0ZXN0ZXIgPSBtYWluLlRlc3RlcihzeXMuc3RkZXJyKQor
ICAgIG9wdGlvbnMsIGFyZ3MgPSB0ZXN0ZXIucGFyc2VfYXJncyhzeXMuYXJndlsxOl0pCisgICAg
dGVzdGVyLmNvbmZpZ3VyZShvcHRpb25zKQorICAgIHRlc3Rlci5jb25maWd1cmVfbG9nZ2luZygp
CisKKyAgICB0aGlyZHBhcnR5ID0gb3MucGF0aC5qb2luKCd3ZWJraXRweScsICd0aGlyZHBhcnR5
JykKKyAgICB0ZXN0ZXIuYWRkX3RyZWUob3MucGF0aC5qb2luKHdlYmtpdF9yb290LCAnVG9vbHMn
LCAnU2NyaXB0cycpLCAnd2Via2l0cHknLAorICAgICAgICAgICAgICAgICAgICBbb3MucGF0aC5q
b2luKHRoaXJkcGFydHksICdhdXRvaW5zdGFsbGVkJyksCisgICAgICAgICAgICAgICAgICAgICBv
cy5wYXRoLmpvaW4odGhpcmRwYXJ0eSwgJ3NpbXBsZWpzb24nKSwKKyAgICAgICAgICAgICAgICAg
ICAgIG9zLnBhdGguam9pbih0aGlyZHBhcnR5LCAnQmVhdXRpZnVsU291cC5weScpLAorICAgICAg
ICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHRoaXJkcGFydHksICdtb2NrLnB5JyldKQorICAg
IHRlc3Rlci5hZGRfdHJlZShvcy5wYXRoLmpvaW4od2Via2l0X3Jvb3QsICdTb3VyY2UnLCAnV2Vi
S2l0MicsICdTY3JpcHRzJyksICd3ZWJraXQyJykKIAogICAgICMgRklYTUU6IERvIHdlIG5lZWQg
dG8gYmUgYWJsZSB0byB0ZXN0IFF1ZXVlU3RhdHVzU2VydmVyIG9uIFdpbmRvd3MgYXMgd2VsbD8K
ICAgICBhcHBlbmdpbmVfc2RrX3BhdGggPSAnL3Vzci9sb2NhbC9nb29nbGVfYXBwZW5naW5lJwpA
QCAtNTksMTcgKzY0LDEyIEBAIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgICAgIGZy
b20gZ29vZ2xlLmFwcGVuZ2luZS5kaXN0IGltcG9ydCB1c2VfbGlicmFyeQogICAgICAgICB1c2Vf
bGlicmFyeSgnZGphbmdvJywgJzEuMicpCiAgICAgICAgIGRldl9hcHBzZXJ2ZXIuZml4X3N5c19w
YXRoKCkKLSAgICAgICAgZGlycy5hcHBlbmQob3MucGF0aC5qb2luKHdlYmtpdF9yb290LCAnVG9v
bHMnLCAnUXVldWVTdGF0dXNTZXJ2ZXInKSkKKyAgICAgICAgdGVzdGVyLmFkZF90cmVlKG9zLnBh
dGguam9pbih3ZWJraXRfcm9vdCwgJ1Rvb2xzJywgJ1F1ZXVlU3RhdHVzU2VydmVyJyksICcnKQog
ICAgIGVsc2U6CiAgICAgICAgIF9sb2cuaW5mbygnU2tpcHBpbmcgUXVldWVTdGF0dXNTZXJ2ZXIg
dGVzdHM7IHRoZSBHb29nbGUgQXBwRW5naW5lIFB5dGhvbiBTREsgaXMgbm90IGluc3RhbGxlZC4n
KQogCi0gICAgbWFpbi5UZXN0ZXIuY2xlYW5fcGFja2FnZXMoZGlycykKLQotICAgIHRlc3RlciA9
IG1haW4uVGVzdGVyKCkKLSAgICBvcHRpb25zLCBhcmdzID0gdGVzdGVyLnBhcnNlX2FyZ3Moc3lz
LmFyZ3YpCi0gICAgdGVzdGVyLmNvbmZpZ3VyZShvcHRpb25zKQotCi0gICAgIyBNYWtlIHN1cmUg
UFlUSE9OUEFUSCBpcyBzZXQgdXAgY29ycmVjdGx5IHNvIHRoYXQgYWxsIG9mIHRoZSBpbXBvcnRz
IHdpbGwgd29yay4KLSAgICBzeXMucGF0aCA9IFtkIGZvciBkIGluIGRpcnMgaWYgZCBub3QgaW4g
c3lzLnBhdGhdICsgc3lzLnBhdGgKLQotICAgIHN5cy5leGl0KG5vdCB0ZXN0ZXIucnVuKGRpcnMs
IGFyZ3MpKQorICAgIHRyeToKKyAgICAgICAgc3lzLmV4aXQobm90IHRlc3Rlci5ydW4oYXJncykp
CisgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICBzeXMuc3RkZXJyLndyaXRl
KCdJbnRlcnJ1cHRlZCwgZXhpdGluZ1xuJykKKyAgICAgICAgc3lzLmV4aXQoMSkKZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9tYWluLnB5IGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS90ZXN0L21haW4ucHkKaW5kZXggNzZkYWMwZTNiNDVkZTI4ODhhYzM5OWI4Zjk4OGNk
OTExMWUxMTY5Ni4uMTRjMDAxMmYzNDUwZjNiMzZkYjgyZTg4ZjFhMmQ4YmYyNjdmNmNlMiAxMDA2
NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90ZXN0L21haW4ucHkKKysrIGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS90ZXN0L21haW4ucHkKQEAgLTEsMyArMSw0IEBACisjIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIyBDb3B5cmlnaHQg
KEMpIDIwMTAgQ2hyaXMgSmVyZG9uZWsgKGNqZXJkb25la0B3ZWJraXQub3JnKQogIwogIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKQEAgLTI1LDgyICsyNiwxMzUgQEAKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3B0cGFy
c2UKIGltcG9ydCBvcworaW1wb3J0IHBkYgoraW1wb3J0IHJlCiBpbXBvcnQgU3RyaW5nSU8KIGlt
cG9ydCBzeXMKK2ltcG9ydCB0aW1lCiBpbXBvcnQgdHJhY2ViYWNrCiBpbXBvcnQgdW5pdHRlc3QK
IAogIyBOT1RFOiBXZSBpbnRlbnRpb25hbGx5IGRvIG5vdCBkZXBlbmQgb24gYW55dGhpbmcgZWxz
ZSBpbiB3ZWJraXRweSBoZXJlIHRvIGF2b2lkIGJyZWFraW5nIHRlc3Qtd2Via2l0cHkuCitmcm9t
IHdlYmtpdHB5LmxheW91dF90ZXN0cy5jb250cm9sbGVycyBpbXBvcnQgbWFuYWdlcl93b3JrZXJf
YnJva2VyCiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKIAogCi1jbGFzcyBU
ZXN0ZXIob2JqZWN0KToKLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGNsZWFuX3BhY2thZ2Vz
KGRpcnMpOgotICAgICAgICAiIiJEZWxldGUgYWxsIC5weWMgZmlsZXMgdW5kZXIgZGlycyB0aGF0
IGhhdmUgbm8gLnB5IGZpbGUuIiIiCi0gICAgICAgIGZvciBkaXJfdG9fY2xlYW4gaW4gZGlyczoK
LSAgICAgICAgICAgIF9sb2cuZGVidWcoIkNsZWFuaW5nIG9ycGhhbmVkICoucHljIGZpbGVzIGZy
b206ICVzIiAlIGRpcl90b19jbGVhbikKLSAgICAgICAgICAgIGZvciBkaXJfcGF0aCwgZGlyX25h
bWVzLCBmaWxlX25hbWVzIGluIG9zLndhbGsoZGlyX3RvX2NsZWFuKToKLSAgICAgICAgICAgICAg
ICBmb3IgZmlsZV9uYW1lIGluIGZpbGVfbmFtZXM6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGZp
bGVfbmFtZS5lbmRzd2l0aCgiLnB5YyIpIGFuZCBmaWxlX25hbWVbOi0xXSBub3QgaW4gZmlsZV9u
YW1lczoKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihk
aXJfcGF0aCwgZmlsZV9uYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgX2xvZy5pbmZvKCJE
ZWxldGluZyBvcnBoYW4gKi5weWMgZmlsZTogJXMiICUgZmlsZV9wYXRoKQotICAgICAgICAgICAg
ICAgICAgICAgICAgb3MucmVtb3ZlKGZpbGVfcGF0aCkKK1RFU1RfREVTQ1JJUFRJT05fUkVHRVhQ
ID0gcmUuY29tcGlsZSgiKFx3KykgXCgoW1x3Ll0rKVwpIikKIAotICAgIGRlZiBfX2luaXRfXyhz
ZWxmKToKLSAgICAgICAgc2VsZi5fdmVyYm9zaXR5ID0gMQogCi0gICAgZGVmIHBhcnNlX2FyZ3Mo
c2VsZiwgYXJndik6CitkZWYgX3Rlc3RfbmFtZSh0ZXN0KToKKyAgICBtID0gVEVTVF9ERVNDUklQ
VElPTl9SRUdFWFAubWF0Y2goc3RyKHRlc3QpKQorICAgIHJldHVybiAiJXMuJXMiICUgKG0uZ3Jv
dXAoMiksIG0uZ3JvdXAoMSkpCisKKworY2xhc3MgVGVzdFRyZWUob2JqZWN0KToKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgdG9wX2RpcmVjdG9yeSwgc3RhcnRpbmdfc3ViZGlyZWN0b3J5LCBpZ25v
cmVfbGlzdCk6CisgICAgICAgIHNlbGYudG9wX2RpcmVjdG9yeSA9IG9zLnBhdGgucmVhbHBhdGgo
dG9wX2RpcmVjdG9yeSkKKyAgICAgICAgc2VsZi5zZWFyY2hfZGlyZWN0b3J5ID0gc2VsZi50b3Bf
ZGlyZWN0b3J5CisgICAgICAgIHNlbGYuaWdub3JlX2xpc3QgPSBbb3MucGF0aC5qb2luKHNlbGYu
dG9wX2RpcmVjdG9yeSwgeCkgZm9yIHggaW4gaWdub3JlX2xpc3RdCisgICAgICAgIHNlbGYudG9w
X3BhY2thZ2UgPSAnJworICAgICAgICBpZiBzdGFydGluZ19zdWJkaXJlY3Rvcnk6CisgICAgICAg
ICAgICBzZWxmLnRvcF9wYWNrYWdlID0gc3RhcnRpbmdfc3ViZGlyZWN0b3J5LnJlcGxhY2Uob3Mu
c2VwLCAnLicpICsgJy4nCisgICAgICAgICAgICBzZWxmLnNlYXJjaF9kaXJlY3RvcnkgPSBvcy5w
YXRoLmpvaW4oc2VsZi50b3BfZGlyZWN0b3J5LCBzdGFydGluZ19zdWJkaXJlY3RvcnkpCisKKyAg
ICBkZWYgY2xlYW4oc2VsZik6CisgICAgICAgICIiIkRlbGV0ZSBhbGwgLnB5YyBmaWxlcyBpbiB0
aGUgdHJlZSB0aGF0IGhhdmUgbm8gbWF0Y2hpbmcgLnB5IGZpbGUuIiIiCisgICAgICAgIF9sb2cu
ZGVidWcoIkNsZWFuaW5nIG9ycGhhbmVkICoucHljIGZpbGVzIGZyb206ICVzIiAlIHNlbGYuc2Vh
cmNoX2RpcmVjdG9yeSkKKyAgICAgICAgZm9yIGRpcl9wYXRoLCBkaXJfbmFtZXMsIGZpbGVfbmFt
ZXMgaW4gb3Mud2FsayhzZWxmLnNlYXJjaF9kaXJlY3RvcnkpOgorICAgICAgICAgICAgIyBGSVhN
RTogU2hvdWxkIHdlIGJlIGNsZWFuaW5nIHRoZSBpZ25vcmVkIHN1YmRpcmVjdG9yaWVzIGFzIHdl
bGw/CisgICAgICAgICAgICBmb3IgZmlsZV9uYW1lIGluIGZpbGVfbmFtZXM6CisgICAgICAgICAg
ICAgICAgaWYgZmlsZV9uYW1lLmVuZHN3aXRoKCIucHljIikgYW5kIGZpbGVfbmFtZVs6LTFdIG5v
dCBpbiBmaWxlX25hbWVzOgorICAgICAgICAgICAgICAgICAgICBmaWxlX3BhdGggPSBvcy5wYXRo
LmpvaW4oZGlyX3BhdGgsIGZpbGVfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgX2xvZy5pbmZv
KCJEZWxldGluZyBvcnBoYW4gKi5weWMgZmlsZTogJXMiICUgZmlsZV9wYXRoKQorICAgICAgICAg
ICAgICAgICAgICBvcy5yZW1vdmUoZmlsZV9wYXRoKQorCisgICAgZGVmIGZpbmRfbW9kdWxlcyhz
ZWxmLCBkaXJfdG9fc2VhcmNoLCBzdWZmaXhlcyk6CisgICAgICAgIG1vZHVsZXMgPSBbXQorICAg
ICAgICBmb3IgZGlyX3BhdGgsIF8sIGZpbGVuYW1lcyBpbiBvcy53YWxrKGRpcl90b19zZWFyY2gp
OgorICAgICAgICAgICAgZGlyX3BhdGggPSBvcy5wYXRoLmpvaW4oZGlyX3BhdGgsICcnKQorICAg
ICAgICAgICAgcGFja2FnZSA9IGRpcl9wYXRoLnJlcGxhY2Uoc2VsZi50b3BfZGlyZWN0b3J5ICsg
b3Muc2VwLCAnJykucmVwbGFjZShvcy5zZXAsICcuJykKKyAgICAgICAgICAgIGZvciBmIGluIGZp
bGVuYW1lczoKKyAgICAgICAgICAgICAgICBpZiBhbnkoZi5lbmRzd2l0aChzdWZmaXgpIGZvciBz
dWZmaXggaW4gc3VmZml4ZXMpOgorICAgICAgICAgICAgICAgICAgICBtb2R1bGVzLmFwcGVuZChw
YWNrYWdlICsgZi5yZXBsYWNlKCcucHknLCAnJykpCisgICAgICAgIHJldHVybiBtb2R1bGVzCisK
KworY2xhc3MgTG9hZGVyRXJyb3IoRXhjZXB0aW9uKToKKyAgICBwYXNzCisKKworY2xhc3MgVGVz
dGVyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0cmVhbSk6CisgICAgICAgIHNl
bGYudHJlZXMgPSBbXQorICAgICAgICBzZWxmLmxvYWRlciA9IE5vbmUKKyAgICAgICAgc2VsZi5y
dW5uZXIgPSBOb25lCisgICAgICAgIHNlbGYubG9nX2xldmVsID0gbG9nZ2luZy5JTkZPCisgICAg
ICAgIHNlbGYuc3RyZWFtID0gc3RyZWFtCisKKyAgICBkZWYgcGFyc2VfYXJncyhzZWxmLCBhcmd2
PU5vbmUpOgogICAgICAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodXNhZ2U9J3Vz
YWdlOiAlcHJvZyBbb3B0aW9uc10gW2FyZ3MuLi5dJykKLSAgICAgICAgcGFyc2VyLmFkZF9vcHRp
b24oJy1hJywgJy0tYWxsJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncnVuIGFsbCB0aGUgdGVzdHMnKSwKLSAgICAg
ICAgcGFyc2VyLmFkZF9vcHRpb24oJy1jJywgJy0tY292ZXJhZ2UnLCBhY3Rpb249J3N0b3JlX3Ry
dWUnLCBkZWZhdWx0PUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdnZW5l
cmF0ZSBjb2RlIGNvdmVyYWdlIGluZm8gKHJlcXVpcmVzIGh0dHA6Ly9weXBpLnB5dGhvbi5vcmcv
cHlwaS9jb3ZlcmFnZSknKSwKLSAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1xJywgJy0tcXVp
ZXQnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICBoZWxwPSdydW4gcXVpZXRseSAoZXJyb3JzLCB3YXJuaW5ncywgYW5kIHByb2dy
ZXNzIG9ubHkpJyksCi0gICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCctcycsICctLXNpbGVudCcs
IGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgIGhlbHA9J3J1biBzaWxlbnRseSAoZXJyb3JzIGFuZCB3YXJuaW5ncyBvbmx5KScpLAot
ICAgICAgICBwYXJzZXIuYWRkX29wdGlvbignLXgnLCAnLS14bWwnLCBhY3Rpb249J3N0b3JlX3Ry
dWUnLCBkZWZhdWx0PUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdvdXRw
dXQgeFVuaXQtc3R5bGUgWE1MIG91dHB1dCcpCi0gICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCct
dicsICctLXZlcmJvc2UnLCBhY3Rpb249J2NvdW50JywgZGVmYXVsdD0wLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICBoZWxwPSd2ZXJib3NlIG91dHB1dCAoc3BlY2lmeSBvbmNlIGZvciBpbmRp
dmlkdWFsIHRlc3QgcmVzdWx0cywgdHdpY2UgZm9yIGRlYnVnIG1lc3NhZ2VzKScpCi0gICAgICAg
IHBhcnNlci5hZGRfb3B0aW9uKCctLXNraXAtaW50ZWdyYXRpb250ZXN0cycsIGFjdGlvbj0nc3Rv
cmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9
J2RvIG5vdCBydW4gdGhlIGludGVncmF0aW9uIHRlc3RzJykKLQotICAgICAgICBwYXJzZXIuZXBp
bG9nID0gKCdbYXJncy4uLl0gaXMgYW4gb3B0aW9uYWwgbGlzdCBvZiBtb2R1bGVzLCB0ZXN0X2Ns
YXNzZXMsIG9yIGluZGl2aWR1YWwgdGVzdHMuICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAn
SWYgbm8gYXJncyBhcmUgZ2l2ZW4sIGFsbCB0aGUgdGVzdHMgd2lsbCBiZSBydW4uJykKLQotICAg
ICAgICBzZWxmLnByb2dOYW1lID0gb3MucGF0aC5iYXNlbmFtZShhcmd2WzBdKQotICAgICAgICBy
ZXR1cm4gcGFyc2VyLnBhcnNlX2FyZ3MoYXJndlsxOl0pCisgICAgICAgIGdyb3VwID0gb3B0cGFy
c2UuT3B0aW9uR3JvdXAocGFyc2VyLCAnT3B0aW9ucyBmb3IgY29udHJvbGxpbmcgd2hhdCBpcyBw
cmludGVkJykKKyAgICAgICAgZ3JvdXAuYWRkX29wdGlvbignLXEnLCAnLS1xdWlldCcsIGFjdGlv
bj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAg
aGVscD0ncnVuIHF1aWV0bHkgKGVycm9ycywgd2FybmluZ3MsIGFuZCBwcm9ncmVzcyBvbmx5KScp
LAorICAgICAgICBncm91cC5hZGRfb3B0aW9uKCctdCcsICctLXRpbWluZycsIGFjdGlvbj0nc3Rv
cmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0n
ZGlzcGxheSBwZXItdGVzdCB0aW1pbmcgaW5mbycpLAorICAgICAgICBncm91cC5hZGRfb3B0aW9u
KCctdicsICctLXZlcmJvc2UnLCBhY3Rpb249J2NvdW50JywgZGVmYXVsdD0wLAorICAgICAgICAg
ICAgICAgICAgICAgICAgIGhlbHA9J3ZlcmJvc2Ugb3V0cHV0IChzcGVjaWZ5IG9uY2UgZm9yIGlu
ZGl2aWR1YWwgdGVzdCByZXN1bHRzLCB0d2ljZSBmb3IgZGVidWcgbWVzc2FnZXMpJykKKyAgICAg
ICAgZ3JvdXAuYWRkX29wdGlvbignLXgnLCAnLS14bWwnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBk
ZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J291dHB1dCB4VW5p
dC1zdHlsZSBYTUwgb3V0cHV0IGludG8gJFBXRC90ZXN0LXdlYmtpdHB5LXhtbC1yZXBvcnRzLycp
CisgICAgICAgIGdyb3VwLmFkZF9vcHRpb24oJy1jJywgJy0tY292ZXJhZ2UnLCBhY3Rpb249J3N0
b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9
J2dlbmVyYXRlIGNvZGUgY292ZXJhZ2UgcmVwb3J0IChhdXRvaW5zdGFsbHMgaHR0cDovL3B5cGku
cHl0aG9uLm9yZy9weXBpL2NvdmVyYWdlKScpCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uX2dy
b3VwKGdyb3VwKQorCisgICAgICAgICMgRklYTUU6IFdlIG5lZWQgdG8gdW5pZnkgdGhlc2UgdHdv
IHR5cGVzIG9mIHRlc3RzIGFuZCBtYWtlIHRoZW0gY29uc2lzdGVudC4KKyAgICAgICAgZ3JvdXAg
PSBvcHRwYXJzZS5PcHRpb25Hcm91cChwYXJzZXIsICdPcHRpb25zIGZvciBjb250cm9sbGluZyB3
aGljaCB0ZXN0cyBhcmUgcnVuJykKKyAgICAgICAgZ3JvdXAuYWRkX29wdGlvbignLS1za2lwLWlu
dGVncmF0aW9udGVzdHMnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2RvIG5vdCBydW4gdGhlICJpbnRlZ3JhdGlvbiIg
KHNsb3dlcikgdGVzdHMnKQorICAgICAgICBncm91cC5hZGRfb3B0aW9uKCctaScsICctLXJ1bi1y
ZWFsLWludGVncmF0aW9udGVzdHMnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNl
LAorICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2Fsc28gcnVuIHRoZSAicmVhbCIgaW50
ZWdyYXRpb24gdGVzdHMgKG5vcm1hbGx5IHNraXBwZWQpJykKKyAgICAgICAgZ3JvdXAuYWRkX29w
dGlvbignLWEnLCAnLS1hbGwnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3J1biBhbGwgdGhlIHRlc3RzLCBpbmNsdWRp
bmcgdGhvc2Ugbm9ybWFsbHkgc2tpcHBlZCcpLAorICAgICAgICBwYXJzZXIuYWRkX29wdGlvbl9n
cm91cChncm91cCkKKworICAgICAgICBwYXJzZXIuZXBpbG9nID0gKCdbYXJncy4uLl0gaXMgYW4g
b3B0aW9uYWwgbGlzdCBvZiBtb2R1bGVzLCB0ZXN0X2NsYXNzZXMsIG9yIGluZGl2aWR1YWwgdGVz
dHMgdG8gcnVuIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgc2V0LicpCisKKyAgICAgICAgcmV0dXJu
IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3YpCiAKICAgICBkZWYgY29uZmlndXJlKHNlbGYsIG9wdGlv
bnMpOgotICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucwotCi0gICAgICAgIGlmIG9wdGlv
bnMuc2lsZW50OgotICAgICAgICAgICAgc2VsZi5fdmVyYm9zaXR5ID0gMAotICAgICAgICAgICAg
c2VsZi5fY29uZmlndXJlX2xvZ2dpbmcobG9nZ2luZy5XQVJOSU5HKQotICAgICAgICBlbGlmIG9w
dGlvbnMucXVpZXQ6Ci0gICAgICAgICAgICBzZWxmLl92ZXJib3NpdHkgPSAxCi0gICAgICAgICAg
ICBzZWxmLl9jb25maWd1cmVfbG9nZ2luZyhsb2dnaW5nLldBUk5JTkcpCi0gICAgICAgIGVsaWYg
b3B0aW9ucy52ZXJib3NlID09IDA6Ci0gICAgICAgICAgICBzZWxmLl92ZXJib3NpdHkgPSAxCi0g
ICAgICAgICAgICBzZWxmLl9jb25maWd1cmVfbG9nZ2luZyhsb2dnaW5nLklORk8pCi0gICAgICAg
IGVsaWYgb3B0aW9ucy52ZXJib3NlID09IDE6Ci0gICAgICAgICAgICBzZWxmLl92ZXJib3NpdHkg
PSAyCi0gICAgICAgICAgICBzZWxmLl9jb25maWd1cmVfbG9nZ2luZyhsb2dnaW5nLklORk8pCi0g
ICAgICAgIGVsaWYgb3B0aW9ucy52ZXJib3NlID09IDI6Ci0gICAgICAgICAgICBzZWxmLl92ZXJi
b3NpdHkgPSAyCi0gICAgICAgICAgICBzZWxmLl9jb25maWd1cmVfbG9nZ2luZyhsb2dnaW5nLkRF
QlVHKQotCi0gICAgZGVmIF9jb25maWd1cmVfbG9nZ2luZyhzZWxmLCBsb2dfbGV2ZWwpOgorICAg
ICAgICBzZWxmLm9wdGlvbnMgPSBvcHRpb25zCisKKyAgICAgICAgc2VsZi5sb2FkZXIgPSBUZXN0
TG9hZGVyKCkKKyAgICAgICAgc2VsZi5sb2FkZXIucnVuX3JlYWxfaW50ZWdyYXRpb25fdGVzdHMg
PSBvcHRpb25zLnJ1bl9yZWFsX2ludGVncmF0aW9udGVzdHMgb3Igb3B0aW9ucy5hbGwKKyAgICAg
ICAgaWYgc2VsZi5vcHRpb25zLnhtbDoKKyAgICAgICAgICAgIGZyb20gd2Via2l0cHkudGhpcmRw
YXJ0eS5hdXRvaW5zdGFsbGVkLnhtbHJ1bm5lciBpbXBvcnQgWE1MVGVzdFJ1bm5lcgorICAgICAg
ICAgICAgc2VsZi5ydW5uZXIgPSBYTUxUZXN0UnVubmVyKG91dHB1dD0ndGVzdC13ZWJraXRweS14
bWwtcmVwb3J0cycpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnJ1bm5lciA9IFRl
c3RSdW5uZXIoc2VsZi5zdHJlYW0sIG9wdGlvbnMsIHN0YXJ0PXRpbWUudGltZSgpKQorCisgICAg
ZGVmIGNvbmZpZ3VyZV9sb2dnaW5nKHNlbGYpOgogICAgICAgICAiIiJDb25maWd1cmUgdGhlIHJv
b3QgbG9nZ2VyLgogCiAgICAgICAgIENvbmZpZ3VyZSB0aGUgcm9vdCBsb2dnZXIgbm90IHRvIGxv
ZyBhbnkgbWVzc2FnZXMgZnJvbSB3ZWJraXRweSAtLQogICAgICAgICBleGNlcHQgZm9yIG1lc3Nh
Z2VzIGZyb20gdGhlIGF1dG9pbnN0YWxsIG1vZHVsZS4gIEFsc28gc2V0IHRoZQogICAgICAgICBs
b2dnaW5nIGxldmVsIGFzIGRlc2NyaWJlZCBiZWxvdy4KICAgICAgICAgIiIiCi0gICAgICAgIGhh
bmRsZXIgPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoc3lzLnN0ZGVycikKKyAgICAgICAgbWVzc2Fn
ZXMgPSBbXQorCisgICAgICAgIGlmIHNlbGYub3B0aW9ucy50aW1pbmcgYW5kIG5vdCBzZWxmLm9w
dGlvbnMudmVyYm9zZToKKyAgICAgICAgICAgIHNlbGYub3B0aW9ucy52ZXJib3NlID0gMQorICAg
ICAgICAgICAgbWVzc2FnZXMuYXBwZW5kKChsb2dnaW5nLklORk8sICctLXRpbWluZyBpbXBsaWVz
IC0tdmVyYm9zZScpKQorCisgICAgICAgIHNlbGYubG9nX2xldmVsID0gbG9nZ2luZy5JTkZPCisg
ICAgICAgIGlmIHNlbGYub3B0aW9ucy52ZXJib3NlOgorICAgICAgICAgICAgaWYgc2VsZi5vcHRp
b25zLnF1aWV0OgorICAgICAgICAgICAgICAgIG1lc3NhZ2VzLmFwcGVuZCgobG9nZ2luZy5XQVJO
SU5HLCAnLS12ZXJib3NlIG92ZXJyaWRlcyAtLXF1aWV0JykpCisgICAgICAgICAgICBpZiBzZWxm
Lm9wdGlvbnMudmVyYm9zZSA+IDE6CisgICAgICAgICAgICAgICAgc2VsZi5sb2dfbGV2ZWwgPSBs
b2dnaW5nLkRFQlVHCisgICAgICAgIGVsaWYgc2VsZi5vcHRpb25zLnF1aWV0OgorICAgICAgICAg
ICAgc2VsZi5sb2dfbGV2ZWwgPSBsb2dnaW5nLldBUk5JTkcKKworICAgICAgICBoYW5kbGVyID0g
bG9nZ2luZy5TdHJlYW1IYW5kbGVyKHNlbGYuc3RyZWFtKQogICAgICAgICAjIFdlIGNvbnN0cmFp
biB0aGUgbGV2ZWwgb24gdGhlIGhhbmRsZXIgcmF0aGVyIHRoYW4gb24gdGhlIHJvb3QKICAgICAg
ICAgIyBsb2dnZXIgaXRzZWxmLiAgVGhpcyBpcyBwcm9iYWJseSBiZXR0ZXIgYmVjYXVzZSB0aGUg
aGFuZGxlciBpcwogICAgICAgICAjIGNvbmZpZ3VyZWQgYW5kIGtub3duIG9ubHkgdG8gdGhpcyBt
b2R1bGUsIHdoZXJlYXMgdGhlIHJvb3QgbG9nZ2VyCkBAIC0xMDgsNyArMTYyLDcgQEAgY2xhc3Mg
VGVzdGVyKG9iamVjdCk6CiAgICAgICAgICMgTW9kaWZ5aW5nIHRoZSBoYW5kbGVyLCB0aGVuLCBp
cyBsZXNzIGludHJ1c2l2ZSBhbmQgbGVzcyBsaWtlbHkgdG8KICAgICAgICAgIyBpbnRlcmZlcmUg
d2l0aCBtb2RpZmljYXRpb25zIG1hZGUgYnkgb3RoZXIgbW9kdWxlcyAoZS5nLiBpbiB1bml0CiAg
ICAgICAgICMgdGVzdHMpLgotICAgICAgICBoYW5kbGVyLnNldExldmVsKGxvZ19sZXZlbCkKKyAg
ICAgICAgaGFuZGxlci5zZXRMZXZlbChzZWxmLmxvZ19sZXZlbCkKICAgICAgICAgZm9ybWF0dGVy
ID0gbG9nZ2luZy5Gb3JtYXR0ZXIoIiUobWVzc2FnZSlzIikKICAgICAgICAgaGFuZGxlci5zZXRG
b3JtYXR0ZXIoZm9ybWF0dGVyKQogCkBAIC0xMzYsMTEyICsxOTAsMzA5IEBAIGNsYXNzIFRlc3Rl
cihvYmplY3QpOgogICAgICAgICB0ZXN0aW5nX2ZpbHRlciA9IGxvZ2dpbmcuRmlsdGVyKCkKICAg
ICAgICAgdGVzdGluZ19maWx0ZXIuZmlsdGVyID0gZmlsdGVyCiAKKyAgICAgICAgZm9yIGxldmVs
LCBtc2cgaW4gbWVzc2FnZXM6CisgICAgICAgICAgICBfbG9nLmxvZyhsZXZlbCwgbXNnKQorCiAg
ICAgICAgICMgRGlzcGxheSBhIG1lc3NhZ2Ugc28gZGV2ZWxvcGVycyBhcmUgbm90IG15c3RpZmll
ZCBhcyB0byB3aHkKICAgICAgICAgIyBsb2dnaW5nIGRvZXMgbm90IHdvcmsgaW4gdGhlIHVuaXQg
dGVzdHMuCiAgICAgICAgIF9sb2cuaW5mbygiU3VwcHJlc3NpbmcgbW9zdCB3ZWJraXRweSBsb2dn
aW5nIHdoaWxlIHJ1bm5pbmcgdW5pdCB0ZXN0cy4iKQogICAgICAgICBoYW5kbGVyLmFkZEZpbHRl
cih0ZXN0aW5nX2ZpbHRlcikKIAotICAgIGRlZiBydW4oc2VsZiwgZGlycywgYXJncyk6Ci0gICAg
ICAgIGFyZ3MgPSBhcmdzIG9yIHNlbGYuX2ZpbmRfbW9kdWxlcyhkaXJzKQotICAgICAgICByZXR1
cm4gc2VsZi5fcnVuX3Rlc3RzKGRpcnMsIGFyZ3MpCi0KLSAgICBkZWYgX2ZpbmRfbW9kdWxlcyhz
ZWxmLCBkaXJzKToKLSAgICAgICAgbW9kdWxlcyA9IFtdCi0gICAgICAgIGZvciBkaXJfdG9fc2Vh
cmNoIGluIGRpcnM6Ci0gICAgICAgICAgICBtb2R1bGVzLmV4dGVuZChzZWxmLl9maW5kX21vZHVs
ZXNfdW5kZXIoZGlyX3RvX3NlYXJjaCwgJ191bml0dGVzdC5weScpKQotICAgICAgICAgICAgaWYg
bm90IHNlbGYuX29wdGlvbnMuc2tpcF9pbnRlZ3JhdGlvbnRlc3RzOgotICAgICAgICAgICAgICAg
IG1vZHVsZXMuZXh0ZW5kKHNlbGYuX2ZpbmRfbW9kdWxlc191bmRlcihkaXJfdG9fc2VhcmNoLCAn
X2ludGVncmF0aW9udGVzdC5weScpKQotICAgICAgICBtb2R1bGVzLnNvcnQoKQotCi0gICAgICAg
IGZvciBtb2R1bGUgaW4gbW9kdWxlczoKLSAgICAgICAgICAgIF9sb2cuZGVidWcoIkZvdW5kOiAl
cyIgJSBtb2R1bGUpCi0KLSAgICAgICAgIyBGSVhNRTogRmlndXJlIG91dCBob3cgdG8gbW92ZSB0
aGlzIHRvIHRlc3Qtd2Via2l0cHkgaW4gb3JkZXIgdG8gdG8gbWFrZSB0aGlzIGZpbGUgbW9yZSBn
ZW5lcmljLgotICAgICAgICBpZiBub3Qgc2VsZi5fb3B0aW9ucy5hbGw6Ci0gICAgICAgICAgICBz
bG93X3Rlc3RzID0gKCd3ZWJraXRweS5jb21tb24uY2hlY2tvdXQuc2NtLnNjbV91bml0dGVzdCcs
KQotICAgICAgICAgICAgc2VsZi5fZXhjbHVkZShtb2R1bGVzLCBzbG93X3Rlc3RzLCAnYXJlIHJl
YWxseSwgcmVhbGx5IHNsb3cnLCAzMTgxOCkKLQotICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3Jt
ID09ICd3aW4zMic6Ci0gICAgICAgICAgICAgICAgd2luMzJfYmxhY2tsaXN0ID0gKCd3ZWJraXRw
eS5jb21tb24uY2hlY2tvdXQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
d2Via2l0cHkuY29tbW9uLmNvbmZpZycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICd3ZWJraXRweS50b29sJykKLSAgICAgICAgICAgICAgICBzZWxmLl9leGNsdWRlKG1vZHVs
ZXMsIHdpbjMyX2JsYWNrbGlzdCwgJ2ZhaWwgaG9ycmlibHkgb24gd2luMzInLCA1NDUyNikKLQor
ICAgIGRlZiBhZGRfdHJlZShzZWxmLCB0b3BfZGlyZWN0b3J5LCBzdGFydGluZ19zdWJkaXJlY3Rv
cnk9Tm9uZSwgaWdub3JlX2xpc3Q9Tm9uZSk6CisgICAgICAgIHNlbGYudHJlZXMuYXBwZW5kKFRl
c3RUcmVlKHRvcF9kaXJlY3RvcnksIHN0YXJ0aW5nX3N1YmRpcmVjdG9yeSwgaWdub3JlX2xpc3Qg
b3IgW10pKQorCisgICAgZGVmIHJ1bihzZWxmLCBhcmdzKToKKyAgICAgICAgc2VsZi5fY2xlYW5f
dHJlZXMoKQorICAgICAgICBzZWxmLl9maXhfcGF0aCgpCisKKyAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgY292ID0gTm9uZQorICAgICAgICAgICAgaWYgc2VsZi5vcHRpb25zLmNvdmVyYWdlOgor
ICAgICAgICAgICAgICAgIGNvdiA9IHNlbGYuX2NvdmVyYWdlX29iamVjdCgpCisgICAgICAgICAg
ICAgICAgY292LnN0YXJ0KCkKKworICAgICAgICAgICAgX2xvZy5kZWJ1ZygiTG9hZGluZyB0aGUg
dGVzdHMuLi4iKQorICAgICAgICAgICAgaWYgYXJnczoKKyAgICAgICAgICAgICAgICB0ZXN0cyA9
IFtdCisgICAgICAgICAgICAgICAgZm9yIGFyZyBpbiBhcmdzOgorICAgICAgICAgICAgICAgICAg
ICB0ZXN0cy5leHRlbmQoc2VsZi5fZmluZF90ZXN0c19mb3IoYXJnKSkKKyAgICAgICAgICAgIGVs
c2U6CisgICAgICAgICAgICAgICAgIyBGSVhNRTogQ29uc2lkZXIgcnVubmluZyBlYWNoIHRyZWUg
c2VwYXJhdGVseSB0byBhdm9pZCBuYW1lc3BhY2UgY2xhc2hlcy4KKyAgICAgICAgICAgICAgICB0
ZXN0cyA9IHNlbGYuX2RlZmF1bHRfdGVzdHMoKQorCisgICAgICAgICAgICByZXN1bHQgPSBzZWxm
Ll9ydW5fdGVzdHModGVzdHMpCisgICAgICAgICAgICBpZiBjb3Y6CisgICAgICAgICAgICAgICAg
Y292LnN0b3AoKQorICAgICAgICAgICAgICAgIGNvdi5yZXBvcnQoc2hvd19taXNzaW5nPUZhbHNl
KQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC53YXNTdWNjZXNzZnVsCisKKyAgICAgICAgZXhj
ZXB0IExvYWRlckVycm9yLCBlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYg
X2ZpeF9wYXRoKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSBQWVRIT05QQVRIIGlzIHNldCB1
cCBjb3JyZWN0bHkuCisgICAgICAgIHN5cy5wYXRoID0gW3RyZWUudG9wX2RpcmVjdG9yeSBmb3Ig
dHJlZSBpbiBzZWxmLnRyZWVzIGlmIHRyZWUudG9wX2RpcmVjdG9yeSBub3QgaW4gc3lzLnBhdGhd
ICsgc3lzLnBhdGgKKworICAgIGRlZiBfY2xlYW5fdHJlZXMoc2VsZik6CisgICAgICAgIGZvciB0
cmVlIGluIHNlbGYudHJlZXM6CisgICAgICAgICAgICB0cmVlLmNsZWFuKCkKKworICAgIGRlZiBf
Y292ZXJhZ2Vfb2JqZWN0KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpbXBvcnQg
d2Via2l0cHkudGhpcmRwYXJ0eS5hdXRvaW5zdGFsbGVkLmNvdmVyYWdlIGFzIGNvdmVyYWdlCisg
ICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciwgZToKKyAgICAgICAgICAgIF9sb2cuZXJyb3IoIkZh
aWxlZCB0byBpbXBvcnQgJ2NvdmVyYWdlJzsgY2FuJ3QgZ2VuZXJhdGUgY292ZXJhZ2UgbnVtYmVy
cy4iKQorICAgICAgICAgICAgcmFpc2UgTG9hZGVyRXJyb3IoKQorCisgICAgICAgIGluY2x1ZGUg
PSBbb3MucGF0aC5qb2luKHRyZWUuc2VhcmNoX2RpcmVjdG9yeSwgJyonKSBmb3IgdHJlZSBpbiBz
ZWxmLnRyZWVzXQorICAgICAgICBvbWl0ID0gW10KKyAgICAgICAgZm9yIHRyZWUgaW4gc2VsZi50
cmVlczoKKyAgICAgICAgICAgIGZvciBwYXRoIGluIHRyZWUuaWdub3JlX2xpc3Q6CisgICAgICAg
ICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihwYXRoKToKKyAgICAgICAgICAgICAgICAgICAgb21p
dC5hcHBlbmQob3MucGF0aC5qb2luKHBhdGgsICcqJykpCisgICAgICAgICAgICAgICAgZWxzZToK
KyAgICAgICAgICAgICAgICAgICAgb21pdC5hcHBlbmQocGF0aCkKKyAgICAgICAgcmV0dXJuIGNv
dmVyYWdlLmNvdmVyYWdlKGluY2x1ZGU9aW5jbHVkZSwgb21pdD1vbWl0KQorCisgICAgZGVmIF9m
aW5kX21vZHVsZXMoc2VsZiwgdHJlZSwgZGlyX3RvX3NlYXJjaCk6CisgICAgICAgIHN1ZmZpeGVz
ID0gKCdfdW5pdHRlc3QucHknLCAnX2ludGVncmF0aW9udGVzdC5weScpCisgICAgICAgIGlmIHNl
bGYub3B0aW9ucy5za2lwX2ludGVncmF0aW9udGVzdHM6CisgICAgICAgICAgICBzdWZmaXhlcyA9
ICgnX3VuaXR0ZXN0LnB5JywpCisgICAgICAgIHJldHVybiB0cmVlLmZpbmRfbW9kdWxlcyhkaXJf
dG9fc2VhcmNoLCBzdWZmaXhlcykKKworICAgIGRlZiBfZGVmYXVsdF90ZXN0cyhzZWxmKToKKyAg
ICAgICAgdGVzdHMgPSBbXQorICAgICAgICBmb3IgdHJlZSBpbiBzZWxmLnRyZWVzOgorICAgICAg
ICAgICAgdGVzdHMuZXh0ZW5kKHNlbGYuX2ZpbmRfbW9kdWxlcyh0cmVlLCB0cmVlLnNlYXJjaF9k
aXJlY3RvcnkpKQorICAgICAgICByZXR1cm4gdGVzdHMKKworICAgIGRlZiBfc2tpcF9tb2R1bGVz
KHNlbGYsIG1vZHVsZXMpOgorICAgICAgICAjIEZJWE1FOiBUaGVzZSBzaG91bGQgYmUgcmVwbGFj
ZWQgdy8gQHNsb3cgYW5kIEBza2lwX2lmIGRlY29yYXRvcnMKKyAgICAgICAgc2xvd190ZXN0cyA9
ICgnd2Via2l0cHkuY29tbW9uLmNoZWNrb3V0LnNjbS5zY21fdW5pdHRlc3QnLCkKKyAgICAgICAg
c2VsZi5fZXhjbHVkZShtb2R1bGVzLCBzbG93X3Rlc3RzLCAnYXJlIHJlYWxseSwgcmVhbGx5IHNs
b3cnLCAzMTgxOCkKKworICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICAg
ICAgICAgIHdpbjMyX2JsYWNrbGlzdCA9ICgnd2Via2l0cHkuY29tbW9uLmNoZWNrb3V0JywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dlYmtpdHB5LmNvbW1vbi5jb25maWcnLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2Via2l0cHkudG9vbCcpCisgICAgICAg
ICAgICBzZWxmLl9leGNsdWRlKG1vZHVsZXMsIHdpbjMyX2JsYWNrbGlzdCwgJ2ZhaWwgaG9ycmli
bHkgb24gd2luMzInLCA1NDUyNikKICAgICAgICAgcmV0dXJuIG1vZHVsZXMKIAogICAgIGRlZiBf
ZXhjbHVkZShzZWxmLCBtb2R1bGVzLCBtb2R1bGVfcHJlZml4ZXMsIHJlYXNvbiwgYnVnaWQpOgot
ICAgICAgICBfbG9nLmluZm8oJ1NraXBwaW5nIHRlc3RzIGluIHRoZSBmb2xsb3dpbmcgbW9kdWxl
cyBvciBwYWNrYWdlcyBiZWNhdXNlIHRoZXkgJXM6JyAlIHJlYXNvbikKKyAgICAgICAgc2tpcHBl
ZF9hbnkgPSBGYWxzZQogICAgICAgICBmb3IgcHJlZml4IGluIG1vZHVsZV9wcmVmaXhlczoKLSAg
ICAgICAgICAgIF9sb2cuaW5mbygnICAgICVzJyAlIHByZWZpeCkKICAgICAgICAgICAgIG1vZHVs
ZXNfdG9fZXhjbHVkZSA9IGZpbHRlcihsYW1iZGEgbTogbS5zdGFydHN3aXRoKHByZWZpeCksIG1v
ZHVsZXMpCi0gICAgICAgICAgICBmb3IgbSBpbiBtb2R1bGVzX3RvX2V4Y2x1ZGU6Ci0gICAgICAg
ICAgICAgICAgaWYgbGVuKG1vZHVsZXNfdG9fZXhjbHVkZSkgPiAxOgorICAgICAgICAgICAgaWYg
bW9kdWxlc190b19leGNsdWRlOgorICAgICAgICAgICAgICAgIGlmIG5vdCBza2lwcGVkX2FueToK
KyAgICAgICAgICAgICAgICAgICAgX2xvZy5pbmZvKCdTa2lwcGluZyB0ZXN0cyBpbiB0aGUgZm9s
bG93aW5nIG1vZHVsZXMgb3IgcGFja2FnZXMgYmVjYXVzZSB0aGV5ICVzOicgJSByZWFzb24pCisg
ICAgICAgICAgICAgICAgICAgIHNraXBwZWRfYW55ID0gVHJ1ZQorICAgICAgICAgICAgICAgIF9s
b2cuaW5mbygnICAgICVzJyAlIHByZWZpeCkKKyAgICAgICAgICAgICAgICBmb3IgbSBpbiBtb2R1
bGVzX3RvX2V4Y2x1ZGU6CiAgICAgICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoJyAgICAgICAg
JXMnICUgbSkKICAgICAgICAgICAgICAgICBtb2R1bGVzLnJlbW92ZShtKQotICAgICAgICBfbG9n
LmluZm8oJyAgICAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPSVkOyB1
c2UgLS1hbGwgdG8gaW5jbHVkZSknICUgYnVnaWQpCi0gICAgICAgIF9sb2cuaW5mbygnJykKLQot
ICAgIGRlZiBfZmluZF9tb2R1bGVzX3VuZGVyKHNlbGYsIGRpcl90b19zZWFyY2gsIHN1ZmZpeCk6
CiAKLSAgICAgICAgZGVmIHRvX3BhY2thZ2UoZGlyX3BhdGgpOgotICAgICAgICAgICAgcmV0dXJu
IGRpcl9wYXRoLnJlcGxhY2UoZGlyX3RvX3NlYXJjaCArIG9zLnNlcCwgJycpLnJlcGxhY2Uob3Mu
c2VwLCAnLicpCisgICAgICAgIGlmIHNraXBwZWRfYW55OgorICAgICAgICAgICAgX2xvZy5pbmZv
KCcgICAgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0lZDsgdXNlIC0t
YWxsIHRvIGluY2x1ZGUpJyAlIGJ1Z2lkKQorICAgICAgICAgICAgX2xvZy5pbmZvKCcnKQogCi0g
ICAgICAgIGRlZiB0b19tb2R1bGUoZmlsZW5hbWUsIHBhY2thZ2UpOgotICAgICAgICAgICAgcmV0
dXJuIHBhY2thZ2UgKyAnLicgKyBmaWxlbmFtZS5yZXBsYWNlKCcucHknLCAnJykKLQotICAgICAg
ICBtb2R1bGVzID0gW10KLSAgICAgICAgZm9yIGRpcl9wYXRoLCBfLCBmaWxlbmFtZXMgaW4gb3Mu
d2FsayhkaXJfdG9fc2VhcmNoKToKLSAgICAgICAgICAgIHBhY2thZ2UgPSB0b19wYWNrYWdlKGRp
cl9wYXRoKQotICAgICAgICAgICAgbW9kdWxlcy5leHRlbmQodG9fbW9kdWxlKGYsIHBhY2thZ2Up
IGZvciBmIGluIGZpbGVuYW1lcyBpZiBmLmVuZHN3aXRoKHN1ZmZpeCkpCi0gICAgICAgIHJldHVy
biBtb2R1bGVzCi0KLSAgICBkZWYgX3J1bl90ZXN0cyhzZWxmLCBkaXJzLCBhcmdzKToKLSAgICAg
ICAgaWYgc2VsZi5fb3B0aW9ucy5jb3ZlcmFnZToKKyAgICBkZWYgX2ZpbmRfdGVzdHNfZm9yKHNl
bGYsIG5hbWUpOgorICAgICAgICAodHJlZSwgc3RhcnRpbmdfZGlyZWN0b3J5KSA9IHNlbGYuX2Zp
bmRfdHJlZShuYW1lKQorICAgICAgICBpZiB0cmVlIGFuZCBub3Qgb3MucGF0aC5pc2ZpbGUoc3Rh
cnRpbmdfZGlyZWN0b3J5KToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9maW5kX21vZHVsZXMo
dHJlZSwgc3RhcnRpbmdfZGlyZWN0b3J5KQorICAgICAgICBlbGlmIG9zLnBhdGguZXhpc3RzKG5h
bWUpOgorICAgICAgICAgICAgcmV0dXJuIFtzZWxmLl90ZXN0X2Zyb21fcGF0aChuYW1lKV0KKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBbbmFtZV0KKworICAgIGRlZiBfdGVzdF9m
cm9tX3BhdGgoc2VsZiwgbmFtZSk6CisgICAgICAgICMgRmlyc3QsIGNoZWNrIHRvIHNlZSBpZiB3
ZSBjYW4gcmVzb2x2ZSB0aGUgcGF0aCByZWxhdGl2ZSB0byB0aGUgY3dkLgorICAgICAgICBmdWxs
X3BhdGggPSBvcy5wYXRoLnJlYWxwYXRoKG5hbWUpCisgICAgICAgIGZvciB0cmVlIGluIHNlbGYu
dHJlZXM6CisgICAgICAgICAgICAjIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIHdvcnJ5IGFib3V0IGNh
c2UtaW5zZW5zaXRpdml0eSBoZXJlPworICAgICAgICAgICAgaWYgZnVsbF9wYXRoLnN0YXJ0c3dp
dGgodHJlZS50b3BfZGlyZWN0b3J5KToKKyAgICAgICAgICAgICAgICByZXR1cm4gZnVsbF9wYXRo
LnJlcGxhY2UodHJlZS50b3BfZGlyZWN0b3J5ICsgb3Muc2VwLCAnJykucmVwbGFjZSgnLnB5Jywg
JycpLnJlcGxhY2Uob3Muc2VwLCAnLicpCisKKyAgICAgICAgZXJyID0gJyVzIGlzIG5vdCBpbiBv
bmUgb2YgdGhlIFdlYktpdCBweXRob24gdHJlZXMnICUgbmFtZQorICAgICAgICBfbG9nLmZhdGFs
KGVycikKKyAgICAgICAgcmFpc2UgTG9hZGVyRXJyb3IoZXJyKQorCisgICAgZGVmIF9zdWl0ZV9m
cm9tX25hbWUoc2VsZiwgbmFtZSk6CisgICAgICAgIGlmIHNlbGYuX2lzX21vZHVsZShuYW1lKToK
KyAgICAgICAgICAgICMgaW1wb3J0IG1vZHVsZXMgZXhwbGljaXRseSBiZWZvcmUgbG9hZGluZyB0
aGVpciB0ZXN0cyBiZWNhdXNlCisgICAgICAgICAgICAjIGxvYWRUZXN0c0Zyb21OYW1lKCkgcHJv
ZHVjZXMgbG91c3kgZXJyb3IgbWVzc2FnZXMgZm9yIGJhZCBtb2R1bGVzLgogICAgICAgICAgICAg
dHJ5OgotICAgICAgICAgICAgICAgIGltcG9ydCB3ZWJraXRweS50aGlyZHBhcnR5LmF1dG9pbnN0
YWxsZWQuY292ZXJhZ2UgYXMgY292ZXJhZ2UKKyAgICAgICAgICAgICAgICBfX2ltcG9ydF9fKG5h
bWUpCiAgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IsIGU6Ci0gICAgICAgICAgICAgICAg
X2xvZy5lcnJvcigiRmFpbGVkIHRvIGltcG9ydCAnY292ZXJhZ2UnOyBjYW4ndCBnZW5lcmF0ZSBj
b3ZlcmFnZSBudW1iZXJzLiIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAg
ICAgICBjb3YgPSBjb3ZlcmFnZS5jb3ZlcmFnZSgpCi0gICAgICAgICAgICBjb3Yuc3RhcnQoKQot
Ci0gICAgICAgIF9sb2cuZGVidWcoIkxvYWRpbmcgdGhlIHRlc3RzLi4uIikKLQotICAgICAgICBs
b2FkZXIgPSB1bml0dGVzdC5kZWZhdWx0VGVzdExvYWRlcgotICAgICAgICBzdWl0ZXMgPSBbXQot
ICAgICAgICBmb3IgbmFtZSBpbiBhcmdzOgotICAgICAgICAgICAgaWYgc2VsZi5faXNfbW9kdWxl
KGRpcnMsIG5hbWUpOgotICAgICAgICAgICAgICAgICMgaW1wb3J0IG1vZHVsZXMgZXhwbGljaXRs
eSBiZWZvcmUgbG9hZGluZyB0aGVpciB0ZXN0cyBiZWNhdXNlCi0gICAgICAgICAgICAgICAgIyBs
b2FkVGVzdHNGcm9tTmFtZSgpIHByb2R1Y2VzIGxvdXN5IGVycm9yIG1lc3NhZ2VzIGZvciBiYWQg
bW9kdWxlcy4KLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIF9faW1w
b3J0X18obmFtZSkKLSAgICAgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IsIGU6Ci0gICAg
ICAgICAgICAgICAgICAgIF9sb2cuZmF0YWwoJ0ZhaWxlZCB0byBpbXBvcnQgJXM6JyAlIG5hbWUp
Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2xvZ19leGNlcHRpb24oKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgICAgIHN1aXRlcy5hcHBlbmQobG9hZGVyLmxv
YWRUZXN0c0Zyb21OYW1lKG5hbWUsIE5vbmUpKQotCi0gICAgICAgIHRlc3Rfc3VpdGUgPSB1bml0
dGVzdC5UZXN0U3VpdGUoc3VpdGVzKQotICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnhtbDoKLSAg
ICAgICAgICAgIGZyb20gd2Via2l0cHkudGhpcmRwYXJ0eS5hdXRvaW5zdGFsbGVkLnhtbHJ1bm5l
ciBpbXBvcnQgWE1MVGVzdFJ1bm5lcgotICAgICAgICAgICAgdGVzdF9ydW5uZXIgPSBYTUxUZXN0
UnVubmVyKG91dHB1dD0ndGVzdC13ZWJraXRweS14bWwtcmVwb3J0cycpCi0gICAgICAgIGVsc2U6
Ci0gICAgICAgICAgICB0ZXN0X3J1bm5lciA9IHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKHZlcmJv
c2l0eT1zZWxmLl92ZXJib3NpdHkpCi0KLSAgICAgICAgX2xvZy5kZWJ1ZygiUnVubmluZyB0aGUg
dGVzdHMuIikKLSAgICAgICAgcmVzdWx0ID0gdGVzdF9ydW5uZXIucnVuKHRlc3Rfc3VpdGUpCi0g
ICAgICAgIGlmIHNlbGYuX29wdGlvbnMuY292ZXJhZ2U6Ci0gICAgICAgICAgICBjb3Yuc3RvcCgp
Ci0gICAgICAgICAgICBjb3Yuc2F2ZSgpCi0gICAgICAgICAgICBjb3YucmVwb3J0KHNob3dfbWlz
c2luZz1GYWxzZSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC53YXNTdWNjZXNzZnVsKCkKLQotICAg
IGRlZiBfaXNfbW9kdWxlKHNlbGYsIGRpcnMsIG5hbWUpOgorICAgICAgICAgICAgICAgIF9sb2cu
ZmF0YWwoJ0ZhaWxlZCB0byBpbXBvcnQgJXM6JyAlIG5hbWUpCisgICAgICAgICAgICAgICAgc2Vs
Zi5fbG9nX2V4Y2VwdGlvbigpCisgICAgICAgICAgICAgICAgcmFpc2UgTG9hZGVyRXJyb3IoKQor
ICAgICAgICByZXR1cm4gc2VsZi5sb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUobmFtZSwgTm9uZSkK
KworICAgIGRlZiBfZmluZF90cmVlKHNlbGYsIG5hbWUpOgorICAgICAgICAjIElzIHRoZSBuYW1l
IGEgc3ViZGlyZWN0b3J5IHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5
IGFuZCBpbiBhIHRyZWU/CisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG5hbWUpOgorICAgICAg
ICAgICAgZnVsbF9wYXRoID0gb3MucGF0aC5yZWFscGF0aChuYW1lKQorICAgICAgICAgICAgZm9y
IHRyZWUgaW4gc2VsZi50cmVlczoKKyAgICAgICAgICAgICAgICBpZiBmdWxsX3BhdGguc3RhcnRz
d2l0aCh0cmVlLnRvcF9kaXJlY3RvcnkpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHRy
ZWUsIGZ1bGxfcGF0aCkKKworICAgICAgICAjIElzIHRoZSBuYW1lIGEgc3ViZGlyZWN0b3J5IG9m
IGEgdHJlZT8KKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNhYnMobmFtZSk6CisgICAgICAgICAg
ICBmb3IgdHJlZSBpbiBzZWxmLnRyZWVzOgorICAgICAgICAgICAgICAgIGZ1bGxfcGF0aCA9IG9z
LnBhdGgucmVhbHBhdGgob3MucGF0aC5qb2luKHRyZWUudG9wX2RpcmVjdG9yeSwgbmFtZSkpCisg
ICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihmdWxsX3BhdGgpOgorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gKHRyZWUsIG9zLnBhdGguam9pbih0cmVlLnRvcF9kaXJlY3RvcnksIG5h
bWUpKQorCisgICAgICAgICMgSXMgdGhlIG5hbWUgYSBwYWNrYWdlPworICAgICAgICByZWxwYXRo
ID0gbmFtZS5yZXBsYWNlKCcuJywgb3Muc2VwKQorICAgICAgICBmb3IgdHJlZSBpbiBzZWxmLnRy
ZWVzOgorICAgICAgICAgICAgZnVsbF9wYXRoID0gb3MucGF0aC5qb2luKHRyZWUudG9wX2RpcmVj
dG9yeSwgcmVscGF0aCkKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoZnVsbF9wYXRoKToK
KyAgICAgICAgICAgICAgICByZXR1cm4gKHRyZWUsIGZ1bGxfcGF0aCkKKworICAgICAgICByZXR1
cm4gKE5vbmUsIE5vbmUpCisKKyAgICBkZWYgX2lzX21vZHVsZShzZWxmLCBuYW1lKToKICAgICAg
ICAgcmVscGF0aCA9IG5hbWUucmVwbGFjZSgnLicsIG9zLnNlcCkgKyAnLnB5JwotICAgICAgICBy
ZXR1cm4gYW55KG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihkLCByZWxwYXRoKSkgZm9yIGQg
aW4gZGlycykKKyAgICAgICAgcmV0dXJuIGFueShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4o
dHJlZS50b3BfZGlyZWN0b3J5LCByZWxwYXRoKSkgZm9yIHRyZWUgaW4gc2VsZi50cmVlcykKKwor
ICAgIGRlZiBfcnVuX3Rlc3RzKHNlbGYsIHRlc3RzKToKKyAgICAgICAgIyBTb3J0IGFuZCBkZWR1
cGxpY2F0ZSBhbGwgb2YgdGhlIHRlc3RzCisgICAgICAgIHRlc3RzID0gc29ydGVkKFt0ZXN0IGZv
ciB0ZXN0IGluIHNldCh0ZXN0cyldKQorCisgICAgICAgIGZvciB0ZXN0IGluIHRlc3RzOgorICAg
ICAgICAgICAgX2xvZy5kZWJ1ZygiRm91bmQ6ICVzIiAlIHRlc3QpCisKKyAgICAgICAgaWYgbm90
IHNlbGYub3B0aW9ucy5hbGw6CisgICAgICAgICAgICB0ZXN0cyA9IHNlbGYuX3NraXBfbW9kdWxl
cyh0ZXN0cykKKworICAgICAgICBkZWYgYWxsX3Rlc3RfbmFtZXMoc3VpdGUpOgorICAgICAgICAg
ICAgbmFtZXMgPSBbXQorICAgICAgICAgICAgaWYgaGFzYXR0cihzdWl0ZSwgJ190ZXN0cycpOgor
ICAgICAgICAgICAgICAgIGZvciB0IGluIHN1aXRlLl90ZXN0czoKKyAgICAgICAgICAgICAgICAg
ICAgbmFtZXMuZXh0ZW5kKGFsbF90ZXN0X25hbWVzKHQpKQorICAgICAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgICAgICBuYW1lcy5hcHBlbmQoX3Rlc3RfbmFtZShzdWl0ZSkpCisgICAgICAgICAg
ICByZXR1cm4gbmFtZXMKKworICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbc2Vs
Zi5fc3VpdGVfZnJvbV9uYW1lKHRlc3QpIGZvciB0ZXN0IGluIHRlc3RzXSkKKyAgICAgICAgaWYg
c2VsZi5vcHRpb25zLnhtbDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnJ1bm5lci5ydW4oc3Vp
dGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5ydW5uZXIucnVuKGFs
bF90ZXN0X25hbWVzKHN1aXRlKSkKIAogICAgIGRlZiBfbG9nX2V4Y2VwdGlvbihzZWxmKToKICAg
ICAgICAgcyA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4
YyhmaWxlPXMpCiAgICAgICAgIGZvciBsIGluIHMuYnVmbGlzdDoKICAgICAgICAgICAgIF9sb2cu
ZXJyb3IoJyAgJyArIGwucnN0cmlwKCkpCisKKworY2xhc3MgVGVzdExvYWRlcih1bml0dGVzdC5U
ZXN0TG9hZGVyKToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Jl
YWxfaW50ZWdyYXRpb25fdGVzdHMgPSBGYWxzZQorICAgICAgICBzdXBlcihUZXN0TG9hZGVyLCBz
ZWxmKS5fX2luaXRfXygpCisKKyAgICBkZWYgZ2V0VGVzdENhc2VOYW1lcyhzZWxmLCB0ZXN0Q2Fz
ZUNsYXNzKToKKyAgICAgICAgZGVmIGlzVGVzdE1ldGhvZChhdHRybmFtZSwgdGVzdENhc2VDbGFz
cz10ZXN0Q2FzZUNsYXNzKToKKyAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKGdldGF0dHIodGVz
dENhc2VDbGFzcywgYXR0cm5hbWUpLCAnX19jYWxsX18nKToKKyAgICAgICAgICAgICAgICByZXR1
cm4gRmFsc2UKKyAgICAgICAgICAgIHJldHVybiAoKGF0dHJuYW1lLnN0YXJ0c3dpdGgoJ3Rlc3Qn
KSkgb3IKKyAgICAgICAgICAgICAgICAgICAgKHNlbGYucnVuX3JlYWxfaW50ZWdyYXRpb25fdGVz
dHMgYW5kIGF0dHJuYW1lLnN0YXJ0c3dpdGgoJ2ludGVncmF0aW9uX3Rlc3RfJykpKQorICAgICAg
ICB0ZXN0Rm5OYW1lcyA9IGZpbHRlcihpc1Rlc3RNZXRob2QsIGRpcih0ZXN0Q2FzZUNsYXNzKSkK
KyAgICAgICAgdGVzdEZuTmFtZXMuc29ydCgpCisgICAgICAgIHJldHVybiB0ZXN0Rm5OYW1lcwor
CisKK2NsYXNzIFRlc3RSdW5uZXIobWFuYWdlcl93b3JrZXJfYnJva2VyLkJyb2tlckNsaWVudCk6
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0cmVhbSwgb3B0aW9ucywgc3RhcnQpOgorICAgICAg
ICBzZWxmLm9wdGlvbnMgPSBvcHRpb25zCisgICAgICAgIHNlbGYuc3RyZWFtID0gc3RyZWFtCisg
ICAgICAgIHNlbGYuc3RhcnQgPSBzdGFydAorICAgICAgICBzZWxmLm51bV90ZXN0cyA9IE5vbmUK
KyAgICAgICAgc2VsZi5fYnVmZmVyID0gJycKKworICAgIGRlZiBuYW1lKHNlbGYpOgorICAgICAg
ICByZXR1cm4gJ21hbmFnZXInCisKKyAgICBkZWYgcnVuKHNlbGYsIHRlc3RfbmFtZXMpOgorICAg
ICAgICBzZWxmLm51bV90ZXN0cyA9IGxlbih0ZXN0X25hbWVzKQorICAgICAgICBsb2FkZXIgPSBU
ZXN0TG9hZGVyKCkKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisKKyAg
ICAgICAgc3RvcCA9IHRpbWUudGltZSgpCisgICAgICAgIGZvciB0ZXN0X25hbWUgaW4gdGVzdF9u
YW1lczoKKyAgICAgICAgICAgIGlmIHNlbGYub3B0aW9ucy52ZXJib3NlOgorICAgICAgICAgICAg
ICAgIHNlbGYuc3RyZWFtLndyaXRlKHRlc3RfbmFtZSkKKyAgICAgICAgICAgIG51bV9mYWlsdXJl
cyA9IGxlbihyZXN1bHQuZmFpbHVyZXMpCisgICAgICAgICAgICBudW1fZXJyb3JzID0gbGVuKHJl
c3VsdC5lcnJvcnMpCisgICAgICAgICAgICBzdGFydCA9IHRpbWUudGltZSgpCisgICAgICAgICAg
ICBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUodGVzdF9uYW1lLCBOb25lKS5ydW4ocmVzdWx0KQor
ICAgICAgICAgICAgc3RvcCA9IHRpbWUudGltZSgpCisgICAgICAgICAgICBlcnIgPSBOb25lCisg
ICAgICAgICAgICBmYWlsdXJlID0gTm9uZQorICAgICAgICAgICAgaWYgbGVuKHJlc3VsdC5mYWls
dXJlcykgPiBudW1fZmFpbHVyZXM6CisgICAgICAgICAgICAgICAgZmFpbHVyZSA9IHJlc3VsdC5m
YWlsdXJlc1tudW1fZmFpbHVyZXNdWzFdCisgICAgICAgICAgICBlbGlmIGxlbihyZXN1bHQuZXJy
b3JzKSA+IG51bV9lcnJvcnM6CisgICAgICAgICAgICAgICAgZXJyID0gcmVzdWx0LmVycm9yc1tu
dW1fZXJyb3JzXVsxXQorICAgICAgICAgICAgc2VsZi5fd3JpdGVfcmVzdWx0KHJlc3VsdCwgdGVz
dF9uYW1lLCBzdG9wIC0gc3RhcnQsIGZhaWx1cmUsIGVycikKKworICAgICAgICBzZWxmLl93cml0
ZV9zdW1tYXJ5KHJlc3VsdCwgc3RvcCAtIHNlbGYuc3RhcnQpCisgICAgICAgIHJldHVybiByZXN1
bHQKKworICAgIGRlZiBfZXJhc2Uoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2J1ZmZlcjoKKyAg
ICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKCdcYicgKiBsZW4oc2VsZi5fYnVmZmVyKSArCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAnICogbGVuKHNlbGYuX2J1ZmZlcikgKwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcYicgKiBsZW4oc2VsZi5fYnVmZmVyKSkK
KyAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9ICcnCisKKyAgICBkZWYgX3dyaXRlX3N0YXR1cyhz
ZWxmLCB0b3RhbCwgbnVtX3J1biwgbnVtX2ZhaWx1cmVzLCBudW1fZXJyb3JzKToKKyAgICAgICAg
bnVtX3Bhc3NlcyA9IG51bV9ydW4gLSAobnVtX2ZhaWx1cmVzIC0gbnVtX2Vycm9ycykKKyAgICAg
ICAgbnVtX3JlbWFpbmluZyA9IHRvdGFsIC0gbnVtX3J1bgorICAgICAgICBwZXJjZW50ID0gMTAw
ICogbnVtX3J1biAvIHRvdGFsCisKKyAgICAgICAgc2VsZi5fZXJhc2UoKQorICAgICAgICBzZWxm
Ll9idWZmZXIgPSAnJTJkJSU6ICVkIHBhc3NlZCAlZCBmYWlsZWQgJWQgZXJyZWQgJWQgbGVmdCcg
JSAocGVyY2VudCwgbnVtX3Bhc3NlcywgbnVtX2ZhaWx1cmVzLCBudW1fZXJyb3JzLCBudW1fcmVt
YWluaW5nKQorICAgICAgICBzZWxmLnN0cmVhbS53cml0ZShzZWxmLl9idWZmZXIpCisgICAgICAg
IHNlbGYuc3RyZWFtLmZsdXNoKCkKKworICAgIGRlZiBfd3JpdGVfcmVzdWx0KHNlbGYsIHJlc3Vs
dCwgdGVzdF9uYW1lLCB0ZXN0X3RpbWUsIGZhaWx1cmU9Tm9uZSwgZXJyPU5vbmUpOgorICAgICAg
ICBpZiBmYWlsdXJlOgorICAgICAgICAgICAgbXNnID0gJyBmYWlsZWQnCisgICAgICAgIGVsaWYg
ZXJyOgorICAgICAgICAgICAgbXNnID0gJyBlcnJlZCcKKyAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgIG1zZyA9ICcgcGFzc2VkJworICAgICAgICBpZiBzZWxmLm9wdGlvbnMudGltaW5nOgorICAg
ICAgICAgICAgbXNnICs9ICcgJS41ZnMnICUgdGVzdF90aW1lCisKKyAgICAgICAgaWYgZXJyIG9y
IGZhaWx1cmU6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5vcHRpb25zLnZlcmJvc2U6CisgICAg
ICAgICAgICAgICAgc2VsZi5fZXJhc2UoKQorICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGUo
dGVzdF9uYW1lICsgbXNnICsgJ1xuJykKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGVyci5zcGxp
dGxpbmVzKCk6CisgICAgICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGUoJyAgICAnICsgbGlu
ZSArICdcbicpCisgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZSgnXG4nKQorICAgICAgICBl
bGlmIHNlbGYub3B0aW9ucy52ZXJib3NlOgorICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGUo
bXNnICsgJ1xuJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlX3N0YXR1
cyhzZWxmLm51bV90ZXN0cywgcmVzdWx0LnRlc3RzUnVuLCBsZW4ocmVzdWx0LmZhaWx1cmVzKSwg
bGVuKHJlc3VsdC5lcnJvcnMpKQorCisgICAgZGVmIF93cml0ZV9zdW1tYXJ5KHNlbGYsIHJlc3Vs
dCwgdG90YWxfdGVzdF90aW1lKToKKyAgICAgICAgaWYgc2VsZi5vcHRpb25zLnZlcmJvc2U6Cisg
ICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZSgnXG4nKQorICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgc2VsZi5fZXJhc2UoKQorCisgICAgICAgIHRvdGFsX2RlbGF5ID0gJyUuM2Ygc2Vjb25k
cycgJSAodG90YWxfdGVzdF90aW1lKQorICAgICAgICBydW4gPSByZXN1bHQudGVzdHNSdW4KKyAg
ICAgICAgZmFpbGVkID0gbGVuKHJlc3VsdC5mYWlsdXJlcykKKyAgICAgICAgaWYgcnVuID4gMSBh
bmQgZmFpbGVkOgorICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGUoJyVkIHRlc3RzIHJhbiBp
biAlczsgJWQgZmFpbGVkLlxuJyAlIChydW4sIHRvdGFsX2RlbGF5LCBmYWlsZWQpKQorICAgICAg
ICBlbGlmIHJ1biA+IDE6CisgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZSgnJWQgdGVzdHMg
cmFuIGluICVzOyBhbGwgcGFzc2VkLlxuJyAlIChydW4sIHRvdGFsX2RlbGF5KSkKKyAgICAgICAg
ZWxpZiBmYWlsZWQ6CisgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZSgnMSB0ZXN0IHJhbiBp
biAlczsgaXQgZmFpbGVkLlxuJyAlICh0b3RhbF9kZWxheSkpCisgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICBzZWxmLnN0cmVhbS53cml0ZSgnMSB0ZXN0IHJhbiBpbiAlczsgaXQgcGFzc2VkLlxu
JyAlICh0b3RhbF9kZWxheSkpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rl
c3QvbWFpbl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9tYWluX3Vu
aXR0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE0MDU4ODk3M2FlYWFkZTNkMDJjNmJmMDI1Y2RhODMyOTZk
ZDBmNGUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3QvbWFp
bl91bml0dGVzdC5weQpAQCAtMCwwICsxLDk0IEBACisjIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
CisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
IyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorCitpbXBvcnQgb3MKK2ltcG9ydCBwZGIKK2ltcG9ydCBjU3RyaW5nSU8g
YXMgU3RyaW5nSU8KK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHdlYmtpdHB5
LnRlc3QubWFpbiBpbXBvcnQgVGVzdGVyCisKKworY2xhc3MgRHVtbXlSZXN1bHQob2JqZWN0KToK
KyAgICB3YXNTdWNjZXNzZnVsID0gVHJ1ZQorCisKK2NsYXNzIER1bW15UnVubmVyKG9iamVjdCk6
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0cmVhbSwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAg
ICAgc2VsZi5zdHJlYW0gPSBzdHJlYW0KKyAgICAgICAgcGFzcworCisgICAgZGVmIHJ1bihzZWxm
LCBzdWl0ZSk6CisgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKCdSYW4gJWQgdGVzdHMuJyAlIHN1
aXRlLmNvdW50VGVzdENhc2VzKCkpCisgICAgICAgIHJldHVybiBEdW1teVJlc3VsdCgpCisKK3dl
YmtpdF9yb290ID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5h
bWUob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpKSkpCisKKworY2xh
c3MgTWFpblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBjbWQoc2VsZiwgYXJncywg
Y3dkPU5vbmUsIHN0ZGVycj1Ob25lLCByZXQ9VHJ1ZSwgbnVtX3Rlc3RzPU5vbmUpOgorICAgICAg
ICBvbGRjd2QgPSBvcy5nZXRjd2QoKQorICAgICAgICBpZiBub3QgY3dkOgorICAgICAgICAgICAg
Y3dkID0gJy9zcmMvd2snCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLmNoZGlyKGN3ZCkK
KyAgICAgICAgICAgIGVyciA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgICAgIHRlc3Rl
ciA9IFRlc3RlcihlcnIpCisgICAgICAgICAgICBvcHRpb25zLCBhcmdzID0gdGVzdGVyLnBhcnNl
X2FyZ3MoYXJncykKKyAgICAgICAgICAgIHRlc3Rlci5jb25maWd1cmUob3B0aW9ucykKKyAgICAg
ICAgICAgIHRlc3Rlci5hZGRfdHJlZShvcy5wYXRoLmpvaW4od2Via2l0X3Jvb3QsICdUb29scycs
ICdTY3JpcHRzJyksICd3ZWJraXRweScpCisgICAgICAgICAgICB0ZXN0ZXIucnVubmVyID0gRHVt
bXlSdW5uZXIoZXJyKQorICAgICAgICAgICAgcmV0dXJuY29kZSA9IHRlc3Rlci5ydW4oYXJncykK
KyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNoZGlyKG9sZGN3ZCkKKworICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHJldCwgcmV0dXJuY29kZSkKKyAgICAgICAgYWN0dWFsX2VyciA9
IGVyci5nZXR2YWx1ZSgpCisgICAgICAgIGlmIHN0ZGVyciBpcyBub3QgTm9uZToKKyAgICAgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsX2Vyciwgc3RkZXJyKQorICAgICAgICBpZiBudW1f
dGVzdHMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoKCdSYW4gJWQg
dGVzdCcgJSBudW1fdGVzdHMpIGluIGFjdHVhbF9lcnIsIGFjdHVhbF9lcnIpCisKKyAgICBkZWYg
aW50ZWdyYXRpb25fdGVzdF9wYWNrYWdlKHNlbGYpOgorICAgICAgICBzZWxmLmNtZChbJ3dlYmtp
dHB5LmNvbW1vbi53YXRjaGxpc3QnXSwgbnVtX3Rlc3RzPTM3KQorCisgICAgZGVmIGludGVncmF0
aW9uX3Rlc3RfbW9kdWxlKHNlbGYpOgorICAgICAgICBzZWxmLmNtZChbJ3dlYmtpdHB5LmNvbW1v
bi53YXRjaGxpc3Qud2F0Y2hsaXN0X3VuaXR0ZXN0J10sIG51bV90ZXN0cz0xMCkKKworICAgIGRl
ZiBpbnRlZ3JhdGlvbl90ZXN0X2NsYXNzKHNlbGYpOgorICAgICAgICBzZWxmLmNtZChbJ3dlYmtp
dHB5LmNvbW1vbi53YXRjaGxpc3Qud2F0Y2hsaXN0X3VuaXR0ZXN0LldhdGNoTGlzdFRlc3QnXSwg
bnVtX3Rlc3RzPTEwKQorCisgICAgZGVmIGludGVncmF0aW9uX3Rlc3RfbWV0aG9kKHNlbGYpOgor
ICAgICAgICBzZWxmLmNtZChbJ3dlYmtpdHB5LmNvbW1vbi53YXRjaGxpc3Qud2F0Y2hsaXN0X3Vu
aXR0ZXN0LldhdGNoTGlzdFRlc3QudGVzdF9maWxlbmFtZV9kZWZpbml0aW9uJ10sIG51bV90ZXN0
cz0xKQorCisgICAgZGVmIGludGVncmF0aW9uX3Rlc3RfZGlyZWN0b3J5KHNlbGYpOgorICAgICAg
ICBzZWxmLmNtZChbJ3dlYmtpdHB5L2NvbW1vbi93YXRjaGxpc3QnXSwgbnVtX3Rlc3RzPTM3KQor
CisgICAgZGVmIGludGVncmF0aW9uX3Rlc3RfY3dkKHNlbGYpOgorICAgICAgICBzZWxmLmNtZChb
Jy4nXSwgY3dkPScvc3JjL3drL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3dhdGNobGlz
dCcsIG51bV90ZXN0cz0zNykKKworICAgIGRlZiBpbnRlZ3JhdGlvbl90ZXN0X2N3ZChzZWxmKToK
KyAgICAgICAgc2VsZi5jbWQoWyd3YXRjaGxpc3QnXSwgY3dkPScvc3JjL3drL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uJywgbnVtX3Rlc3RzPTM3KQorCisgICAgZGVmIGludGVncmF0aW9u
X3Rlc3RfZmlsZV9pbl9jd2Qoc2VsZik6CisgICAgICAgIHNlbGYuY21kKFsnd2F0Y2hsaXN0L3dh
dGNobGlzdF91bml0dGVzdC5weSddLCBjd2Q9Jy9zcmMvd2svVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9jb21tb24nLCBudW1fdGVzdHM9MTApCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>